首页
社区
课程
招聘
[旧帖] [求助]新手求教以及一款测试软件的微不足道破解经历 0.00雪花
发表于: 2010-7-17 10:53 1817

[旧帖] [求助]新手求教以及一款测试软件的微不足道破解经历 0.00雪花

2010-7-17 10:53
1817
对于破解来说,本人是个新的不能再新的人,好在也是做软件行业的,但水平有限,不过也不至于到隔行的地步。初来乍到,久闻看雪高墙下深不可测,望高手指点一二,感激不尽。

最近公司引入一款测试软件,名字就不提了,是个比较新颖的产品不过也出到7.x了。这款软件比较强大,各方面都很不错,公司总部也在联络购买事宜,但这个过程需要点时间,由于我们现在处于对软件的学习和研究阶段,此软件注册前的限制极其恶心,实在忍受不了,于是萌生破意。

下面进入正题,软件只能说破了浅浅的一点点,实在继续不下去了,望高手们浪费点时间看完,给一点援助。

【软件结构】XXXX.exe(主程序),tcCore.dll(注册检查等核心),以及N多dll+多线程
         【壳】PEID 0.95 查壳 "yota's .......",根据各方面判断,此壳似乎为vmp
【软件限制】1. 30天试用
                  2. 每个脚本代码行数限制500行
                  3. 每个项目脚本个数限制2个
                  4. 最多可建项目限制6个
                  5. 等

萌生破意以来一直用OD研究,开始用PEID 0.94对主程序查壳,显示无壳delphi 6.0-7.0,于是菜菜的我进入3天的死胡同才发现原来关键在tcCore.dll。

PEID 0.94对此文件查壳,显示什么也找到。于是菜菜的我认为这个文件没有壳,又3天过去了,牺牲了我的休息时间,于是觉得自己还太弱放弃了。

过了1天,想了想久闻PEID是各路好手的得利工具,怎么来个什么也没找到,而且发现程序语言也没找到,感觉有些不对,于是没事在网上寻觅,下了PEID 0.95查壳显示“yota's .....”,具体是什么给忘了,于是激动万分,破解的激情又来了。

接下来1个星期在网上找寻各种yota的脱壳工具及脚本,终无济于事,加上身心疲惫,于是又放弃了。

又过了3天,由于目前公司没什么事,大家在研究软件的使用和测试脚本的编写。当那天打开这个软件的时候,30天试用已经过了,6-7台机器不能使用了。于是又把工作搬到了虚拟机上。每当在虚拟机上打开这个软件的时候总是有种不甘心,也确定很不方便。于是有意无意的又在网上查了起来,当然查资料的过程,总是在看雪找到了下一步的曙光。

有人说一个强劲的壳人称VMP,会误导查壳工具。于是在OD里看了看汇编代码,在网上搜了搜比对了一下,发现我被骗了。这个壳极有可能是VMP,于是心中又喜,知道是什么壳就好办了。可惜好景不长,人人都说VMP壳新手别想脱,灰心至极,心想这算真的无能为力了。

这次的放弃时间较长,VMP高手都不好脱,更别提自己了。还是有意无意在网上乱搜,也常有人说不脱壳有不脱壳的破法,得知了传说中的ESP定律。从上学的时候就一直对定律这种东西头疼,认为只有牛顿才懂。试着学了学,大意就是入栈出栈的指针值永远不会变。但就算知道这个原理跟了程序很长一段跳来跳去的,也不知道怎么弄了。还是功力太浅啊。就这样又过了1个星期。

某天,无意中发现了C盘my document目录中相对应这个软件的文件夹下有个regkey.dat文件,对这文件破解是不可能的了,于是就把这个文件给删了,再次运行软件的时候就又弹出了最开始需要输入activation key的对话框了,又有些激动,把试用的激活码又输了一遍。结果很显然,当然不能用,还是提示过期了。之后又灵机一动,输个错的,提示激活码错误的对话框出来了。

这下有了这么多线索,激情重燃。先不管别的试着各种情况下对MessageBoxA下断点看看有什么,结果真断下了。返回到程序领空的时候,代码如下:
11269B10      00            DB 00
11269B11      E8            DB E8
11269B12      F6            DB F6
11269B13      84            DB 84
11269B14      F9            DB F9
11269B15      FF            DB FF
11269B16      33            DB 33                                    ;  CHAR '3'
11269B17      C0            DB C0
11269B18      5A            DB 5A                                    ;  CHAR 'Z'
11269B19      59            DB 59                                    ;  CHAR 'Y'
11269B1A      59            DB 59                                    ;  CHAR 'Y'
11269B1B      64            DB 64                                    ;  CHAR 'd'
11269B1C      89            DB 89

这一堆一堆的根本看不懂,加上用OD加载DLL的时候就总提示说这个是自解压文件,代码是运行时才出来,这就真没办法了。在网上花了好长时间搜自解压文件怎么办也没什么结果。就在又要放弃的时候,看雪有个帖子里说右键->分析->从模块删除分析。我试了一下,果然可以看见汇编代码了,至今不知道这是为什么。

看见代码了又断下消息框,代码如下:
1126929F    61              POPAD
112692A0    6C              INS BYTE PTR ES:[EDI],DX                 ; I/O 命令
112692A1    204461 79       AND BYTE PTR DS:[ECX+79],AL
112692A5    73 20           JNB SHORT tcCore.112692C7
112692A7    4C              DEC ESP
112692A8    65:66:74 00     JE SHORT 000092AC                        ; 多余的前缀
112692AC    55              PUSH EBP
112692AD    8BEC            MOV EBP,ESP
112692AF    B9 05000000     MOV ECX,5
112692B4    6A 00           PUSH 0
112692B6    6A 00           PUSH 0
112692B8    49              DEC ECX
112692B9  ^ 75 F9           JNZ SHORT tcCore.112692B4
112692BB    51              PUSH ECX
112692BC    33C0            XOR EAX,EAX
112692BE    55              PUSH EBP
112692BF    68 8F942611     PUSH tcCore.1126948F
112692C4    64:FF30         PUSH DWORD PTR FS:[EAX]
112692C7    64:8920         MOV DWORD PTR FS:[EAX],ESP
112692CA    8D45 F8         LEA EAX,DWORD PTR SS:[EBP-8]
112692CD    50              PUSH EAX
112692CE    E8 B9FBFFFF     CALL tcCore.11268E8C
112692D3    8945 FC         MOV DWORD PTR SS:[EBP-4],EAX
112692D6    837D FC 01      CMP DWORD PTR SS:[EBP-4],1
112692DA    75 0A           JNZ SHORT tcCore.112692E6       //小弟只能找到这里,如果把Z改成1的话让它不跳转,就能到达一个试用对话框,只要改这里就可以无限的试用了。实在找不出怎么改成正式版。
112692DC    E8 FBFEFFFF     CALL tcCore.112691DC
112692E1    E9 81010000     JMP tcCore.11269467
                    .
                    .
                    .
11269348    FFEB            JMP FAR EBX                              ; 非法使用寄存器
                    .
                    .
                    .
11269448    6A 7D           PUSH 7D
1126944A    48              DEC EAX
1126944B    C183 D9FF30D8 A>ROL DWORD PTR DS:[EBX+D830FFD9],0AB      ; 移位常量超出 1..31 的范围
                    .
                    .
                    .
11269560    BA 02000000     MOV EDX,2
11269565    E8 767DF9FF     CALL tcCore.112012E0
1126956A    C3              RETN
1126956B  ^ E9 387CF9FF     JMP tcCore.112011A8
11269570  ^ EB DB           JMP SHORT tcCore.1126954D
11269572    8B45 FC         MOV EAX,DWORD PTR SS:[EBP-4]
11269575    807D FB 00      CMP BYTE PTR SS:[EBP-5],0
11269579    74 0F           JE SHORT tcCore.1126958A
                    .
                    .
                    .
11269618    8BE5            MOV ESP,EBP
1126961A    5D              POP EBP
1126961B    C3              RETN
1126961C    FFFF            ???                                      ; 未知命令
1126961E    FFFF            ???                                      ; 未知命令
                    .
                    .
                    .
1126963E    61              POPAD
1126963F    6263 64         BOUND ESP,QWORD PTR DS:[EBX+64]
11269642    65:66:67:68 696>PUSH 6A69                                ; 多余的前缀
11269648    6B6C6D 6E 6F    IMUL EBP,DWORD PTR SS:[EBP+EBP*2+6E],6F
1126964D    70 71           JO SHORT tcCore.112696C0
1126964F    72 73           JB SHORT tcCore.112696C4
11269651    74 75           JE SHORT tcCore.112696C8
11269653    76 77           JBE SHORT tcCore.112696CC
11269655    78 79           JS SHORT tcCore.112696D0
11269657    7A 00           JPE SHORT tcCore.11269659
11269659    0000            ADD BYTE PTR DS:[EAX],AL
1126965B    0055 8B         ADD BYTE PTR SS:[EBP-75],DL
1126965E    EC              IN AL,DX                                 ; I/O 命令
1126965F    83C4 F8         ADD ESP,-8
                    .
                    .
                    .
1126971C    6A 30           PUSH 30
1126971E    6A 01           PUSH 1
11269720    68 AC992611     PUSH tcCore.112699AC                     ; ASCII "MAINICON"
11269725    A1 04105311     MOV EAX,DWORD PTR DS:[11531004]
1126972A    50              PUSH EAX
1126972B    E8 CC88F9FF     CALL tcCore.11201FFC
                    .
                    .
                    .
112699DE    6A 00           PUSH 0
112699E0    49              DEC ECX
112699E1  ^ 75 F9           JNZ SHORT tcCore.112699DC     //这里和下面对应,不是注册成功就是试用过期。
112699E3    8955 F8         MOV DWORD PTR SS:[EBP-8],EDX
                    .
                    .
                    .
11269A16    68 589B2611     PUSH tcCore.11269B58
11269A1B    68 5C9B2611     PUSH tcCore.11269B5C                     ; ASCII "Demo"
11269A20    E8 77F4FFFF     CALL tcCore.11268E9C
11269A25    84C0            TEST AL,AL
11269A27    0F84 93000000   JE tcCore.11269AC0      //这里具体跳什么对话框忘了,反正是注册成功或者是试用过期,此注册成功并不是没事了,只是一个提示框,需要重启程序验证
11269A2D    8D55 F0         LEA EDX,DWORD PTR SS:[EBP-10]
                    .
                    .
                    .
11269A51    68 5C9B2611     PUSH tcCore.11269B5C                     ; ASCII "Demo"    //看见这个demo极其不爽,也不知道怎么办
11269A56    E8 49F4FFFF     CALL tcCore.11268EA4
11269A5B    6A 00           PUSH 0
11269A5D    8D45 EC         LEA EAX,DWORD PTR SS:[EBP-14]
11269A60    50              PUSH EAX
                    .
                    .
                    .
11269AAA    6A 00           PUSH 0
11269AAC    E8 5B85F9FF     CALL tcCore.1120200C
11269AB1    8B45 FC         MOV EAX,DWORD PTR SS:[EBP-4]
11269AB4    C780 4C020000 0>MOV DWORD PTR DS:[EAX+24C],1
11269ABE    EB 56           JMP SHORT tcCore.11269B16           //这里直接跳到提示框之下
11269AC0    6A 10           PUSH 10             //看来是有地方跳到这里然后往下提示注册失败
11269AC2    8D45 D8         LEA EAX,DWORD PTR SS:[EBP-28]
11269AC5    50              PUSH EAX
                    .
                    .
                    .
11269B06    8B45 D0         MOV EAX,DWORD PTR SS:[EBP-30]
11269B09    E8 9A77F9FF     CALL tcCore.112012A8
11269B0E    50              PUSH EAX
11269B0F    6A 00           PUSH 0
11269B11    E8 F684F9FF     CALL tcCore.1120200C      //从11269AC0到这里是激活失败的提示框
11269B16    33C0            XOR EAX,EAX
11269B18    5A              POP EDX
11269B19    59              POP ECX
11269B1A    59              POP ECX
11269B1B    64:8910         MOV DWORD PTR FS:[EAX],EDX
11269B1E    68 529B2611     PUSH tcCore.11269B52
11269B23    8D45 D0         LEA EAX,DWORD PTR SS:[EBP-30]
11269B26    BA 04000000     MOV EDX,4
11269B2B    E8 F076F9FF     CALL tcCore.11201220
11269B30    8D45 E8         LEA EAX,DWORD PTR SS:[EBP-18]
11269B33    BA 02000000     MOV EDX,2
11269B38    E8 E376F9FF     CALL tcCore.11201220
11269B3D    8D45 F0         LEA EAX,DWORD PTR SS:[EBP-10]
11269B40    BA 02000000     MOV EDX,2
11269B45    E8 D676F9FF     CALL tcCore.11201220     
11269B4A    C3              RETN

经过苦苦追寻,只能找到如下结果
112692D6    837D FC 01      CMP DWORD PTR SS:[EBP-4],1
这个位置,只要让结果为0,下面跳的时候就能跳到试用,继而可以达到过期还能继续反复试用。虽然软件没破了,但是这个结果已经足已让我窃喜了,于是直接改指令达到目的,结果证明我想的过于简单了,人家是自解压的,代码不能直接改。我的天,每次在惊喜中总有失望。

又到网上,又看到看雪达人的只字片语,了解了传说中的SMC破解技术,小学习了一下就霸王硬上了。

据观察上面112692D6这句指令中EBP-4中的值是2,事到如今也管不了为什么是2了,就直接想把后面比较的值也改成2就得了。在这句下硬件写入断点,找到了写入01的时候,又在其之后随便找到了一个非自解压的JMP,又苦寻了一段非自解压占用的空闲内存(这个过程省略N千字)。好,现在只省patch了。JMP跳到找的那一段空内存,在空内存上放了几行指令:

CMP BYTE PTR DS:[112692D9], 1              //先判断这个地址中是否已经放了1
JNZ SHORT (第四行)                                    //如果不是,跳过第三行修改指令
MOV BYTE PTR DS:[112692D9], 2              //如果是,修改为2
JMP (原JMP跳转的地方)                                //跳回原程序

调试了N次后,终于可以了,高手看到这里肯定应该笑了。没错,后来才发现这里写的112692D9
是死地址,DLL的基址会变的,这样一来只能在OD下运行,单独运行不了,更别提放到别的机器上了。这是问题其一,其二是后面的1和2这个数值会根据regkey.dat文件变化,这些都不管了,需要时连同我的regkey.dat一块拷贝得了。

到目前为止,小弟才疏学浅,也只能到这地步了,其间经历的困难重重,浪费的时间与精力不可估量,常常做梦都在想,这些我都无怨言,怪自己能力不够,只为坚持着这个精神。我不相信破不了这个软件。。今天发帖请高手帮助,望看在我费的力气份上指点一二,感激不尽。

两个问题:
1. 怎么把我上面的补丁指令中的内存改成可以适应基址变化的?
2. 如果可能,给一些破解成正式版的思路?

ps:关于试用版,有个dialog,这个dialog可能是这个软件自定义的。上面有三个按钮:try now, buy now, cancel。每次试用的时候都要点try now。之后就进程序了没有提示框。另外两个也没什么突破点。不知道下什么断点能断到这个窗口。

ps2:点试用进入程序后,如果创建了三个脚本,再随便运行一个的话,会有提示框提示试用版有限制不能创建超过2个脚本,这个提示框看似像messagebox,但里面还有个help按钮。 而且一旦进入了程序,在OD下,主线程就结束了,不知道怎么断这个消息框。

最后,小弟由于情急发帖,如果违反了规定望版主见谅加告之。
小弟在此拜谢~

2010.7.19
刚刚学习了重定位,豁然开朗,应用于上面的SMC代码,变成:

117B31D4    53              PUSH EBX
117B31D5    E8 00000000     CALL tcCore_r.117B31DA
117B31DA    5B              POP EBX
117B31DB    81EB DA315B00   SUB EBX,5B31DA
117B31E1    80BB D9920600 0>CMP BYTE PTR DS:[EBX+692D9],1
117B31E8    5B              POP EBX
117B31E9    75 15           JNZ SHORT tcCore_r.117B3200
117B31EB    53              PUSH EBX
117B31EC    E8 00000000     CALL tcCore_r.117B31F1
117B31F1    5B              POP EBX
117B31F2    81EB F1315B00   SUB EBX,5B31F1
117B31F8    C683 D9920600 0>MOV BYTE PTR DS:[EBX+692D9],5
117B31FF    5B              POP EBX
117B3200  ^ E9 7C75E8FF     JMP tcCore_r.1163A781

这样一来这个dll在什么地方都可以运行了,终于达到无限期试用了,继续向下一步努力 ~

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (17)
雪    币: 12
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
楼主,能否提供软件的试用版
2010-7-17 20:15
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
楼主情况跟我有点像。
我也是一个平台,破了好几个月了,放弃了再来,循环N次。
如果搭建的环境不麻烦的话,楼主应该把软件传上来。
2010-7-17 20:58
0
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
感谢楼上二位,软件的名字是testcomplete,去官网直接可以下到最新的7.52Demo版就是了,如果二位有时间不妨一试,大恩不言谢~
2010-7-18 08:53
0
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
如果高手没时间看,烦请告诉我一下,怎么写程序可以适应不同的基址??
2010-7-18 21:05
0
雪    币: 128
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
其实自己能看懂程序就简单了好多··
2010-7-19 07:47
0
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
哎。。问题就是看不懂啊。。放弃或者继续?
2010-7-19 08:38
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
同情楼主 ,我是门外汉 只能纯支持了
2010-7-19 08:42
0
雪    币: 19
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
飘过~~    只是飘过.......
2010-7-19 08:57
0
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
谢谢以上的各位回帖,给与我莫大的鼓励,刚才终于查到了一些重定位技术,应用到上面的SMC那块,现在终于可以达到无限期试用了,只需要拷贝一个DLL和一个DAT文件到相应目录就可以了。
虽然成果不微不足道,但对于我来说已经很激动了~谢谢大家 ~
继续研究向正式版进军~
2010-7-19 11:36
0
雪    币: 21
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
谢谢楼主,学习了!
2010-10-24 19:14
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
谢谢楼主,学习了!   在论坛的第一次回复
2010-10-25 00:23
0
雪    币: 1160
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
谢谢楼主,学习了!
2010-11-15 16:26
0
雪    币: 237
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
不错不错,新人的路都是这样过来的。
2010-11-15 16:38
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
文章很犀利,需要慢慢来看
2010-11-15 18:02
0
雪    币: 74
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
LZ很强大啊,我的能力远远不及你,慢慢学习。很难啊。
2010-11-15 19:32
0
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
学习............
2010-11-15 21:26
0
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
呵呵,感谢大家支持,事过几个月还被顶上来了。
至于这个破解,非常遗憾的说,没有后续了。。。只截止到无限期试用,就没有时间再研究了。
目前正在使用这个软件的最新版,防破技术更强了,不是我所能为之了。。。还好公司买了序列号。
至于这次的破解研究确实长了不少技术,呵呵呵呵,大家一起继续努力吧~
2010-11-19 16:19
0
游客
登录 | 注册 方可回帖
返回
//