吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 47183|回复: 175
收起左侧

[.NET逆向] 某PDF编辑器7.3版 完全破解简要分析 【如侵权,请联系删除】

    [复制链接]
scschao 发表于 2019-12-11 02:13
本帖最后由 scschao 于 2019-12-14 04:35 编辑

本贴仅用于学习交流,禁止用于商业用途

PDFElement 是我非常喜欢的pdf编辑器,界面简洁好看,功能很强大。PDFElement7 专业版我用了功能还是很赞的,但是不太稳定,处理的pdf文件过大的时候很容易报错甚至于崩溃,以前用过他家iPad版的应用,也是各种不稳定就上架。。。不过这个就不管了,本贴只是简单说一下怎么patch。其实已经有人过破解过6了,7好像也有了,但是没人发帖。我自己新人小白,纯属练手。


这个软件使用 .NET写的,我自己之前也没接触过,还是看了一些简单的MSIL和C#才敢开始试着破解的。
工具:dnSpy
之前年少不更事,用x64dbg逆向,搞得我怀疑人生,最后老老实实上了dnSpy的船。本贴就简简单单说几句,没有深入分析,稍微水一水。最先用exeinfope 看到使用.NET编写,用dnSpy打开后也没发现有对程序做任何混淆等保护措施,所以dnSpy反编译出来的代码很清晰和易读。


1,登录框PDFElement7是要先登录才能使用,我本来想去掉登录环节,但是试了一天多(原谅小白我能力差),搞得程序直接崩溃,一想到登录一下也没啥,最后就放弃要去掉登录环节的执念了。所以正常用微信或账号登录算了,登录后界面如下,在账户旁边会有购买按钮。大佬有精力要跳过登录应该也不难。
批注 2019-12-10 163446.png


2,注册信息。登陆账户后,账户状态包含注册信息,主要是trial,standard,professional,也分为registered和unregistered。试用用户使用高级功能,比如转换为word,或者保存OCR识别后的PDF时,会弹出购买窗口:
批注 2019-12-10 163658.png



批注 2019-12-10 175915_LI.jpg
试用的话还会有页数限制和水印等问题。所以破解的要点就是要解决这个问题。
作为小白的我,要找到关键的类和函数还是很麻烦的,我自己并没有什么捷径和技巧,只是重复了很多遍,进入函数寻找关键信息,最先找到的是ProductAuthMgr类,看名字就大概知道其是管理授权信息的。他的初始化函数为:
批注 2019-12-10 181156.png
其中g()函数比较关键,进入其中会找到如下两个句子:
ProductAuthMgr.ProductAuth = new WULRegProductAuth(false)
ProductAuthMgr.ProductAuth = new WSIDProductAuth(ProductAuthMgr.e())
可见真正管理授权信息保存在ProductAuthMgr类中的ProductAuth成员变量里,而且其包含WULRegProductAuth WSIDProductAuth两种不同授权类型或者途径,这两个类都位于ProductAuthor.dll中。进入其中,找到这两个类包含了我们要找的用户信息:

批注 2019-12-10 182310.png             批注 2019-12-10 182727.png
显然,get_RegStatus就是突破口,其返回不同的register的状态,其中Registered状态对应于0x00000002,右键打开il指令编辑框,将所有ret前的指令改为idc.i4.2,就可保证每次查询RegStatus得到的都是Registered了。注意,
WULRegProductAuth WSIDProductAuth两个类中的get_RegStatus都要按照上面的改。

更改后,步骤1中的购买按钮不见了,高级功能(转换为doc,OCR后保存PDF)能够使用,但是使用前还是会弹出步骤2前两张截图所示的购买窗口。意即,功能其实已经破解,但是使用前还是会弹出窗口骚扰一下。


3,跳过购买窗。购买窗口是在点击 转换为doc 按钮时弹出的。这个按钮可以在dnSpy的局部变量窗口中展开this中找到,this指向的是MainForm,其中包含了窗体上的各种按钮,根据按钮的名称可以找到其类型为WUL.CTRLs.Gbutton派生的RibbonButton,进而找到其onClick函数,用笨办法不断的下断点和进入函数结合,终于找到在onClick函数中会调用PEStudio.PDFElement.Base.Authorisation.trails中TrailFunctionWindows成员变量中所定义的的a()函数,他们都位于PEStudio.PDFElement.Base.dll文件中。a()函数包含如下信息:
批注 2019-12-10 185038.png


ShowAuthForm显然就是展示购买窗口的入口。分析a()流程如下图,switch下会经过到case 5,随后一条if语句,要么到case 3后立马return true,要么进入另一条途径最终调用ShowAuthForm,显然我们要选择前者。右键进入IL指令编辑界面,将bne.un改为beq以改变if的跳转,从而绕过了显示购买窗的环节。

批注 2019-12-10 185401.png


至此,破解基本完成,将修改后的PEStudio.PDFElement.Base.dll和ProductAuthor.dll替换掉原程序中的文件即可,高级功能都能不受限制的自由使用。不过还有很多可以小修小补的地方,但是总体上到这里也就够用了。
这里不提供程序下载,仅分享经历供学习讨论,欢迎自己尝试。上述过程可能由于记忆而有所偏差,可自行修正。


.NET 逆向刚接触这一点,可以学的还很多。。。。


后续更新:
1,强制登录框
【【【经@wwb66668 补充,在PEStudio.PDFElement.UI.dll中找到ForceLoginForChinaBrand函数是生成登陆框的入口,使其直接return即可直接跳过强制登陆账户后才能使用的限制。感谢!!!】】】

2,登录按钮
可以免登录使用且去掉购买按钮后,主界面上还有留着一个用户登录的按钮,看着有些碍眼。这个按钮名字叫 rbReg,是通过在MainFrame的类成员中找到的,通过搜索rbReg可以找到其创建位置位于PEStudio.PDFElement.UI.Controls.Ribbon.Pages.BaseRibbonPage的InitializeComponent方法,将this.AutoSize改为false,将minimumsize和size都改为(0,0),则可以完全隐藏掉这个用户登录按钮。
批注 2019-12-11 152347.png

最终效果如图,一切专业版功能正常,且去掉了UI上多余购买和登录的按钮,无需登录即可正常使用。
批注 2019-12-11 153303.png

免费评分

参与人数 31威望 +1 吾爱币 +35 热心值 +28 收起 理由
xiao485 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
base + 1 谢谢@Thanks!
稳好野 + 1 + 1 我很赞同!
Celia + 2 + 1 楼主可不可以发个成品
simmtech + 1 + 1 用心讨论,共获提升!
奎木狼 + 1 我很赞同!
aabbcc123123 + 1 + 1 用心讨论,共获提升!
pizazzboy + 1 + 1 楼主录个视频教程吧,新手学习一下.net
哎哟卧槽hh + 1 + 1 谢谢@Thanks!
kutu66 + 1 + 1 用心讨论,共获提升!
WarYan + 1 + 1 谢谢@Thanks!
Hmily + 1 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
感觉还在不在 + 1 + 1 谢谢@Thanks!
骑驴去旅行 + 1 + 1 我很赞同!
liuxing6688 + 1 大神都是从小白起家,加油ヾ(◍°∇°◍)ノ.
ys1312 + 1 + 1 热心回复!
yanwc + 1 + 1 谢谢@Thanks!
马头鹰 + 1 + 1 谢谢@Thanks!
2Burhero + 1 我很赞同!
Lucifer233 + 1 + 1 热心回复!
世界先生 + 2 + 1 谢谢@Thanks!
woailushibiao + 1 + 1 热心回复!
全修林 + 1 + 1 谢谢@Thanks!
朱朱你堕落了 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
exluku + 1 + 1 我很赞同!
mercymodest + 1 谢谢@Thanks!
温柔的一哥 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
xiwangzhijian + 1 + 1 用心讨论,共获提升!
vallmo218 + 1 + 1 用心讨论,共获提升!
yjn866y + 1 + 1 热心回复!
joneqm + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

ps122 发表于 2019-12-11 14:33
凑个热闹
捕获.PNG

wwb66668 发表于 2019-12-11 08:50
楼主只要搜索IsRegistered,把返回改成true,就好像不会出现购买按钮了,功能好像也不会有限制,这是我看网上大佬破解的。跳过登录框的话请搜索ForceLoginForChinaBrand,这是我找了好久找到的。
yjn866y 发表于 2019-12-11 08:02
最懒的蜜蜂 发表于 2019-12-12 14:00
我今天也刚好看这个软件  
直接找到版本匹配的函数(GetAuthProductType),直接return SubscriptionProductType.Professional 顺着往前推有两个关于注册状态的bool值,直接强制为true,加上之前返回的版本类型,就可以激活为专业版。
wind-mill 发表于 2019-12-11 02:35
学习了,都是夜猫子。
zhangyuzha 发表于 2019-12-11 06:21
早起学习
疾神计划 发表于 2019-12-11 06:49
夜猫,很肝啊
human520 发表于 2019-12-11 07:00
早睡早起,早學習
qiugangyi001 发表于 2019-12-11 07:21
学习了,谢谢分享经验。
vallmo218 发表于 2019-12-11 08:03
分析的有道理
simoney 发表于 2019-12-11 08:20

谢谢分享
cherub0507 发表于 2019-12-11 08:21
新版的OCR不好用,有报错
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 17:10

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表