危险漫步博客
新鲜的“黑客思维”就是从全新的角度看待黑客技术,从更高的层面去思考;专注于黑客精神及技术交流分享的独立博客。
文章2289 浏览18787758

破解PDF控件中的水印

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

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

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

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

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

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

相关推荐