-
ASM --> C --> IDA Python Scripttip 2011. 2. 7. 11:14
오늘 본 샘플 중에 아래와 같은 코드가 있었다. 악성코드들이 사용하는 문자열을 strings.exe 와 bintext.exe 와 같은 툴에 노출되는 것을 꺼려하여 문자열에 꼬아놓는 경우가 있는데, 이번에는 문자열 중간에 알파벳이 아닌 문자열을 삽입해 놓고 사용하기 전에 아래와 같은 함수를 호출하여 제거하는 것이다.
[그림] DecodeStr 함수를 사용하는 코드
DecodeStr() 함수를 리버싱 해보면 아래와 같고 그것을 C 언어로 표기해보고 IDAPython 스크립트를 사용하여 IDA 에서 꼬인 문자열을 보기 쉽게 출력하였다.
B9D0 ; int __cdecl DecodeStr(char *pLib, char *pFunc)
B9D0 LibFileName = byte ptr -80h
B9D0 String2 = byte ptr -40h
B9D0 sub esp, 80h
B9D6 mov ecx, 10h
B9DB xor eax, eax
B9DD push ebx
B9DE push ebp
B9DF push esi
B9E0 mov esi, [esp+8Ch+pLib]
B9E7 push edi
B9E8 lea edi, [esp+90h+LibFileName]
B9EC rep stosd
B9EE mov ebp, ds:isdigit
B9F4 mov ecx, 10h
B9F9 lea edi, [esp+90h+String2]
B9FD rep stosd
B9FF cmp byte ptr [esi], 0
BA02 jz short locBA38
BA04 lea edi, [esp+90h+LibFileName]
BA08
BA08 locBA08: ; CODE XREF: DecodeStr+66j
BA08 movsx eax, byte ptr [esi]
BA0B push eax
BA0C call ebp ; isdigit
BA0E add esp, 4
BA11 test eax, eax
BA13 jnz short locBA2B
BA15 movsx ecx, byte ptr [esi]
BA18 push ecx
BA19 call ds:isalpha
BA1F add esp, 4
BA22 test eax, eax
BA24 jnz short locBA2B
BA26 cmp byte ptr [esi], 2Eh
BA29 jnz short locBA30
BA2B
BA2B locBA2B: ; CODE XREF: DecodeStr+43j
BA2B mov dl, [esi]
BA2D mov [edi], dl
BA2F inc edi
BA30
BA30 locBA30: ; CODE XREF: DecodeStr+59j
BA30 mov al, [esi+1]
BA33 inc esi
BA34 test al, al
BA36 jnz short locBA08
BA38
위와 같은 어셈코드를 C 언어로 만들어 보면 다음과 같다.
int DecodeStr(char *pLib, char *pFunc) { char szTemp[0x40]; int i=0; j=0; char ch; memset(szTempp, 0x00, 0x40); while( (ch=pLib[i++]) != NULL ) { if (isdigit(ch) || isalpha(ch) || ch == 0x2E) szTemp[j++] = ch; } // ... }
위와 같은 C 언어를 IDAPython 스크립트 언어로 사용하기 위해서는 아래와 같은 코드를 사용하면 될 것 같다.
ea = ScreenEA()
str = ""
while True:
b = Byte(ea)
if b == 0:
break;
if b==0x2E or (b>=65 and b<=90) or (b>=97 and b<=122):
str += chr(b)
ea += 1
print str
그럼 도움이 되셨길...
'tip' 카테고리의 다른 글
쉽게 윈도우 시스템 파일 복구하는 방법 (0) 2011.03.13 Analysis Code Obfuscateed VBScript (0) 2011.02.11 아웃룩 메일계정 비밀번호가 저장이 안될 때 (0) 2011.01.27 아웃룩(Outlook) 첨부된 실행파일 다운로드 하기 (0) 2011.01.27 지정한 폴더에서 명령 창 열기 (0) 2011.01.21