워게임/CodeEngn 28

[CodeEngn] Malware Analysis L08

이번 문제도 Flow가 주어집니다. 하지만 이번 문제는 저번 문제들과는 다른 Flow가 주어집니다. Flow를 열어보면 다음과 같이 상당히 복잡한 구조로 되어있습니다. 이런경우에는 사실 동적분석을 같이 진행하는것이 좋지만 지금은 정적분석만 해야하므로 분석을 진행해야합니다. 다른 악성코드를 실행시켜서 감염을 일으키는 함수의 주소를 찾아야하는데 일단 최대한 살펴보면서 의심스러운 부분을 찾아보면 이 부분에서 .inf 확장자 문자열을 인자로 보내서 특정 함수를 호출합니다. .inf 파일이 뭔지 찾아보니, 파일이나 드라이버등의 설치를 진행해주는 파일의 확장자인것으로 확인됩니다. 하지만 악성코드를 실행하는 것으로 보이진 않기 때문에 이 부분은 아닌거 같으므로 다른 부분을 찾아보면 그 다음으로 보이는 이 부분은 .e..

워게임/CodeEngn 2022.10.06

[CodeEngn] Malware Analysis L07

주어진 파일을 살펴보면, 저번 문제와 Flow가 같습니다. 하지만 이번에는 다른 동작에 대한 분석을 해야하는것으로 보이는데, 특정 사이트로 접속을 시도하고 접속이 안되는경우 몇초 단위로 재접속을 하는데, 몇ms단위로 재접속을 하는지 분석하라고 합니다. 이정도는 분석하기 어렵진 않을거같습니다. 이부분이 특정 웹사이트에 접속하는 루틴으로 보이는데 저번 문제에서 분석했던 Thread Mutex가 생성된 이후로 어떤 웹사이트에 접속을 시도하는것으로 보입니다. 그런데 여기서 만약 함수의 반환값이 0x29A 이면 0x96000 을 Sleep함수의 인자로 푸쉬한뒤 호출합니다. 그리고나서 다시 특정 웹사이트에 접속을 시도하므로 0x96000 ms 가 정답인것으로 보입니다. 이값을 10진수로 바꾸면 614400입니다. ..

워게임/CodeEngn 2022.10.06

[CodeEngn] Malware Analysis L06

이번 문제부터는 특정 바이너리의 Flow가 주어집니다. Flow는 쉽게 말해서 어셈블리 코드를 보기쉽게 그림으로 전개시켜놓은것입니다. Flow는 전체적인 흐름을 읽기쉬워서 정적분석할때 많이 쓰입니다. 주어진 Flow를 살펴보면 이정도로 구성되어있습니다. 이 프로그램의 Thread Mutex를 찾는것이 목표이므로 한번 분석해보면 처음에도 Thread를 생성하는 함수가 호출되었지만 그 이후로 Mutex가 생성되진 않았기 때문에 처음 부분은 넘기고, 그다음으로 의심스러운 함수는 이 부분인데 호출되는 함수를보면 CreateThread함수가 호출된 뒤로 바로 CreateMutexA함수에 smtp_bagla_1000라는 이름의 Mutex가 생성 되었습니다. 그러므로 이 Mutex가 해당 Thread Mutex일것으..

워게임/CodeEngn 2022.10.06

[CodeEngn] Malware Analysis L05

주어진 파일은 txt파일입니다. 파일을 열어보면 저번처럼 C언어 함수가 하나 있습니다. 대략적으로 분석해보면 64개의 문자열테이블을 하나 설정하고 버퍼에 있는 데이터 하나를 3f와 and연산을 해서 테이블 요소로 매칭시켜서 Output 문자열에 거꾸로 1글자씩 넣습니다. 그리고 버퍼값을 6비트 오른쪽으로 쉬프트합니다. 그리고 데이터를 바꾼만큼 Output과 encoded값을 늘리고 l값이 76이면서 SizeOfData가 3보다 큰 상태라면 문자열을 개행시키고, 만약 SizeOfData가 0이면 encoded값을 반환하고 종료됩니다. 지금까지의 분석을 통해서 생각해보면 base64 인코딩이 유력합니다. 실제로 찾아보면 이와 같은 방식으로 인코딩이 이루어지기 때문에 정답은 base64입니다.

워게임/CodeEngn 2022.10.06

[CodeEngn] Malware Analysis L03

이번 문제는 텍스트 파일 하나를 줍니다. 파일을 열어보면 다음과 같은 C언어 함수가 하나 있습니다. 이 함수가 어떤 작업을 수행하는 함수인지 분석해보면 이 정도로 분석을 해봤는데, 값을 리턴하는 과정에서 데이터의 손실이 너무 많이 납니다. 그리고 왠만해서는 리턴값이 0이기 때문에 이것이 어떤 기능을 하는것인지 생각해봤는데 checksum이라는 검사합을 구하는 과정에서 일반적으로 리턴값이 0이 나와야 하기 때문에 저는 checksum 의 기능을 하는 함수라고 추측했습니다. 하지만 제가 찾아본 checksum 과정은 이 과정과 다르기 때문에 잘못 짚었다 생각했었는데 체크섬 - 위키백과, 우리 모두의 백과사전 (wikipedia.org) 체크섬 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사..

워게임/CodeEngn 2022.10.06

[CodeEngn] Malware Analysis L02

이번 문제도 주어진 파일은 cpp파일입니다. 한번 열어보면 char body[]= "\r\n\r\n" "\r\nSelect \"DAV:displayname\" from scope()\r\n\r\n" "\r\n"; CScannerMalware_L02::CScannerMalware_L02() { m_sScannerName.Assign("Malware_L02"); } void CScannerMalware_L02::StartScan(const CString &sHost) {bool bSuccess=false; if(ScanPort(sHost.CStr(), 80)) {g_cMainCtrl.m_cIRC.SendFormat(m_bSilent, m_bNotice, m_sReplyTo.Str(), "%s: scannin..

워게임/CodeEngn 2022.10.06

[CodeEngn] Malware Analysis L01

문제에서 주어진 파일은 cpp 파일입니다. 소스코드를 보면 다음과 같은 코드가 있습니다. ip헤더와 tcp헤더를 사용하는 네트워크 프로그래밍으로 보이는데, 이 코드가 어떤 공격을 수행하는 코드인지 분석해보면 주석으로 간략하게 코드분석을 정리해봤습니다. 이 공격이 어떤 공격일지 생각해보면, tcp 통신은 3-way handshaking 방식으로 통신을 합니다. client에서 먼저 SYN 패킷을 보내면 서버측에서 그에대한 응답으로 SYN+ACK패킷을 client에게 보냅니다. client가 SYN+ACK 패킷을 받으면 최종적으로 서버에게 ACK패킷을 보내면서 두 시스템간에 연결이 성립됩니다. 하지만 이 코드에서는 tcp 소켓을 통해서 SYN패킷만 특정시간동안 보내고 서버측으로부터 패킷을 받는다던가 하는 작..

워게임/CodeEngn 2022.10.06

[CodeEngn] Basic RCE L17

exeinfope로 확인해보면 델파이로 작성된 32비트 실행파일이고 별다른 패킹은 안되어있습니다. 프로그램을 실행시켜보면 이렇게 구성되어있는데 문제에서 제시하는대로 알파벳 1글자와 시리얼키를 입력해보면 문자를 더 입력해야한다는 문자열이 출력됩니다. 이 문자열이 안뜨려면 이름을 3글자 이상 입력해야하는것을 봐서는 패치가 필요해보입니다. 이 문자열은 이름 길이검사루틴에서 쓰일것이기 때문에 IDA를 통해서 이 문자열이 쓰이는 곳을 찾을수 있다면 검사루틴을 찾을수 있습니다. 이 함수에서 문자열이 쓰이는것을 봐선 이 함수가 검사루틴일것이므로 한번 함수로 들어가보면 다음과 같은 구조를 하고있는 검사루틴을 볼수있습니다. 이 분기가 바로 이름의 길이를 검사하는 분기문인데 분석해보면 입력받은 이름의 길이를 얻은뒤 그 값..

워게임/CodeEngn 2022.07.17

[CodeEngn] Basic RCE L16

이름이 CodeEngn일때 시리얼키를 구해야하는 문제입니다. 먼저 주어진 실행파일을 exeinfope로 열어보면 32비트 실행파일에 dev-c++ 로 작성된 프로그램이고 패킹은 탐지되지 않았습니다. 이제 한번 실행시켜보면 다음과 같이 프로그램이 시작합니다. 여기에 주어진 이름인 CodeEngn과 아무 값이나 입력해보면 잘못된 비밀번호라는 문자열과 함께 프로그램이 종료됩니다. 이제 이를 기반으로 정확하게 분석해보겠습니다. 이 프로그램의 main 함수입니다. C++로 작성되어서 약간 난해하지만 분석을 해보면 이름을 입력받은뒤에 그 이름의 길이를 구하고 그 길이값을 이용해서 연산을 한번하고 그다음에 비밀번호를 입력받습니다. 그리고나서 다시한번 연산값에 708225 를 곱한뒤 그 값과 입력값을 비교합니다. 이름..

워게임/CodeEngn 2022.07.08

[CodeEngn] Basic RCE L15

이번 문제도 전 문제처럼 이름이 주어지고 그에 맞는 시리얼값을 구하는 문제입니다. exeinfope로 열어보면 32비트 기반 실행파일이고 델파이로 작성된것으로 확인됩니다. 별다른 패킹은 없으므로 그대로 분석을 진행하겠습니다. 먼저 프로그램을 실행시켜보면 다음과 같이 이름과 시리얼값을 입력할수 있습니다. 이름을 CodeEngn으로 입력하고 시리얼값은 임의의값으로 넣어보면 다음과 같이 다시하라는 메세지박스가 출력됩니다. 이제 본격적인 분석을 해보겠습니다. 먼저 아까 봤던 메세지박스에 있는 문자열을 찾아보면 다음과 같이 보입니다. 이제 이 문자열이 쓰인 함수로 진입해보겠습니다. 함수에 진입해보면 다음과 같은 구조인것이 확인됩니다. 디컴파일해보면 다음과 같은 코드인데 델파이로 만들어진 프로그램답게 조금 복잡해보..

워게임/CodeEngn 2022.07.06
728x90