答复
这么修复很慢,
克隆一份代码patch CRC那里,然后可以直接修改patch IAT。
并且试试delphi程序,有个表被抽走了。
给你个参考代码,写得很乱:
; clone decoder to fuck crc
pusha
mov ebx, s_size[ebp]
push 4
push 3000h
push ebx
push 0
callX VirtualAlloc
mov s_clone[ebp], eax
xchg edi, eax
mov esi, s_start[ebp]
xchg ecx, ebx
rep movsb
popa
; find CRC patch
; 00374351 2B848D 143B0000 SUB EAX, [EBP+ECX*4+3B14]
; 2B 84 8D 14 3B 00 00
.while b [eax] != 2Bh || \
d [eax+1] != 3B148D84h || \
w [eax+5] != 0
inc eax
.endw
; save the addr to decide is last exception
mov iatproc[ebp], eax
; patch CRC
add eax, 3
mov ecx, s_clone[ebp]
sub ecx, s_start[ebp]
add ecx, [eax]
mov [eax], ecx
; patch IAT encrypt
; 00374661 8919 MOV [ECX], EBX
; 00374663 EB 03 JMP SHORT 00374668
; 8919EB03
.while d [eax] != 03EB1989h
inc eax
.endw
inc eax
mov b [eax], 01h ; mov [ecx], eax
; wait alloc mem to fuck Codereplace
mov eax, za[ebp]
call _bp
