某软件圣天诺加密狗破解过程

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

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

: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,到下面:

: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:

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

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


转自:http://www.crackgou.com/pojie/47.html

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是一个强大的软件保护设备,它实现了 163 位椭圆曲线非对称算法和 AES 对称 算法,提供了很多具有创新性的功能 , 并且首次把安全通道的概念引入到基于硬件的软件保护中,彻底解决了被保护软件和安全硬件的安全通信的问题,同时基于许可证的设计,具有更大的灵活性和易用性,给软件开发商提供了一个崭新和强大的软件保护平台。 的产品优势: 安全的通讯方式 是高安全性的世界级与应用程序之间的通讯,采用公钥加密及 128-bit AES 加密机制。每次应用程序和硬件锁间的通讯,都会使用一个独立的加密密钥,让黑客无法暴力破解。此外,也包括了内部验证的功能,可以有效地预防被复制。 快速设置 —商用级API 通过商用级 API,您可以达到超高级别安全,并且不需花额外的编写程序时间,即可有效的控制授权。简单的编程程序可以加强设置的质量及安全性。 简单化的软件升级及启用 API也提供逻辑地址,让开发商可以随意增加或更改内存设置而无须担心地址冲突。特有的技术可以让开发商在安全控制状态下发送更新数据到远程。采用高级的安全传输方式,更新数据的传输更加安全。 快速增加保护 —快速外壳 快速外壳提供快速的方式为您的应用程序增加额外保护,不需更改源代码。与API相互整合,通过增加多层保护,快速外壳可以加强整体的安全性。 设置具有时效功能的授权 — V-Clock 的V-Clock可以让您提供具有时效功能的授权模块,例如试用、软件演示等。 V-Clock是内的基础设置,所以不需额外的电池支持,可以有效的预防时间篡改。 保护您的销售渠道 —经销商锁 让您可以安全的控制及规范您的经销渠道,通过使用经销商锁的方式可以限制授权的最多使用数量或限制只能产生试用授权。提供您的经销网络安全的连接。 保护多个应用程序 可以让你用单一保护多个应用程序。通过multi-tasking技术,您还可以在开发后,针对额外的应用程序增加保护,不需要更改现存的安全架构,降低开发时间及成本。 先进的内存管理 的 V-Cell技术可以优化内存的存储,开发商可以简单且弹性的存储每个上可存取的内存,储存数据及保护应用程序。 支持多种开发环境和平台 提供您在不同开发环境保护应用程序的能力。我们提供您基于市场上经常使用的开发语言。可以让您的应用程序在不同的操作系统运作,只需一次的开发,大大的降低开发时间及成本。 在网络环境发布授权 硬件锁的网络版本可以保护 client-server型式的应用程序,提供服务器监测功能来追踪网络上的授权使用状况。可以让网络管理员将网络上未处于使用状态的授权取消或将转移给其它使用者。管理员可以有效的控制企业内授权的使用。 美 国 软 件 保 护 锁 关于加密系列产品是一种智能型的软件加密系统,它包含一个安装在计算机并行口或 USB 口上的硬件,及有一套相应的接口软件加密工具。 加密锁是全球销量第一的软件加密锁。截止到 2002 年底,加密锁的总销量到三千万只,占同类市场的 55% ,超过所有竞争者销量的总和。 品牌下拥有以下产品,能够提供您最适合的加密方案 奥强锁( UltraPro ) —— 新一代的高强度软件加密锁 超强锁( SuperPro )系列 —— 带有 28 个独立算法单元的超强度加密方案 富饶锁( Pro ) —— 简便易用的经济型加密方案 网络锁系列( SuperproNet ) —— 适用于网络环境的高强度加密方案 美国加密锁的 5 个世界之最 最强的研发实力 SafeNet 公司拥有软件保护领域 16 项核心专利技术,使加密锁遥遥领先于竞争对手, SafeNet 公司每年将收入的 20% 投入研发,确保产品不断改良,始终领先 最好的质量保证 加密锁保持行业内最高的可靠性,硬件故障率低于万分之一 加密锁承非人为、非机械的硬件损坏, 2 年内免费更换 最高的安全性 并口产品独有 ASIC 芯片由 Rainbow 公司自主设计,保证硬件不可复制,拥有最高安全级别 全新推出应用于 USB 加密锁上的 MCU 芯片技术,支持 3-DES 和 128 位 AES 加密算法,加密强度极高 最大的灵活度和易用性 一只加密锁可以同时保护 28 个软件,对软件实行分模块的分发与控制 以易用性为使命,开发工具具有革命性的意义,使复杂的加密过程轻松完成 最多的支持平台和语言 支持操作系统 Dos , Windows3x , Windows9x , Windows NT , Windows2000 , WindowXP , Windows2003 , Mac , SCO UNIX , LINUX , AIX UNIX , SOLARIS UNIX 等 支持 190 多种开发语言 产品的优势 绝对的行业领导地位 拥有 18 项独特的核心专利技术,使产品领先于竞争对手,成为市场的领跑者。 值得信赖的可靠性 软件保护锁保持同行业产品中最高的可靠性,故障率低于万分之一。 方便快速的实现 开发工具包是具有革新意义的工具,使复杂的加密过程轻松上手,简单易用。 最高的质量保证 SafeNet 公司是行业内第一家通过 ISO9001 质量认证的软件保护产品供应商。 对研发大量投入 每年将收入的 20% 投入研究开发,以确保产品不断改良,始终处于领先地位。 真正透明的保护 优良的设计使得加密锁对最终用户完全透明,加密锁的存在不会对软件的运行效率带来任何影响。 高度的安全性和灵活性 特有的专用芯片由芯片厂商专为 SafeNet 设计,其他厂商无法使用,保证加密锁硬件不可复制。 一个软件保护锁中多个算法以及其它优越性能,使成为最灵活、最安全的产品。 管理网络授权 加密锁是经过严格测试并得到 Novell 认证的加密产品 与各种操作平台兼容 SafeNet 的商业伙伴包括: Apple 、 Microsoft 、 IBM 等,保证你无论今天还是未来,在任何平台上皆可安全地运行软件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值