| 如何突破crackcode的25位限制 |
|
| 作者:未知 文章来源:网络收集 点击数: 更新时间:2006-3-29 15:46:43
|
| 1、突破crackcode的25位限制的经过 在论坛中,有一些贴子常提到crackcode存在25位的限制。可是rufeng又隐退江湖, (江湖盛传他可能在修炼内功,准备东山再起)。于是好友豆豆虾(学过一点汇编,知道 一些常用工具的使用),凡心欲动,本意是想一一步分析,对代码原理有个总的了解。 然后再对证下药。所谓手到病除。他说如果一一分析下去,也许在作修改的时候,就不 会在一个数据结构上兜圈子,当时猜想rufeng是定义一个25位的字符数组,没有考虑到 获得的结果会超过25位的情况。 【爆破,可以采取直捣黄龙;作注册机,得看懂整个注册 码;修改代码,得看懂程序的实现原理,然后再OEM自己的思路。】
2、为什么crackcode存在25位限制(打算介绍简单些,因为它牵扯到的面比较广) crackcode调用getthreadcontext函数,返回一个结构指针,利用其读取被跟踪 程序的寄存器(eax、edx...)中的值(这个函数的功能非常的棒)。rufeng巧妙的应用 了六个寄存器(Edi,Esi,Ebx,Edx,Ecx,Eax),返回它们注册码,一个寄存器 只能存4个字符,所以6*4=24,确切的说,crackcode取到的字符长度不能超过24个。 比如EAX=44324432--->储存"D2D2"四个字符。
3、如何突破它的限制?? 如果把程序通读一遍,似乎发现没有办法去突破这个限制,因为这是设计上的 失误。如果细细去琢磨crackcode,会发现它两次调用getthreadcontext函数。其实第 一次的时候,就可以得到要读取注册码的地址。根据crackcode.ini中Save_Code_Address 的值,对应寄存器储存的值。为什么crackcode要去两次调用getthreadcontext函数,其中 的奥秘,把程序认认真真的通读几遍(读到凌晨4点,窗外一片寂寂。在路灯下,几个清洁 工的身影,默默无闻的清洗大地,在我们匆匆来往的街道,还以清爽的感觉。) 好了!上面既然第一次调用的时候,已经能确定注册码的位置,何不拿它示问。于是可以 调用ReadProcessMemory,把注册码得到。
4、修改程序(代码修改位置401448---40149B) 我这有豆豆虾修改时的草稿: =========判断save_code_address需要读取的寄存器=========== ----deal with ebp---- mov ebx,40a64c -------crackcode对save_code_address处理后存放的地址 mov ecx,40a1cc mov al,byte ptr [ebx] cmp al,0f5 -------为什么要进行这样比较,crackcode代码分享笔记(三)中 有讲述。我把相关的部分放在附录中。 je final ----deal with eax---- sub ecx,4 cmp al,0f0 je final ----deal with ecx---- sub ecx,4 cmp al,0f1 je final ----deal with edx---- sub ecx,4 cmp al,0f2 je final ----deal with ebx---- sub ecx,4 cmp al,0f3 je final ----deal with esi---- sub ecx,4 cmp al,090 je final ----deal with edi---- sub ecx, [1] [2] [3] [4] [5] [6] 下一页
|
|
[ 收藏此页到: 天天|和讯|博采|ViVi|狐摘|我摘|天极 ] 文章录入:kinda 责任编辑:kinda |
|
上一篇文章: 如何让crackcode变得具有粘贴功能 下一篇文章: 修改exescope6.10 |
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |