❶ 加密狗加密后文件打开变乱码
完,你肯定被垃圾加密给坑了由于他加密算法的问题解密后没法还原你的文档,就等于第一次你加密的时候就已经把文件删除了除非请编这个加密程序的人能还原文件了因为只有他知道算法,问题是如果他的算法有误的话那他就是神仙估计也还原不了了
❷ 加密狗如何破解
本文介绍的是软件加密狗破解的一般思路和方法。做为软件开发者,研究好软件加密的确很重要,不过也很有必要多了解一些关于加密狗解密和破解的知识,加密和破解就像矛和盾一样,对于解密知识了解的越多,那么编写的加密代码就越好,要知道加密永远都比解密要容易的多,只有知己知彼,方能百战百胜。
硬件加密锁,俗程“加密狗”,对于加密狗的破解大致可以分为三种方法,一种是通过硬件克隆或者复制,一种是通过SoftICE等Debug工具调试跟踪解密,一种是通过编写拦截程序修改软件和加密狗之间的通讯。
硬件克隆复制主要是针对国产芯片的加密狗,因为国产加密狗公司一般没有核心加密芯片的制造能力,因此有些使用了市场上通用的芯片,破解者分析出芯片电路 以及芯片里写的内容后,就可以立刻复制或克隆一个完全相同的加密狗。不过国外的加密狗就无法使用这种方法,国外加密狗硬件使用的是安全性很好的自己研制开 发的芯片,通常很难进行复制,而且现在国内加密狗也在使用进口的智能卡芯片,因此这种硬件克隆的解密方法用处越来越少。
对于Debug调试破解,由于软件的复杂度越来越高,编译器产生的代码也越来越多,通过反汇编等方法跟踪调式破解的复杂度已经变得越来越高,破解成本也越来越高,目前已经很少有人愿意花费大量精力进行如此复杂的破解,除非被破解的软件具有极高的价值。
目前加密锁(加密狗)的解密破解工作主要集中在应用程序与加密动态库之间的通讯拦截。这种方法成本较低,也易于实现,对待以单片机等芯片为核心的加密锁(加密狗)具有不错的解密效果。
由于加密锁(加密狗)的应用程序接口(API)基本上都是公开的,因此从网上可以很容易下载到加密狗的编程接口API、用户手册、和其它相关资料,还可以了解加密狗技术的最新进展。
例如,某个国内知名的美国加密狗提供商的一款很有名的加密狗,其全部编程资料就可以从网上获取到,经过对这些资料的分析,我们知道这个加密锁(加密狗)有64个内存单元,其中56个可以被用户使用,这些单元中的每一个都可以被用为三种类型之一:算法、数据值和计数器。
数据值比较好理解,数据值是用户存储在可读写的单元中的数据,就和存储在硬盘里一样,用户可以使用Read函数读出存储单元里面的数据,也可以使用Write函数保存自己的信息到存储单元。
计数器是这样一种单元,软件开发商在其软件中使用Decrement函数可以把其值减一,当计数器和某种活动的(active)算法关联时,计数器为零则会封闭(deactive)这个算法。
算法单元较难理解一些,算法(algorithm)是这样一种技术,你用Query(queryData)函数访问它,其中queryData是查询 值,上述函数有一个返回值,被加密的程序知道一组这样的查询值/返回值对,在需要加密的地方,用上述函数检查狗的存在和真伪。对于被指定为算法的单元,软 件上是无法读和修改的,即使你是合法的用户也是如此,我理解这种技术除了增加程序复杂性以外,主要是为了对付使用模拟器技术的破解。
此加密锁(加密狗)的所有API函数调用都会有返回值,返回值为0的时候表示成功。
因此,破解思路就出来了,就是使用我们自己的工具(如VB、VC等)重新编写构造一个和加密狗API一样的DLL动态库文件,里面也包含Read、 Write等全部API中包含的函数,使用的参量及返回值和原来的函数一样,所有函数返回零。然后对Query、Read函数进行处理,返回应用软件需要 的数值即可。
这个新的DLL文件编写成功后,直接替换掉原来的DLL文件,这时候再运行应用软件,软件访问加密狗的操作就全部会被拦截,拦截程序永远会返回正确的数据给软件,从而实现了模拟加密狗的运行。
❸ 有破解加密狗的教程吗
加密狗怎么破解狗是什么?狗是一种智能型计算机软件加密工具。它有一个安装在微机后部的并行口上的硬件电路,同时有一套适用于各种语言的接口软件和工具软件。 当被狗保护的软件运行时,程序向插在计算机上的软件保护锁发出查询命令。软件保护锁迅速计算查询并给出响应。正确的响应保证软件继续运行。如果软件保护锁被拔掉,程序将不能运行。复杂的软硬件技术结合在一起以防止非法发布和使用。采用狗保护软件只能在指定的装有狗的微机才能运行,使用时很不方便,如果不小心狗损坏,软件就不能运行,真是欲除而后快!
目前市面常见的狗技术有圣天诺(Sentinel)和HASP等。现在狗的技术发展很快,针对不同的应用场合有不同的类型,如:
强劲狗: 自由定义算法的高强度加密方案
微狗: 面向单机环境的高强度加密方案
USB狗:USB接口的微狗全兼容产品
软件狗: 面向单机环境的低成本加密方案
网络狗: 面向网络环境的加密方案
卡式狗: 面向网络环境的加密方案
现在的狗一般采取了各种的加密技术,目前较先进的加密技术有如下几种:
①AS技术: API函数调用与SHELL外壳加密结合,即使外壳被破坏,加密程序依然不能正常运行。
②反跟踪:
1.数据交换随机噪声技术:有效地对抗逻辑分析仪分析及各种调试工具的攻击。
2.迷宫技术:在程序入口和出口之间包含大量判断跳转干扰,动态改变执行次序,提升狗的抗跟踪能力。
③抗共享: 可从硬件对抗并口共享器,由开发商选择是否共享狗。
④口令: 可由软件开发商设置32位口令,口令错误将不能对存储区进行读写。
⑤时间闸: 某些狗内部设有时间闸,各种操作必须在规定的时间内完成。狗正常操作用时很短,但跟踪时用时较长,超过规定时间狗将返回错误结果。
⑥单片机: 硬件内置单片机,固化的单片机软件保证外部不可读,从而保证狗不可仿制。
⑦存储器: 提供200字节掉电保持存储器供开发商存放关键数据、配置参数等信息。
1、普通的狗一般是通过读取I/O端口的狗来进行验证的,因此可用SOFTICE或其它调试工具来监视I/O端口。一般常用的指令:
BPIO -h 278 R
BPIO -h 378 R
2、要注意的是,用上面2中所提的方法只能对付一般的应用程序,也就是等级为3 的普通程序,这些程序属于直接读取狗的那一类,基本上使用像 SOFTICE 之类的调试工具就可以轻易的解开了,现在世面 上有不少使用 VxD 来读取狗的程序,VxD 属于等级 0 ,也就是最高等级,理论上是不可能拦截得了的,这也是为什么有许多厂商要使用 .VxD 来读狗的原因。
3、其它常用函数断点
CreateFileA (读狗驱动程序), DeviceIOControl, FreeEnvironmentStringsA (对付HASP非常有效). Prestochangoselector (16-bit HASP’s), ’7242’ 查找字符串 (对付圣天诺).
❹ 加密狗加密的软件怎么破解
首先要知道你使用的软件是什么加密方式,还有使用的是什么加密狗加密的
常用解密方法
1、反汇编后静态分析: W32Dasm、IDA Pro
2、用调试工具跟踪动态分析:SoftICE、TRW2000
3、针对各种语言的反汇编工具:VB、Delphi、Java等
4、其他监视工具:FileMon、RegMon 等
反“监听仿真”软件保护锁的编程方法
1、随机查询法:开发商使用SuperPro开发工具生成大量查询、响应对,如:1000 对,并在程序中使用这些校验数据。在程序运行过程中,从1000 对查询、响应对之中,随机的抽出其中一对验证SuperPro加密算法。因为,校验数据很多,每次验证加密算法使用的“查询响应对”可能不同,“监听仿真”软件即使纪录了一部分“查询响应对”,但无法纪录全部“查询响应对”。软件每次运行时,都可能使用新的查询响应校验数据,“监听仿真”软件无法响应这些新的查询。因此,“监听仿真”也就失去了模拟、仿真SuperPro软件保护锁的作用。
2、延时法:开发商可以事先使用开发工具生成大量的校验数据,即:“查询、响应”对,比如:200000 组“查询、响应”对,开发程序过程中,开发商设计定时查询、校验加密锁的机制。在程序运行过程中,每10分钟查询并校验加密锁一次,使用过的校验数据,4年内不再重复使用。即使监听软件24小时记录数据,也需要4年才能纪录完毕。4年后,软件早已过了“热卖期”了,使用监听软件的解密者也就失去了行动意义。
3、分组、分时法:开发商可以在程序中把查询响应对分组,比如:1200 对校验数据可分为12组,每100对一组。程序在一年中的第一月使用第一组校验数据,第二月使用第二组校验数据,以此类推。监听软件就算记录了第一月的校验数据,第二个三个月以后校验数据没有纪录,在以后的时间段软件仍然无法正常使用,从而“监听仿真”失去意义。
4、随机噪声数据法:开发商可以在程序中随机产生查询数据,随机数据和真实数据混合在一起,监听软件即使记录了查询数据,也会被其随机性所迷惑,同时也无法仿真另一个次软件运行产生的随机数,加密软件也就无法破解。
❺ 怎么解密用加密狗加密的word
Word文档的加密和破解
2009-07-27 19:56
作者:朱铮南
Word文档可以设置密码,防止未经授权的人打开或进行修改。
在2003版本里操作菜单“工具”——“选项”,点击“安全性”选项卡,里面有“打开文件时的密码”和“修改文件时的密码”两项。
在“打开文件时的密码”里输入密码,点击“确定”,Word会再让你输入一次密码,以便加深记忆,防止将密码忘却了。保存文档退出后,以后打开的时候必须输入正确的密码才能够打开。
在“修改文件时的密码”里输入密码,点击“确定”,同样Word会再让你输入一次密码,保存文档退出后,如果不输入修改文档的密码,文档只能以只读形式打开。此时如果你修改了文档,将不能够将修改的结果保存下来,但是却能够换个其它文件名进行“另存为”。既然能够“另存为”,因此这个“修改文件时的密码”形同虚设,不知微软保留它的意义是什么?
Word还有另一个加密方式,就是“保护文档”,在“安全性”选项卡里点击“保护文档”或者操作菜单“工具”——“保护文档”,word的右侧会出现一个“保护文档”任务窗格。其中有两个设置项,一个是“格式设置限制”,另一个是“编辑限制”。用得多的是“编辑限制”,钩选“仅允许在文档中进行此类编辑”,下拉列表里有“修订”、“批注”、“填写窗体”、“未作任何更改(只读)”等四个选项。如果选了“填写窗体”,连光标都不能放在被保护的文档中间,自然就无法修改、复制文档的内容了。如果选了“未作任何更改(只读)”,被保护的文档将不能被修改,但文档的内容可以被复制。在设置了“编辑限制”保护的文档里还可以选择部分内容作为例外项允许被复制和修改。设置好后点击“是,启动强制保护”,输入两次密码就实现了对文档的保护。
有矛就有盾,对加了密码保护的Word文档可以采用密码破解工具软件进行破解,常用的有Advanced Office Password Recovery、Advanced Office Password Breaker、Office Password Remover等。其中最值得推荐的是Office Password Remover,这款软件需要连接在因特网上使用,它的最大优点是破解速度非常快,不管是多么复杂的word文档密码,几秒钟就被破解了。
至于“保护文档”密码的破解,根本就不需要使用密码破解工具软件,新建一个空白Word文档,操作菜单“插入”——“文件”,选中被保护了的文档,将其插入进来就将“保护文档”密码破除了。
❻ 怎么破解U盘加密狗
电脑狗,即加密狗,现在所说的加密狗,一般都是硬件加密狗。是一种类似于u盘一样的东西,是一种防盗版的方式。一般是把程序的一小部分或解密部分集合到加密狗的硬件中,防止软件的盗版。
现在好像除了复制加密狗,没有什么很好的破解方法。
加密狗(dongle),经常被认为是硬件保护,它是一个可被附加在计算机并口、串口或USB上的小插件,它包含厂家烧制的EPROM和定制的专用集成电路。dongle保护的的原理就是软件开发者在程序里经常检查dongle中的单元(Cell)的并对比返回值,这种检查可以是直接读单元或者是使用某种内部算法(此时单元受到保护无法直接读)。
❼ 怎么破解USB加密狗
hasp 系列加密狗破解有的朋友认为很难,其实不然,只要有足够的耐心和技术基础。是没有问题的。
--------------------------------------------------------------------------------------------------------
004015FF |. 8D95 ACFBFFFF lea edx,[local.277]
00401605 |. 52 push edx
00401606 |. 8B85 F8FBFFFF mov eax,[local.258]
0040160C |. 50 push eax
0040160D |. 8B8D A8FBFFFF mov ecx,[local.278]
00401613 |. 51 push ecx
00401614 |. 68 D4E54000 push APP.0040E5D4 ; ASCII "EN"
00401619 |. 8B55 E8 mov edx,[local.6]
0040161C |. 52 push edx
0040161D |. E8 8E230000 call <jmp.&user_dll.sui_In> ;这个CALL只要一执行,就死掉,所以必须跟进
00401622 |. 8945 EC mov [local.5],eax
00401625 |. 8B45 EC mov eax,[local.5]
00401628 |> 8B4D F4 mov ecx,[local.3]
0040162B |. 64:890D 00000000 mov fs:[0],ecx
00401632 |. 8B4D E4 mov ecx,[local.7]
00401635 |. E8 C72D0000 call APP.00404401
0040163A |. 8BE5 mov esp,ebp
0040163C |. 5D pop ebp
0040163D \. C3 retn
--------------------------------------------------------------------------------------------------------
6、跟进后出现一下代码,看第一行,就是0040161D 处调用的函数,再看右面的注释,心跳加快,InitSystem,从名字上你都能猜想它会干什么,对,读狗的相关代码就应该在这儿初始化(当然还要初始化其他信息),继续跟进
--------------------------------------------------------------------------------------------------------
004039B0 $- FF25 C8554000 jmp ds:[<&user_In>] ; InitSystem
004039B6 $- FF25 C4554000 jmp ds:[<&user_Star>] ; StartProgram
004039BC $- FF25 C0554000 jmp ds:[<&user_Mai>]
004039C2 $- FF25 AC544000 jmp ds:[<&XXX_DLL.#3>]
004039C8 $- FF25 A8544000 jmp ds:[<&XXX_DLL.#47>]
--------------------------------------------------------------------------------------------------------
7、跟进后,代码是一系列的IsBadReadPtr,由此判断该处是初始化内存工作,离读狗还用有一段距离。部分代码如下,还有更多的IsBadReadPtr,没必要就不贴了,贴一点提示思路即可。
一直按F8,痛苦的是这段代码中有个循环,要循环20多次,稍不留神就结束循环,立刻进入另一个关键CALL,程序又死掉。所以在这儿又费了我很多时间。
--------------------------------------------------------------------------------------------------------
00EF5940 > 55 push ebp ;InitSystem函数
00EF5941 8BEC mov ebp,esp
00EF5943 81EC 280C0000 sub esp,0C28
00EF5949 A1 6C2EF100 mov eax,ds:[F12E6C]
00EF594E 8945 E0 mov ss:[ebp-20],eax
00EF5951 57 push edi
00EF5952 8B45 0C mov eax,ss:[ebp+C]
00EF5955 50 push eax
00EF5956 68 6848F100 push user_dll.00F14868
00EF595B E8 34F70000 call <jmp.&MSVCR71.strcpy>
00EF5960 83C4 08 add esp,8
00EF5963 B9 583AF100 mov ecx,user_dll.00F13A58
00EF5968 85C9 test ecx,ecx
00EF596A 74 46 je short user_dll.00EF59B2
00EF596C 6A 01 push 1
00EF596E 68 583AF100 push user_dll.00F13A58
00EF5973 FF15 1072F000 call ds:[<&KERNEL32.IsBadWritePtr>] ; kernel32.IsBadWritePtr
00EF5979 85C0 test eax,eax
00EF597B 75 35 jnz short user_dll.00EF59B2
00EF597D 837D 10 00 cmp dword ptr ss:[ebp+10],0
00EF5981 74 26 je short user_dll.00EF59A9
00EF5983 6A 01 push 1
00EF5985 8B55 10 mov edx,ss:[ebp+10]
00EF5988 52 push edx
00EF5989 FF15 1472F000 call ds:[<&KERNEL32.IsBadReadPtr>] ; kernel32.IsBadReadPtr
00EF598F 85C0 test eax,eax
00EF5991 75 16 jnz short user_dll.00EF59A9
00EF5993 68 04010000 push 104
00EF5998 8B45 10 mov eax,ss:[ebp+10]
00EF599B 50 push eax
00EF599C 68 583AF100 push user_dll.00F13A58
00EF59A1 FF15 1872F000 call ds:[<&KERNEL32.lstrcpynW>] ; kernel32.lstrcpynW
--------------------------------------------------------------------------------------------------------
8、上面代码执行结束后迅速来到下面代码,注释处的CALL执行就死,跟进
--------------------------------------------------------------------------------------------------------
00EF5D8A 6A 03 push 3
00EF5D8C 68 10000100 push 10010
00EF5D91 8B15 9C3EF100 mov edx,ds:[F13E9C]
00EF5D97 83C2 12 add edx,12
00EF5D9A 52 push edx
00EF5D9B 68 D80CF100 push user_dll.00F10CD8
00EF5DA0 A1 9C3EF100 mov eax,ds:[F13E9C]
00EF5DA5 8B88 2C0F0000 mov ecx,ds:[eax+F2C]
00EF5DAB 51 push ecx
00EF5DAC E8 45E70000 call <jmp.&XXX_dll.#66_UserMessage>
00EF5DB1 EB 15 jmp short user_dll.00EF5DC8
00EF5DB3 E8 580B0000 call user_dll.00EF6910 ;该CALL执行就死掉,读狗函数在这里
00EF5DB8 85C0 test eax,eax
00EF5DBA 74 0C je short user_dll.00EF5DC8
--------------------------------------------------------------------------------------------------------
9、跟进后一直按F8,遇到CALL user_dll.00XXXXXX字样的要格外小心,果然执行到某个CALL的时候死掉,只好记住地址,重设断点,重新来,继续跟进死掉的CALL。由于这儿一直是寻找读狗函数,所以不再贴代码了,大家只看思路,无用代码太多,会扰乱思路.
10、不厌其烦的重复上述过程突然发现下面代码,相信仅仅函数名足以让你兴奋
-------------------------------------------------------------------------------------------------------
00EF6EB8 51 push ecx
00EF6EB9 68 680AF100 push user_dll.00F10A68
00EF6EBE 8B15 9C3EF100 mov edx,ds:[F13E9C]
00EF6EC4 83C2 12 add edx,12
00EF6EC7 52 push edx
00EF6EC8 E8 85D70000 call <jmp.&HLK_dll.#13_hlk_LogIn> ;LogIn,登录狗
00EF6ECD 85C0 test eax,eax ;判断返回值,如是0
00EF6ECF 0F84 B2000000 je user_dll.00EF6F87 ;跳走,死掉
00EF6ED5 C705 6C3EF100 01000000 mov dword ptr ds:[F13E6C],1
00EF6EDF E8 5CD70000 call <jmp.&HLK_dll.#10_hlk_Avail> ;读另一个数据,为ReadDong做准备,虽然
00EF6EE4 85C0 test eax,eax ;不知道读什么,但返回值如是0
00EF6EE6 0F84 9B000000 je user_dll.00EF6F87 ;跳走,死掉
00EF6EEC 8D85 5CFFFFFF lea eax,ss:[ebp-A4]
00EF6EF2 50 push eax
00EF6EF3 E8 54D70000 call <jmp.&HLK_dll.#15_hlk_ReadDong> ;再读
00EF6EF8 85C0 test eax,eax ;判断返回值,如是0
00EF6EFA 0F84 87000000 je user_dll.00EF6F87 ;OVER
00EF6F00 B9 2848F100 mov ecx,user_dll.00F14828 ;判断ECX是否为0,跟踪发现该值是狗的编号
00EF6F05 85C9 test ecx,ecx ;是0与否,不影响程序运行
00EF6F07 74 2B je short user_dll.00EF6F34
00EF6F09 8D55 98 lea edx,ss:[ebp-68] ;该地址存放狗的编号
00EF6F0C 85D2 test edx,edx
00EF6F0E 74 16 je short user_dll.00EF6F26
00EF6F10 6A 06 push 6
00EF6F12 8D45 98 lea eax,ss:[ebp-68]
00EF6F15 50 push eax
00EF6F16 68 2848F100 push user_dll.00F14828
00EF6F1B FF15 E875F000 call ds:[<&MSVCR71.strncpy>] ; MSVCR71.strncpy
--------------------------------------------------------------------------------------------------------
11、聪明的你肯定知道该做什么了,对,只要把00EF6ECF、00EF6EE6、00EF6EFA三处的je改为jne即可跳过狗的检查。我毫不犹豫的就改了,运行,然而并没有出现预想的兴奋的事情。出现一个错误提示“没有发现可选文件”。
12、“可选文件”是什么意思,到软件安装目录查看,有个OPTION文件夹,里面有很多文件,用UltraEdit打开,看不懂呵呵
13、将改文件夹中的文件所有文件删除,带狗运行,出现和11步同样的提示;恢复文件,运行正常。由此可见,解密那些文件需要狗中的数据,大家知道HASP狗用的是AES,难道狗中存放着AES密码??带着这样的疑问跟踪程序,来到下面代码
--------------------------------------------------------------------------------------------------------00EF723F 8B8D 68F6FFFF mov ecx,ss:[ebp-998] ;压入的三个参数意义就不说明了,因为没必要
00EF7245 51 push ecx
00EF7246 8D95 64F8FFFF lea edx,ss:[ebp-79C]
00EF724C 52 push edx
00EF724D 8D85 BCFAFFFF lea eax,ss:[ebp-544]
00EF7253 50 push eax
00EF7254 E8 47180000 call user_dll.00EF8AA0 ;该函数执行完后,EDX会出现一些明码,明码信息
大概为APPLICAITON=XXX;OPTION=XXX.....是不是很像文件启动需要检查的选项?所以要弄懂解密算法,必须跟进
--------------------------------------------------------------------------------------------------------
14、跟进后,部分代码如下,这部分代码很关键,所以贴的比较多。但是有很多是内核函数,很容易读懂。
--------------------------------------------------------------------------------------------------------
00EF8B30 8D8D 68FDFFFF lea ecx,ss:[ebp-298]
00EF8B36 51 push ecx
00EF8B37 8B55 0C mov edx,ss:[ebp+C]
00EF8B3A 83C2 2C add edx,2C
00EF8B3D 52 push edx
00EF8B3E 68 5038F100 push user_dll.00F13850
00EF8B43 E8 14BD0000 call <jmp.&XXX_DLL.#100_ExtendPathName> ; 获取文件完整路径
00EF8B48 6A 00 push 0
00EF8B4A 8D85 70FFFFFF lea eax,ss:[ebp-90]
00EF8B50 50 push eax
00EF8B51 8D8D 68FDFFFF lea ecx,ss:[ebp-298]
00EF8B57 51 push ecx
00EF8B58 E8 63BC0000 call <jmp.&XXX_DLL.#47_MakeSString>
00EF8B5D 50 push eax
00EF8B5E FF15 0872F000 call ds:[<&KERNEL32.OpenFile>] ; 打开文件
00EF8B64 8985 54FDFFFF mov ss:[ebp-2AC],eax
00EF8B6A 83BD 54FDFFFF FF cmp dword ptr ss:[ebp-2AC],-1
00EF8B71 74 55 je short user_dll.00EF8BC8
00EF8B73 8B95 50FDFFFF mov edx,ss:[ebp-2B0]
00EF8B79 52 push edx
00EF8B7A 8B85 60FDFFFF mov eax,ss:[ebp-2A0] ;存放读入数据的缓冲区,关键(后面破解用上)
00EF8B80 50 push eax
00EF8B81 8B8D 54FDFFFF mov ecx,ss:[ebp-2AC]
00EF8B87 51 push ecx
00EF8B88 FF15 F071F000 call ds:[<&KERNEL32._hread>] ; 读文件,ebp-2A0为存放读入数据的缓冲区
00EF8B8E 3B85 50FDFFFF cmp eax,ss:[ebp-2B0]
00EF8B94 75 19 jnz short user_dll.00EF8BAF
00EF8B96 8B55 10 mov edx,ss:[ebp+10]
00EF8B99 52 push edx
00EF8B9A 8B85 64FDFFFF mov eax,ss:[ebp-29C]
00EF8BA0 50 push eax
00EF8BA1 8B8D 60FDFFFF mov ecx,ss:[ebp-2A0] ;存放解密后的数据,和读入缓冲区地址相同
00EF8BA7 51 push ecx
00EF8BA8 E8 B1BA0000 call <jmp.&HLK_dll.#12_hlk_Crypt> ;对读入的数据进行解密,须弄懂算法
00EF8BAD EB 0A jmp short user_dll.00EF8BB9
00EF8BAF C785 64FDFFFF 00000000 mov dword ptr ss:[ebp-29C],0
00EF8BB9 8B95 54FDFFFF mov edx,ss:[ebp-2AC]
00EF8BBF 52 push edx
00EF8BC0 FF15 F471F000 call ds:[<&KERNEL32._lclose>] ; 关闭文件
00EF8BC6 EB 0A jmp short user_dll.00EF8BD2
00EF8BC8 C785 64FDFFFF 00000000 mov dword ptr ss:[ebp-29C],0 ;后面的函数不做解释了,只需知道解密后的
00EF8BD2 8B85 60FDFFFF mov eax,ss:[ebp-2A0] ;数据存放在ebp-2A0
00EF8BD8 0385 64FDFFFF add eax,ss:[ebp-29C]
00EF8BDE C600 00 mov byte ptr ds:[eax],0
00EF8BE1 8B4D 08 mov ecx,ss:[ebp+8]
00EF8BE4 8B95 60FDFFFF mov edx,ss:[ebp-2A0]
00EF8BEA 8911 mov ds:[ecx],edx
00EF8BEC 8B85 64FDFFFF mov eax,ss:[ebp-29C]
00EF8BF2 8B4D FC mov ecx,ss:[ebp-4]
00EF8BF5 E8 E8C30000 call user_dll.00F04FE2
00EF8BFA 8BE5 mov esp,ebp
00EF8BFC 5D pop ebp
00EF8BFD C3 retn
--------------------------------------------------------------------------------------------------------
15、为了得到解密后的数据,跟进00EF8BA8处的call <jmp.&HLK_dll.#12_hlk_Crypt>,看看到底是什么算法。可是乐观的情绪又受打击,该函数有大量的花指令,菜鸟阶段,不懂如何去除花指令,研究肯定不是一天两天的事。所以不能在一棵树上吊死,换个思维,为什么不能用程序本身的代码进行解密呢!!!
对,就让程序自身帮我们干活!说干就干,在步骤13的00EF723F处设断,反复运行程序,每执行一次查看ebp-2A0处的值,并mp出来,另存为16进制文件,这些文件就是解密过的文件,将其覆盖原来的加密文件。剩下要做的就是跳过上面代码中的解密模块(_hlk_Crypt)。
这个很简单,来到00EF8B8E 处,即程序刚进行完_hread之后,将该处的代码cmp eax,ss:[ebp-2B0]改为jmp 00EF8BB9然后汇编。由于_hread函数和_hlk_Crypt函数用的是同一个缓冲区,所以_hread函数执行完毕后,ebp-2A0处的已解密数据就可顺利为后续程序使用了。
16、经过上面修改后,F9,程序顺利启动!!!!
【继续完善】
17、程序运行一段时间后,弹出对话框,通知确定狗的存在!!看来程序启动中还是要定时检查的。
第一个念头:查找SetTimer函数,果然找到,且只有一次调用,心想就是这个函数在作怪了,该函数的uElapsed值为1秒,我将其该为9A7EC800,即30天。运行,可是仍然定时检查狗的存在
第二个念头:查找其他有关时间的函数,但感觉有点费劲,进而转第三个念头
第三个念头:以其他的函数设断点,如大家常用的CreateFile、DeviceIoControl等,但没用过,感觉肯定不是跟踪一两句代码就可搞定的事情,进而转第四个念头
第四个念头:一劳永逸的想法,从源头解决问题。为什么不直接修改读狗函数的返回值?这样程序无论何时检查狗都无所谓。
重新跟进hlk_LogIn、hlk_Avail、hlk_ReadDong三个函数,发现这三个函数返回前都有共同的代码:
--------------------------------------------------------------------------------------------------------
00B5126C 837D FC 00 cmp dword ptr ss:[ebp-4],0 ;看ebp-4是否为0
00B51270 0F94C0 sete al ;是,则eax=1,有狗
00B51273 8B4D F4 mov ecx,ss:[ebp-C]
00B51276 E8 C6640400 call HLK_dll.00B97741 ;该CALL并不是真正函数,经验证不影响上面的EAX值
00B5127B 8BE5 mov esp,ebp
00B5127D 5D pop ebp
00B5127E C2 0C00 retn 0C
-----------------------------------------------------------------------------------------------------
不插狗的情况下[ebp-4] = 9,因此eax = 0,无狗,因此只需将 sete al改为 setne al,汇编,即可。
至此,打狗结束,程序非常正常。将修改后的文件另存到可执行文件,做为补丁,覆盖原文件,狗解除。
❽ 详细破解usb加密狗步骤及需要的软件
加密狗如果设置了不能同时共用一个属性的功能,另一台机器就无法使用,这就是加密狗所要保护的安全功能,防止非法授权用户的使用..如果破解的掉,那这款加密狗的加密安全等级并不高,或者说没有它的实用价值.好的加密狗可以做到有效防止调试,反编译等措施,保护软件利益不受非法侵犯.SafeNet加密狗拥有着全球顶级的信息安全技术,可以很好有效的保护软件防止盗版问题的发生..采用AES-128位算法进行加密,ECC算法进行数字签名等措施.有兴趣的朋友可以联系杭州旺财信息,可以提供免费产品测试3个月