Navicat 12.1.22(32bit) For Windows动态调试分析
1.使用Exeinfo查看navicat.exe文件信息,程序由Delphi 2013编写。
Delphi程序编写的程序有一个特点就是使用主程序框架作为入口,一般命名中都会包含“MainForm”的字样,当然不全是,也有个案,到这里,我们应该就会有一个思路,就是能否搜索该字符串来找到调用主程序的位置。
2.使用x64dbg(32bit)加载navicat.exe文件,点击运行按钮,直到出现程序窗口。
此时使用字符串搜索功能搜索“MainForm”,找到三个位置,一一打开查看,最后确定主程序调用位置如下图所示:
向上撸代码,主要关注跳转位置,在关键的几个跳转设置好断点,动态调试的目的是:使程序流程不跳过“TnavicatMainForm”这个位置,调试过程中,可以切换ZF标志位的值来设置是否跳转,通过动态调试,确定以下patch位置及方法。
01688ECA:75->EB 01688F58:7C->EB 01688FA1:74->EB 01688FB8:75->90 01688FB9:23->90 01688FD3:74->90 01688FD4:08->90
3.这样patch后,仍热会有注册窗口的提示,下一步我们尝试如何去掉注册窗口。
这一步使用ollydbg(吾爱破解版)的中文字符串搜索功能,可以搜索类似“注册”,“试用”,“激活”等字样,搜索英文字符串“trial”,“registration”,“activate”等,得到下面如图位置的几个窗口调用。
将其中的jne改成jmp即可跳过这些窗口的调用,patch如下:
0162D51C:75->EB 0162D543:75->EB 0162D56A:75->EB 0162D58E:75->EB 0162D5B5:75->EB 0162D5D9:75->EB
4.通过wireshark抓包发现,软件启动后开始需要验证NTP服务器时间,判断是否超过试用期限,连接的域名为“pool.ntp.org”,通过使用strings命令(strings -a *|find “ntp”)发现这个字符串在“libcc.dll”中出现,通过x64dbg动态调试(需要运行一下程序)过滤下字符串发现下图,更改方法如图所示:这样做提高了软件的启动效率,地址是随机的,所以不提供patch代码了。
64bit需要更改libcc.dll跳转的位置如下图所示:(需要运行一下程序才可以过滤到字符串“pool.ntp.org”)
5.64bit版本的破解方法和32bit一致,patch方法如下:
0000000002144E80:75->EB 0000000002144EB7:75->EB 0000000002144EEE:75->EB 0000000002144F25:75->EB 0000000002144F61:75->EB 0000000002144F95:75->EB 00000000021E2B40:75->EB 00000000021E2BCE:7C->EB 00000000021E2C27:74->EB 00000000021E2C40:75->90 00000000021E2C41:2D->90 00000000021E2C63:74->90 00000000021E2C64:0A->90
6.下一步我们来制作补丁,本例使用的是Baymax Patch Tool。
我的思路是先使用x64dbg将需要patch的位置都修改成对应的新字节数据,也可以使用之前导出的1337补丁文件。然后保存成一个新的navicate1.exe文件,再使用Baymax Patch Tool比较navicat.exe和这个新的exe文件这两个文件不同的字节数据,直接生成patch工具。
如图所示:
然后创建补丁:
7.以下是x64dbg的1337补丁代码,仅供参考,因为在win10需要关闭ASLR才可以对应下面的地址。
>libcc.dll 00000000009E9B7B:74->EB 00000000009E9B7C:3F->55 >libcc.dll 008AB08E:77->EB >navicat.exe 0000000002144E80:75->EB 0000000002144EB7:75->EB 0000000002144EEE:75->EB 0000000002144F25:75->EB 0000000002144F61:75->EB 0000000002144F95:75->EB 00000000021E2B40:75->EB 00000000021E2BCE:7C->EB 00000000021E2C27:74->EB 00000000021E2C40:75->90 00000000021E2C41:2D->90 00000000021E2C63:74->90 00000000021E2C64:0A->90 >navicat.exe 0162D51C:75->EB 0162D543:75->EB 0162D56A:75->EB 0162D58E:75->EB 0162D5B5:75->EB 0162D5D9:75->EB 01688ECA:75->EB 01688F58:7C->EB 01688FA1:74->EB 01688FB8:75->90 01688FB9:23->90 01688FD3:74->90 01688FD4:08->90