飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 4992|回复: 0

[转贴] 速破TC2.0库函数查询软件

[复制链接]

该用户从未签到

发表于 2006-11-16 19:32:07 | 显示全部楼层 |阅读模式
打开电脑,突然想起前几天有个女网友叫我帮她破解一个软件,我得好好在她面前表现一下。打开软件一看,原来是一个函数速查字典,叫“TC2.0库函数查询”,看来她是很好学的MM哦。
老规矩,先运行一下,软件先出现一个界面说你还有几次试用机会,然后出现主界面,在注册的地方输入注册名:WARSOUL517;注册码:258787786,点击注册,然后会弹出一个对话框说你注册码错误。记下这个错误信息,后面用得着。
小提示:不要输入如111111,123456等,因为有的软件一碰到这种注册码就会不进行判断直接跳走,从而导致不能动态追踪。


静态调试
用PEiD查壳发现没加壳,用W32DASM黄金中文版(中文的比较熟悉)加载软件,然后依次点击:“参考”、“串式参考”,然后从最后一行字符串慢慢向上找。为什么要从最后一行开始呢?因为根据我的破解经验。发现比较敏感的信息比如说“注册成功”之类的词一般出现在最后几行,如果字符串很多的话,这样找比较节省时间。向上翻几下就可以看见刚才的出错信息,不过别急,先向上再找找看还有什么,不一会儿就会发现上面还有一行字符“未注册用户,你已经使用本软件%d/50次”,看来这个就是刚才出现的NAG窗口。

分析一下,0041F76A是取注册表里面的注册信息的,0041F773是判断是否是注册用户。不是的话跳走。“:0041F783 cmp ebx,00000032”中“00000032”是十进制“50”,这个是判断你还有几次试用机会,现在你用十六进制编辑器把32改为你想要的数字,你就有无数次的是试用机会了(反正试用是没有限制的)。或者你把“:0041F773 jne 0041F783”的JNE改为JE再重起软件你就会变成注册用户了(这是后来才发现的,它有向注册表里写入值)。
小提示:刚学破解的朋友注意了,在用编辑器修改软件的时候记着要先把运行着的软件关掉,不然就会提示“READ ONLY”。
当然还有一种方法暴破它。找到刚才那个出错提示,双击到达该位置,向上翻看,可以看到诸如“注册名不能为空”,“注册码不能为空”等字符串(个人之见,这些信息在静态调试中一般没什么作用。在动态追踪的用处可是挺重要的。因为在这里的下面一般是进行:注册名—>注册码的换算,对与算法分析有帮助)。这可不是我们想要的,我们在“注册成功”向上找到最近的一个跳转“00417D4D 7415 je 00417D64”到00417D64,看一下是出错提示,看来这就是我们要找的关键跳转了。
用HIEW把74改为75即JE改为JNE然后保存,打开软件注册,出现成功提示了。从成功后重启软件我们可知它向注册表了写东西了,所以才出了第一种注册办法。到这是读者朋友肯定会问我怎么知道这是关键跳的,呵呵!这当然是有密技的。下面是我从《黑客防线》上看到高手总结出来的关键跳规律,现在向刚开始看黑防的朋友们分享一下:
1 MOV EAX , [ ]这里可以是地址,也可以是其他寄存器
MOV EDX , [ ]同上
CALL 00??????
TEST EAX ,EAX
JN(JNZ)/ JE(JNE)/ SETZ (SETNZ) AL (BL,CL …..)
2 MOV EAX ,[ ]
MOV EDX ,[ ]
CMP EAX ,EDX
JNZ(JZ)或
LEA EDI ,[ ]
LEA ESI ,[ ]
REPZ CMPSD
JZ(JNZ)
3 CALL 00????
PUSH EAX(EBX,ECX)
………..
CALL 00????
POP EAX (EBX,ECX……)
TEST EAX ,EAX
JZ(JNZ)

动静结合
暴破软件不失为一种好方法,但它只适用于一般防御弱的注册软件。如果软件多几个跳转语句。或加几个判断语句,或是跳转语句不属于经典句式,那么暴破软件就不那么容易了,而且暴破软件对于学习汇编没有什么大的帮助,并且在你研究注册算法的时候会使你陷入无穷无尽的代码丛林中。好,闲话到此,现在切入正题。
用OLLYDBG(我用的是OLLYDBG+最新全部插件,可以脱壳,隐身,去除花指令)加载软件。既然要彻底研究它,那当然要从它取用户名就开始跟踪,从刚才的“用户名不能为空”可知这里就是输入用户名的地方。

在00417C74上按F2或在命令行中BP 00417C74下断点,按F5运行,然后在注册名中输入WARSOUL517,注册码中输入:258787786,然后注册。这时软件被断下来。先粗跟踪一下,一路按F8下来,并看着右上角的寄存器窗口,注意记录出现字符串的位置,尤其是出现注册名的地方,或出现一大串字符的地方,这很有可能是注册码。一直到出错后重新运行软件。这时你应该比较熟悉它的注册流程,只有下面的才是主要的注册流程:
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00417CD5(C)
|
:00417CFC 51 push ecx 压入注册码 258787786
:00417CFD 8D542414 lea edx, dword ptr [esp+14] ASCII 58787786
:00417D01 8BCC mov ecx, esp
:00417D03 8964241C mov dword ptr [esp+1C], esp
:00417D07 52 push edx EDX=0012AE30
:00417D08 E89E0A0200 call 004387AB
:00417D0D 8D7E5C lea edi, dword ptr [esi+5C] ASCII HFD
:00417D10 8D44241C lea eax, dword ptr [esp+1C] EAX=0012AE1C
:00417D14 50 push eax EAX=0012AE38
:00417D15 8BCF mov ecx, edi ASCII HFD
:00417D17 E8C4030000 call 004180E0 通过注册名计算注册码。有兴趣的可跟进去看一下,算法不是很难,可以拿去练手^_^
:00417D1C 50 push eax EAX
:00417D1D 8D4C2418 lea ecx, dword ptr [esp+18]
:00417D21 C644242803 mov [esp+28], 03
:00417D26 E8000E0200 call 00438B2B
:00417D2B 8D4C2418 lea ecx, dword ptr [esp+18]
:00417D2F C644242402 mov [esp+24], 02
:00417D34 E8FD0C0200 call 00438A36
:00417D39 8B4C240C mov ecx, dword ptr [esp+0C] 我的注册玛
:00417D3D 8B542414 mov edx, dword ptr [esp+14] 真的注册玛
:00417D41 51 push ecx 我的注册码压入
:00417D42 52 push edx 真的注册码压入
:00417D43 E82C0B0100 call 00428874 注册码比较语句
:00417D48 83C408 add esp, 00000008
:00417D4B 85C0 test eax, eax=1
:00417D4D 7415 je 00417D64关键跳转语句
:00417D4F 8BCF mov ecx, edi
:00417D51 E85A030000 call 004180B0
:00417D56 53 push ebx
:00417D57 53 push ebx
 Possible StringData Ref from Data Obj ->"注册成功!
喜欢研究算法的朋友可能会问怎么知道哪里是进行转换的地方,其实这也是跟踪进入才知道。它一般出现在比较注册码的前几个CALL,它有下特点:一般你的用户名会被载入,且下面会出现循环语句一个个载入你用户名字母进行转换,看到这样的地方你可要注意了。
既然知道了注册码的位置就可以做出注册机了。打开KEYMAKE,依次点击:“其他”—>“内存注册机”,在“浏览”中输入文件的存放路径。然后在“中断地址列表”中点击“添加”,中断地址:417D43;中断次数:1;第一字节:E8;指令长度:8(等于总字节数除于2),勾选“保存下列信息为注册码”“内存方式”“寄存器”“EDX”偏移不用填了。不过要注意“在结尾处插入字符”这个挺重要的,因为有的软件在注册码后面经常会出现一些别的字符(这个程序就是),所以这是用来区分注册码的,在主界面的用户信息你可以写一些自己的资料和用注册机的注意事项。点击生成,就做好注册机了。
PYG19周年生日快乐!
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

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