PesPin 1.1外殼簡略分析
【目 標】: PeSpin 1.1主程式
【工 具】: Olydbg1.1
【任 務】: unpack
【操作平臺】: WINXP pro sp1
【作 者】: randomizer
【相關連結】: http://pespin.w.interia.pl/(作者的官方站點)
第一步:修復 iat
od載入後,隱藏od, 異常選項全部選中,執行程式,出現來自400000段中的異常,點確定。在004135AA進行如下修改
004135AA 9C PUSHFD ;原來
004135AB F71424 NOT DWORD PTR SS:[ESP]
004135AE 832424 01 AND DWORD PTR SS:[ESP],1
->
004135AA 6A 01 PUSH 1 ;修改成這樣然後在這裡下斷點
004135AC 90 NOP
004135AD 90 NOP
004135AE 90 NOP
004135AF 90 NOP
004135B0 90 NOP
004135B1 90 NOP
shit+f9,停在004135AA
把00412D44開始的五個位元組改成 JMP PESpin.00416D6D
00412D44 3917 CMP DWORD PTR DS:[EDI],EDX ; 原來
00412D46 EB 07 JMP SHORT PESpin.00412D4F
00412D48 FA CLI
->
00412D44 E9 FA410000 JMP PESpin.00416D6D ;修改成這樣
再轉到00416D6D輸入如下一小段程式
00416D6D 3917 CMP DWORD PTR DS:[EDI],EDX
00416D6F 74 05 JE SHORT PESpin.00416D76
00416D71 47 INC EDI
00416D72 ^E2 F9 LOOPD SHORT PESpin.00416D6D
00416D74 EB 16 JMP SHORT PESpin.00416D8C
00416D76 807F FF 25 CMP BYTE PTR DS:[EDI-1],25
00416D7A 74 09 JE SHORT PESpin.00416D85
00416D7C 66:C747 FF FF25 MOV WORD PTR DS:[EDI-1],25FF
00416D82 8957 01 MOV DWORD PTR DS:[EDI+1],EDX
00416D85 8902 MOV DWORD PTR DS:[EDX],EAX
00416D87 ^E9 9AC0FFFF JMP PESpin.00412E26
00416D8C CC INT3
00416D8D CC INT3
然後轉到0041379A設斷點,F9執行程式,程式停在下面的時候把[esp]由 0改成 1
0041379A 50 PUSH EAX ;這裡下斷,程式停這裡的時候把[esp]由 0改成 1
然後轉到0041390D下斷點,F9程式執行到這裡, 呵呵,iat就搞好啦。
0041390D 2BC0 SUB EAX,EAX ;這裡是原來 oep的語句,被偷在這裡來了
第二步:decrypted crypted code
轉到00416D8E,type in
00416D8E 60 PUSHAD
00416D8F BF 00104000 MOV EDI,PESpin.00401000
00416D94 B9 70B10000 MOV ECX,0B170
00416D99 B0 9C MOV AL,9C
00416D9B F2:AE REPNE SCAS BYTE PTR ES:[EDI]
00416D9D 75 6C JNZ SHORT PESpin.00416E0B ;跳轉表示第一種crypted code搞定啦
00416D9F 803F 60 CMP BYTE PTR DS:[EDI],60
00416DA2 ^75 F5 JNZ SHORT PESpin.00416D99
00416DA4 66:817F 23 619D CMP WORD PTR DS:[EDI+23],9D61
00416DAA ^75 ED JNZ SHORT PESpin.00416D99
00416DAC 4F DEC EDI
00416DAD 41 INC ECX
00416DAE 8D77 02 LEA ESI,DWORD PTR DS:[EDI+2]
00416DB1 51 PUSH ECX
00416DB2 57 PUSH EDI
00416DB3 C647 1C C3 MOV BYTE PTR DS:[EDI+1C],0C3
00416DB7 FFD6 CALL ESI
00416DB9 E8 08000000 CALL PESpin.00416DC6
00416DBE 5F POP EDI
00416DBF 59 POP ECX
00416DC0 ^EB D7 JMP SHORT PESpin.00416D99
00416DC2 CC INT3
00416DC3 CC INT3
00416DC4 CC INT3
00416DC5 CC INT3
00416DC6 81EF 512738D9 SUB EDI,D9382751
00416DCC 87D9 XCHG ECX,EBX
00416DCE B9 26000000 MOV ECX,26
00416DD3 B0 90 MOV AL,90
00416DD5 FC CLD
00416DD6 F3:AA REP STOS BYTE PTR ES:[EDI]
00416DD8 87D9 XCHG ECX,EBX
00416DDA 8A07 MOV AL,BYTE PTR DS:[EDI]
00416DDC FEC8 DEC AL
00416DDE C0C8 D1 ROR AL,0D1
00416DE1 C0C8 D7 ROR AL,0D7
00416DE4 FEC8 DEC AL
00416DE6 04 4E ADD AL,4E
00416DE8 32C1 XOR AL,CL
00416DEA C0C8 0F ROR AL,0F
00416DED FEC8 DEC AL
00416DEF 02C1 ADD AL,CL
00416DF1 AA STOS BYTE PTR ES:[EDI]
00416DF2 49 DEC ECX
00416DF3 ^75 E5 JNZ SHORT PESpin.00416DDA
00416DF5 66:813F EB0B CMP WORD PTR DS:[EDI],0BEB
00416DFA 75 0D JNZ SHORT PESpin.00416E09
00416DFC 66:817F 2E EB05 CMP WORD PTR DS:[EDI+2E],5EB
00416E02 75 05 JNZ SHORT PESpin.00416E09
00416E04 C647 01 33 MOV BYTE PTR DS:[EDI+1],33
00416E08 C3 RETN
00416E09 CC INT3
00416E0A CC INT3
00416E0B BF 00104000 MOV EDI,PESpin.00401000 ;這裡開始解第二種crypted code
00416E10 B9 70B10000 MOV ECX,0B170
00416E15 B0 FF MOV AL,0FF
00416E17 F2:AE REPNE SCAS BYTE PTR ES:[EDI]
00416E19 75 5C JNZ SHORT PESpin.00416E77 ;跳轉表示第二種crypted code搞定啦
00416E1B 803F 15 CMP BYTE PTR DS:[EDI],15
00416E1E ^75 F5 JNZ SHORT PESpin.00416E15
00416E20 8B57 01 MOV EDX,DWORD PTR DS:[EDI+1]
00416E23 81FA 3E554100 CMP EDX,PESpin.0041553E
00416E29 ^75 EA JNZ SHORT PESpin.00416E15
00416E2B 57 PUSH EDI
00416E2C 51 PUSH ECX
00416E2D 8B4F 05 MOV ECX,DWORD PTR DS:[EDI+5]
00416E30 81E9 D46AE877 SUB ECX,77E86AD4
00416E36 83C7 09 ADD EDI,9
00416E39 E8 14000000 CALL PESpin.00416E52
00416E3E E8 2A000000 CALL PESpin.00416E6D
00416E43 59 POP ECX
00416E44 5F POP EDI
00416E45 4F DEC EDI
00416E46 83E9 09 SUB ECX,9
00416E49 E8 1F000000 CALL PESpin.00416E6D
00416E4E ^EB C5 JMP SHORT PESpin.00416E15
00416E50 CC INT3
00416E51 CC INT3
00416E52 8A07 MOV AL,BYTE PTR DS:[EDI]
00416E54 C0C8 42 ROR AL,42
00416E57 04 D0 ADD AL,0D0
00416E59 02C1 ADD AL,CL
00416E5B FEC8 DEC AL
00416E5D 04 09 ADD AL,9
00416E5F FEC8 DEC AL
00416E61 34 2C XOR AL,2C
00416E63 C0C0 DA ROL AL,0DA
00416E66 FEC8 DEC AL
00416E68 AA STOS BYTE PTR ES:[EDI]
00416E69 49 DEC ECX
00416E6A ^75 E6 JNZ SHORT PESpin.00416E52
00416E6C C3 RETN
00416E6D 51 PUSH ECX
00416E6E 6A 0A PUSH 0A
00416E70 59 POP ECX
00416E71 B0 90 MOV AL,90
00416E73 F3:AA REP STOS BYTE PTR ES:[EDI]
00416E75 59 POP ECX
00416E76 C3 RETN
00416E77 CC INT3
00416E78 CC INT3
第三步:PE頭stolen code的找回
輸入下面的指令
00416E79 BF 00104000 MOV EDI,PESpin.00401000 ;開始對 “call 頭部”的修復
00416E7E B9 70B10000 MOV ECX,0B170
00416E83 B0 E8 MOV AL,0E8
00416E85 F2:AE REPNE SCAS BYTE PTR ES:[EDI] ;查 call
00416E87 75 4D JNZ SHORT PESpin.00416ED6 ;跳轉表示對頭部 call 型搞定啦
00416E89 8B17 MOV EDX,DWORD PTR DS:[EDI]
00416E8B 8D543A 04 LEA EDX,DWORD PTR DS:[EDX+EDI+4]
00416E8F 81FA C8014000 CMP EDX,PESpin.004001C8
00416E95 ^72 EE JB SHORT PESpin.00416E85 ;跳錶示不是呼叫頭部
00416E97 81FA 28044000 CMP EDX,PESpin.00400428
00416E9D ^73 E6 JNB SHORT PESpin.00416E85 ;跳錶示不是呼叫頭部
00416E9F 51 PUSH ECX
00416EA0 57 PUSH EDI
00416EA1 6A FF PUSH -1
00416EA3 59 POP ECX
00416EA4 8BFA MOV EDI,EDX
00416EA6 B0 E9 MOV AL,0E9
00416EA8 F2:AE REPNE SCAS BYTE PTR ES:[EDI] ;查頭部的“重定向”
00416EAA 75 28 JNZ SHORT PESpin.00416ED4
00416EAC 8B1F MOV EBX,DWORD PTR DS:[EDI]
00416EAE 8D5C3B 04 LEA EBX,DWORD PTR DS:[EBX+EDI+4] ;得到絕對地址
00416EB2 81FB 00104000 CMP EBX,PESpin.00401000
00416EB8 ^72 EE JB SHORT PESpin.00416EA8 ;跳錶示不是“重定向”到程式碼段
00416EBA 81FB 70C14000 CMP EBX,PESpin.0040C170
00416EC0 ^73 E6 JNB SHORT PESpin.00416EA8 ;跳錶示不是“重定向”到程式碼段
00416EC2 F7D1 NOT ECX
00416EC4 49 DEC ECX
00416EC5 85C9 TEST ECX,ECX
00416EC7 75 0B JNZ SHORT PESpin.00416ED4 ;ecx!=0表示在頭部中要執行“一段程式碼”
00416EC9 5F POP EDI
00416ECA 59 POP ECX
00416ECB 2BDF SUB EBX,EDI
00416ECD 83EB 04 SUB EBX,4 ;得到偏移量
00416ED0 891F MOV DWORD PTR DS:[EDI],EBX ;修復
00416ED2 ^EB AF JMP SHORT PESpin.00416E83
00416ED4 CC INT3
00416ED5 CC INT3
00416ED6 BF 00104000 MOV EDI,PESpin.00401000 ;開始對 “jmp 頭部”的修復,原理和前一段
00416EDB B9 70B10000 MOV ECX,0B170 ;差不多,就不重複了
00416EE0 B0 E9 MOV AL,0E9
00416EE2 F2:AE REPNE SCAS BYTE PTR ES:[EDI]
00416EE4 75 58 JNZ SHORT PESpin.00416F3E
00416EE6 8B17 MOV EDX,DWORD PTR DS:[EDI]
00416EE8 8D543A 04 LEA EDX,DWORD PTR DS:[EDX+EDI+4]
00416EEC 81FA C8014000 CMP EDX,PESpin.004001C8
00416EF2 ^72 EE JB SHORT PESpin.00416EE2
00416EF4 81FA 28044000 CMP EDX,PESpin.00400428
00416EFA ^73 E6 JNB SHORT PESpin.00416EE2
00416EFC 51 PUSH ECX
00416EFD 57 PUSH EDI
00416EFE 6A FF PUSH -1
00416F00 59 POP ECX
00416F01 8BFA MOV EDI,EDX
00416F03 B0 E9 MOV AL,0E9
00416F05 F2:AE REPNE SCAS BYTE PTR ES:[EDI]
00416F07 75 36 JNZ SHORT PESpin.00416F3F
00416F09 8B1F MOV EBX,DWORD PTR DS:[EDI]
00416F0B 8D5C3B 04 LEA EBX,DWORD PTR DS:[EBX+EDI+4]
00416F0F 81FB 00104000 CMP EBX,PESpin.00401000
00416F15 ^72 EE JB SHORT PESpin.00416F05
00416F17 81FB 70C14000 CMP EBX,PESpin.0040C170
00416F1D ^73 E6 JNB SHORT PESpin.00416F05
00416F1F F7D1 NOT ECX
00416F21 49 DEC ECX
00416F22 85C9 TEST ECX,ECX
00416F24 74 0D JE SHORT PESpin.00416F33
00416F26 5F POP EDI
00416F27 290C24 SUB DWORD PTR SS:[ESP],ECX
00416F2A 90 NOP
00416F2B 8BF2 MOV ESI,EDX
00416F2D 4F DEC EDI
00416F2E F3:A4 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
00416F30 59 POP ECX
00416F31 ^EB AD JMP SHORT PESpin.00416EE0
00416F33 5F POP EDI
00416F34 59 POP ECX
00416F35 2BDF SUB EBX,EDI
00416F37 83EB 04 SUB EBX,4
00416F3A 891F MOV DWORD PTR DS:[EDI],EBX
00416F3C ^EB A2 JMP SHORT PESpin.00416EE0
00416F3E 61 POPAD
00416F3F CC INT3
00416F40 CC INT3
主要工作終於完成,呵呵。
第四步:PE頭stolen code的找回
這個太容易了,當偶們修復 iat執行到偽 oep(0041390D)時,如下,
不妨單步讓它執行到0041392B,就是那條 jmp語句啦
0041390D 2BC0 SUB EAX,EAX ;這裡是原來 oep的語句,被偷在
0041390F 90 NOP ;這裡來了
00413910 90 NOP
00413911 90 NOP
00413912 68 1D39ACE7 PUSH E7AC391D
00413917 810424 63979418 ADD DWORD PTR SS:[ESP],18949763
0041391E 50 PUSH EAX
0041391F 90 NOP
00413920 90 NOP
00413921 90 NOP
00413922 50 PUSH EAX
00413923 90 NOP
00413924 90 NOP
00413925 90 NOP
00413926 68 30394100 PUSH PESpin.00413930
0041392B -E9 C261FFFF JMP PESpin.00409AF2
00413930 68 3A394100 PUSH PESpin.0041393A
00413935 -E9 E261FFFF JMP PESpin.00409B1C
0041393A 3D B7000000 CMP EAX,0B7
0041393F 90 NOP
00413940 90 NOP
00413941 90 NOP
00413942 -E9 025AFFFF JMP PESpin.00409349 ;這裡跳轉到程式碼段
這時候的堆疊如下
0012F9B4 00413930 /CALL to CreateMutexA
0012F9B8 00000000 |pSecurity = NULL
0012F9BC 00000000 |InitialOwner = FALSE
0012F9C0 0040D080 \MutexName = "PE_SPIN_v1.1"
根據0041390D--00413942及堆疊資料,轉到00409331,修復成:
00409331 68 80D04000 PUSH 0040D080
00409336 6A 00 PUSH 0
00409338 6A 00 PUSH 0
0040933A E8 B3070000 CALL 00409AF2
0040933F E8 D8070000 CALL 00409B1C
00409344 3D B7000000 CMP EAX,0B7
00409349
呵呵
第五步:恢復頭部:
雖然不值一提,為完整,還是說說。另起一個od,載入PESpin,把它頭部中的相關資料複製貼上過來就好啦。
第六步:patch一個anti.
在程式碼段下ctrl+f,搜尋sub bl,[eax],找到後改成 mov bl,0
終於搞完了,用LordPE dump,注意糾正imageSize哦,再用一下ImportREC,全部完成。
後記:
notepad的脫殼和這個差不多,但是它那裡對 api的修復略有不同,因為它是call [xxx],這裡是jmp [xxx],注意這個差別,
修復 api時的程式碼就有點不而已。
感謝你耐著性子看完這篇濫文。更感謝過程中給我幫助的一位前輩,還有各位老大。
相關文章
- PesPin
1.0外殼簡略分析2004-09-25
- ASPACK外殼一點分析2004-08-12
- XDos v1.1~Dos的外殼程式 (9千字)2015-11-15
- C32Asm外殼脫殼分析筆記2015-11-15ASM筆記
- Alex-protect外殼完全分析【原創】2004-12-07
- JDPack
Version 1.01 外殼完全分析筆記2004-05-15筆記
- 【分享】MEW1.1脫殼指令碼
For OM2004-12-01指令碼
- Longan Pi 3H簡約外殼分享2024-04-07
- 股市風暴4.0的外殼分析與脫殼方法(一) (7千字)2001-06-10
- Linux 外殼程式2018-08-05Linux
- 以殼解殼--SourceRescuer脫殼手記破解分析2004-11-16
- 對Crunch v1.1加殼程式的手動脫殼及反跟蹤程式碼的一點分析
(15千字)2000-10-02
- 關於Windows外殼(Windows Shell)2024-11-11Windows
- 流放一文。 對Asprotect v1.1的手動脫殼的一點分析 (9千字)2000-10-27
- [譯] 帶你領略 ConstraintLayout 1.1 的新功能2018-05-20AI
- nginx 簡略教程2017-11-08Nginx
- 考核簡略指南2024-05-03
- 利用DELPHI編寫WINDOWS外殼 (轉)2008-03-20Windows
- 某殼分析+修復(二)2018-05-14
- 先分析,再脫殼(一)2003-09-04
- 對Crunch v1.1主程式檔案的脫殼方法 ---ljtt2000-11-30
- Protection Plus V4.X 脫殼――SoftwareKey V1.1 主程式2015-11-15
- PESPIN
v0.7 stolen code 的找回2004-07-05
- BP NN 簡略版2024-04-25
- 以殼解殼――ASProtect
1.23RC4殼的Stolen Code簡便解決方案2004-05-13
- 關於LOL成就係統對玩家影響的簡略分析2020-06-18
- 自研 PHP 框架 1.1_簡介2019-12-24PHP框架
- Stolen Code Found script-->PESpin
v0.32015-11-15
- Windows外殼名字空間的瀏覽 (轉)2008-05-26Windows
- 一次簡單的脫殼2024-08-30
- EmbedPE
1.13 詳細分析和脫殼2005-01-03
- 利用Delphi編寫Windows外殼擴充套件 (轉)2008-03-02Windows套件
- vuex實現及簡略解析2019-02-28Vue
- git 簡略筆記之二2016-10-02Git筆記
- 對PECompact加殼的DLL脫殼的一點分析 (7千字)2000-08-17
- 1.1 koa靜態官網之教程簡介2019-01-02
- 實現呼叫加殼的外殼中的子程式的一點見解。。 (1千字)2002-10-21
- 識別殼的簡單程式,高手免進。2004-12-14