Mgosoft PDF Split Merge 9.4.3安装和Reverse分析

    科技2025-01-22  27

        Mgosoft PDF Split Merge是一款能合并和拆分PDF文件的软件,官网下载地址http://www.mgosoft.com/app/pdf-split-merge.exe。安装完成后,在安装路径下只有两个exe文件,其中unins000.exe是用于卸载的,PDF Split Merge.exe则是主体,用Exeinfo PE检查一下,无壳,C++开发,可使用Resource Hacker对其进行汉化。在程序中随意输入序列号,点击Register,弹窗提示Sorry, the License Code are not valid.

        用IDA打开PDF Split Merge.exe(9.4.3版,SHA256:BA14D4FD2C767E76E19BC8EBD47C6E28F853F7498C27FE1C13D2 6023099DC1F7),搜索字符串License Code,立刻就找到401359这个位置,而且在附近的4012E1处找到了push字符串“Congratulations! You Have Successfully Registered.”,

    在push Sorry和Congratulations的下方都有call sub_65ADE3,进sub_65ADE3看一看,果然有call MessageBoxA,毫无疑问,4012BA处的跳转就是关键跳转,跳转的前一行是cmp eax, 1,再前一行是call sub_40E8D0,那么这个sub_40E8D0大概率就是判断输入的注册码是否正确的函数了。

    进去看一看,一眼就看到好几个or  ecx, 0FFFFFFFFh和repne scasb,典型的获取字符串长度的代码,40E947和40E9BE处都有cmp  xxx, 18h,基本可以猜到注册码的长度必须是18h(十进制24)。40E967和40E975处各有一个非常显眼的字符串,"QWERTYUIOPLKJHGFDSAMNBVCXZ"和"QAZXSWERTDFGCVBYHNUJMIOPKL",对着键盘看一下就知道这两个字符串是怎么产生的了。我就懒得分析正确的注册码怎么生成了,直接从最底部的retn块向上看,

    在执行到40EA60之前,都对eax进行了赋值,左右两边的块是xor eax, eax(即eax=0),而中间是mov eax, 1(eax=1)。既然前面对注册码的长度进行了判断,不是18h就会执行最左边的块,导致eax=0。这就说明注册码错误会导致eax=0,只要强制eax=1就能让任意注册码都正确。(其实,判断注册码是否正确的函数sub_40E8D0执行完毕后,紧接着就是4012B7处的cmp eax, 1,也说明需要让eax=1)怎么办呢?让左右两侧的跳转指令不要跳到40EA60,而是跳到40EA5B(mov eax, 1),不就解决了吗?于是最终的修改方法为:

    这个软件会使用WritePrivateProfileStringA将注册码以明文的形式存储在C:\Users\你的用户名\AppData\Roaming\Mgosoft\PDF Split Merge\Profile.ini中。

    如果不注册,那么它会在生成的PDF文件的每个页面上都加水印,

    这个软件有一个很致命的bug,很多pdf文件它无法正常处理,页面上的文字会全部变成小圆点。一个收费软件做成这样子,实在是不应该。所以这个软件适合逆向工程的新手拿来练习,不适合实际使用。

     

    Processed: 0.009, SQL: 8