JDPack Version 1.01 外壳完全分析笔记
【目标程序】 JDPack V1.01加壳的Win98记事本
【作 者】 cyclotron[BCG][DFCG][FCG][OCN]
用OllyDBG载入后如下:
0040D000 >[color=#0000FF]PUSHAD[/color]
0040D001 [color=#0000FF]CALL[/color] NOTEPAD.0040D006
0040D006 [color=#0000FF]POP[/color] [color=#808000]EBP[/color]
0040D007 [color=#0000FF]MOV[/color] [color=#808000]EDX[/color],[color=#808000]EBP[/color]
0040D009 [color=#0000FF]SUB[/color] [color=#808000]EBP[/color],NOTEPAD.00402BC6 [color=#008000]; 取得delta[/color]
0040D00F [color=#0000FF]SUB[/color] [color=#808000]EDX[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+403461]
0040D015 [color=#0000FF]SUB[/color] [color=#808000]EDX[/color],6
0040D01B [color=#0000FF]MOV[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+403465],[color=#808000]EDX[/color] [color=#008000]; 取得基地址[/color]
0040D021 [color=#0000FF]CMP[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+403469],0 [color=#008000]; 某重入标志[/color]
0040D028 [color=#0000FF]JNZ[/color] NOTEPAD.0040D3EA
0040D02E [color=#0000FF]MOV[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+403469],1 [color=#008000]; 置重入标志[/color]
0040D038 [color=#0000FF]MOV[/color] [color=#808000]ECX[/color],788 [color=#008000]; 解码长度[/color]
0040D03D [color=#0000FF]LEA[/color] [color=#808000]ESI[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+402C18] [color=#008000]; 加密代码的起始地址,我这里是0040D058[/color]
0040D043 [color=#0000FF]MOV[/color] [color=#808000]AL[/color],[color=#FF0000]BYTE[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+403460]
0040D049 [color=#0000FF]MOV[/color] [color=#808000]BL[/color],[color=#FF0000]BYTE[/color] [color=#FF0000]PTR[/color] [color=#808000]DS[/color]:[[color=#808000]ESI[/color]]
0040D04B [color=#0000FF]XOR[/color] [color=#808000]AL[/color],[color=#808000]BL[/color] [color=#008000]; 简单的异或解密运算[/color]
0040D04D [color=#0000FF]MOV[/color] [color=#FF0000]BYTE[/color] [color=#FF0000]PTR[/color] [color=#808000]DS[/color]:[[color=#808000]ESI[/color]],[color=#808000]AL[/color]
0040D04F [color=#0000FF]MOV[/color] [color=#FF0000]BYTE[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+403460],[color=#808000]BL[/color] [color=#008000]; 保存解密前的代码[/color]
0040D055 [color=#0000FF]INC[/color] [color=#808000]ESI[/color]
0040D056 LOOPD [color=#FF0000]SHORT[/color] NOTEPAD.0040D043 [color=#008000]; 随着循环的进行对下面的代码进行解密[/color]
0040D058 [color=#0000FF]PUSHFD[/color] [color=#008000]; 标志位入栈,这里不能单步通过[/color]
0040D059 [color=#0000FF]POP[/color] [color=#808000]EAX[/color]
0040D05A [color=#0000FF]TEST[/color] [color=#808000]AH[/color],1 [color=#008000]; 检测单步标志[/color]
0040D05D [color=#0000FF]JE[/color] [color=#FF0000]SHORT[/color] NOTEPAD.0040D066
0040D05F [color=#0000FF]XOR[/color] [color=#FF0000]BYTE[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+402FD7],0FF [color=#008000]; 发现跟踪企图后将下面的一句关键代码破坏[/color]
0040D066 [color=#0000FF]MOV[/color] [color=#808000]ESI[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+403201] [color=#008000]; 原文件的区块数目[/color]
0040D06C [color=#0000FF]MOV[/color] [color=#808000]EAX[/color],[color=#808000]EBP[/color] [color=#008000]; delta[/color]
0040D06E [color=#0000FF]PUSH[/color] [color=#808000]ESI[/color]
0040D06F [color=#0000FF]PUSH[/color] [color=#808000]EAX[/color] [color=#008000]; 保存偏移量[/color]
0040D070 [color=#0000FF]MOV[/color] [color=#808000]ECX[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]DS[/color]:[[color=#808000]EAX[/color]+403209] [color=#008000]; 申请空间的大小[/color]
0040D076 [color=#0000FF]PUSH[/color] 4
0040D078 [color=#0000FF]PUSH[/color] 1000
0040D07D [color=#0000FF]PUSH[/color] [color=#808000]ECX[/color]
0040D07E [color=#0000FF]PUSH[/color] 0 [color=#008000]; 操作系统指定分配空间的地址[/color]
0040D080 [color=#0000FF]CALL[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4033EC] [color=#008000]; kernel32.VirtualAlloc[/color]
0040D086 [color=#0000FF]MOV[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4031E1],[color=#808000]EAX[/color] [color=#008000]; 保存空间的首地址[/color]
0040D08C [color=#0000FF]POP[/color] [color=#808000]EAX[/color]
0040D08D [color=#0000FF]POP[/color] [color=#808000]ESI[/color]
0040D08E [color=#0000FF]PUSH[/color] [color=#808000]ESI[/color]
0040D08F [color=#0000FF]PUSH[/color] [color=#808000]EAX[/color]
0040D090 [color=#0000FF]MOV[/color] [color=#808000]ESI[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]DS[/color]:[[color=#808000]EAX[/color]+403205] [color=#008000]; 代码块偏移量[/color]
0040D096 [color=#0000FF]MOV[/color] [color=#808000]EDX[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+403465] [color=#008000]; 映象基地址[/color]
0040D09C [color=#0000FF]MOV[/color] [color=#808000]ECX[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]DS[/color]:[[color=#808000]EAX[/color]+403209] [color=#008000]; 解密块的大小[/color]
0040D0A2 [color=#0000FF]ADD[/color] [color=#808000]ESI[/color],[color=#808000]EDX[/color]
0040D0A4 [color=#0000FF]PUSHAD[/color]
0040D0A5 [color=#0000FF]MOV[/color] [color=#808000]EDI[/color],[color=#808000]ESI[/color]
0040D0A7 [color=#0000FF]XOR[/color] [color=#808000]EAX[/color],[color=#808000]EAX[/color]
0040D0A9 [color=#0000FF]LODS[/color] [color=#FF0000]BYTE[/color] [color=#FF0000]PTR[/color] [color=#808000]DS[/color]:[[color=#808000]ESI[/color]] [color=#008000]; 载入代码块数据至al[/color]
0040D0AA [color=#0000FF]XOR[/color] [color=#808000]AL[/color],[color=#FF0000]BYTE[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+402FD7] [color=#008000]; 加密代码块的数据[/color]
0040D0B0 [color=#0000FF]STOS[/color] [color=#FF0000]BYTE[/color] [color=#FF0000]PTR[/color] [color=#808000]ES[/color]:[[color=#808000]EDI[/color]] [color=#008000]; 存回代码块[/color]
0040D0B1 LOOPD [color=#FF0000]SHORT[/color] NOTEPAD.0040D0A9
0040D0B3 [color=#0000FF]POPAD[/color]
0040D0B4 [color=#0000FF]MOV[/color] [color=#808000]EDI[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4031E1] [color=#008000]; 这是前面用VirtualAlloc分配的内存空间[/color]
0040D0BA [color=#0000FF]REP[/color] [color=#0000FF]MOVS[/color] [color=#FF0000]BYTE[/color] [color=#FF0000]PTR[/color] [color=#808000]ES[/color]:[[color=#808000]EDI[/color]],[color=#FF0000]BYTE[/color] [color=#FF0000]PTR[/color] [color=#808000]DS[/color]:[[color=#808000]ESI[/color]] [color=#008000]; 保存加密后的数据[/color]
0040D0BC [color=#0000FF]MOV[/color] [color=#808000]ESI[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4031E1] [color=#008000]; 加密数据的保存位置[/color]
0040D0C2 [color=#0000FF]MOV[/color] [color=#808000]EDI[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]DS[/color]:[[color=#808000]EAX[/color]+403205] [color=#008000]; 代码块偏移量[/color]
0040D0C8 [color=#0000FF]ADD[/color] [color=#808000]EDI[/color],[color=#808000]EDX[/color]
0040D0CA [color=#0000FF]PUSH[/color] [color=#808000]EDI[/color]
0040D0CB [color=#0000FF]PUSH[/color] [color=#808000]ESI[/color]
0040D0CC [color=#0000FF]CALL[/color] NOTEPAD.0040D4BD [color=#008000]; 将代码块的数据还原[/color]
0040D0D1 [color=#0000FF]POP[/color] [color=#808000]ESI[/color]
0040D0D2 [color=#0000FF]POP[/color] [color=#808000]EDI[/color]
0040D0D3 [color=#0000FF]POP[/color] [color=#808000]EAX[/color]
0040D0D4 [color=#0000FF]POP[/color] [color=#808000]ESI[/color]
0040D0D5 [color=#0000FF]PUSH[/color] [color=#808000]ESI[/color]
0040D0D6 [color=#0000FF]PUSH[/color] [color=#808000]EAX[/color]
0040D0D7 [color=#0000FF]MOV[/color] [color=#808000]ECX[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]DS[/color]:[[color=#808000]EAX[/color]+403209] [color=#008000]; 申请空间的大小[/color]
0040D0DD [color=#0000FF]MOV[/color] [color=#808000]ESI[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4031E1] [color=#008000]; 动态申请的内存空间[/color]
0040D0E3 [color=#0000FF]PUSH[/color] 4000
0040D0E8 [color=#0000FF]PUSH[/color] [color=#808000]ECX[/color]
0040D0E9 [color=#0000FF]PUSH[/color] [color=#808000]ESI[/color]
0040D0EA [color=#0000FF]CALL[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4033F0] [color=#008000]; kernel32.VirtualFree释放空间[/color]
0040D0F0 [color=#0000FF]POP[/color] [color=#808000]EAX[/color]
0040D0F1 [color=#0000FF]POP[/color] [color=#808000]ESI[/color]
0040D0F2 [color=#0000FF]ADD[/color] [color=#808000]EAX[/color],8 [color=#008000]; delta+8[/color]
0040D0F5 [color=#0000FF]DEC[/color] [color=#808000]ESI[/color] [color=#008000]; 区块数递减SI[/color]
0040D0F6 [color=#0000FF]JNZ[/color] NOTEPAD.0040D06E [color=#008000]; 上述循环依次对每个section进行解码[/color]
0040D0FC [color=#0000FF]CMP[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4031E9],0 [color=#008000]; 是否有重定位数据?[/color]
0040D103 [color=#0000FF]JE[/color] NOTEPAD.0040D193
0040D109 [color=#0000FF]MOV[/color] [color=#808000]EDX[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+403465] [color=#008000]; 当前映象基地址[/color]
0040D10F [color=#0000FF]MOV[/color] [color=#808000]EAX[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4031E5] [color=#008000]; 理想映象基地址[/color]
0040D115 [color=#0000FF]SUB[/color] [color=#808000]EDX[/color],[color=#808000]EAX[/color]
0040D117 [color=#0000FF]JE[/color] [color=#FF0000]SHORT[/color] NOTEPAD.0040D193 [color=#008000]; 是否需要重定位?[/color]
..........
..........
..........
0040D191 [color=#0000FF]JMP[/color] [color=#FF0000]SHORT[/color] NOTEPAD.0040D12C
0040D193 [color=#0000FF]LEA[/color] [color=#808000]EBX[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+403389] [color=#008000]; "user32.dll"[/color]
0040D199 [color=#0000FF]PUSH[/color] [color=#808000]EBX[/color]
0040D19A [color=#0000FF]CALL[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4033E8] [color=#008000]; 调用kernel32.LoadLibraryA 加载动态链接库[/color]
0040D1A0 [color=#0000FF]PUSH[/color] [color=#808000]EAX[/color] [color=#008000]; 保存库的句柄[/color]
0040D1A1 [color=#0000FF]LEA[/color] [color=#808000]EBX[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+403331] [color=#008000]; "MessageBoxA"[/color]
0040D1A7 [color=#0000FF]PUSH[/color] [color=#808000]EBX[/color]
0040D1A8 [color=#0000FF]PUSH[/color] [color=#808000]EAX[/color]
0040D1A9 [color=#0000FF]CALL[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4033E0] [color=#008000]; 调用kernel32.GetProcAddress 取得函数地址[/color]
0040D1AF [color=#0000FF]MOV[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4031D5],[color=#808000]EAX[/color] [color=#008000]; 保存到全局变量[/color]
0040D1B5 [color=#0000FF]POP[/color] [color=#808000]EAX[/color]
0040D1B6 [color=#0000FF]LEA[/color] [color=#808000]EBX[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+40333D] [color=#008000]; "wsprintfA"[/color]
0040D1BC [color=#0000FF]PUSH[/color] [color=#808000]EBX[/color]
0040D1BD [color=#0000FF]PUSH[/color] [color=#808000]EAX[/color]
0040D1BE [color=#0000FF]CALL[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4033E0] [color=#008000]; kernel32.GetProcAddress[/color]
0040D1C4 [color=#0000FF]MOV[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4031D9],[color=#808000]EAX[/color]
0040D1CA [color=#0000FF]LEA[/color] [color=#808000]EBX[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4033F8] [color=#008000]; "kernel32.dll"[/color]
0040D1D0 [color=#0000FF]PUSH[/color] [color=#808000]EBX[/color]
0040D1D1 [color=#0000FF]CALL[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4033E4] [color=#008000]; kernel32.GetModuleHandleA[/color]
0040D1D7 [color=#0000FF]PUSH[/color] [color=#808000]EAX[/color]
0040D1D8 [color=#0000FF]LEA[/color] [color=#808000]EBX[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+403347] [color=#008000]; "ExitProcess"[/color]
0040D1DE [color=#0000FF]PUSH[/color] [color=#808000]EBX[/color]
0040D1DF [color=#0000FF]PUSH[/color] [color=#808000]EAX[/color]
0040D1E0 [color=#0000FF]CALL[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4033E0] [color=#008000]; kernel32.GetProcAddress[/color]
0040D1E6 [color=#0000FF]MOV[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4031C5],[color=#808000]EAX[/color]
0040D1EC [color=#0000FF]POP[/color] [color=#808000]EAX[/color]
0040D1ED [color=#0000FF]PUSH[/color] [color=#808000]EAX[/color]
0040D1EE [color=#0000FF]LEA[/color] [color=#808000]EBX[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+403361] [color=#008000]; "CreateFileA"[/color]
0040D1F4 [color=#0000FF]PUSH[/color] [color=#808000]EBX[/color]
0040D1F5 [color=#0000FF]PUSH[/color] [color=#808000]EAX[/color]
0040D1F6 [color=#0000FF]CALL[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4033E0] [color=#008000]; kernel32.GetProcAddress[/color]
0040D1FC [color=#0000FF]MOV[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4031C1],[color=#808000]EAX[/color]
0040D202 [color=#0000FF]POP[/color] [color=#808000]EAX[/color]
0040D203 [color=#0000FF]PUSH[/color] [color=#808000]EAX[/color]
0040D204 [color=#0000FF]LEA[/color] [color=#808000]EBX[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+403353] [color=#008000]; "GetVersionExA"[/color]
0040D20A [color=#0000FF]PUSH[/color] [color=#808000]EBX[/color]
0040D20B [color=#0000FF]PUSH[/color] [color=#808000]EAX[/color]
0040D20C [color=#0000FF]CALL[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4033E0] [color=#008000]; kernel32.GetProcAddress[/color]
0040D212 [color=#0000FF]MOV[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4031C9],[color=#808000]EAX[/color]
0040D218 [color=#0000FF]POP[/color] [color=#808000]EAX[/color]
0040D219 [color=#0000FF]PUSH[/color] [color=#808000]EAX[/color]
0040D21A [color=#0000FF]LEA[/color] [color=#808000]EBX[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+40336D] [color=#008000]; "VirtualProtect"[/color]
0040D220 [color=#0000FF]PUSH[/color] [color=#808000]EBX[/color]
0040D221 [color=#0000FF]PUSH[/color] [color=#808000]EAX[/color]
0040D222 [color=#0000FF]CALL[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4033E0] [color=#008000]; kernel32.GetProcAddress[/color]
0040D228 [color=#0000FF]MOV[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4031CD],[color=#808000]EAX[/color]
0040D22E [color=#0000FF]POP[/color] [color=#808000]EAX[/color]
0040D22F [color=#0000FF]LEA[/color] [color=#808000]EBX[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+40337C] [color=#008000]; "GetTickCount"[/color]
0040D235 [color=#0000FF]PUSH[/color] [color=#808000]EBX[/color]
0040D236 [color=#0000FF]PUSH[/color] [color=#808000]EAX[/color]
0040D237 [color=#0000FF]CALL[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4033E0] [color=#008000]; kernel32.GetProcAddress[/color]
0040D23D [color=#0000FF]MOV[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4031D1],[color=#808000]EAX[/color]
0040D243 [color=#0000FF]LEA[/color] [color=#808000]EBX[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+40346D] [color=#008000]; OSVERSIONINFO结构体的指针[/color]
0040D249 [color=#0000FF]MOV[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]DS[/color]:[[color=#808000]EBX[/color]],94 [color=#008000]; OSVERSIONINFO结构体的大小[/color]
0040D24F [color=#0000FF]PUSH[/color] [color=#808000]EBX[/color]
0040D250 [color=#0000FF]CALL[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4031C9] [color=#008000]; kernel32.GetVersionExA[/color]
0040D256 [color=#0000FF]LEA[/color] [color=#808000]EBX[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+40346D]
0040D25C [color=#0000FF]CMP[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]DS[/color]:[[color=#808000]EBX[/color]+10],1 [color=#008000]; Win98?[/color]
0040D260 [color=#0000FF]JE[/color] [color=#FF0000]SHORT[/color] NOTEPAD.0040D276
0040D262 [color=#0000FF]CMP[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]DS[/color]:[[color=#808000]EBX[/color]+10],2 [color=#008000]; WinNT?[/color]
0040D266 [color=#0000FF]JE[/color] [color=#FF0000]SHORT[/color] NOTEPAD.0040D26A
0040D268 [color=#0000FF]JMP[/color] [color=#FF0000]SHORT[/color] NOTEPAD.0040D284
0040D26A [color=#0000FF]CALL[/color] NOTEPAD.0040D44E [color=#008000]; 简单地调用CreateFile检测SoftICE[/color]
{
0040D44E [color=#0000FF]PUSH[/color] 0
0040D450 [color=#0000FF]PUSH[/color] 80
0040D455 [color=#0000FF]PUSH[/color] 3
0040D457 [color=#0000FF]PUSH[/color] 0
0040D459 [color=#0000FF]PUSH[/color] 0
0040D45B [color=#0000FF]PUSH[/color] 80000000
0040D460 [color=#0000FF]LEA[/color] [color=#808000]EBX[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+403394]
0040D466 [color=#0000FF]PUSH[/color] [color=#808000]EBX[/color] [color=#008000]; "\\.\ntice"[/color]
0040D467 [color=#0000FF]CALL[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4031C1] [color=#008000]; 调用CreateFileA检测SoftICE[/color]
0040D46D [color=#0000FF]CMP[/color] [color=#808000]EAX[/color],-1
0040D470 [color=#0000FF]JE[/color] [color=#FF0000]SHORT[/color] NOTEPAD.0040D478
0040D472 [color=#0000FF]CALL[/color] NOTEPAD.0040D47B
0040D477 [color=#0000FF]RETN[/color]
0040D478 [color=#0000FF]XOR[/color] [color=#808000]EAX[/color],[color=#808000]EAX[/color] [color=#008000]; 未发现调试器[/color]
0040D47A [color=#0000FF]RETN[/color]
}
0040D26F [color=#0000FF]CMP[/color] [color=#808000]EAX[/color],-1
0040D272 [color=#0000FF]JNZ[/color] [color=#FF0000]SHORT[/color] NOTEPAD.0040D284
0040D274 [color=#0000FF]JMP[/color] [color=#FF0000]SHORT[/color] NOTEPAD.0040D280
0040D276 [color=#0000FF]CALL[/color] NOTEPAD.0040D418
0040D27B [color=#0000FF]CMP[/color] [color=#808000]EAX[/color],-1
0040D27E [color=#0000FF]JNZ[/color] [color=#FF0000]SHORT[/color] NOTEPAD.0040D284
0040D280 [color=#0000FF]POPAD[/color]
0040D281 [color=#0000FF]XOR[/color] [color=#808000]EAX[/color],[color=#808000]EAX[/color]
0040D283 [color=#0000FF]RETN[/color]
0040D284 [color=#0000FF]MOV[/color] [color=#808000]EDX[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+403465] [color=#008000]; 映象基地址[/color]
0040D28A [color=#0000FF]MOV[/color] [color=#808000]ESI[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4031F1] [color=#008000]; 输入表的偏移量,开始处理输入表[/color]
0040D290 [color=#0000FF]ADD[/color] [color=#808000]ESI[/color],[color=#808000]EDX[/color]
0040D292 [color=#0000FF]MOV[/color] [color=#808000]EAX[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]DS[/color]:[[color=#808000]ESI[/color]+C] [color=#008000]; DllName指针[/color]
0040D295 [color=#0000FF]OR[/color] [color=#808000]EAX[/color],[color=#808000]EAX[/color]
0040D297 [color=#0000FF]JE[/color] NOTEPAD.0040D3EA
0040D29D [color=#0000FF]ADD[/color] [color=#808000]EAX[/color],[color=#808000]EDX[/color]
0040D29F [color=#0000FF]MOV[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4031BD],[color=#808000]EAX[/color] [color=#008000]; 保存DllName地指针[/color]
0040D2A5 [color=#0000FF]MOV[/color] [color=#808000]EBX[/color],[color=#808000]EAX[/color]
0040D2A7 [color=#0000FF]PUSH[/color] [color=#808000]EAX[/color]
0040D2A8 [color=#0000FF]CALL[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4033E4] [color=#008000]; kernel32.GetModuleHandleA[/color]
0040D2AE [color=#0000FF]OR[/color] [color=#808000]EAX[/color],[color=#808000]EAX[/color] [color=#008000]; 是否已经加载?[/color]
0040D2B0 [color=#0000FF]JNZ[/color] [color=#FF0000]SHORT[/color] NOTEPAD.0040D307
0040D2B2 [color=#0000FF]PUSH[/color] [color=#808000]EBX[/color]
0040D2B3 [color=#0000FF]CALL[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4033E8] [color=#008000]; 没有加载就调用kernel32.LoadLibraryA加载[/color]
0040D2B9 [color=#0000FF]OR[/color] [color=#808000]EAX[/color],[color=#808000]EAX[/color] [color=#008000]; 加载成功?[/color]
0040D2BB [color=#0000FF]JNZ[/color] [color=#FF0000]SHORT[/color] NOTEPAD.0040D307
..........
..........
..........
0040D307 [color=#0000FF]MOV[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4031F9],[color=#808000]EAX[/color] [color=#008000]; 保存Dll的句柄[/color]
0040D30D [color=#0000FF]MOV[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4031FD],0 [color=#008000]; IAT地址表的偏移指针[/color]
0040D317 [color=#0000FF]MOV[/color] [color=#808000]EDX[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+403465] [color=#008000]; 映象基地址[/color]
0040D31D [color=#0000FF]MOV[/color] [color=#808000]EAX[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]DS[/color]:[[color=#808000]ESI[/color]] [color=#008000]; OriginalFirstThunk[/color]
0040D31F [color=#0000FF]OR[/color] [color=#808000]EAX[/color],[color=#808000]EAX[/color]
0040D321 [color=#0000FF]JNZ[/color] [color=#FF0000]SHORT[/color] NOTEPAD.0040D326
0040D323 [color=#0000FF]MOV[/color] [color=#808000]EAX[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]DS[/color]:[[color=#808000]ESI[/color]+10] [color=#008000]; FirstThunk[/color]
0040D326 [color=#0000FF]ADD[/color] [color=#808000]EAX[/color],[color=#808000]EDX[/color] [color=#008000]; 加上映象基地址[/color]
0040D328 [color=#0000FF]ADD[/color] [color=#808000]EAX[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4031FD]
0040D32E [color=#0000FF]MOV[/color] [color=#808000]EBX[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]DS[/color]:[[color=#808000]EAX[/color]] [color=#008000]; 引入函数名指针的偏移量形式[/color]
0040D330 [color=#0000FF]MOV[/color] [color=#808000]EDI[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]DS[/color]:[[color=#808000]ESI[/color]+10] [color=#008000]; FirstThunk[/color]
0040D333 [color=#0000FF]ADD[/color] [color=#808000]EDI[/color],[color=#808000]EDX[/color] [color=#008000]; 加上映象基地址[/color]
0040D335 [color=#0000FF]ADD[/color] [color=#808000]EDI[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4031FD]
0040D33B [color=#0000FF]TEST[/color] [color=#808000]EBX[/color],[color=#808000]EBX[/color]
0040D33D [color=#0000FF]JE[/color] NOTEPAD.0040D3DC [color=#008000]; 从这里跳出填充IAT的循环[/color]
0040D343 [color=#0000FF]TEST[/color] [color=#808000]EBX[/color],80000000 [color=#008000]; 以序数引入?[/color]
0040D349 [color=#0000FF]JNZ[/color] [color=#FF0000]SHORT[/color] NOTEPAD.0040D352
0040D34B [color=#0000FF]ADD[/color] [color=#808000]EBX[/color],[color=#808000]EDX[/color] [color=#008000]; 加上映象基地址[/color]
0040D34D [color=#0000FF]ADD[/color] [color=#808000]EBX[/color],2 [color=#008000]; 跳过序号(hint)域[/color]
0040D350 [color=#0000FF]JMP[/color] [color=#FF0000]SHORT[/color] NOTEPAD.0040D367
0040D352 [color=#0000FF]AND[/color] [color=#808000]EBX[/color],7FFFFFFF
0040D358 [color=#0000FF]PUSH[/color] [color=#808000]EBX[/color]
0040D359 [color=#0000FF]PUSH[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4031F9]
0040D35F [color=#0000FF]CALL[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4033E0]
0040D365 [color=#0000FF]JMP[/color] [color=#FF0000]SHORT[/color] NOTEPAD.0040D37F
0040D367 [color=#0000FF]PUSH[/color] [color=#808000]EBX[/color] [color=#008000]; 引入函数名的指针[/color]
0040D368 [color=#0000FF]PUSH[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4031F9] [color=#008000]; Dll句柄[/color]
0040D36E [color=#0000FF]CALL[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4033E0] [color=#008000]; kernel32.GetProcAddress[/color]
0040D374 [color=#0000FF]JMP[/color] [color=#FF0000]SHORT[/color] NOTEPAD.0040D37A
0040D376 [color=#0000FF]MOV[/color] [color=#FF0000]BYTE[/color] [color=#FF0000]PTR[/color] [color=#808000]DS[/color]:[[color=#808000]EBX[/color]],0 [color=#008000]; 清空函数名字符串[/color]
0040D379 [color=#0000FF]INC[/color] [color=#808000]EBX[/color]
0040D37A [color=#0000FF]CMP[/color] [color=#FF0000]BYTE[/color] [color=#FF0000]PTR[/color] [color=#808000]DS[/color]:[[color=#808000]EBX[/color]],0 [color=#008000]; 函数名是否结束?[/color]
0040D37D [color=#0000FF]JNZ[/color] [color=#FF0000]SHORT[/color] NOTEPAD.0040D376
0040D37F [color=#0000FF]OR[/color] [color=#808000]EAX[/color],[color=#808000]EAX[/color] [color=#008000]; 引入函数地址[/color]
0040D381 [color=#0000FF]JNZ[/color] [color=#FF0000]SHORT[/color] NOTEPAD.0040D3CE
..........
..........
..........
0040D3CE [color=#0000FF]MOV[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]DS[/color]:[[color=#808000]EDI[/color]],[color=#808000]EAX[/color] [color=#008000]; 将函数地址装入FirstThunk指向的IAT[/color]
0040D3D0 [color=#0000FF]ADD[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4031FD],4 [color=#008000]; IAT地址表的指针递增[/color]
0040D3D7 [color=#0000FF]JMP[/color] NOTEPAD.0040D317
0040D3DC [color=#0000FF]ADD[/color] [color=#808000]ESI[/color],14 [color=#008000]; 下一组IID[/color]
0040D3DF [color=#0000FF]MOV[/color] [color=#808000]EDX[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+403465] [color=#008000]; 映象基地址[/color]
0040D3E5 [color=#0000FF]JMP[/color] NOTEPAD.0040D292
0040D3EA [color=#0000FF]PUSH[/color] 30
0040D3EC [color=#0000FF]LEA[/color] [color=#808000]EBX[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+40324D] [color=#008000]; 字符串"Unregistered JDPack"[/color]
0040D3F2 [color=#0000FF]PUSH[/color] [color=#808000]EBX[/color]
0040D3F3 [color=#0000FF]LEA[/color] [color=#808000]EBX[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+403261] [color=#008000]; 字符串"This file PACKED by Unregistered..."[/color]
0040D3F9 [color=#0000FF]PUSH[/color] [color=#808000]EBX[/color]
0040D3FA [color=#0000FF]PUSH[/color] 0
0040D3FC [color=#0000FF]CALL[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4031D5] [color=#008000]; user32.MessageBoxA[/color]
0040D402 [color=#0000FF]MOV[/color] [color=#808000]EDX[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+403465] [color=#008000]; 映象基地址[/color]
0040D408 [color=#0000FF]MOV[/color] [color=#808000]EAX[/color],[color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]EBP[/color]+4031ED] [color=#008000]; OEP偏移量[/color]
0040D40E [color=#0000FF]ADD[/color] [color=#808000]EAX[/color],[color=#808000]EDX[/color]
0040D410 [color=#0000FF]MOV[/color] [color=#FF0000]DWORD[/color] [color=#FF0000]PTR[/color] [color=#808000]SS[/color]:[[color=#808000]ESP[/color]+1C],[color=#808000]EAX[/color]
0040D414 [color=#0000FF]POPAD[/color]
0040D415 [color=#0000FF]PUSH[/color] [color=#808000]EAX[/color] [color=#008000]; OEP入栈[/color]
0040D416 [color=#0000FF]RETN[/color] [color=#008000]; 进入原始程序代码[/color]
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法