首页
社区
课程
招聘
[原创]初探Delphi程序常见破解过程
发表于: 2014-10-20 10:13 36654

[原创]初探Delphi程序常见破解过程

2014-10-20 10:13
36654
Delphi程序常见破解过程

破解前的准备工作
虚拟机:为啥要使用虚拟机?因为 OD只能在XP下运行  WIN7无法正常的跟踪。
因为有些程序会在系统中放入文件或是注册表,有时需要还原 虚拟机快照,也就是比如你未安装、未运行那个程序之前的状态。
SPY工具
主要有三种 注册表监视、文件监视、网络监视。
因为程序要想保存以判断到的注册或是未注册,或是时间限制。
只有2种可能,就在在注册表中保存信息,在文件中保存信息,通过以上2项监视可以看到操作那里,便于提供信息。

网络监视,有些程序会有网络验证,比如心跳服务器,比如一些数据,通过网络监视,大概的看一下,操作了那些,也方便下断。网络上断 BP send,rev。文件和注册表下断找本文。

查壳工具,看看程序使用的编写工具,以及是否加壳
算法查看工具,可以看是否使用了加密算法,然后搜索相关知识。

Delphi破解流程
1、        先查壳,如果PEID发现是borland 之类的字样就是delphi程序
2、        工具脱壳,ASP用工具程里面的asp 2.1.2中文可脱EXE  DLL用asp 1.3.1可脱,BPL改成dll用1.3.1脱
3、        测试是否正常运行。
4、        打开IDA 程序,跟着向导,基本默认选项即可,程序会在上面的指示器上自动的分析。
5、        分析完毕,使用camelu的插件,shift-p 自动导出一个lu文件,里面包含着OD可用的函数名。
6、        OD载入程序,插件菜单使用camelu导入lu文件,很快完成,就是给程序加了函数名和一些少量的注释,方便理解。
7、        即此就可以用OD破解了。
8、        破解方向
8.1找到注册码使程序变成正式版,使用内存注册机或是制作独立的注册机。
8.2爆破法,找到各种限制的关键判断跳,然后改啊改。
8.3 KEY文件破解法,这个相对是难一些,一般只能爆破或是找到一个可用的key文件,然后改判断机器码是否正确的跳来实现简单爆破。

9、        如何找断点
8.1字符串法,一般先看能不能使用内存注册机,直接使程序变成正版。Keymake使用方法搜索本文。在CPU窗口,右键,中文搜索引擎->智能搜索。找程序中相关的提示。比如,未注册  注册  过期  联系 到期 或是看程序一些可见的限制提示做为下手点。双击来了CPU窗口的断点处,F2下断。

8.2按钮法
比如某个按钮有功能限制,假如一个 保存 按钮,未破解程序就不过,或是提示注册或是提示出错。那就要先找到这个按钮的 rva中断地址。

怎么找?先用晨风星号显示器,这个程序有一个功能,在相关的控件上,会显示其类名,在窗口上会显示其窗口类名。在一些控件上会显示其使用的控件名。

使用DEDE载入脱壳好的 程序,然后开始处理,过程完毕有两个分析对话框,都点yes进行方法查找和扩展分析。

然后先找到 窗体名,然后找事件名,也就是对应的子方法method。找到相关的可以双击直接看DEDE的反汇编,有参考串,方便分析其功能。

有时还是不好找,这时可以使用dede的‘项目’,导出整个工程,然后将出来的dfm文件和pas文件,放置到一个新建的delphi 程序中,对原程序进行替换。然后打开工程,会显示出程序的控件名之类的。 但是程序通过会使用一些自装的控件,这时要么就装控件,要么只能跳过。

当看了这一些后,找到了控件相对应的事件,右键 copy  rva  ,这就是OD中的断点。回到OD中ctrl +G 跳到相关代码处。一般都是push ebp XX之类的字样,同时左边会有大的框线,有一个$标志,这就是method头了,可以F8步进下断。

8.2备注(commen)和标签(label)  使用分号和冒号可以给一些call加上备注方便后来跳来跳去的时候综合分析。冒号加的标签一般加在函数第一句上,这样被call的时候,就会显示你或OD载入的那个函数功能,方便理解。
8.3PE EXPLOERE资源法,delphi的程序,有些窗体或是控件是带着默认属性的,这种东西你如何寻找字符串,也不可能找到,因为不在那个范围。
使用PE EXPLOERE打开EXE后,点击上面 工具栏中的查看资源,就会看到程序完整的窗口控件什么的,还能ctrl F进行搜索,可搜索网址(比如程序要访问网络),一般使用tro开头的一个控件,有网址,有timeout超时时间。

至此结合着DEDE和 PE EX 和IDA的分析,三种工具就可以比较容易的对代码进行理解了。

关于破爆中的跳,怎么跳?
这种跳一般要结合上下文。比如右边注释中看到一些  要过期、请注册之类的备注后。一定是要出提示框或是紧跟着什么操作了,通常上面有CALL,用来返回是否注册的结果 跟着就是一般会有 cmp判断,然后就是跳,这种跳指令不一定,但通常都会指出要跳到那里,如果发现跳了就跳过了下面的提示或是CALL就使用jmp了。使用空格键改 成jmp 下面的 nop填充通常要打开。使指令长度合理,不改变位置。
如果程序对grid类控件进行行数限制,那么通常会执行VCL标准库中的动作以实现对控件的行数更改  一般使用IDA反编译后,有一堆 BPL的程序,就是动态库,这种会直接识别出vcl相应的函数名,比较好找。如果是独立的EXE文件,也就是将库打包到EXE中的情况,这时就识别不好了。就要F7跟进去看看到底干了什么。

然后会终于找到操作控件的CALL也就是函数,在运行过程中,CPU下面的窗口会显示有多少地方CALL了这个函数,这时使用CTRL K查看调用树,但通常没有太多的参考价值,无奈的情况下,可以在左边,将所有的CALL点全部F2下断后,一个个的断着看,到底干了什么。

函数的参数
比如一个函数对行数或是其他进行限制,那么上面都会有参数 就是MOV  寄存器的形式。那就要识别那些参数是用来控制数据量的,比如好找,有些时候会压入字符串指令,运行到这行时候,下面的窗口会显示字符串的内容。

如何修改一些常量,比如到期时间,比如试用版之类的。
不用在运行状态,在那条指令选中后,下面的窗口,中会显示ASCII “字符串”在上面右键 floow value in dump(跟随值到镜像)在第三层窗口会出现字符串,选中了要改的内容  空格键更改,在最上面的 框中会显示乱码,直接中文输入就会更改,会在补丁patch窗口,查看到更改的字句。(ctrl P),可选中后使用空格键来控制是否patch。
有时程序push的常量是直接声明的,就是一个 HEX值,这时没法fllow 就在那条指令上直接右键。FOLLOW in dump,就会出现在下面的数据窗口中了。

如何保存破爆结果?
改了后,在cpu窗口,右键。Copy to exe  (复制到EXE)然后了菜单中selection(选择)
和ALL MODIFY(全部更改)点全部更改,在出现一些对话框,然后选择copy all,
有些修改了mov指令之类的会提示可能出错的一个长对话框,不怕他,点YES,YES YES
然后会出现一个新的file窗口,在窗口点击键 save file可保存。

最后是否成功,完全取决下断点的水平。有些使用加密算法的程序不能无全变成正式版,或一定能爆跳。

以上文本水平较低,本人手打,欢迎各位达人指正,让我进一步的提高。
注册论坛好多年,可惜一直没有时间深入学习逆向,水平有限欢迎拍砖。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 225
活跃值: (173)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
delphpi 程序我主要还是配合DeDeDark或DelphiDecompiler看,IDA导出符合的主要是MAP文件
2014-10-20 10:45
0
雪    币: 208
活跃值: (39)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
刚刚下载 OD 2.01的时候发现个挺N的插件,可以直接导入 DEDE 导出的MAP文件,功能很强啊。
比我之前使用camelu插件多了注释。导出的文件还挺大。

谁知道这个插件?在工具栏里有个I的图标。
2014-10-20 11:59
0
雪    币: 208
活跃值: (39)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
没人知道这个插件吗?
2014-10-20 16:28
0
雪    币: 8164
活跃值: (2651)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
又一个多年注册的,我买过加密解密2、3,书大概看过,由于愚钝,加上业余,始终没能掌握debug。都到不惑的年龄了,还有很多的迷惑!
2014-10-20 17:54
0
游客
登录 | 注册 方可回帖
返回
//