首页
论坛
课程
招聘
[原创]对Themida1.9.1.0的通法破解一文的补充(再修正)
2008-9-25 23:33 18926

[原创]对Themida1.9.1.0的通法破解一文的补充(再修正)

wulje 活跃值
14
2008-9-25 23:33
18926
【文章标题】: 对Themida1.9.1.0的通法破解一文的补充修正
【下载地址】: 自己搜索下载
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
          前几天我的《Themida 1.9.1.0的通法破解》一文的脚本对VC++程序的解密存在一些问题(对汇编程序正常)。主要是解密后,函数在程序中的地址张冠李戴,脱壳后程序不能运行。当时实验的主程序是针对汇编的,附带实验了VC++。由于VC++动辄几百个函数,多则上千不可能一一核对其地址,故疏漏了一个大问题。
          原来Themida v1.9.1.0加密程序时,对函数的“序列号装载”或“函数名装载”是分别在不同的地址中显示其真实地址的(与1.8.5.5版不同),而我的脚本1搜索到2个(Addr_1)地址,因汇编程序无序列号装载,另一个Addr_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
   
         二、网友们反映脚本不能运行的问题
         脚本和提供的附件是经过无数次的实验运行的,绝对不是脚本的问题。唯一不同的是OD版本号,插件的使用。请下载我上文提到的版本和插件。okdodo的插件“invisible”很管用,无须更改OD的类名称“AAAMAIN”。
         特别提醒:运行脚本,必须用“ODbgScript”打开,绝不能用“OllyScript”打开。若没有ODbgScript,请立即下载该插件。
         须要注意的是,电脑中不能运行softIce,不能同时运行两个OD(不管是不是加载同一程序)。操作系统不应该是问题。
   
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2008年09月25日 22:35:21

[2023春季班]《安卓高级研修班(网课)》月薪两万班招生中~

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (49)
雪    币: 411
活跃值: 活跃值 (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cuixzuo 活跃值 2008-9-26 05:37
2
0
支持,牛人的东东。
雪    币: 1114
活跃值: 活跃值 (221)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ttstation 活跃值 2008-9-26 10:36
3
0
支持&&拜下
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
easydw 活跃值 2008-9-26 11:14
4
0
楼主的OD设置可不可以show一下,总感觉是OD设置不正确导致运行异常。

我刚开始时,执行第一个脚本不弹中断窗口而是直接运行了程序,改了下OD的忽略中断异常就可以了,可是再执行第二个脚本仍然是直接运行程序,这次就不知怎样修改OD设置了,请楼主帮忙。
雪    币: 0
活跃值: 活跃值 (891)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
JJGuo 活跃值 2008-9-26 12:36
5
0
OD插件StrongOD.dll如下设置:


用OD载入附件中的Ctest_TM19.exe


按确定后停在:
00C276B0    FF32            push    dword ptr [edx]
00C276B2    E9 6AB60600     jmp     00C92D21
00C276B7    0AC0            or      al, al
00C276B9    0F85 ABCE0500   jnz     00C8456A
00C276BF    68 1A7C0000     push    7C1A
00C276C4    891424          mov     dword ptr [esp], edx
00C276C7    E9 AB110000     jmp     00C28877

要按shift+F9后运行;
上传的附件:
  • 1.gif (26.02kb,1436次下载)
  • 2.gif (25.72kb,1431次下载)
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:570 )
在线值:
发帖
回帖
粉丝
wulje 活跃值 14 2008-9-26 13:03
6
0
回4楼:
运行脚本前,一定确认有“ODbgScript.dll”插件,打开“插件菜单”要有ODbgScript选项,否则脚本运行不正常。
打开菜单“选项-->调试设置-->异常页”只选中“非法访问内存”一项(打勾)。其余全部都不能选!
只能用菜单“插件-->ODbgScript-->运行脚本-->打开-->脚本1”。
将脚本1对话框中的7个地址回写到脚本2时,不能有丝毫差错,否则可能会直接就运行到底了,而程序一点也没解密。
脚本中数据写错,运行中不会有任何提示(脚本实际并没有运行)而是OD利用脚本的数据在运行。
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:570 )
在线值:
发帖
回帖
粉丝
wulje 活跃值 14 2008-9-26 13:10
7
0
[QUOTE=;]...[/QUOTE]
我的脚本是用“ODbgScript plugin v1.65.2 版本编写的。注意,脚本语言并不是在各种“脚本打开工具”中通用的!请一定用ODbgScript插件打开,否则是不会正常的(可以运行但要出错)。
雪    币: 0
活跃值: 活跃值 (891)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
JJGuo 活跃值 2008-9-26 14:41
8
0
请问楼主: 运行脚本到出现断点对话框需多久?我从中午12.30到现在14.38脚本1都还没跑完!
我的是用“ODbgScript plugin v1.65.1 ,另外只有StrongOD.dll不被发现,其它都会被程序发出调试器.包括使用invisible.dll
雪    币: 0
活跃值: 活跃值 (891)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
JJGuo 活跃值 2008-9-26 14:44
9
0
楼主的ODbgScript是不是这个
http://bbs.pediy.com/showthread.php?t=51112
雪    币: 0
活跃值: 活跃值 (891)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
JJGuo 活跃值 2008-9-26 16:05
10
0
楼主试一下这个文件.用这个脚本是否有问题?
我这里运行脚本1几个小时都出不来!!!C++编写的.
我查过壳是:Themida|WinLicense 1.8.x.x-1.9.x.x -> Oreans *  If the HideOD is Failure,the will be 1.9.x.x *
http://www.aefzh.com/DOWN/PAD4.531.zip
文件中的驱动有问题,另外驱动上传!
Sentinel System Driver 5.42.1 (32-bit).part1.rar
Sentinel System Driver 5.42.1 (32-bit).part2.rar
上传的附件:
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:570 )
在线值:
发帖
回帖
粉丝
wulje 活跃值 14 2008-9-26 22:30
11
0
一般程序,脚本1只须几秒钟,特别大的文件也可能不超过1分钟。你的程序使脚本1进入了死循环?你上传的rar文件不能打开,补充驱动怎么是一个php文件?我对驱动没有研究,如果真是这样我就无能为力了。最好你能上传一个你须要解密的.exe文件。
另:我这上bbs.pediy.com太困难了,我是通过代理服务器上的,速度很慢。
雪    币: 0
活跃值: 活跃值 (891)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
JJGuo 活跃值 2008-9-27 12:38
12
0
我已把文件传到网络硬盘了:

http://eastmark.ys168.com/
花样文件夹里面,提取码:123
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:570 )
在线值:
发帖
回帖
粉丝
wulje 活跃值 14 2008-9-27 23:27
13
0
原来的脚本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
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:570 )
在线值:
发帖
回帖
粉丝
wulje 活跃值 14 2008-9-28 00:34
14
0
打开了你的程序,它不是Themida v1.9.1.0版,是1.8.x.x版的(我见得也不多,不知道具体版本)。没有关系,给我提供了兼容测试的程序。的确脚本1运行不出来,好几个地址代码不同于v1.8.5.5(绝对多数一样)。因时间关系,你的程序:part1(估计各个part都是一样的)中的7个断点是:
       Addr_0=EC6BE9
          Addr_1_0=EC6D89
          Addr_1_1=EC6CF2
          Addr_2=EC74A8
          Addr_3=EC74E8
          Addr_4=EC7592
          Addr_5=EC7CDE
将它修改脚本2中对应的地址值,存盘。运行脚本2。几分钟后,解密结果出来了。API函数集中在84Dxxx代码段。改天将兼容的脚本1写出来。自己用于其余几个部分,估计断点是一样的。
雪    币: 0
活跃值: 活跃值 (891)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
JJGuo 活跃值 2008-9-28 07:37
15
0
我的OD可能设置有问题,修改脚本2后,用OD载入,运行脚本2,大概20秒后程序就运行了.
等下上班时好好再看看.
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
chaogui 活跃值 2008-9-28 15:03
16
0
对TMD硬碰硬的搞  带来的是无尽的折磨。虽然对LZ的方法暂时一知半解,看得出来 ,是他山之石。坐下学习。
雪    币: 0
活跃值: 活跃值 (891)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
JJGuo 活跃值 2008-9-28 16:55
17
0
发现最新情况:
    如果你的程序使用到期.再用脚本,不管怎样都不能成功,今天下午我重装了系统,脚本顺利执行.建议楼主,加守壳时试用的次数少一点,自己把它用到过期,试试.
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:570 )
在线值:
发帖
回帖
粉丝
wulje 活跃值 14 2008-9-29 17:48
18
0
昨晚抽空,修改了脚本1,原来你的程序中,有些代码,比如 mov eax,ecx 的代码是“03C1”,而多数程序中,mov eax,ecx 的代码是“01C8”。不知道为什么同一指令会有不同的代码,还不知道其它汇编指令有不有另外的代码,若有,则脚本编辑就会更困难。
新脚本1(请直接拷贝,没有传附件),已经完全适应你的程序和更多的程序了。
你的程序入口没有被破坏(part1),大约是875620。但虚拟机多次进入code段。第一次在867194进入,第二次在861FDC进入,进入后又返回虚拟机了,最后在875620进入。怎样寻找OEP有机会再写一篇破文。
雪    币: 0
活跃值: 活跃值 (891)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
JJGuo 活跃值 2008-9-29 22:03
19
0
谢谢楼主.用你新改的脚本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的)
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:570 )
在线值:
发帖
回帖
粉丝
wulje 活跃值 14 2008-9-30 00:45
20
0
脚本3没有用对,带“$-”号的API没有必要设断。因为它是有关联调用的(即调用没有被虚拟)。因为它是一个较早的版本,入口OEP没有被虚拟。所以没有必要使用脚本3了。
    另外,脚本3中的:bpwm  404000,1000 设置不对。例子中的“变量区”是404000,不同的程序是不一样的,“变量区”一般设置在“资源、数据代码”段后,是全局变量。你无须监测“变量区”的写入,而且也不会有结果,因为VC++是高度封装“类结构”,很少使用全局变量。即使有,也不会专门有个区段。
    我只打开了你的一个part1.rar,没有安装,所以不能运行(提示缺少INIT(初始化))。我也没有管它,代码段到88Axxx后,就基本上只是一些数据和0了。根本没有93xxxx以上的代码段,所以我没有发现入口地址(97C545),我只是用“写内存”方式简单测试了一下。所以不准确。
    另外,你说有个次数限制?因为我没有安装运行,所以没有发现,即使有,也是在壳中。脱壳后它就消失了。
雪    币: 0
活跃值: 活跃值 (891)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
JJGuo 活跃值 2008-9-30 08:06
21
0
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次,最好用我上传的那个)然后用脚本试,看是否有同样问题.
雪    币: 0
活跃值: 活跃值 (891)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
JJGuo 活跃值 2008-10-1 08:37
22
0
楼主,我期待你的回答!
雪    币: 0
活跃值: 活跃值 (891)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
JJGuo 活跃值 2008-10-2 09:33
23
0
楼主,我期待你的回答!
雪    币: 0
活跃值: 活跃值 (891)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
JJGuo 活跃值 2008-10-2 20:57
24
0
楼主,搞定了没有?
雪    币: 228
活跃值: 活跃值 (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
tygyxyw 活跃值 2008-10-3 02:02
25
0
通法破解.是否言过其实?
游客
登录 | 注册 方可回帖
返回