>add edi,4
sub ecx,4
jmpn:
inc edi
dec ecx
jnz @loop1
@end:
popad
ret 8
fillcode endp
@calld52 proc
pushad
call @f ;call 531100 get ebp value
mov eax,dword ptr ss:[esp+24h]
sub eax,dword ptr ss:[ebp+40f846h]
mov ecx,3e9h
lea edi,dword ptr ss:[ebp+40d563h]
repne scas dword ptr es:[edi]
or ecx,ecx
jnz @f
nop
nop
nop
nop
@@:
sub ecx,3e9h
not ecx
movzx ebx,byte ptr ss:[ebp+ecx+40e503h]
lea eax,dword ptr ss:[ebp+ebx*4+40e8ebh]
mov eax,[eax]
mov edx,dword ptr ss:[esp+24h]
sub edx,5
cmp eax,5000000h
ja @f
mov ebx,[eax+8]
mov eax,[eax+1]
xor eax,ebx
@@:
invoke fillcode,eax,edx
popad
ret 4
@calld52 endp
start:
pushad
mov edi,401000h
mov ecx,0baf00h
@loop1:
cmp byte ptr [edi],0e8h
jnz @f
mov ebx,[edi+1]
lea ebx,[ebx+edi+5]
cmp ebx,52d30bh ;判断是否为call去解码处
jnz @not52d
lea ebx,[edi+5]
push ebx
call @calld52
jmp @add4
@not52d:
cmp ebx,521000h
jb @f
cmp ebx,538fd2h
ja @f
cmp word ptr [ebx+1],25ffh
jnz @f
mov ebx,[ebx+3]
mov ebx,[ebx]
invoke fillcode,ebx,edi
@add4:
add edi,4
sub ecx,4
@@:
inc edi
dec ecx
jnz @loop1
popad
end start
漫漫长路,终到尽头。分析了这么多,现在看来又好像什么都没有哦:-),花了很多时间,今天终于把acprotect给吃下来了。如果有兴趣可以试试做
脱壳机的,我自己看了分析后认为做这个的脱壳机应该是可行的(如果不行,不能怪我哦:-p)。有所收获有所失去。牺牲了睡眠换来了近视:-9。收工zzzzzz。
---------------------------各模块代码------------------------------------
sub_embeddprotect:
0058ae31 > 837c24 04 ff cmp dword ptr ss:[esp+4],-1 ; 处理sdk的关键代码
0058ae36 74 13 je short 0058ae4b
0058ae38 90 nop
0058ae39 90 nop
0058ae3a 90 nop
0058ae3b 90 nop
0058ae3c 55 push ebp
0058ae3d e8 be120000 call <sub_getebp >
0058ae42 8bc5 mov eax,ebp
0058ae44 5d pop ebp
0058ae45 ffa0 c4fd4000 jmp dword ptr ds:[eax+40fdc4]
0058ae4b 90 nop
......
0058aff7 55 push ebp
0058aff8 e8 03110000 call <sub_getebp >
; 这里是关键代码,用于加密解密代码的
0058affd 8bc5 mov eax,