한국어

tc_backup

USSR_0.31은 시그네쳐 기반의 패킹 분석툴로는 확인이 안될 가능성이 높다. 그러나 Entry Point가 첫 Section이 아니라는 점과 Name의 .USSR를 통하여 패킹되어 있음을 확인할 수 있다.

먼저 Olly Plugin 중 PhantOm 을 사용하여 hide from PEB 옵션을 사용하여 PEB 관련 디버그 flag의 작동을 막도록 하자.(그렇지 않으면 제대로 언팩할수 없을테니!)


플러그인을 설정한 다음 처음 로드시 확인할 수 있는 소스이다.

0046B000 > E9 1B000000      JMP UnPackMe.0046B020
0046B005   B8 1CF76265      MOV EAX,6562F71C
0046B00A   B1 F0            MOV CL,0F0
0046B00C   35 CBAD852E      XOR EAX,2E85ADCB
0046B011   55               PUSH EBP
0046B012   C685 6C5A3B3B 90 MOV BYTE PTR SS:[EBP+3B3B5A6C],90
0046B019   EE               OUT DX,AL                                ; I/O command
0046B01A   DB               ???                                      ; Unknown command
0046B01B   A4               MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
0046B01C   BF 5FAC6F56      MOV EDI,566FAC5F
0046B021   E8 5B000000      CALL UnPackMe.0046B081
0046B026   77 4A            JA SHORT UnPackMe.0046B072
0046B028   3F               AAS
0046B029   3B1D ADE37971    CMP EBX,DWORD PTR DS:[7179E3AD]

먼저 Import 되는 함수들을 찾을 수 있다.
Olly의 Memory 윈도우를 확인하여 보면 imports Contain을 확인할 수 있다. 해당 영역을 Dump CPU하여 Dump창으로 Follow하고 460000 영역을 Long Address 타입으로 변경하여 확인하면 쉽게 Import Table을 찾을 수 있다.


IAT를 먼저 찾았으므로 기억하기 쉽게 메모해서 시작 지점과 Size를 계산해 놓는다.
Start Offset : 460818 - 40000(ImageBase값) = 60818
Size : 60F28(끝) - 60814(시작) = 714

IAT를 찾았으므로 이번엔 소스를 찾아보자.


Memory 윈도우에서 401000 영역 전체에 대하여 Access Break Point를 걸고 Run(F9)하면 위와 같은 화면에서 Exception이 발생할 수 있다. 아래와 같은 지점에서 익셉션을 처리하고 진행하면 Break가 걸리게 된다.


0046BC9D   3006             XOR BYTE PTR DS:[ESI],AL
0046BC9F   8A06             MOV AL,BYTE PTR DS:[ESI]
0046BCA1   46               INC ESI                                  ; UnPackMe.004271B0
0046BCA2   81FE AF724200    CMP ESI,UnPackMe.004272AF
0046BCA8  ^7C F3            JL SHORT UnPackMe.0046BC9D

위 소스를 보면 XOR를 연산 수행을 계속 반족적으로 하게 됨을 확인할 수 있다. 브레이크가 걸린 지점이 004271B0이라는 것을 확인할 수 있고, Dump 영역이라는 것을 알 수 있다. F7키나 F8키를 사용하여 Step 단위로 디버깅하여 보면 덤프 영역의 값이 바뀌는 것을 확인할 수 있다. 일일히 반복이 끝날때까지 Step으로 확인할 수 없으므로 반복이 벗어나는 지점에 브레이크를 걸고 Run(F9)하여 복호화가 끝난 상태로 만든다.

여전히 Disassemble 창에서 확인하여도 제대로 된 코드가 보이지 않으므로 Analyse Code 메뉴를 통해 분석하여 보면 아래와 같은 정상적인 코드 확인이 가능해진다. 확인하면 OEP는 4271B0이라는 것을 알 수 있다.


OEP와 IAT를 찾았으므로 OllyDump나 ImpREC 툴의 Dump 기능을 이용하여 Dump를 할 수 있으나, ImpREC 툴을 이용하여 Dump를 뜨는 것을 더 추천한다.
확인 결과 예제에 사용된 Unpackme 파일을 OllyDump를 이용하여 Dump를 하였더니 PE FileHeader의 Machine의 값 2Byte가 00 00 으로 수정되어 버렸다. 원래의 값은 4C 01(0x14C:i386또는 IA32를 의미함)이다. 32비트 기반의 프로그램은 모두 해당 Machine의 값을 가지고 있어야 한다. 그러나 실제 Unpackme 파일을 Hex Editer로 확인한 결과 4C 01로 되어 있지만 Olly로 디버깅중인 상태에는 00 00 으로 되어 있었다. 아무래도 그 영향으로 인하여 OllyDump는 메모리에 올라와 있는 00 00 이라는 Machine의 값을 그대로 저장한 것이고, ImpREC의 툴은 정상적인 4C 01로 저장하게끔 만들어져 있는 것 같다.

그러므로 ImpREC 툴에서 오른쪽 버튼을 눌러 Advanced Commands -> Select Code Section(s) 메뉴를 선택하고 바로 Dump한다.

그리고 OEP와 입력되어 있는 IAT을 기반으로 Fix Dump하게 되면 정상적으로 Dump가 되며 언팩킹이 완료가 된다.


Hex Workshop의 Compare 기능을 이용하여 비교해 본 결과 딱 2Byte만 다른 것을 확인할 수 있었다.


또한 디버깅 중인 상태에서는 Machine의 값이 00 00 인 것을 확인할 수 있었다.
실제 패킹된 원본 파일은 4C 01로 정상적인 IA32의 값을 나타내고 있다.
메모리에 로드되면서 왜 바뀐지는 알 수 없으나, 항상 PE 구조를 염두하며 자동화 툴은 전적으로 신뢰하지 말고 Unpacking에 임하기를 바란다.

Sun2Day

2010.01.20
14:42:02
(*.238.149.54)
일반적인 모양은 그냥 PseudoScript랑 똑같네

엔신

2010.01.21
15:03:30
(*.248.93.232)
PseudoSigner 메모
List of Articles
번호 제목 글쓴이 날짜 조회 수
160 Windows Windows Vista의 볼륨 섀도 복사본 관리 또는 백업 파일 추출 file 엔신 2009-04-16 25257
159 ETC SK브로드밴드 주택광랜(100M) 가입~ file 엔신 2009-04-08 9965
158 Incident Response Dcode - Forensic Date/Time Decoder file 엔신 2009-04-05 13109
157 Malware Zero Wine Malware Analysis Tool [4] file 엔신 2009-04-05 23165
156 Security ARP Spoofing(ARP Cache Poison) 참고 file 엔신 2009-03-31 24880
155 Wireless WirelessKeyView 엔신 2009-03-21 9734
154 RCE [Unpack] MEW 11 1.2 -> NorthFox/HCC file 엔신 2009-03-20 19541
153 RCE [Unpack] UPX_+_UNOpix_Scrambler 1.10 secret 엔신 2009-03-18  
» RCE [Unpack] USSR_0.31 [2] [1] file 엔신 2009-03-17 13091
151 Security 범죄적으로 지능화된 싸이월드 방문자 추적기 [6] file 엔신 2009-03-16 23886
150 RCE [Unpack] VCrypt0[1].9b 엔신 2009-03-14 9409
149 Malware 악성코드 정의 엔신 2009-03-14 13611
148 Malware [Trojan] Tigger/Syzor.A file 엔신 2009-03-13 9987
147 Windows VMware VMwareDnD 폴더 엔신 2009-03-07 37295
146 Malware BlackEnergy_DDoS_Bot_분석 [2] file 엔신 2009-02-25 9184
145 RCE [MUP] UPX & Stolen Bytes [2] file 엔신 2009-02-17 40762
144 Linux Linux find 명령어 완전 정복 가이드 엔신 2009-02-10 9593
143 RCE vmware에서 Kernel Debugging 하기 엔신 2009-01-31 20163
142 DBMS mysql 설치 후 root 비밀번호 설정, db 생성 엔신 2009-01-31 12731
141 Security base64 code 표 file 엔신 2009-01-20 57361