探索黑客技术攻防,实战研究与安全创新

导航菜单

破解PDF控件中的水印

最近找到一个功能还算挺全面的可以阅读PDF控件,下载以后发现里面还提供了关于VC和HTML的调用该控件的演示代码。打开提供的VC的DEMO程序看一下效果,发现免费下载的这个控件中竟然有水印。为了不影响我的使用效果,下面大家就跟着危险漫步一起去掉这个水印吧。

控件中提供的VC代码编译好的程序名是“PDF”,使用OD将它打开并运行起来,然后打开一个PDF文件,我们先来搜索ASCII字符串,结果是没有搜索出我们想要的字符串,我们再来搜索UNICODE字符串,同样也没有搜索到我们想要的字符串。

[3]HB97ADKZ89`_B_RG(B2J.png

我发现,OD的搜索插件只为我们搜索了0040XXXX空间的字符串,但是0040XXXX的空间是“PDF”的虚拟地址空间,并不是PDF控件的虚拟内存控件,因此我们要到PDF控件的虚拟内存控件来查找字符串。我们打开OD的虚拟内存映射界面,查找“PDFV”(PDF控件的文件名是PDF.ocx)的虚拟内存地址。“PDF”的虚拟地址控件是从10000000开始的,而它的代码节是从10001000开始的,我们在10001000地址处按下回车,来到“PDFView”的代码节处,然后搜索ASCII字符串,这次找到的字符串就非常之多了,我们按下CTRL+F快捷键,来查找字符串”(在搜索的时候不需要区分大小写),在我们的不断搜索下,终于找到了我们想要的字符串“”,并且在紧挨着的地方看到了另一个字符串。我们选择一处字符串按下回车,来到调用字符串的反汇编代码处,反汇编如下:我们从地址10AFDF2处可以看出,PUSH109A6BO是将字符串“PDF”进行压栈,这里必将是调用该字符串的位置(废话~)。不管别的,我们在数据窗口中按下CTRL+G,输入地址1019A6BO到该字符串的位置。我们在修改字符串时,只要将第一个字节修改为00即可,因为在使用字符串的时候ASCII码的“00”表示字符串结尾。我们用同样的方法再修改另外一个字符串。最后,将修改过的控件保存到硬盘上,替换掉原来的OCX控件。替换后在运行查看,水印让我们移去了。

以上内容就完成了我们的破解之旅,但是这里再给出另外一种方法,这种方法是只针对字符串的,我们查看一下在调用改字符串的反汇编代码

这段反汇编代码中的100AFF19处执行了PUSH 15,这里的15是十六进制形式的,也就是10进制的21,21是的字符串长度,我们只要将这里的15改为0,那么在调用10005340这个函数时就会认为字符串的长度为O,那么也能达到我们移除该水印的效果。但是,代码中多次使用了该字符串,如果逐个这样修改的反汇编代码的话,将是一个体力活,因此我们还是使用前面的介绍的方法。

本文针对破解这个简单的水印给出了两种方法,一种是直接修改代码对字符串的调用,另一种方法是修改字符串的数据,两种方法我党得后一种比较可靠,因为第一种方法遇到多处使用就累人了。希望本文能给大家带来启发。

本文内容所提及均为本地测试或经过目标授权同意,旨在提供教育和研究信息,内容已去除关键敏感信息和代码,以防止被恶意利用。文章内提及的漏洞均已修复,作者不鼓励或支持任何形式的非法破解行为。