首页
社区
课程
招聘
[旧帖] [原创]一个小软件——Delphi to C++Builder的破解全过程 0.00雪花
2010-9-24 19:13 2817

[旧帖] [原创]一个小软件——Delphi to C++Builder的破解全过程 0.00雪花

2010-9-24 19:13
2817
有一次要把一份Delphi的代码转为C++Builder的。因为代码比较多,手工一条条地转很是费劲,于是在网上找了一款叫Delphi to C++Builder的小软件,该软件存在一些问题,转换后的代码有一些错误,需要手工核对和纠正。不过,使用这个软件还是减轻了不少重复的工作。今天,打开这个软件时却提示:

软件到期了,郁闷。这小软件价值39.50美元,俺是个穷人,于是就产生Crack it的念头。
OD载入,打开Windows窗口,都是些TEdit,TButton……据此判断该软件应该是用Delphi或C++Builder开发的。随便输入一个错误的注册码后提示:

可惜这个消息框不是通过调用MessageBox产生的,不然就可以直接bp MessageBoxA切入到核心代码了。Delphi/C++Builder程序中常使用vcl的函数ShowMessage来显示一个消息提示对话框。这种对话框是通过调用CreateWindowEx函数创建的,比如本例。但是在这个程序中对CreateWindowExA下断点会受到Phonetic、ImeStatusPHON等控件的干扰——它们老是在那里不停地创建与销毁。   
还是不管这个ShowMessage了,我们把目标转向那个Register按钮的事件处理函数。(如果非要去断ShowMessage也是可以,对字符串"Invalid register"下内存访问断点,然后就可以人肉出来了。)常见的WndProc 202消息断点获取按钮的单击事件处理函数对Delphi/C++Builder程序并不是所有情况都有效。比如这个小软件就拦截不到。庆幸的是:Delphi/C++Builder中有个特征串可以很容易定位按钮的单击事件处理函数,就是:
FF93 20010000 call dword ptr [ebx+120]
现在只要把所有与它相同的命令都下个断点就可以了。下好断点后,随便输入一个注册码,点Register按钮,命中断点:

按F7单步步入,就进入了Register按钮的事件处理函数:

找到入口,一切就变得容易多了,一步步跟下来,很容易发现注册码验证的关键位置:

将je 004079D2直接用nop填充就爆破了。是不是太简单了。然而更意外的这个小软件居然用明文比较!跟随call 00472F4:

寄存器:

call 0042A674是调用一个字符串比较函数,用IDA Pro可以看到分析出其函数名称。crazychin是输入的错误注册码。ovmfSdsilo就是我们要找的正确的注册码。重新运行程序,输入正确的注册码,弹出期待已久的消息框:

注册后,就不能再次注册了,可以进注册表找到:
[HKEY_LOCAL_MACHINE\SOFTWARE\ahao's softwares\wenku\d2c\smtp]
把registed的值数据置0,就可以重新注册了。
至此,一个小软件的破解告捷。(ps:技术太烂了,只能拿这些软柿子捏,)。

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

上传的附件:
收藏
点赞6
打赏
分享
最新回复 (1)
雪    币: 104
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yaolunxo 2010-9-25 00:22
2
0
39美元。。。搞笑呢吧~~~
游客
登录 | 注册 方可回帖
返回