Simpo PDF Merge Split 2.2.3.0 安装和Reverse分析

    科技2024-12-21  8

            Simpo PDF Merge Split是一款能够合并和拆分pdf文件的软件,其官网地址是http://www.simpopdf.com/。安装完成后,在安装路径下有两2个exe和3个dll文件,其中unins000.exe是用于卸载的,PDFMergeSplit.exe是主体(SHA256: E6DF6AC5F91B18500C5380320960E98F5E11A3300254763A07D2A5FFFC5BA2A4),用Exeinfo PE检查一下,未加壳,Visual C++ 9.0开发。试用版会在合并或分割的PDF文件上加水印。

            在注册码文本框中随意输入一些内容,点击注册,弹窗提示“注册码不正确”。

            考虑到安装路径下面还有名为Languages的文件夹,里面有8个xml文件,所以我们应该先去看看PDFCHS.xml文件中的内容,而不是直接在IDA或OllyDbg中搜索“注册码不正确”这6个汉字。在PDFCHS.xml中可以看到“注册码不正确”对应“Invalid”,

            (因为用OllyDbg载入PDFMergeSplit.exe后,Imagebase变成了6D0000,而不是通常的400000,为了让IDA和OllyDbg中的地址保持一致,在IDA中,Edit > Segments > Rebase program,把Image base的Value设为0x6D0000)

            在IDA中搜索Invalid,很快就能定位到6F158B,而且RegisterSuccessfully(注册成功)也出现在离6F158B不远的6F1510处,很明显,在6F158B上方的6F13DC和6F13EE两处跳转就是关键跳转,6F13D9处是cmp eax, 14h,大概率是判断注册码长度是不是14h(十进制20)。在注册码文本框中随意输入一个长度为20的字符串,OllyDbg调试一下,果然,在6F13DC处没有跳转到6F1584,说明注册码必须是20个字符。6F13E7处call sub_6E4040,可以大胆猜测sub_6E4040就是进一步判断注册码是否正确的函数,这个函数里面多次使用"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"这个字符串,多次call _atoi,以及多次imul、idiv、cdq,这些特征足以说明sub_6E4040就是判断注册码是否正确的函数,注册算法就在这里。

            我就不分析注册算法了,直接改跳转指令,修改如下,修改后,任意注册码都是正确的,并且生成的文件不再带有水印。

     

    Processed: 0.034, SQL: 8