吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 32938|回复: 48
上一主题 下一主题
收起左侧

[分享] 某软件圣天诺加密狗破解过程

  [复制链接]
跳转到指定楼层
楼主
wushishen 发表于 2016-10-29 23:17 回帖奖励
本帖最后由 wushishen 于 2016-11-2 20:39 编辑

这个软件是用圣天诺狗来加密的,当软件没有检测到加密狗时,则需要注册它。好,我们看看怎么样来破解它(转)。

本帖只是转载于网上,感觉有些思路,虽然比较老了,对于我们新人来说是值得学习的,并且我刚刚注册本站用户,遇到加密狗难题,迫于急切,没有看清版规,发了三篇同内容的违规贴,已经被管理删除了,我看本站加密狗的帖子太少,就把我感觉不错的文章分享出来,并没有选择原创,可是还是有一些可笑的人出现,楼下 @disth , @whyIDA 这两位可能是本站最牛的大神了吧,眼睛也很大,在这里不给予大家帮助和意见,揪着搬运一事絮叨半天,还很有心,在网上搜索出处,作为新人,还是希望你们不要浪费你们的青春在这上面,还是要多多把你们肚子里的货分享给我们新人吧,在这里评价一个新人,你们不知道有没有资格,希望你们多多分享加密狗类的文章,最好是原创,看看你们有多NB,我好像你们学习!

工具:trw2000  (已经过时,改OD)
   
软件在运行时,如果没有狗,则会跳出一个需要注册的对话框,而且也是用动态注册的方法,如果注册码不正确register按钮是灰色的。这类软件一般用断点bpx hmemcpy,今天我们用另外的断点来破它,用什么断点呢?想一下要取得对话框的数据要用到什么函数,对了,是getdlgitemtexta。好,我们先输入用户名,然后输入假注册码12345678,切换到TRW,下断点bpx getdlgitemtexta,按F5返回程序,马上被中断了,按F10返回到主程序,如下:


[C++] 纯文本查看 复制代码
004C6798 8D852C010000            lea eax, dword ptr [ebp+0000012C]  <===返回到这里,用d eax可以看到我们输入的假注册码 
:004C679E 50                      push eax 
:004C679F 6A06                    push 00000006 
:004C67A1 E8BAFFFEFF              call 004B6760  
:004C67A6 83C410                  add esp, 00000010 
:004C67A9 E99E000000              jmp 004C684C 
------------------------------------------------ 

按几下F10,到下面:


[C++] 纯文本查看 复制代码
004C684C 55                      push ebp 
:004C684D E84E010000              call 004C69A0  <====计算和比较注册码的CALL,所以要F8进入 
:004C6852 83C404                  add esp, 00000004 
:004C6855 85C0                    test eax, eax 
:004C6857 7427                    je 004C6880 
:004C6859 8B8DEC020000            mov ecx, dword ptr [ebp+000002EC] 
:004C685F 51                      push ecx 
:004C6860 E86B000000              call 004C68D0 
:004C6865 6A00                    push 00000000 
:004C6867 6A07                    push 00000007 
:004C6869 E8C205FFFF              call 004B6E30 
:004C686E 83C40C                  add esp, 0000000C 
:004C6871 B801000000              mov eax, 00000001 
:004C6876 5F                      pop edi 
:004C6877 5E                      pop esi 
:004C6878 5D                      pop ebp 
:004C6879 81C498000000            add esp, 00000098 
:004C687F C3                      ret 
--------------------------------------------------- 


进入4C684D的CALL:


[C++] 纯文本查看 复制代码
:004C69A0 81EC18020000            sub esp, 00000218 
:004C69A6 53                      push ebx 
:004C69A7 55                      push ebp 
:004C69A8 8BAC2424020000          mov ebp, dword ptr [esp+00000224] 
:004C69AF 56                      push esi 
:004C69B0 57                      push edi 

* Possible StringData Ref from Data Obj ->"Demo" 
                                  | 
:004C69B1 BFD0115300              mov edi, 005311D0  <====取试用的注册码,这个注册码可以用到2001-12-31日,这不是我们所要的,继续GO 
:004C69B6 8DB52C010000            lea esi, dword ptr [ebp+0000012C] <====用d esi可以看到我们输入的假注册码 
:004C69BC 8BC6                    mov eax, esi 

* Referenced by a (U)nconditional or (C)onditional Jump at Address: 
|:004C69E0(C) 
| 
:004C69BE 8A10                    mov dl, byte ptr [eax] 
:004C69C0 8A1F                    mov bl, byte ptr [edi] 
:004C69C2 8ACA                    mov cl, dl 
:004C69C4 3AD3                    cmp dl, bl <=====比较注册码 
:004C69C6 751E                    jne 004C69E6  <=====不相等则跳到正式用户注册码运算的代码 
:004C69C8 84C9                    test cl, cl 
:004C69CA 7416                    je 004C69E2 
:004C69CC 8A5001                  mov dl, byte ptr [eax+01] 
------------------------------------------------ 
* Possible StringData Ref from Data Obj ->"Never" 
                                  | 
:004C6A82 BF10135300              mov edi, 00531310    <====取字符串Never 
:004C6A87 83C9FF                  or ecx, FFFFFFFF 
:004C6A8A 8985EC020000            mov dword ptr [ebp+000002EC], eax 
:004C6A90 C744241800000000        mov [esp+18], 00000000 
:004C6A98 F2                      repnz 
:004C6A99 AE                      scasb 
:004C6A9A F7D1                    not ecx 
:004C6A9C 2BF9                    sub edi, ecx 
:004C6A9E 8BC1                    mov eax, ecx 
:004C6AA0 8BF7                    mov esi, edi 
:004C6AA2 8BFA                    mov edi, edx 
:004C6AA4 C1E902                  shr ecx, 02 
:004C6AA7 F3                      repz 
:004C6AA8 A5                      movsd 
:004C6AA9 8BC8                    mov ecx, eax 
:004C6AAB 83E103                  and ecx, 00000003 
:004C6AAE F3                      repz 
:004C6AAF A4                      movsb 

* Referenced by a (U)nconditional or (C)onditional Jump at Address: 
|:004C6A6B(U) 
| 
:004C6AB0 8D4C241C                lea ecx, dword ptr [esp+1C] 
:004C6AB4 51                      push ecx 
:004C6AB5 53                      push ebx 
:004C6AB6 E855090000              call 004C7410 
:004C6ABB 8D5528                  lea edx, dword ptr [ebp+28]  <====取字符串22 
:004C6ABE 8DB544020000            lea esi, dword ptr [ebp+00000244] 
:004C6AC4 52                      push edx 
:004C6AC5 8D8594020000            lea eax, dword ptr [ebp+00000294]  <====取用户名 
:004C6ACB 56                      push esi 
:004C6ACC 8D4D3C                  lea ecx, dword ptr [ebp+3C] 
:004C6ACF 50                      push eax 
:004C6AD0 8D9424AC000000          lea edx, dword ptr [esp+000000AC] 
:004C6AD7 51                      push ecx 
:004C6AD8 52                      push edx 
:004C6AD9 E862050000              call 004C7040  <====连接成运算码,比如输入的用户名为crackjack,则连接成22crackjack(0DH)Never(0DH)22 
--------------------------------------------- 


一直走,走到:


[C++] 纯文本查看 复制代码
:004C6B22 8D442434                lea eax, dword ptr [esp+34] 
:004C6B26 56                      push esi 
:004C6B27 8D8C24AC000000          lea ecx, dword ptr [esp+000000AC] 
:004C6B2E 50                      push eax 
:004C6B2F 51                      push ecx 
:004C6B30 E88B060000              call 004C71C0  <=====运算注册码的CALLL,F8进入 
:004C6B35 8B44242C                mov eax, dword ptr [esp+2C]  <=====取运算出来的注册码 
:004C6B39 8B4C2438                mov ecx, dword ptr [esp+38]  <=====取我们输入的注册码,我们可以在这里暴破它,改为mov ecx, dword ptr [esp+2C] 
:004C6B3D 83C41C                  add esp, 0000001C 
:004C6B40 3BC8                    cmp ecx, eax    <=====比较注册码 
:004C6B42 8985F0020000            mov dword ptr [ebp+000002F0], eax 
:004C6B48 898DF4020000            mov dword ptr [ebp+000002F4], ecx 
:004C6B4E 7510                    jne 004C6B60 
:004C6B50 5F                      pop edi 
:004C6B51 5E                      pop esi 
:004C6B52 5D                      pop ebp 
:004C6B53 B801000000              mov eax, 00000001 
:004C6B58 5B                      pop ebx 
:004C6B59 81C418020000            add esp, 00000218 
:004C6B5F C3                      ret 
----------------------------------------------- 
:004C7260 6A00                    push 00000000 
:004C7262 C1E00D                  shl eax, 0D 
:004C7265 0BC6                    or eax, esi 
:004C7267 8B74242C                mov esi, dword ptr [esp+2C] 
:004C726B 55                      push ebp 
:004C726C 68F4535300              push 005353F4 
:004C7271 8906                    mov dword ptr [esi], eax 
:004C7273 8B442424                mov eax, dword ptr [esp+24] 
:004C7277 50                      push eax 
:004C7278 E813FFFFFF              call 004C7190  <====F8进入 
:004C727D 8B5C2440                mov ebx, dword ptr [esp+40] 
:004C7281 83C410                  add esp, 00000010 
:004C7284 85DB                    test ebx, ebx 
---------------------------------------------------- 
:004C719C F2                      repnz 
:004C719D AE                      scasb 
:004C719E F7D1                    not ecx 
:004C71A0 49                      dec ecx 
:004C71A1 51                      push ecx 
:004C71A2 52                      push edx 
:004C71A3 E8584A0000              call 004CBC00  <=====F8进入 
:004C71A8 8B4C2418                mov ecx, dword ptr [esp+18] 
:004C71AC 83C408                  add esp, 00000008 
:004C71AF 8901                    mov dword ptr [ecx], eax 
:004C71B1 5F                      pop edi 
------------------------------------------------------- 


下面就是运算注册码的代码,这个软件的运算有点特别,它用程序本身的代码数据(相当于密码表)来算出注册码,只要改一下所用到的数据,就让破解者的注册机无效了


[C++] 纯文本查看 复制代码
:004CBC00 56                      push esi 
:004CBC01 8B74240C                mov esi, dword ptr [esp+0C] 
:004CBC05 83C8FF                  or eax, FFFFFFFF  <====EAX的初始值为0FFFFFFFF 
:004CBC08 85F6                    test esi, esi 
:004CBC0A 7E24                    jle 004CBC30 
:004CBC0C 8B4C2408                mov ecx, dword ptr [esp+08] 
:004CBC10 57                      push edi 

* Referenced by a (U)nconditional or (C)onditional Jump at Address: 
|:004CBC2D(C) 
| 
:004CBC11 33D2                    xor edx, edx    <=====清0 
:004CBC13 8BF8                    mov edi, eax    <=====EDI=EAX 
:004CBC15 8A11                    mov dl, byte ptr [ecx]  <=====取第N个字符 
:004CBC17 81E7FF000000            and edi, 000000FF    <=====取EDI的最低位 
:004CBC1D 33D7                    xor edx, edi          <=====EDX xor EDI 
:004CBC1F C1E808                  shr eax, 08          <=====结果右移8位 
:004CBC22 8B1495D4145300          mov edx, dword ptr [4*edx+005314D4]  <====取程序中地址为EDX*4+5314d4的代码数据,我们知道,字符的最大数是FF,则密码表的长度为4*FF+5314d4=5318d0,我们用Hview打开主文件,可知它的地址为1314d4--1318d0,这个地址范围的数值就做为运算注册码的密码 
:004CBC29 33C2                    xor eax, edx  <====EAX xor EDX,结果作为下一个字符的运算参数 
:004CBC2B 41                      inc ecx 
:004CBC2C 4E                      dec esi 
:004CBC2D 75E2                    jne 004CBC11  <====运算完了吗,没有则继续运算 
:004CBC2F 5F                      pop edi 

* Referenced by a (U)nconditional or (C)onditional Jump at Address: 
|:004CBC0A(C) 
| 
:004CBC30 F7D0                    not eax  <=====将结果取非,最后的结果就是注册码的十六进制,比如EAX=29C8BF83,则注册码为701022083 
:004CBC32 5E                      pop esi 
:004CBC33 C3                      ret 


由于密码表的数据比较多,我就不编写他的注册机了,只是用暴破的方法来处理它,哪位朋友有兴趣可以编出它的注册机吧,让大家来学习一下嘛.

免费评分

参与人数 6吾爱币 +1 热心值 +6 收起 理由
metty + 1 + 1 我很赞同!
小笙 + 1 热心回复!
hnfengyun + 1 我很赞同!
yeyulang + 1 谢谢@Thanks!
王美君 + 1 我很赞同!
Sound + 1 鼓励转贴优秀软件安全工具和文档!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
disth 发表于 2016-10-30 15:50
whyida 发表于 2016-10-30 10:12
一共就5个帖子,其中两个因病毒或木马被删除。前一天还求教程过一天自己发教程了。终于看到个明白人,许 ...

{:1_903:}更可笑的是他下面的回答感觉这篇文章是他的原作一样,而且还使用TRW(他要是更换成使用OD来讲的话我都没这么注意,想想什么年代了,还有人还在使用“上古兵器”。。。)

嗨,人啊,不怕不懂,就怕装懂,不懂装懂,永远饭桶!!!
推荐
whyida 发表于 2016-10-30 18:47
wushishen 发表于 2016-10-30 18:44
我只是分享一下本站没有的教程,用得着你大呼小叫的吗?你睁大你的眼睛看看,管理都说感谢分享转帖文章的 ...

也就这点本事。搬运。
推荐
whyida 发表于 2016-10-30 10:12
本帖最后由 whyida 于 2016-10-30 10:19 编辑
disth 发表于 2016-10-30 09:36
在网上找到该文章测出处,竟然是2001年11月看雪论坛的文章,15年前的还分享,。。。。。。。
http://www.p ...

一共就5个帖子,其中两个因病毒或木马被删除。前一天还求教程过一天自己发教程了。终于看到个明白人,许多人都不知道trw怎么用,是谁编写的。
推荐
disth 发表于 2016-10-30 09:23
明显是不知从哪搬运来的文章。。。。。。。。原因有如下:
1,TRW是不支持NT系统的,更何况现在的WIN7,8,连WIN2000都不支持,只支持WIN95,98 ,ME系统,如果楼主是90后的话,估计,那时没几岁、、、
2,现在圣天诺加密狗,HASP等加密狗那这么简单破解,研究过狗的都知道,在没有加密狗的情况下,程序是不完整的,所以,没有狗的情况下是无法破解的,更何况楼主的程序竟然没有加壳?!!
3,从文章分析看,应该是2001年左右的文章。。。

沙发
gwdai 发表于 2016-10-29 23:34
这个 是不是指可以用当前版本  更新了是不是就用不了了
3#
wangxp 发表于 2016-10-29 23:40
trw2000是上古时期的吧,还是不如softICE
4#
zskj 发表于 2016-10-29 23:52
好贴顶一个!很不错!
5#
 楼主| wushishen 发表于 2016-10-30 00:07 |楼主
gwdai 发表于 2016-10-29 23:34
这个 是不是指可以用当前版本  更新了是不是就用不了了

是的,一般来说就是当前版本。
6#
 楼主| wushishen 发表于 2016-10-30 00:07 |楼主
wangxp 发表于 2016-10-29 23:40
trw2000是上古时期的吧,还是不如softICE

国产软件,有时候还是蛮好的。。。
7#
bilibili~! 发表于 2016-10-30 02:02
大牛怎么区别市场上的几种狗
8#
qaz003 发表于 2016-10-30 02:33
呃。。好多年没用过了,TRW还能在目前主流系统下运行???
9#
bulesoft 发表于 2016-10-30 06:48 来自手机
楼主对加密狗很有研究啊
10#
yunfeng 发表于 2016-10-30 07:15
现在trw我都忘记了,下哪些指令了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-17 00:59

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表