한국어

tc_backup

0046B000 > 8BC4             MOV EAX,ESP
0046B002   FF30             PUSH DWORD PTR DS:[EAX]
0046B004   8368 FC 4F       SUB DWORD PTR DS:[EAX-4],4F
0046B008   68 B0714200      PUSH UnPackMe.004271B0
0046B00D   FF50 FC          CALL DWORD PTR DS:[EAX-4]
0046B010   83C4 08          ADD ESP,8
0046B013   FF70 F8          PUSH DWORD PTR DS:[EAX-8]
0046B016   B3 99            MOV BL,99
0046B018   B8 00104000      MOV EAX,UnPackMe.00401000
0046B01D   3D 00A24400      CMP EAX,UnPackMe.0044A200
0046B022   74 07            JE SHORT UnPackMe.0046B02B
0046B024   3018             XOR BYTE PTR DS:[EAX],BL
0046B026   D0C3             ROL BL,1
0046B028   40               INC EAX
0046B029  ^EB F2            JMP SHORT UnPackMe.0046B01D
0046B02B   B3 F8            MOV BL,0F8
0046B02D   B8 00704500      MOV EAX,UnPackMe.00457000
0046B032   3D 00C84500      CMP EAX,UnPackMe.0045C800
0046B037   74 07            JE SHORT UnPackMe.0046B040
0046B039   3018             XOR BYTE PTR DS:[EAX],BL
0046B03B   D0C3             ROL BL,1
0046B03D   40               INC EAX
0046B03E  ^EB F2            JMP SHORT UnPackMe.0046B032
0046B040   E8 00000000      CALL UnPackMe.0046B045
0046B045   C3               RETN

PUSH를 하면 ESP가 변경되게 된다. 그러면 ESP를 Dump창으로 옮겨서 최상위 4Byte에 하드웨어 엑세스 브레이크 포인트를 Dword로 건다.
그리고 Run(F9)를 몇차례 하면 아래와 같이 나온다.

004271B0   . 55             PUSH EBP
004271B1   . 8BEC           MOV EBP,ESP
004271B3   ? 6A FF          PUSH -1
004271B5   ? 68 600E4500    PUSH UnPackMe.00450E60
004271BA     68             DB 68                                    ;  CHAR 'h'
004271BB     C8             DB C8
004271BC     92             DB 92
004271BD     42             DB 42                                    ;  CHAR 'B'
004271BE     00             DB 00
004271BF     64             DB 64                                    ;  CHAR 'd'
004271C0     A1             DB A1
004271C1     00             DB 00
004271C2     00             DB 00

함수 프롤로그 부근에 도달하였으면 Analysis -> Analyse Code 메뉴를 실행하면 정상적인 코드로 보이게 된다.

004271B0   . 55             PUSH EBP
004271B1   . 8BEC           MOV EBP,ESP
004271B3   . 6A FF          PUSH -1
004271B5   . 68 600E4500    PUSH UnPackMe.00450E60
004271BA   . 68 C8924200    PUSH UnPackMe.004292C8                   ;  SE handler installation
004271BF   . 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
004271C5   . 50             PUSH EAX
004271C6   . 64:8925 000000>MOV DWORD PTR FS:[0],ESP
004271CD   . 83C4 A8        ADD ESP,-58
004271D0   . 53             PUSH EBX
004271D1   . 56             PUSH ESI
004271D2   . 57             PUSH EDI
004271D3   . 8965 E8        MOV DWORD PTR SS:[EBP-18],ESP
004271D6   . FF15 DC0A4600  CALL DWORD PTR DS:[<&KERNEL32.GetVersion>;  kernel32.GetVersion

이곳이 OEP이다.
ImpREC 툴을 사용하여 OEP에 4271B0 - 40000(ImageBase값) = 271B0를 적어준다.

IAT를 찾기 위하여 자동화 툴을 사용하지 않고 수동으로 찾는다

For Search Binary String을 통해 FF25를 검색한다.

00435CC0   $-FF25 88094600  JMP DWORD PTR DS:[<&KERNEL32.RtlUnwind>]         ;  ntdll.RtlUnwind
00435CC6   $-FF25 000C4600  JMP DWORD PTR DS:[<&USER32.ReuseDDElParam>]      ;  USER32.ReuseDDElParam
00435CCC   $-FF25 040C4600  JMP DWORD PTR DS:[<&USER32.UnpackDDElParam>]     ;  USER32.UnpackDDElParam
00435CD2   $-FF25 D00E4600  JMP DWORD PTR DS:[<&comdlg32.ChooseFontA>]       ;  comdlg32.ChooseFontA
00435CD8   $-FF25 D80E4600  JMP DWORD PTR DS:[<&comdlg32.ChooseColorA>]      ;  comdlg32.ChooseColorA
00435CDE   $-FF25 D40E4600  JMP DWORD PTR DS:[<&comdlg32.PrintDlgA>]         ;  comdlg32.PrintDlgA
00435CE4   $-FF25 CC0E4600  JMP DWORD PTR DS:[<&comdlg32.GetSaveFileNameA>]  ;  comdlg32.GetSaveFileNameA
00435CEA   $-FF25 C80E4600  JMP DWORD PTR DS:[<&comdlg32.GetOpenFileNameA>]  ;  comdlg32.GetOpenFileNameA
00435CF0   $-FF25 C40E4600  JMP DWORD PTR DS:[<&comdlg32.GetFileTitleA>]     ;  comdlg32.GetFileTitleA
00435CF6   $-FF25 C00E4600  JMP DWORD PTR DS:[<&comdlg32.ReplaceTextA>]      ;  comdlg32.ReplaceTextA
00435CFC   $-FF25 BC0E4600  JMP DWORD PTR DS:[<&comdlg32.FindTextA>]         ;  comdlg32.FindTextA
00435D02   $-FF25 B80E4600  JMP DWORD PTR DS:[<&comdlg32.CommDlgExtendedErro>;  comdlg32.CommDlgExtendedError
00435D08   $-FF25 B00E4600  JMP DWORD PTR DS:[<&WINSPOOL.ClosePrinter>]      ;  WINSPOOL.ClosePrinter
00435D0E   $-FF25 940E4600  JMP DWORD PTR DS:[<&WINSPOOL.EndDocPrinter>]     ;  WINSPOOL.EndDocPrinter
00435D14   $-FF25 AC0E4600  JMP DWORD PTR DS:[<&WINSPOOL.StartPagePrinter>]  ;  WINSPOOL.StartPagePrinter

위와 같은 부분을 만날수 있게 되고
Follow in Dump Memory Address 를 하게 되면 덤프 창에서 IAT를 찾을 수 있다. 이때 Dump 창을 Long의 Address 형식으로 보면 보기 수월하다.

00460818 >77F56C17  ADVAPI32.RegCloseKey
0046081C >77F57842  ADVAPI32.RegOpenKeyExA
00460820 >77F5E9E4  ADVAPI32.RegCreateKeyExA
00460824 >77F5EAD7  ADVAPI32.RegSetValueExA
00460828 >77F57AAB  ADVAPI32.RegQueryValueExA
0046082C  00000000
00460830 >5C8265CF  COMCTL32.InitCommonControls
00460834 >5C8303D8  COMCTL32.ImageList_Destroy
00460838  00000000
0046083C >77E26AA1  GDI32.GetClipBox
00460840 >77E290DD  GDI32.ExcludeClipRect
00460844 >77E26A56  GDI32.IntersectClipRect
00460848 >77E2A20A  GDI32.MoveToEx

이런 식으로 덤프창에 보이게 된다.
60818이 시작주소이고
60F2B(마지막주소)-60818(시작주소) = 713 라는 Size값을 확인할 수 있다.

그러나 IAT를 찾을 필요가 없을 수도 있다. OllyDump만으로 하여도 이미 IAT가 정상적으로 설정이 된 경우일 수 있기 때문이다.

분류 :
RCE
태그 :
조회 수 :
9426
등록일 :
2009.03.14
14:06:47 (*.234.246.12)
엮인글 :
https://www.rain9.com/xe/tc_backup/3063/9e4/trackback
게시글 주소 :
https://www.rain9.com/xe/tc_backup/3063
List of Articles
번호 제목 글쓴이 날짜 조회 수
160 Windows Windows Vista의 볼륨 섀도 복사본 관리 또는 백업 파일 추출 file 엔신 2009-04-16 36608
159 ETC SK브로드밴드 주택광랜(100M) 가입~ file 엔신 2009-04-08 9981
158 Incident Response Dcode - Forensic Date/Time Decoder file 엔신 2009-04-05 15542
157 Malware Zero Wine Malware Analysis Tool [4] file 엔신 2009-04-05 23189
156 Security ARP Spoofing(ARP Cache Poison) 참고 file 엔신 2009-03-31 24896
155 Wireless WirelessKeyView 엔신 2009-03-21 9749
154 RCE [Unpack] MEW 11 1.2 -> NorthFox/HCC file 엔신 2009-03-20 23356
153 RCE [Unpack] UPX_+_UNOpix_Scrambler 1.10 secret 엔신 2009-03-18  
152 RCE [Unpack] USSR_0.31 [2] [1] file 엔신 2009-03-17 13104
151 Security 범죄적으로 지능화된 싸이월드 방문자 추적기 [6] file 엔신 2009-03-16 24779
» RCE [Unpack] VCrypt0[1].9b 엔신 2009-03-14 9426
149 Malware 악성코드 정의 엔신 2009-03-14 13626
148 Malware [Trojan] Tigger/Syzor.A file 엔신 2009-03-13 10004
147 Windows VMware VMwareDnD 폴더 엔신 2009-03-07 45787
146 Malware BlackEnergy_DDoS_Bot_분석 [2] file 엔신 2009-02-25 9199
145 RCE [MUP] UPX & Stolen Bytes [2] file 엔신 2009-02-17 48191
144 Linux Linux find 명령어 완전 정복 가이드 엔신 2009-02-10 11054
143 RCE vmware에서 Kernel Debugging 하기 엔신 2009-01-31 20188
142 DBMS mysql 설치 후 root 비밀번호 설정, db 생성 엔신 2009-01-31 12743
141 Security base64 code 표 file 엔신 2009-01-20 116669