annyoung

온라인 게임 계정 탈취 악성코드 본문

분석생활

온라인 게임 계정 탈취 악성코드

nopsled 2015. 10. 23. 05:37



  2014.12.03, 친구 집에서 채증한 악성코드이다. 해당 악성코드의 특징은 없는 것 같다. 패킹도 안되었고 그렇다고 해서 특별히 암호화를 시켜놓은 것도 아니다. 아니, 리소스 영역의 DLL파일만 암호화가 되어 있기는 했다. 자 이제 오랜만에 분석을 시작해야겠다.



 FileName 

 svchost.exe

 MD5

 7F00B395A356F5BB1CEFFD779ED8FFA7

 SHA-1

 A6F1968B403D96D382521466E0D6C4AC2CB868C6

 Packer

 패킹된 파일이 아님

[표1 - 악성코드 정보]




  악성행위를 시작하는 Address는 00401FB0이다. 해당 서브 루틴에서 FindResource를 이용하여 리소스 영역중 Dll 부분을 참조한 후 Resource address를 넘겨주어 로드시킨다. 이 서브 루틴은 암호화 되어 있는 Dll를 복호화 시키기 위함이며 복호화를 하는 코드는 다음과 같다.



 int __cdecl sub_401F00(int a1, int a2, char a3)

{ char v3; // bl@1 int result; // eax@1 int v5; // edi@2 int v6; // [sp+18h] [bp+10h]@2 v3 = (a3 % 254) + 8; Sleep(0); Sleep(0); Sleep(0); Sleep(0); Sleep(0); Sleep(0); Sleep(0); result = a2; if ( a2 ) { v5 = a1; v6 = a2; do { Sleep(0); Sleep(0); Sleep(0); Sleep(0); Sleep(0); Sleep(0); Sleep(0); Sleep(0); Sleep(0); *v5 = v3 + (v3 ^ *v5); ++v5; Sleep(0); Sleep(0); Sleep(0); Sleep(0); Sleep(0); Sleep(0); result = v6-- - 1; } while ( v6 ); } return result; }

[표2 - IDA Hexray로 본 Dll 복호화 함수]





 FileName 

 svchsot_0041B000.mem.dll (dumped)

 MD5

 639F7024792A53E942496085E4530242

 SHA-1

 B9ED6B934C737D363E26B0D4D7E73BB250B754AF

 Packer

 패킹된 파일이 아님

[표3 - 메모리에 올라온 악성코드 정보]



  시간이 되면 파이썬을 이용하여 복호화 하는 코드도 올리겠다. 복호화 된 리소스 데이터 중 2byte만큼 가져와 EXE Signature(MZ)를 비교한다. 만약 2Byte 만큼 비교했지만 4D 5A가 아닌 경우에는 프로세스를 Terminate시킨다. 4D 5A가 맞는 경우 이미지에서 보이는 가장 하단의 0x004015EC로 분기시킨다.




  전에 언급했던 if분기가 끝나면 2번째 if문으로 나오게 된다. 실행 가능하고 올바른 PE구조를 가지고 있는지 확인하기 위해 PE와 리소스를 복호화한 데이터에서 2byte만큼 비교한다. PE구조를 가지고 있지 않다면 프로세스 Terminate시키고 올바른 구조라면 0x40160A로 분기한다. 결과적으로, Executable하고 올바른 PE structure를 가졌는지 확인이 되었다면 VirtualAlloc을 이용하여 0x1000000에 메모리를 할당한 후 메모리를 써 넣게 된다.




10001FA1  |.  68 28B20110   PUSH svchsot_.1001B228                   ; /<%s> = "http://user.qzone.qq.com/"

10001FA6  |.  F3:AB         REP STOS DWORD PTR ES:[EDI]              ; |

10001FA8  |.  8D8424 440100>LEA EAX,DWORD PTR SS:[ESP+144]           ; |

10001FAF  |.  68 24B20110   PUSH svchsot_.1001B224                   ; |Format = "%s"

10001FB4  |.  50            PUSH EAX                                 ; |s

10001FB5  |.  FF15 88430110 CALL DWORD PTR DS:[<&USER32.wsprintfA>]  ; \wsprintfA

10001FBB  |.  8BBC24 5CD207>MOV EDI,DWORD PTR SS:[ESP+7D25C]

10001FC2  |.  83C9 FF       OR ECX,FFFFFFFF

10001FC5  |.  33C0          XOR EAX,EAX

10001FC7  |.  83C4 0C       ADD ESP,0C

10001FCA  |.  F2:AE         REPNE SCAS BYTE PTR ES:[EDI]

10001FCC  |.  F7D1          NOT ECX

10001FCE  |.  2BF9          SUB EDI,ECX

10001FD0  |.  8D9424 400100>LEA EDX,DWORD PTR SS:[ESP+140]

10001FD7  |.  8BF7          MOV ESI,EDI

10001FD9  |.  8BD9          MOV EBX,ECX

10001FDB  |.  8BFA          MOV EDI,EDX

10001FDD  |.  83C9 FF       OR ECX,FFFFFFFF

10001FE0  |.  F2:AE         REPNE SCAS BYTE PTR ES:[EDI]

10001FE2  |.  8BCB          MOV ECX,EBX

10001FE4  |.  4F            DEC EDI

10001FE5  |.  C1E9 02       SHR ECX,2

10001FE8  |.  F3:A5         REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>

10001FEA  |.  8BCB          MOV ECX,EBX

10001FEC  |.  50            PUSH EAX

10001FED  |.  83E1 03       AND ECX,3

10001FF0  |.  50            PUSH EAX

10001FF1  |.  F3:A4         REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>

10001FF3  |.  B9 00F40100   MOV ECX,1F400

10001FF8  |.  8DBC24 480200>LEA EDI,DWORD PTR SS:[ESP+248]

10001FFF  |.  50            PUSH EAX

10002000  |.  50            PUSH EAX

10002001  |.  F3:AB         REP STOS DWORD PTR ES:[EDI]

10002003  |.  50            PUSH EAX

10002004  |.  C74424 38 881>MOV DWORD PTR SS:[ESP+38],1388

1000200C  |.  FF15 BC430110 CALL DWORD PTR DS:[<&WININET.InternetOpe>;  wininet.InternetOpenA

10002012  |.  85C0          TEST EAX,EAX

10002014  |.  0F84 B8020000 JE svchsot_.100022D2

1000201A  |.  6A 00         PUSH 0

1000201C  |.  68 00000004   PUSH 4000000

10002021  |.  6A 00         PUSH 0

10002023  |.  8D8C24 4C0100>LEA ECX,DWORD PTR SS:[ESP+14C]

1000202A  |.  6A 00         PUSH 0

1000202C  |.  51            PUSH ECX

1000202D  |.  50            PUSH EAX

1000202E  |.  FF15 C0430110 CALL DWORD PTR DS:[<&WININET.InternetOpe>;  wininet.InternetOpenUrlA 

  dll 영역 중 0x 10001FA1에서 user.qzone.qq.com을 통하여 <title>과 </title>사이에 있는 IP를 파싱한다. (현재는 연결되지 않아서 정확한 목적을 모른다. 아마도 C&C로 예상 됨.) 




  키로깅 역할을 하는것 처럼 보이는 문자열들. "[깃 ~~~~] ~~~~"라고 써 있는 것은 키로깅할때 파일로 저장하기 위한 캐릭터 셋으로 추측된다.



 SEND BMP 문자열로 보아, 클라이언트의 화면을 볼 수 있는것으로 예상된다.



  윈도우 시작시 해당 악성코드가 자동으로 실행이 되게 설정한다.



추가로 다운로드 하는 것으로 예상되나 해당 악성코드가 다운로더 기능을 상실하여 분석 종료. 면밀히 말하자면, C&C IP가 죽었기에 드랍 불가능한 것으로 보임



'분석생활' 카테고리의 다른 글

gondad exploit kit을 이용한 악성코드 유포  (0) 2015.10.25
vbscript parite 악성코드  (5) 2015.10.24
js 난독화  (0) 2015.10.22
라인 몸캠피싱 해커 프로파일링  (0) 2015.07.28
미국형 선입금 사기  (0) 2015.06.09
Comments