【标 题】在98系统下用OD脱PEtite 2.X壳一法
【作 者】小虾(战神[DFCG])
【日 期】2004-11-22
【使用工具】OllyDBG, ImportREC
【主 页】http://www.chinadfcg.com
【平 台】windows98系统:)
【练习程序】win98下的记事本
【下载地址】附件:PEtite 2.2.rar
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
【正 文】
呵呵,近来一直很忙,都没有时间再玩Cracker了:((最多上坛子灌灌水),这一天比较闲,就试试在98系统下来脱PEtite 2.2的壳:)(顺便看看能不能坐上精华六的末班车:))。这个壳属于入门级的加密壳,如果在XP系统下UnPack完全可以秒杀。但若在98系统中可有点不太好脱:)(使用SoftICE也可以秒杀这个壳,但是用TRW2000和OllyDBG的话...)。
废话少说,现在来看看为什么98下不好脱这个壳。首先启动OD,在OD调试选项中除Kernel32中的异常选上之外其余全部不要选。然后加载目标程序,
[color=#008000];>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[/color]
[color=#008000];载入程序后选不分析代码后将中断在0040D042外壳的入口处[/color]
[color=#008000];经这跟踪,得知以下代码只是解压数据,不必细跟,现按F9直接运行程序[/color]
[color=#008000];>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[/color]
0040D042 > B8 00D04000 [color=#0000D0]MOV[/color] [color=#FF0000]EAX[/color],NOTEPAD.0040D000
0040D047 68 4C584000 [color=#0000D0]PUSH[/color] NOTEPAD.0040584C [color=#008000];0040584c入栈,[/color]
0040D04C 64:FF35 0000000>[color=#0000D0]PUSH[/color] [color=#FF00FF]DWORD[/color] PTR [color=#FF0000]FS[/color]:[0] [color=#008000];记住这个地址[/color]
0040D053 64:8925 0000000>[color=#0000D0]MOV[/color] [color=#FF00FF]DWORD[/color] PTR [color=#FF0000]FS[/color]:[0],[color=#FF0000]ESP[/color] [color=#008000];挂SEH,当程序产生异常后将跳到0040584C处继续运行。[/color]
0040D05A 66:9C PUSHFW
0040D05C 60 [color=#0000D0]PUSHAD[/color]
0040D05D 50 [color=#0000D0]PUSH[/color] [color=#FF0000]EAX[/color]
0040D05E 68 00004000 [color=#0000D0]PUSH[/color] NOTEPAD.00400000
[color=#008000];>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[/color]
[color=#008000];当程序数据解压完毕后将在这里产生一个写入异常[/color]
[color=#008000];>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[/color]
0040D135 A4 [color=#0000D0]MOVS[/color] [color=#FF00FF]BYTE[/color] PTR [color=#FF0000]ES[/color]:[[color=#FF0000]EDI[/color]],[color=#FF00FF]BYTE[/color] PTR [color=#FF0000]DS[/color]:[[color=#FF0000]ESI[/color]] [color=#008000];产生内存写入异常[/color]
0040D136 33C9 [color=#0000D0]XOR[/color] [color=#FF0000]ECX[/color],[color=#FF0000]ECX[/color]
0040D138 83FB 00 [color=#0000D0]CMP[/color] [color=#FF0000]EBX[/color],0
0040D13B ^ 7E A4 [color=#0000D0]JLE[/color] SHORT NOTEPAD.0040D0E1
0040D13D E8 AAFFFFFF [color=#0000D0]CALL[/color] NOTEPAD.0040D0EC
0040D135 A4 [color=#0000D0]MOVS[/color] [color=#FF00FF]BYTE[/color] PTR [color=#FF0000]ES[/color]:[[color=#FF0000]EDI[/color]],[color=#FF00FF]BYTE[/color] PTR [color=#FF0000]DS[/color]:[[color=#FF0000]ESI[/color]]
0040D136 33C9 [color=#0000D0]XOR[/color] [color=#FF0000]ECX[/color],[color=#FF0000]ECX[/color]
0040D138 83FB 00 [color=#0000D0]CMP[/color] [color=#FF0000]EBX[/color],0
0040D13B ^ 7E A4 [color=#0000D0]JLE[/color] SHORT NOTEPAD.0040D0E1
0040D13D E8 AAFFFFFF [color=#0000D0]CALL[/color] NOTEPAD.0040D0EC
[color=#008000];>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[/color]
[color=#008000];在前面我们已经知道程序产生异常后将跳到0040584C处继续运行[/color]
[color=#008000];所以我们在命令行中输入“BP 0040584C"处下一个INT 3断点[/color]
[color=#008000];按Shift+F9运行忽略异常,程序将中断在0040584C处,[/color]
[color=#008000];到这里后我们就要慢慢的跟踪了。[/color]
[color=#008000];>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[/color]
0040584C E8 4F000000 [color=#0000D0]CALL[/color] NOTEPAD.004058A0 [color=#008000];变形Call,F7进入[/color]
00405851 D9D7 [color=#0000D0]FST[/color] [color=#FF0000]EDI[/color]
00405853 ^ 71 AC [color=#0000D0]JNO[/color] SHORT NOTEPAD.00405801
00405855 ^ E0 B9 LOOPDNE SHORT NOTEPAD.00405810
00405857 58 [color=#0000D0]POP[/color] [color=#FF0000]EAX[/color]
00405858 098E CDC22DD8 [color=#0000D0]OR[/color] [color=#FF00FF]DWORD[/color] PTR [color=#FF0000]DS[/color]:[[color=#FF0000]ESI[/color]+D82DC2CD],[color=#FF0000]ECX[/color]
[color=#008000];>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[/color]
[color=#008000];进入后到这里,[/color]
[color=#008000];>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[/color]
004058A0 33C0 [color=#0000D0]XOR[/color] [color=#FF0000]EAX[/color],[color=#FF0000]EAX[/color]
004058A2 5E [color=#0000D0]POP[/color] [color=#FF0000]ESI[/color]
004058A3 64:8B18 [color=#0000D0]MOV[/color] [color=#FF0000]EBX[/color],[color=#FF00FF]DWORD[/color] PTR [color=#FF0000]FS[/color]:[[color=#FF0000]EAX[/color]]
004058A6 8B1B [color=#0000D0]MOV[/color] [color=#FF0000]EBX[/color],[color=#FF00FF]DWORD[/color] PTR [color=#FF0000]DS[/color]:[[color=#FF0000]EBX[/color]]
004058A8 8D63 D6 [color=#0000D0]LEA[/color] [color=#FF0000]ESP[/color],[color=#FF00FF]DWORD[/color] PTR [color=#FF0000]DS[/color]:[[color=#FF0000]EBX[/color]-2A]
004058AB 5D [color=#0000D0]POP[/color] [color=#FF0000]EBP[/color]
004058AC 8D8E BD020000 [color=#0000D0]LEA[/color] [color=#FF0000]ECX[/color],[color=#FF00FF]DWORD[/color] PTR [color=#FF0000]DS[/color]:[[color=#FF0000]ESI[/color]+2BD]
004058B2 894B 04 [color=#0000D0]MOV[/color] [color=#FF00FF]DWORD[/color] PTR [color=#FF0000]DS[/color]:[[color=#FF0000]EBX[/color]+4],[color=#FF0000]ECX[/color]
004058B5 64:891D 0000000>[color=#0000D0]MOV[/color] [color=#FF00FF]DWORD[/color] PTR [color=#FF0000]FS[/color]:[0],[color=#FF0000]EBX[/color]
004058BC 8B3C24 [color=#0000D0]MOV[/color] [color=#FF0000]EDI[/color],[color=#FF00FF]DWORD[/color] PTR [color=#FF0000]SS[/color]:[[color=#FF0000]ESP[/color]]
004058BF 81C7 39000000 [color=#0000D0]ADD[/color] [color=#FF0000]EDI[/color],39
004058C5 6A 0E [color=#0000D0]PUSH[/color] 0E
004058C7 59 [color=#0000D0]POP[/color] [color=#FF0000]ECX[/color]
004058C8 F3:A4 [color=#0000D0]REP[/color] [color=#0000D0]MOVS[/color] [color=#FF00FF]BYTE[/color] PTR [color=#FF0000]ES[/color]:[[color=#FF0000]EDI[/color]],[color=#FF00FF]BYTE[/color] PTR [color=#FF0000]DS[/color]:[>
004058CA FF33 [color=#0000D0]PUSH[/color] [color=#FF00FF]DWORD[/color] PTR [color=#FF0000]DS[/color]:[[color=#FF0000]EBX[/color]]
004058CC 56 [color=#0000D0]PUSH[/color] [color=#FF0000]ESI[/color]
004058CD 57 [color=#0000D0]PUSH[/color] [color=#FF0000]EDI[/color]
004058CE 8DB7 71010000 [color=#0000D0]LEA[/color] [color=#FF0000]ESI[/color],[color=#FF00FF]DWORD[/color] PTR [color=#FF0000]DS[/color]:[[color=#FF0000]EDI[/color]+171]
004058D4 8BCE [color=#0000D0]MOV[/color] [color=#FF0000]ECX[/color],[color=#FF0000]ESI[/color]
004058D6 2BCF [color=#0000D0]SUB[/color] [color=#FF0000]ECX[/color],[color=#FF0000]EDI[/color]
004058D8 F3:AA [color=#0000D0]REP[/color] [color=#0000D0]STOS[/color] [color=#FF00FF]BYTE[/color] PTR [color=#FF0000]ES[/color]:[[color=#FF0000]EDI[/color]]
[color=#008000];>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[/color]
[color=#008000];单步运行到这里时,程序开始设置单步异常[/color]
[color=#008000];这时,不能再单步跟踪了,不然等下解压出的代码就不正确了[/color]
[color=#008000];按F9运行程序[/color]
[color=#008000];>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[/color]
004058DA 60 [color=#0000D0]PUSHAD[/color]
004058DB 66:9C PUSHFW
004058DD 0FBA3C24 08 [color=#0000D0]BTC[/color] [color=#FF00FF]DWORD[/color] PTR [color=#FF0000]SS[/color]:[[color=#FF0000]ESP[/color]],8
004058E2 66:9D POPFW
004058E4 5B [color=#0000D0]POP[/color] [color=#FF0000]EBX[/color]
[color=#008000];>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[/color]
[color=#008000];单步异常,我们在004058E6处下一个断点,按Shift+F9忽略异常[/color]
[color=#008000];>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[/color]
004058E5 5A [color=#0000D0]POP[/color] [color=#FF0000]EDX[/color] [color=#008000];单步异常[/color]
[color=#008000];>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[/color]
[color=#008000];程序中断这里,POP DWORD PTR FS:[0]语句,典型的释放异常代码[/color]
[color=#008000];到这里开始程序已常没有异常了。[/color]
[color=#008000];>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[/color]
004058E6 64:8F05 0000000>[color=#0000D0]POP[/color] [color=#FF00FF]DWORD[/color] PTR [color=#FF0000]FS[/color]:[0] [color=#008000];释放异常[/color]
004058ED 58 [color=#0000D0]POP[/color] [color=#FF0000]EAX[/color]
004058EE 6A 00 [color=#0000D0]PUSH[/color] 0
004058F0 53 [color=#0000D0]PUSH[/color] [color=#FF0000]EBX[/color]
004058F1 33DB [color=#0000D0]XOR[/color] [color=#FF0000]EBX[/color],[color=#FF0000]EBX[/color]
004058F3 68 3D030000 [color=#0000D0]PUSH[/color] 33D
[color=#008000];>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[/color]
[color=#008000];到这里要注意了,OllyDBG在98系统为什么脱不了这个壳,关键点就在下面[/color]
[color=#008000];这下面的代码是解密跨段跳到入口的代码,若这里解密不成功,我们就找不[/color]
[color=#008000];到程序的OEP了。[/color]
[color=#008000];>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[/color]
004058F8 8B0C24 [color=#0000D0]MOV[/color] [color=#FF0000]ECX[/color],[color=#FF00FF]DWORD[/color] PTR [color=#FF0000]SS[/color]:[[color=#FF0000]ESP[/color]]
004058FB 0FBAE3 00 [color=#0000D0]BT[/color] [color=#FF0000]EBX[/color],0
004058FF 72 16 [color=#0000D0]JB[/color] SHORT NOTEPAD.00405917
00405901 64:8B35 1C00000>[color=#0000D0]MOV[/color] [color=#FF0000]ESI[/color],[color=#FF00FF]DWORD[/color] PTR [color=#FF0000]FS[/color]:[1C]
00405908 0FBAF6 00 [color=#0000D0]BTR[/color] [color=#FF0000]ESI[/color],0
[color=#008000];>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[/color]
[color=#008000];0040590C是最关健的一句,只要将这一句NOP掉,我们就能找到程序的跨段[/color]
[color=#008000];跳到OEP的代码。[/color]
[color=#008000];>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[/color]
0040590C 64:0335 2200000>[color=#0000D0]ADD[/color] [color=#FF0000]ESI[/color],[color=#FF00FF]DWORD[/color] PTR [color=#FF0000]FS[/color]:[22] [color=#008000];将这一句NOP掉[/color]
00405913 46 [color=#0000D0]INC[/color] [color=#FF0000]ESI[/color]
00405914 66:33DE [color=#0000D0]XOR[/color] [color=#FF0000]BX[/color],[color=#FF0000]SI[/color]
00405917 321C11 [color=#0000D0]XOR[/color] [color=#FF0000]BL[/color],[color=#FF00FF]BYTE[/color] PTR [color=#FF0000]DS[/color]:[[color=#FF0000]ECX[/color]+[color=#FF0000]EDX[/color]]
0040591A C1C3 07 [color=#0000D0]ROL[/color] [color=#FF0000]EBX[/color],7
0040591D 49 [color=#0000D0]DEC[/color] [color=#FF0000]ECX[/color]
0040591E ^ 7D [color=#FF00FF]DB[/color] [color=#0000D0]JGE[/color] SHORT NOTEPAD.004058FB
00405920 8D48 37 [color=#0000D0]LEA[/color] [color=#FF0000]ECX[/color],[color=#FF00FF]DWORD[/color] PTR [color=#FF0000]DS[/color]:[[color=#FF0000]EAX[/color]+37]
00405923 3119 [color=#0000D0]XOR[/color] [color=#FF00FF]DWORD[/color] PTR [color=#FF0000]DS[/color]:[[color=#FF0000]ECX[/color]],[color=#FF0000]EBX[/color]
00405925 3159 04 [color=#0000D0]XOR[/color] [color=#FF00FF]DWORD[/color] PTR [color=#FF0000]DS[/color]:[[color=#FF0000]ECX[/color]+4],[color=#FF0000]EBX[/color]
00405928 3159 08 [color=#0000D0]XOR[/color] [color=#FF00FF]DWORD[/color] PTR [color=#FF0000]DS[/color]:[[color=#FF0000]ECX[/color]+8],[color=#FF0000]EBX[/color]
0040592B 3159 0C [color=#0000D0]XOR[/color] [color=#FF00FF]DWORD[/color] PTR [color=#FF0000]DS[/color]:[[color=#FF0000]ECX[/color]+C],[color=#FF0000]EBX[/color]
0040592E 59 [color=#0000D0]POP[/color] [color=#FF0000]ECX[/color]
0040592F 315C11 01 [color=#0000D0]XOR[/color] [color=#FF00FF]DWORD[/color] PTR [color=#FF0000]DS[/color]:[[color=#FF0000]ECX[/color]+[color=#FF0000]EDX[/color]+1],EBX[color=#008000] ;解密后的代码[/color]
00405933 33DB [color=#0000D0]XOR[/color] [color=#FF0000]EBX[/color],[color=#FF0000]EBX[/color]
00405935 8BF2 [color=#0000D0]MOV[/color] [color=#FF0000]ESI[/color],[color=#FF0000]EDX[/color]
[color=#008000];>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[/color]
[color=#008000];单步反跟踪,若是单步跟踪到这里的话,比较结果将不相同。[/color]
[color=#008000];>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[/color]
00405937 81BA 71A8FFFF 4>[color=#0000D0]CMP[/color] [color=#FF00FF]DWORD[/color] PTR [color=#FF0000]DS[/color]:[[color=#FF0000]EDX[/color]+FFFFA871],0D042
00405941 75 21 [color=#0000D0]JNZ[/color] SHORT NOTEPAD.00405964 [color=#008000];跳就OVER了[/color]
00405943 81EE B7570000 [color=#0000D0]SUB[/color] [color=#FF0000]ESI[/color],57B7
00405949 0FB64E 06 [color=#0000D0]MOVZX[/color] [color=#FF0000]ECX[/color],[color=#FF00FF]BYTE[/color] PTR [color=#FF0000]DS[/color]:[[color=#FF0000]ESI[/color]+6]
0040594D 6BC9 0A [color=#0000D0]IMUL[/color] [color=#FF0000]ECX[/color],[color=#FF0000]ECX[/color],0A
00405950 66:81C1 3E00 [color=#0000D0]ADD[/color] [color=#FF0000]CX[/color],3E
00405955 331E [color=#0000D0]XOR[/color] [color=#FF0000]EBX[/color],[color=#FF00FF]DWORD[/color] PTR [color=#FF0000]DS[/color]:[[color=#FF0000]ESI[/color]]
00405957 D3C3 [color=#0000D0]ROL[/color] [color=#FF0000]EBX[/color],[color=#FF0000]CL[/color]
00405959 83C6 04 [color=#0000D0]ADD[/color] [color=#FF0000]ESI[/color],4
0040595C 49 [color=#0000D0]DEC[/color] [color=#FF0000]ECX[/color]
0040595D ^ 75 F6 [color=#0000D0]JNZ[/color] SHORT NOTEPAD.00405955
0040595F 3958 04 [color=#0000D0]CMP[/color] [color=#FF00FF]DWORD[/color] PTR [color=#FF0000]DS[/color]:[[color=#FF0000]EAX[/color]+4],[color=#FF0000]EBX[/color] [color=#008000] ;再比较[/color]
00405962 74 08 [color=#0000D0]JE[/color] SHORT NOTEPAD.0040596C[color=#008000] ;不跳就OVER[/color]
00405964 83C4 2A [color=#0000D0]ADD[/color] [color=#FF0000]ESP[/color],2A
00405967 - E9 A9760000 [color=#0000D0]JMP[/color] NOTEPAD.0040D015[color=#008000] ;OVER[/color]
0040596C BE 00600000 [color=#0000D0]MOV[/color] [color=#FF0000]ESI[/color],6000
00405971 03F5 [color=#0000D0]ADD[/color] [color=#FF0000]ESI[/color],[color=#FF0000]EBP[/color]
00405973 8D8D 00080000 [color=#0000D0]LEA[/color] [color=#FF0000]ECX[/color],[color=#FF00FF]DWORD[/color] PTR [color=#FF0000]SS[/color]:[[color=#FF0000]EBP[/color]+800]
00405979 8BD8 [color=#0000D0]MOV[/color] [color=#FF0000]EBX[/color],[color=#FF0000]EAX[/color]
0040597B 833E 00 [color=#0000D0]CMP[/color] [color=#FF00FF]DWORD[/color] PTR [color=#FF0000]DS[/color]:[[color=#FF0000]ESI[/color]],0
[color=#008000];>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[/color]
[color=#008000];0040597E最后跳到00405B92将跳出大循环,所以我们在00405B92处下断[/color]
[color=#008000];F9运行程序。[/color]
[color=#008000];>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[/color]
0040597E 0F84 0E020000 [color=#0000D0]JE[/color] NOTEPAD.00405B92
00405984 51 [color=#0000D0]PUSH[/color] [color=#FF0000]ECX[/color]
00405985 51 [color=#0000D0]PUSH[/color] [color=#FF0000]ECX[/color]
00405986 FF95 90070000 [color=#0000D0]CALL[/color] [color=#FF00FF]DWORD[/color] PTR [color=#FF0000]SS[/color]:[[color=#FF0000]EBP[/color]+790]
[color=#008000];>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[/color]
[color=#008000];程序中断在这里。[/color]
00405B92 59 [color=#0000D0]POP[/color] [color=#FF0000]ECX[/color]
00405B93 5E [color=#0000D0]POP[/color] [color=#FF0000]ESI[/color]
00405B94 FD [color=#0000D0]STD[/color]
00405B95 33C0 [color=#0000D0]XOR[/color] [color=#FF0000]EAX[/color],[color=#FF0000]EAX[/color]
00405B97 B9 56030000 [color=#0000D0]MOV[/color] [color=#FF0000]ECX[/color],356
00405B9C E8 98740000 [color=#0000D0]CALL[/color] NOTEPAD.0040D039
[color=#008000];>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[/color]
[color=#008000];这个Call若是前面没有经过处理,将是以下的样子。这个Call是我没有处理[/color]
[color=#008000];上面的代码所得到的结果,可以看出和上面的Call地址完全不一样,我们若是[/color]
[color=#008000];再走一步程序就OVER了。[/color]
[color=#008000];00405B9C E8 7AA55CB5 CALL B59D011B[/color]
[color=#008000];>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> [/color]
[color=#008000];>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[/color]
[color=#008000];经过上面的Call之后来到这里。[/color]
[color=#008000];>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[/color]
0040D039 5F [color=#0000D0]POP[/color] [color=#FF0000]EDI[/color]
0040D03A F3:AA [color=#0000D0]REP[/color] [color=#0000D0]STOS[/color] [color=#FF00FF]BYTE[/color] PTR [color=#FF0000]ES[/color]:[[color=#FF0000]EDI[/color]]
0040D03C 61 [color=#0000D0]POPAD[/color]
0040D03D 66:9D POPFW
0040D03F 83C4 08 [color=#0000D0]ADD[/color] [color=#FF0000]ESP[/color],8
0040D042 >- E9 8540FFFF [color=#0000D0]JMP[/color] NOTEPAD.004010CC[color=#008000] ;跳到记事本入口,[/color]
0040D047 - E9 22204566 [color=#0000D0]JMP[/color] SHELL32.DragFinish
[color=#008000];>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[/color]
[color=#008000];记事本入口,以后的事不用我说了吧,DOWN和修复。[/color]
[color=#008000];>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[/color]
004010CC /. 55 [color=#0000D0]PUSH[/color] [color=#FF0000]EBP[/color]
004010CD |. 8BEC [color=#0000D0]MOV[/color] [color=#FF0000]EBP[/color],[color=#FF0000]ESP[/color]
004010CF |. 83EC 44 [color=#0000D0]SUB[/color] [color=#FF0000]ESP[/color],44
004010D2 |. 56 [color=#0000D0]PUSH[/color] [color=#FF0000]ESI[/color]
004010D3 |. FF15 E4634000 [color=#0000D0]CALL[/color] [color=#FF00FF]DWORD[/color] PTR [color=#FF0000]DS[/color]:[4063E4] [color=#008000]; [GetCommandLineA[/color]
004010D9 |. 8BF0 [color=#0000D0]MOV[/color] [color=#FF0000]ESI[/color],[color=#FF0000]EAX[/color]
004010DB |. 8A00 [color=#0000D0]MOV[/color] [color=#FF0000]AL[/color],[color=#FF00FF]BYTE[/color] PTR [color=#FF0000]DS[/color]:[[color=#FF0000]EAX[/color]]
004010DD |. 3C 22 [color=#0000D0]CMP[/color] [color=#FF0000]AL[/color],22
004010DF |. 75 1B [color=#0000D0]JNZ[/color] SHORT NOTEPAD.004010FC
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
【总 结】
这个壳怪就怪在0040590C处的ADD ESI,DWORD PTR FS:[22]这一句上,这一句语句当我们没有加载OD时和加载OD时得出的值完全不同(在98系统),我曾用汇编测试过这一句,结果也一样,用OD加载和不用OD加得出的结果完全不同,也就是这一句语句令到程序解码错误,从而没办法在98下脱壳(在2K和XP下则没有这情况)。搞不明白FS:[22h]的内存地址和OD和有什么关系,望知道的说一下,不胜感激。
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
【声 明】本文欢迎转载,但请保持文章完整性。谢谢!
----
战神 2004-11-22
[招生]科锐逆向工程师培训46期预科班将于 2023年02月09日 正式开班