annyoung

UPX 3.0으로 패킹된 악성코드 언패킹 본문

분석생활

UPX 3.0으로 패킹된 악성코드 언패킹

nopsled 2015. 12. 15. 04:21


 FileName 

 esd.exe

 MD5

 EE56D8856646A61D7A2B329FD571955C 

 SHA-1

 A29591FA756521B8BDDAE4A0D0B6495B6E25F772

 Packer

 UPX 3.0




리소스 해커로 열어보면 REGISTRY라는 리소스가 추가되어 있다. 딱봐도 암호화 해두었으니까 Resource에 관련된 API에 BP박고 시작한다.



일반적인 UPX패턴과 살~짝 다르다 0047D027부분에서 CALL EAX를 하는데 저기 부분으로 들어가면 UPX 2.0의 일반적인 패턴을 보여준다.



004497B0   .  60            PUSHAD ; NOW EIP

004497B1   .  BE 00A04300   MOV ESI,esd.0043A000

004497B6   .  8DBE 0070FCFF LEA EDI,DWORD PTR DS:[ESI+FFFC7000]

004497BC   .  57            PUSH EDI

004497BD   .  83CD FF       OR EBP,FFFFFFFF

004497C0   .  EB 10         JMP SHORT esd.004497D2


...중략...


00449964   .  FFD5          CALL EBP

00449966   .  58            POP EAX

00449967   .  61            POPAD

00449968   .  8D4424 80     LEA EAX,DWORD PTR SS:[ESP-80]

0044996C   >  6A 00         PUSH 0

0044996E   .  39C4          CMP ESP,EAX

00449970   .^ 75 FA         JNZ SHORT esd.0044996C

00449972   .  83EC 80       SUB ESP,-80

00449975   .- E9 2297FBFF   JMP esd.0040309C

0044997A      00            DB 00

0044997B      00            DB 00

0044997C      00            DB 00

0044997D      00            DB 00

CALL EAX안으로 들어오면 위와 같은 어셈블리들이 나온다. 뭐 여기서 부터는 UPX 2.0패턴 이므로.. MUP해준다.



73D14431  |.  8B35 D063DB73 MOV ESI,DWORD PTR DS:[<&USER32.LoadStrin>;  USER32.LoadStringA

73D14437  |.  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX

73D1443A  |.  75 2D         JNZ SHORT MFC42.73D14469

73D1443C  |.  E8 953E0900   CALL MFC42.#1168

73D14441  |.  8B78 0C       MOV EDI,DWORD PTR DS:[EAX+C]

73D14444  |.  6A 06         PUSH 6                                   ; /ResourceType = RT_STRING

73D14446  |.  53            PUSH EBX                                 ; |ResourceName

73D14447  |.  8B1D BC62DB73 MOV EBX,DWORD PTR DS:[<&KERNEL32.FindRes>; |kernel32.FindResourceA

73D1444D  |.  57            PUSH EDI                                 ; |hModule

73D1444E  |.  FFD3          CALL EBX                                 ; \FindResourceA

73D14450  |.  85C0          TEST EAX,EAX

73D14452  |.  74 1B         JE SHORT MFC42.73D1446F

73D14454  |.  FF75 10       PUSH DWORD PTR SS:[EBP+10]

73D14457  |.  FF75 0C       PUSH DWORD PTR SS:[EBP+C]

73D1445A  |.  FF75 08       PUSH DWORD PTR SS:[EBP+8]

73D1445D  |.  57            PUSH EDI

73D1445E  |.  FFD6          CALL ESI

73D14460  |.  85C0          TEST EAX,EAX

73D14462  |.  74 0B         JE SHORT MFC42.73D1446F

73D14464  |.  E9 12010000   JMP MFC42.73D1457B

73D14469  |>  8B1D BC62DB73 MOV EBX,DWORD PTR DS:[<&KERNEL32.FindRes>;  kernel32.FindResourceA

string을 로드하고 resource를 찾는다.



호환성 안맞아서 분석 끝


Comments