CodeEngn Malware08 풀이
Wargame | CTF/Reversing

CodeEngn Malware08 풀이

이번문제도 역시 악성코드 Flow를 보고 푸는문제입니다.

다른 악성코드를 실행하여 추가감염을 일으키는 함수의 주소를 찾으라는군요.  Flow를 한번살펴보겠습니다.

마지막 문제답게 조금 복잡합니다. 다른 악성코드를 실행한다는 말을 생각해보면,  분기문을 사용하여 악성코드 부분으로 점프하거나, 악성코드를 실행하는 함수로 들어가는 call 부분이 될것입니다

flow의 위쪽부분입니다. 두개의 분기문으로 나누어서 져서 갈리는데, 그래프를 쭉 따라가다보면 false쪽으로는 길이 없고 결국엔 true쪽으로 가야합니다.

True쪽 바로밑의 또다른 분기문입니다. 여기도 길이 한쪽밖에없습니다.  따라가다보면 결국엔 false쪽으로 가게 되어 있습니다.

false쪽을 중점적으로 보겠습니다.

False flow입니다. 00402572 주소부분에서 어떤함수를 실행시킨 뒤, 결과값에 의해 Install이란 문자열을 넘겨주는 모습이 보입니다. 이 부분말고는 별다른 모습이 보이지 않습니다.

그 후, 그 또다른함수(sub_406964)의 리턴값으로 또 두갈래로 나눠지게 됩니다.

밑부분에 ShellExecuteExA 라는함수가 보입니다. 이 함수는 지정된 파일에 대해 작업을 수행하는 함수입니다. 일단 모르는함수니 알아보고 가겠습니다. 

성공시 TRUE를 반환합니다. 어플리케이션에서 외부 프로세스를 실행 시키고 싶을때 사용한다고 되어있습니다. 딱봐도 매우 수상해보입니다.  일단 주의깊게 봐두고 넘어갑시다.

그리고 왼쪽아래에보면 .exe라는 문자열을 넘겨주어 어떤 함수가 실행되는 모습도 보입니다.  그 아래로 따라가다보면 또 두갈래로 나누어지고, TRUE를 따라가보면 flow의 전체인 큰 함수가 끝이납니다.

False일시에 어떻게 되는지 한번 따라가 보겠습니다


False 쪽을 따라와보니 IsWindowVisible 함수 말고는 딱히 특이사항이 없었습니다. 해당 함수는 윈도우가 현재 화면에서 보이는지를 판별해 보이면1 안보이면0을 반환합니다. 좀더 밑으로 가보겠습니다.


그 바로 밑에는 ShowWindow함수로 윈도우의 보여지는 상태를 설정하고 있습니다. 위쪽에서 false였다면 윈도우를 숨기고, esi+38 주소에있는 핸들을 7D0ms 동안 idle 시킨뒤, 지정된 핸들이 signed 되기를 무한정 기다리게 하고있습니다. 그후에는 ShowWindow 함수를 사용해 창을 보이게하고 핸들을 닫아주는 작업을합니다. 아마도 프로그램 GUI를 띄워주는 부분같습니다 


그 바로 밑에는 아까보았던 .exe를 넘겨받아서 어떤함수를 호출하는 부분 말고는 특이한점이 없이 함수가 종료됩니다. 쭉 내려왔더니 제일 수상한 곳이 한곳 생각납니다.

문제에 힌트가 있습니다. 다른 악성코드를 실행 시켜 추가감염을 일으키는 부분. 아까 분석을 하면서 무언가를 실행하는 함수를 지나쳤습니다

바로 이부분입니다. ExecInfo 라는 구조체포인터를 넘겨받아서 동작하는 함수라 생각됩니다.

ShellExecuteExA 이 함수의 주소는 이 flow만으로는 알길이 없으므로 loc_4025F4 이부분의 주소로 정답인증을 해줍니다. (004025F4)

Malware의 모든레벨이 끝이났습니다. 생각보다 많이 어렵진않았습니다 물론 90퍼센트가 구글검색이였지만 말이죠.. 그래도 많이배웠네요


'Wargame | CTF > Reversing' 카테고리의 다른 글

CodeEngn Advance08 풀이  (0) 2018.12.04
CodeEngn Malware07 풀이  (0) 2018.08.07
CodeEngn Malware06 풀이  (0) 2018.08.07
CodeEngn Malware05 풀이  (0) 2018.08.07
CodeEngn Malware04 풀이  (0) 2018.08.07