starting:
exec
pushad
mov eax,fs:[30]
inc eax
inc eax
mov ebx,eax
mov eax,[eax]
xor al,al
mov [ebx],eax
xor eax,eax
mov ebx,fs:[30]
add ebx,18
mov ebx,[ebx]
add ebx,10
mov [ebx],eax
mov ebx,fs:[30]
add ebx,68
mov [ebx],eax
popad
ende
gpa "OutputDebugStringA","kernel32.dll"
mov [$RESULT],#8BFF5533C05DC20400#
gpa "CheckRemoteDebuggerPresent","kernel32.dll"
mov [$RESULT],#8BFF5533C05DC20800#
gpa "FindWindowA","user32.dll"
mov [$RESULT],#8BFF5533C05DC20800#
gpa "VirtualProtect", "kernel32.dll"
cmp $RESULT,0
je err
var VirtualProtect
mov VirtualProtect,$RESULT
var tmp
bp VirtualProtect
lpvp:
esto
mov tmp,[esp+8]
cmp tmp,1000
jne lpvp
bc VirtualProtect
rtu
mov tmp,eip
and tmp,FFFF0000
find tmp, #C7402000100000#
cmp $RESULT,0
je err
mov [$RESULT],#90909090909090#
find tmp,#75F4FE4DFF75EF#
cmp $RESULT,0
je err
mov [$RESULT],#EB#
find tmp,#C745F801000000C3837DF800#
cmp $RESULT,0
je err
mov [$RESULT],#EB23#
find tmp,#58833D????????000F84#
cmp $RESULT,0
je err
var nagaddr
mov nagaddr,$RESULT
add nagaddr,8
mov [nagaddr],#90E9#
log nagaddr
find tmp,#5356570F843C01#
cmp $RESULT,0
je nomagic
add $RESULT,3
mov [$RESULT],#90E9#
nomagic:
var djmp
mov djmp,0
find tmp,#83C0058B4DF8#
cmp $RESULT,0
je nodjmp
msgyn "是否修复direct jmp? 如果选是则要配合uif来修复,如果选否则自己负责..."
cmp $RESULT,0
je nodjmp
mov djmp,$RESULT
log djmp
add $RESULT,5
mov [$RESULT],#D8#
nodjmp:
find tmp,#83780C000F84#
cmp $RESULT,0
je err
bp $RESULT
esto
bc $RESULT
var iidstart
var iidsize
mov iidstart,eax
cmp djmp,0
jne concon
msg "此时dump下来,等会到oep后根据日志用loadpe修复即可"
concon:
mov tmp,eip
add tmp,6
mov tmp,[tmp]
add tmp,eip
add tmp,A
bp tmp
esto
bc tmp
mov iidsize,eax
sub iidsize,iidstart
var nearoep
find eip,#005F5E5B8BE55DEB01#
cmp $RESULT,0
je err
mov nearoep,$RESULT
inc nearoep
bp nearoep
going:
esto
cmp eip,nearoep
jne going
bc nearoep
find eip,#FFE0#
cmp $RESULT,0
je err
bp $RESULT
esto
bc $RESULT
sti
var espvar
mov espvar,esp
sub espvar,4
bphws espvar,"r"
esto
esto
bphwc espvar
loopsti:
mov tmp,[eip]
and tmp,FF
cmp tmp,58
je mysti
cmp tmp,5A
je mysti
cmp tmp,59
je mysti
cmp tmp,51
je mysti
cmp tmp,68
je mysti
cmp tmp,EB
je mysti
cmp tmp,FF
je mysti
cmp tmp,C3
je mysti
jmp atoep
mysti:
esti
jmp loopsti
atoep:
cmt eip,"OEP"
var oep
mov oep,eip
log oep
log iidstart
log iidsize
msg "根据日志内容自己用loadpe修复dump文件的oep及引入表地址和大小"
ret
err:
msg "error"
ret