ds:[57c839] 0059182e 56 push esi 找stolen code比较简单,后面的代码我并没有注释下来。 ...... 00591953 83c4 04 add esp,4 00591956 58 pop eax 00591957 76 01 jbe short 0059195a 00591959 48 dec eax 0059195a 03da add ebx,edx 0059195c 50 push eax 0059195d e8 01000000 call 00591963 00591962 ^ 7c 83 jl short 005918e7 00591964 c40458 les eax,fword ptr ds:[eax+ebx*2] ; modification of segment register 00591967 e8 cdd3ffff call <sub_kernel> ; 这个call里面的东西应该是壳的核心了:-) 0059196c e9 06000000 jmp 00591977 很多解码之类的,跟踪时要小心点。 ...... 0059198d /76 7b jbe short 00591a0a 0059198f |0366 8b add esp,dword ptr ds:[esi-75] 00591992 |c6 ??? ; unknown command 00591993 |8919 mov dword ptr ds:[ecx],ebx 00591995 |eb 01 jmp short 00591998 00591997 |90 nop 00591998 |e8 08e9ffff call <sub_disposal iat> ; 其实这里call的时候,前面的call kernel里已经处理过了,这里进去只是一个ret而已 0059199d |e9 05000000 jmp 005919a7 005919a2 |b8 0db7d4e5 mov eax,e5d4b70d 005919a7 |81ea ae3a7d06 sub edx,67d3aae ...... 005919d0 /0f81 02000000 jno 005919d8 005919d6 |87fd xchg ebp,edi 005919d8 \83c6 ff add esi,-1 005919db ^ 0f85 69ffffff jnz 0059194a ; 循环解出后面的代码 005919e1 eb 01 jmp short 005919e4 005919e3 ^ 76 e8 jbe short 005919cd 005919e5 03c0 add eax,eax 005919e7 ffff ??? ; unknown command 005919e9 0f8c 02000000 jl 005919f1 005919ef 87e8 xchg eax,ebp 005919f1 b8 64000000 mov eax,64 005919f6 33d2 xor edx,edx 005919f8 33db xor ebx,ebx 005919fa f7f3 div ebx ; 异常 005919fc 90 nop 005919fd 64:8f05 0000000>pop dword ptr fs:[0] 00591a04 83c4 04 add esp,4 00591a07 61 popad ;边执行程序的代码边解壳代码 00591a08 893c24 mov dword ptr ss:[esp],edi 00591a0b c705 21ca5700 c>mov dword ptr ds:[57ca21],0057c9c5 00591a15 8b3d 21ca5700 mov edi,dword ptr ds:[57ca21] ; maincon.0057c9c5 00591a1b 891f mov dword ptr ds:[edi],ebx 00591a1d 8b3c24 mov edi,dword ptr ss:[esp] 00591a20 8f05 79c85700 pop dword ptr ds:[57c879] 00591a26 ff35 c5c95700 push dword ptr ds:[57c9c5] 00591a2c 891424 mov dword ptr ss:[esp],edx 00591a2f c70424 ffffffff mov dword ptr ss:[esp],-1 ; push -1 ********* 00591a36 53 push ebx 00591a37 8f05 2dcb5700 pop d