脚本1已经改进.
附件中的脚本1是个手动版,现已经改进为自动版了,即运行后就出现6个准确断点,脚本如下:
//Themida 1.9.1.0的断点设置脚本(改进版)
data:
var memory
var csize
var tmp
var temp
var tmpbp
var mem
var mem0
var mem1
var mem2
var mem3
var mem4
var mem5
var Str0
var Str3
var Str4
var Str5
var Str1
var Str2
star:
gmi eip,CODEBASE
mov memory,$RESULT
gmi eip,CODESIZE
mov csize,$RESULT
add csize,memory
find memory,#0000000000000000000000000000000000000000000000#
mov tmp,$RESULT
bphws tmp,"w"
esto
esto
esto
bphwc tmp
sto
find memory,#0000000000000000000000000000000000000000000000#
mov tmp,$RESULT
sub csize,tmp
find memory,#909090909090909090909090909090909090#
mov temp,$RESULT+8
bphws temp,"w"
mov tmpbp,eip
run
cmp eip,tmpbp+2
jnz next
run
next:
bphwc
mov Str0,"断点地址:"
add Str0,#0D0A#
mov mem,eip
mov mem4,eip //eip=Addr_4
itoa eip
mov Str4,"Addr_4="
add Str4,$RESULT
add Str4,#0A0D#
find mem4,#83BD????????000F8497000000#
mov mem5,$RESULT //Addr_5
itoa mem5
mov Str5,"Addr_5="
add Str5,$RESULT
sub mem,4000
find mem,#83BD????????640F82??020000#
mov mem0,$RESULT+7 //Addr_0
itoa mem0
add Str0,"Addr_0="
add Str0,$RESULT
add Str0,#0D0A#
find mem0,#C1C003#
find $RESULT,#0385????7409#,40
mov mem3,$RESULT+6 //Addr_3
itoa mem3
mov Str3,"Addr_3="
add Str3,$RESULT
add Str3,#0D0A#
findon:
find mem0,#AD# //从Addr_0开始查找
cmp $RESULT,0
jz stop
mov mem0,$RESULT
find mem0,#01C8#,40
cmp $RESULT,0
jnz findoff
add mem0,40
cmp mem0,mem5
ja stop //超过Addr_5后停止
jmp findon
findoff:
bp $RESULT
add mem0,40
itoa $RESULT
jmp findon
stop:
run
@1:
sti
gn eax
cmp $RESULT,0
jz @1
itoa eip
mov Str1,"Addr_1="
add Str1,$RESULT
add Str1,#0D0A#
bpwm tmp,csize
run
@3:
sti
cmp [eax],ecx
jnz @3
itoa eip
mov Str2,"Addr_2="
add Str2,$RESULT
add Str2,#0A0D#
add Str0,Str1
add Str0,Str2
add Str0,Str3
add Str0,Str4
add Str0,Str5
msg Str0
pause
