能力值:
( LV9,RANK:570 )
|
-
-
13 楼
原来的脚本1,如果Themida版本号不对,则可能死机。现将脚本1的兼容性加强了,且改善了可靠性。分析不出来的程序,则给出“查找失败”的提示。脚本如下:
---------------
一、Themida v1.9.1.0通法破解的再修定
不好意思的一而再再而三的修定,Themida的反跟踪能力比想象中的强,一个不起眼的“单步异常”常常让你的断点乱套,你不知道他什么时候跳出单步SEH,为了通用性只好加强防范了。
这次给出的“脚本1(断点侦测)”(兼容版)在与单步中断周旋上作了较大改进,同时也摘除了相应代码段的“代码扫描”,让侦测能够进行到底。改进后,用于在我收集的Themida加密软件中还没有出现“搜索失败”的提示。(1.8.0.0以前的版本没有试验)
再就是发现:mov eax,ecx 的汇编代码既可以是“01 C8”,也可以是“03 C1”,所以使一些程序失败,现在增加了对03C1 的搜索。
修改后的脚本如下:
-------------------------------
//Themida v1.8.0.0--1.9.1.0兼容的断点设置脚本
data:
var memory
var csize
var tmp
var temp
var tmpbp1
var tmpbp2
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
var Str11
star:
gmi eip,CODEBASE
mov memory,$RESULT
gmi eip,CODESIZE
mov csize,$RESULT
add csize,memory
find memory,#0000000000000000000000000000000000000000000000#
cmp $RESULT,0
jz stop2
mov tmp,$RESULT
bphws tmp,"w"
esto
esto
esto
bphwc tmp
mov temp,eip
C0:
sto
cmp eip,temp //与单步SEH周旋
jz C0
find memory,#0000000000000000000000000000000000000000000000#
mov tmp,$RESULT
sub csize,tmp
find memory,#909090909090909090909090909090909090#
cmp $RESULT,0
jz stop2
mov temp,$RESULT+8
bphws temp,"w"
mov temp,eip
C1:
run
cmp eip,temp+2 //若是单步,则再run
jz C1
bphwc temp
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????????000F84??0000003007#
cmp $RESULT,0
jz stop2
mov mem5,$RESULT //Addr_5
bp mem5
itoa mem5
mov Str5,"Addr_5="
add Str5,$RESULT
sub mem,4000
find mem,#83BD????????640F82????0000#
cmp $RESULT,0
jz stop2
mov mem0,$RESULT+7 //Addr_0
mov [mem0],#90E9# //改jb为jmp,摘除断点扫描
itoa mem0
add Str0,"Addr_0="
add Str0,$RESULT
add Str0,#0D0A#
find mem0,#C1C003#
find $RESULT,#0385????????#,40
cmp $RESULT,0
jz stop2
mov mem3,$RESULT+6 //Addr_3
itoa mem3
mov Str3,"Addr_3="
add Str3,$RESULT
add Str3,#0D0A#
mov mem4,0 //mem4改为计数
mov mem2,mem0
findon:
find mem0,#AD# //从Addr_0开始查找
cmp $RESULT,0
jz stop
mov mem0,$RESULT
find mem0,#01C8#,40 //还有可能是#03C1#
cmp $RESULT,0
jnz findoff
find mem0,#03C1#,40
cmp $RESULT,0
jnz findoff
add mem0,40
cmp mem0,mem5
ja stop //超过Addr_5后停止
jmp findon
findoff:
cmp mem4,0
jnz D1
mov tmpbp1,$RESULT
bp $RESULT
inc mem4
add mem0,40
jmp findon
D1:
mov tmpbp2,$RESULT
bp $RESULT
add mem0,40
jmp findon
stop:
cmp mem4,0
jz stop2
B2:
run
cmp eip,tmpbp1 //若是单步,则再run
jz C2
cmp eip,tmpbp2
jz C2
jmp B2
C2:
bc eip
@1:
sti
gn eax
cmp $RESULT,0
jz @1
itoa eip
mov mem1,$RESULT
mov Str1,"Addr_1_0="
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#
mov $RESULT,mem1
bpmc
B3:
run
cmp eip,tmpbp1 //若是单步,则再run
jz C3
cmp eip,tmpbp2
jz C3
cmp eip,mem5
jz @4
jmp B3
C3:
bc eip
@2:
sti
gn eax
cmp $RESULT,0
jz @2
itoa eip
@4:
mov Str11,"Addr_1_1="
add Str11,$RESULT
add Str11,#0D0A#
add Str0,Str1
add Str0,Str11
add Str0,Str2
add Str0,Str3
add Str0,Str4
add Str0,Str5
msg Str0
bc
pause
stop2:
msg "查找失败"
bc
pause
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
谢谢楼主.用你新改的脚本1,十几秒钟后就得到断点.(四个可执行文件,以前不管怎样都不行!).
现在脚本2也可以跑完并得到三个带"$-"的CALL如下.
0084D07E $- FF25 40898A00 jmp dword ptr [8A8940] ; kernel32.GetModuleHandleA
0084D084 $- FF25 3C898A00 jmp dword ptr [8A893C] ; kernel32.GetProcAddress
0084D08A $- FF25 38898A00 jmp dword ptr [8A8938] ; kernel32.LoadLibraryA
修改后的脚本3如下:
data:
var Addr_5
start:
esto
esto
mov Addr_5,EC7CDE // <----写入由脚本1得到的Addr_5
bphws Addr_5,"x"
esto
bphwc
//----下面位置在运行脚本2后,添加与OEP有关的断点处代码,若要再次用于新的程序,则应该将全部代码删除
mov [84D07E],#FF2540898A00#
mov [84D084],#FF253C898A00#
mov [84D08A],#FF2538898A00#
mov [8A8940],77D3B144
mov [8A893C],7C81CAFA
mov [8A8938],7C80B731
bp 84D07E
bp 84D084
bp 84D08A
bpwm 404000,1000 //404000的确定是根据402000是代码区,403000是资源数据区
pause
执行脚本后.停在断点Addr_5.按F9后.停在USER32.DLL中
77D3B14E 55 push ebp
77D3B14F 8BEC mov ebp, esp
77D3B151 53 push ebx
再按F9后就终止了.
楼主再看看我上传的那个,你说的入口点可能是:875620;但VC++程序的入口是:
0097C545 >/$ 55 push ebp
0097C546 |. 8BEC mov ebp, esp
0097C548 |. 6A FF push -1
0097C54A |. 68 90D39D00 push 009DD390
0097C54F |. 68 00EC9700 push 0097EC00 ; SE 处理程序安装
0097C554 |. 64:A1 0000000>mov eax, dword ptr fs:[0]
0097C55A |. 50 push eax
0097C55B |. 64:8925 00000>mov dword ptr fs:[0], esp
0097C562 |. 83EC 58 sub esp, 58
0097C565 |. 53 push ebx
0097C566 |. 56 push esi
0097C567 |. 57 push edi
(我有它的低版本的上面版本是4.52的入口,上传的是4.53的)
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
97C545是4.52的入口.我传上去的是4.53不一样.提示提示缺少INIT,没安装驱动.
你打开part1.rar,其它也就打开了.part1,part2.part3.part4解压以后是5.9MB.网络硬盘中的
Sentinel System Driver 5.42.1 (32-bit).part1.rar 293KB
Sentinel System Driver 5.42.1 (32-bit).part2.rar 286KB
文件很小是驱动.安装驱动后就可运行了.
http://eastmark.ys168.com/
(花样文件夹里面,提取码:123)
你说不需要脚本3了,但脚本2(把你注销的两行代码恢复)dump出来后不能运行(dump出来IAT很多都是无效指针)
另外请楼主看看,我上传的文件你脱壳后能否运行?
今天早上上班时在公司的电脑又试了一下,用你新的脚本1,也不行.(使用已到期了),在家里可以,请楼主随便加壳一个程序(比如记事本,使用次数1次,最好用我上传的那个)然后用脚本试,看是否有同样问题.
|