OCX控件的暴力破解_第1页
OCX控件的暴力破解_第2页
OCX控件的暴力破解_第3页
OCX控件的暴力破解_第4页
OCX控件的暴力破解_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、E3个国内知名 WEB OFFICE OCX控件的暴力破解,很详细 收藏匡标题:【原创】一个国内知名WEB OFFICE OCX控件的暴力破解,很详细作者:gooddudu时 间:2005-05-24,10:35链接: HYPERLINK /showthread.php?t=13922 /showthread.php?t=13922本文特别详细的描述了一个国内知名控件(OCX )的暴力破解方法,只限学习交流,请不要非法使用,如果是作者看见了,请不要生气,我可没拿你的控件卖钱,我只是爱好破解而已,还是请作者自己提高加密 意识,保护知识产权吧。破解控件NTKO OFFICE 控件 V ( OCX)

2、破解方法暴力破解破解工具W32Dasm ,UtrlEdit , Cabinet Manager 2001b 3.7,ChinaTcp_CodeSign ,后两个是CAB包的打包和签名工具。控件用途很强大啦,做办公自动化系统的最佳控件,支持VB、DEPHI、C+、ASP、JSP、Domino等,具体参见官方网站: HYPERLINK 。郑重声明本控件为国内知名的控件之一,非集团单位内部使用版本在2000元左右,集团用户使用可能在5千元左右,产品授权无限分发使用在2万左右,OEM就更贵了。以下破解只是为了自己私人使用,发表岀来也是为了学习交流,请大家不要做违法的事情,也不要向我索取详细的破解资料和

3、破解控件,其 实,破解很简单,我也悲叹为什么优秀的东西反而加密措施这么不严密。我已经通过折中途径告知作者, 希望他能在3.0版本上自己写算法加密或加壳,OCX能否加壳,以我现在的知识水平,还不清楚。一、特别说明本控件除在VB、DEPHI、C+中可以使用外(VC除外),也可在网页上使用。网页上使用将是一个.CAB包,使用方法和3721上网伴侣、百度上网伴侣、Flash插件一样,第一次打开含有此控件的网页时将弹岀安装对话框。在网页上嵌套代码的具体格式如下:param name=ProductCaption value=密码,是 32 位的 16 进制数字 不能装载文档控件。请在检查浏览器的选项中检

4、查浏览器的安全设置。 看见输入帐号和密码的地方了吗?就在网页调用的 param 参数里写。因为是 CAB 包,还要在浏览器上显示安装对话框,所以,此 CAB 包必须具有签名信息, 版本还 是作者公司自己的签名, IE 浏览器告知没有可信任的证书; 3.0 版本已经获得了微软的相关认证, IE 浏览 器告知可信任。CAB 包中一般包含有 OCX 控件和控件的 INF (信息)文件,所以,破解过程必须经过以下步骤:1 、解包出 OCX 文件。用 Winrar 即可解开2 、破解 OCX 文件3、 打包破解的 OCX和修改过的INF文件为CAB包。使用工具为 Cabinet Manager 。Win

5、rar不能打包 CAB 文件的。4、CAB 包重新签名。使用工具为 ChinaTcp_CodeSign 。微软也有一个签名工具,就在 VC5.0 版本安 装盘的一个目录下, 具体位置我忘记了; 本来微软网站也提供下载, 后来好象是因为控件注册的安全问题, 链接去年就已失效。有关 Cabinet Manager 和 ChinaTcp_CodeSign ,网上有下载,但不好找的。具体使用方法,自己看它们的帮助文件即可,很简单。这里是讲 OCX 本身的破解。二、破解思路试用 ”版本,试用版本有定期时间限本控件有帐号和密码限制,如果不输入正确的帐号和密码,自动转成 制,从发行到过期是 1 个月的时间,

6、过期将不能正常使用;如输入正确的帐号和密码,系统将不检测过期 日期。本次破解我将使用暴力破解,不探讨复杂的帐号到正确密码的算法。 首先是过期检测。因为不输入正确的帐号和密码将检测过期,所以必须破解,思路是不让其检测日期,或 者将过期日期推到 9999 年。再次是帐号和密码检测。做到随便输入帐号和密码都可正常使用。 还要避免一个破解后的代码执行逻辑问题,就是正确的帐号和密码也可以使用,这将不是只修改一个地方 的跳转指令能解决的问题。思路是,不论输入什么帐号和密码,系统都认为是错误的,这样就可以只修改 跳转指令解决。对于一些无关紧要的提示信息,不做完美破解,可直接修改资源文件(如“关于 ”对话框)

7、,也可直接在源代码中将信息编码的字符抹成空格( 20 )。由于是 OCX 控件,自身不能运行, 所以不能动态跟踪, 我一开始想用 VB 或 C+ 做个使用此控件的程序, 后来发现跟踪麻烦, 很难发现关键代码处。 后来用 W32Dasm 反编译了一下, 觉得汇编代码很亲切, 以我 的汇编语言水平,还不如静态分析呢。破解工作就这样开始了,耗时近 4 个小时搞定。破解着手点:日期检测一般要读取本地时间,本身要用一个 API 函数: KERNEL32.GetLocalTime 。 帐号密码检测要比较字符串,本身也要调用一个 API 函数: KERNEL32.lstrcmpA 。W32Dasm 反汇编后

8、就提供本控件调用的输入输出API 函数, 双击函数行, 就可快速切换到相应的调用汇编代码处,利用这个原理,作为破解的着手点。三、详细破解开始因为此控件有时间限制,肯定要调用 WINDOWS API 函数查询当前破解机器的本地时间,这个 API 为 K ERNEL32.GetLocalTime ,所以要查找汇编代码中那些地方调用了此函数。打开 W32Dasm 的菜单 “函 数”- “输入函数 ”列表,寻找到 KERNEL32.GetLocalTime,双击之, W32Dasm 汇编区域代码将切换到 调用 KERNEL32.GetLocalTime 处如下代码:Reference To: KERN

9、EL32.GetLocalTime, Ord:012Fh:22018AE0 FF15CC000222Call dword ptr 220200CC:22018AE6 6A10push 00000010:22018AE8 8D45E0lea eax, dword ptr ebp-20:22018AEB 6A00push 00000000:22018AED 50push eax:22018AEE E89D100000call 22019B90注意此时不要着急往下浏览代码,应该往上浏览,为什么呢?因为此处代码可能不是程序的主过程,很可 能是一个进行过期检测的自编函数,这是因为程序可能在很多地方调用过

10、期检测,所以一般都要编写成一 个公用函数调用。 那么, 往上浏览到什么地方停呢?应该慢慢翻到具有调用入口的地方停,记下这些入口,后面还要继续望上追溯呢!以下为上翻找到的调用处代码,完整的日期检测要从这里开始分析。* Referenced by a CALL at Addresses:|:22003CDC , :220044B3 , :22004585 , :220056FC 4个调用入口:22018AD5 55push ebp:22018AD6 8BECmov ebp, esp:22018AD8 83EC30sub esp, 00000030:22018ADB 8D45D0lea eax, d

11、word ptr ebp-30:22018ADE 56push esi:22018ADF 50push eax完整的过期检测函数代码如下::22018AF3 8B35EC000222mov esi, dword ptr 220200EC4个调用入口* Referenced by a CALL at Addresses: |:22003CDC , :220044B3 , :22004585 , :220056FCW32Dasm 反汇编器告诉我们,以上地址的代码处都 CALL 了这里的过期检测函数,你可以按以上地址寻找并修改每个 CALL 代码后面的判断代码指向来完成暴力不过期。但会存在一个问题,

12、因为判断逻辑 反了,如果现在还没过期,程序会报告过期,过期了反而认为不过期,有意思吧?!所以,我们应该分析如改个 9999 年 12 月 28 日一下过期检测代码, 看能不能通过修改下面的代码把过期日期往后推推呢?! 总可以吧!好,咱们继续往下看吧!:22018AD5 55push ebp:22018AD6 8BECmov ebp, esp:22018AD8 83EC30sub esp, 00000030:22018ADB 8D45D0lea eax, dword ptr ebp-30:22018ADE 56push esi:22018ADF 50push eax* Reference To:

13、 KERNEL32.GetLocalTime, Ord:012Fh:22018AE0 FF15CC000222Call dword ptr 220200CC:22018AE6 6A10push 00000010:22018AE8 8D45E0lea eax, dword ptr ebp-20:22018AEB 6A00push 00000000:22018AED 50push eax:22018AEE E89D100000call 22019B90* Reference To: KERNEL32.SystemTimeToFileTime, Ord:02C8h|:22018AFC 8D45F0l

14、ea eax, dword ptr ebp-10:22018AF9 83C40Cadd esp, 0000000C:22018AFF 66C745E0D507 mov ebp-20, 07D5f关键部分1找到了,就是上面那行代码,“ 07D5是什么,就是10进制的“ 2005,作者直接把日期写进程序了!看来,控件在2005 年过期。改成: 270F ,即“9999”年。哈,感觉真爽。下面还有月和日的赋值代码:22018B05 50push eax:22018B06 8D45D0lea eax, dword ptr ebp-30:22018B09 50push eax:22018B0A 66C7

15、45E20300 mov ebp-1E, 0003f关键部分2找到了,就是上面那行代码,“ 0003是什么,就是10进制的3月,看来,控件在 2005年 3 月过期。改成: 000C ,即“ 1 2”月。哈,其实这是多余的,因为年改了就行了。:22018B10 66C745E61700 mov ebp-1A, 0017f关键部分3找到了,就是上面那行代码,“ 0017是什么,就是10进制的23日,看来,控件在2005年 3 月 23 日过期。改成: 001C ,即“28”日。哈,其实这也是多余的。:22018B16 FFD6call esi:22018B18 8D45F8lea eax, dw

16、ord ptr ebp-08:22018B1B 50push eax:22018B1C 8D45E0lea eax, dword ptr ebp-20:22018B1F 50push eax:22018B20 FFD6call esi:22018B22 8D45F8lea eax, dword ptr ebp-08:22018B25 50push eax:22018B26 8D45F0lea eax, dword ptr ebp-10:220095CA FF1528010222Call dword ptr 22020128|:22018B29 50push eax* Reference To:

17、 KERNEL32.CompareFileTime, Ord:0023h|:22018B2A FF15E8000222 Call dword ptr 220200E8:22018B30 33C9xor ecx, ecx:22018B32 5Epop esi:22018B33 85C0test eax, eax:22018B35 0F9FC1setg cl:22018B38 8BC1mov eax, ecx:22018B3A C9leave:22018B3B C3ret这不,我们把过期日期推到了 9999 年 12 月 28 日,那所有调用过期检测函数的 CALL 后面的判断跳转代码就不需要修改

18、了,也不会再出逻辑问题。*因为此控件有帐号和密码检测, 很可能要调用 WINDOWS API 函数的字符串比较函数, 这个 API 为 KER NEL32.lstrcmpA ,所以要查找汇编代码中那些地方调用了此函数。 打开 W32Dasm 的菜单 “函数 ”-“输入 函数 ”列表,寻找到 KERNEL32. lstrcmpA ,双击之, W32Dasm 汇编区域代码将切换到调用 KERNEL3 2. lstrcmpA 处,这一般会有多个, 因为控件中的字符串比较一般有多个, 不一定都是帐号和密码检测的, 这需要自己花点时间判断分析。以下为帐号和密码检测的 KERNEL32.lstrcmpA

19、调用处。* Reference To: KERNEL32.lstrcmpA, Ord:0329h:220095D0 F7D8neg eax:220095D2 1BC0sbb eax, eax:220095D4 40inc eax:220095D5 EB02jmp 220095D9同过期检测,注意此时不要着急往下浏览代码,应该往上浏览,为什么呢?因为此处代码可能不是程序的 主过程,很可能是一个进行帐号和密码检测的自编函数,这是因为程序可能在很多地方调用帐号和密码检 测,所以一般都要编写成一个公用函数调用。那么,往上浏览到什么地方停呢?应该慢慢翻到具有调用入 口的地方停,记下这些入口,后面还要继续

20、往上追溯呢!以下为上翻找到的调用处代码:* Referenced by a CALL at Addresses:|:22003CD3 , :22004491 , :2200457C , :22005698 , :2200CAF5|:2200952C 55 push ebp:2200952D 8BEC mov ebp, esp:2200952F 81ECA0040000sub esp, 000004A0:22009535 53push ebx:22009536 56push esi:22009537 8B7508mov esi, dword ptr ebp+08以下为完整的帐号和密码检测函数:*

21、 Referenced by a (U)nconditional or (C)onditional Jump at Addresses:|:2200433D(C), :2200436B(C), :22004379(U), :2200438E(C)t W32Dasm 反汇编器告诉我们,以上地址的代码处都 CALL 了这里的帐号和密码检测,你可以按以上地址寻找并修改每个 CALL 代码后面的判断代码指向来完成暴力破解。但会存在一个问题,因为判断逻辑反 了,如果是正确的帐号和密码,程序会报告试用,不正确的帐号和密码反而认为正版,有意思吧?!所以, 我们应该分析一下帐号和密码检测代码,看能不能通过修改

22、下面的代码,做到以下一点,就是:输入正确 的帐号和密码,系统也当作错误的帐号和密码,以统一 CALL 处判断逻辑的指向修改。好,咱们继续往下 看吧!|* Referenced by a CALL at Addresses:读取帐号和密码的代码|:22003CD3 , :22004491 , :2200457C , :22005698 , :2200CAF5|:2200952C 55push ebp:2200952D 8BECmov ebp, esp:2200952F 81ECA0040000sub esp, 000004A0:22009535 53push ebx:22009536 56pus

23、h esi:22009537 8B7508mov esi, dword ptr ebp+08:2200953A 57push edi:2200953B FFB602010000push dword ptr esi+00000102:22009541 E811FF0000call 22019457:22009546 FFB606010000push dword ptr esi+00000106:2200954C 8BF8mov edi, eax:2200954E E804FF0000call 22019457:22009553 85FFtest edi, edi:22009555 8BD8mov

24、 ebx, eax:22009557 747Eje 220095D7T关键部分找到了,帐号和密码运算结果不符合正版要求,转EAX清0,详细不用做分析,看看跳转处的代码就一切很明白了。:22009559 85DBtest ebx, ebx:2200955B 747Aje 220095D7T关键部分找到了,帐号和密码运算结果不符合正版要求,转EAX清0,详细不用做分析,看看跳转处的代码就一切很明白了。如果帐号和密码符合正版要求,继续下面的代码* Reference To: KERNEL32.lstrlenA, Ord:0335h|:2200955D 8B35AC010222 mov esi, dw

25、ord ptr 220201AC:22009563 57push edi:22009564 FFD6call esi:22009566 85C0test eax, eax:22009568 746Dje 220095D7T关键部分找到了,帐号长度不符合要求,转EAX清0,详细不用做分析,看看跳转处的代码就一切很明白了。因为即使运算关系正确,但帐号和密码长度不符合也不可以算正确。:2200956A 53push ebx:2200956B FFD6call esi:2200956D 85C0test eax, eax:2200956F 7466je 220095D7T关键部分找到了,密码长度不符合

26、要求,转EAX清0。后面没有跳转错误的代码了, 220095D7 处是一个清除 EAX 寄存器的代码, 从这里我们知道, EAX 寄存器为 0,错误,为1,正版,下面的代码没做详细分析,可能是一些正版软件的信息输出,因为是暴力破解,又不是找算法,就要找关键点看,一直往下翻省略一大块代码到了又一个关键地方J* Reference To: KERNEL32.lstrcmpA, Ord:0329h|:220095CA FF1528010222 Call dword ptr 22020128:220095D0 F7D8neg eax:220095D2 1BC0sbb eax, eax:220095D4

27、 40inc eax:220095D5 EB02jmp 220095D9f 这个 jmp 220095D9语句跳过了下面的 “ xoreax, eax ”语句,说明此处应该是检测到的是正确的帐号和密码,此时 EAX 肯定是 “1”。为了让 EAX 不论帐号密码正确与否都按错误对待,就是永远输出是“0”,将“jmp 220095D9修改成两个连续的空指令“nop”即可,为什么是两个“nop”,这是因为“jmp 220095D9”指令占两个字节。* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:|:220095

28、57(C), :2200955B(C), :22009568(C), :2200956F(C):220095D7 33C0 xor eax, eax EA寄存器清 0* Referenced by a (U)nconditional or (C)onditional Jump at Address:|:220095D5(U):220095D9 5Fpop edi:220095DA 5Epop esi:220095DB 5Bpop ebx:220095DC C9leave:220095DD C20400ret 0004以上的修改够变态吧,反正我觉得没人会这么修改,所有的帐号和密码现在都是错误的,

29、哈!好了,现在该找找调用帐号密码检测的 CALL 了,找见后进行判断跳转代码的指向修改。至于过期检测 C ALL 调用代码后的跳转指向,就不修改了,因为现在的过期日期是 9999-12-28 ,啦啦啦,你就随便 CAL L 吧。如何找到 “调用帐号密码检测代码的 CALL” 呢?前面我让记住的那些地址就是啦,再次复制粘贴如下:* Referenced by a CALL at Addresses:|:22003CD3 , :22004491 , :2200457C , :22005698 , :2200CAF5从上面可以看出, 有 5 个地方调用了帐号密码的检测函数, 这 5 个 CALL 有

30、 2 个是关键地方, 其它 3 个都 是些信息的判断显示,如 “关于 ”对话框的授权显示等。因为是暴力破解,我忽略了一些其它逻辑,就是非 正确的帐号和密码,会导致“About”对话框的授权显示为 试用版”可惜我现在给改的没回头余地了,因为正确的帐号和密码也当错误看待了。怎么办?有办法,使用VC以资源形式”打开这个控件的 关于”对话框资源,随便加一个文本框,填上正版信息,把显示 “试用版”的文本框给盖住,存盘,搞定,其它的显 示信息,用 UrlEdit 找见,全抹成空格码 20 ,就是什么也不显示啦。因为是国内控件,信息处可不要写自 己的大名啦。看到这里,有人会喊到:变态,真变态。可是变态确实比

31、较省事 “非常暴力破解 ”。以下是一个调用帐号密码检测函数的关键 CALL 处,改跳转指向就可以了!:2200448C 836DF806sub dword ptr ebp-08, 00000006:22004490 56push esi:22004491 E896500000call 2200952C调用 CALL:22004496 85C0test eax, eax:22004498 7419je 220044B3f错误:EAX=O ;正确:EAX=1,改跳转指令 “ 7419 为 “ 7519 ” 就是把 “ je220044B3 ” 改成 “ jne220044B3:2200449A 8

32、B8602010000mov eax, dword ptr esi+00000102:220044A0 85C0test eax, eax:220044A2 7408je 220044ACT以上代码在官方网站提供的试用版本中没有,只在正式用户版本中出现,其实eax获得的是一个“1,”这个好象是作者专门加的“正式用户版本标志 ”,以和试用版本区别。我没详细分析官方网站提供的试用版本代码。紧接着是调用过期检测函数的关键 CALL 处,因为过期日期已经修改为 9999 年12 月28日,所以跳转代 码就不用修改了。:220044B3 E81D460100call 22018AD5就是它:220044B8 85C0test eax, eax:220044BA 68508F022

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论