羽夏逆向破解日记簿——关于逆向epub格式转化器与思考
看前必读
本软件是商业软件,本篇文章仅仅介绍 逆向分析过程 和 关于开发软件防止逆向的思考 ,不会提供任何成品破解补丁或成品软件,仅限用于学习和研究目的,否则,一切后果自负。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权到您的权益,请联系本人删除。
主角和工具
- Detect it easy 1.01
- IDA 7.5
- X32DBG
- epub converter
序
最近心血来潮想搞一个ePub格式转化器,转化成PDF到各种设备阅读挺方便的。然后我搜到了它。从官网下载后,它是这样滴:

一看是收费版本的,顿时起劲了,想试试自己的逆向功底。打开这个软件后,它会亲切地弹出一个窗提示:你想不想买我呀?你还有10个试用。(我之前测试过一次,所以剩九个了)

要想逆向一个程序,首先得知道它有什么特征。三个按钮我就不说是什么意思了,我们点一下继续按钮看看会是什么样子,我们就会来到我展示第一个图片的样子。
然后我们转化一个试试,我随便从网上下载一个ePub电子书试一试水。点击转化按钮,如下图:

如下是转换结果:

点确定后然后亲切的告诉你,你又少了一次机会了:

好,我们打开转化好的文件,我们看到了每页上都加上了可恶的水印 ******ebook converter DEMO Watermarks*******:

软件判断自己是否被注册有多种方式:通过一个全局变量标识自己是否被注册,或者用一个类进行管理等等多种方式,话不多说,开始进入逆向分析阶段。
拖入到PE查壳器Detect it easy,发现的Delphi编写的,且未加壳,这给我们的分析降低了足够的难度。

然后拖入到IDA,等待其分析完毕,可能需要几分钟的时间,耐心等待,当如下图所示时,说明IDA帮我们做完了自己能做的分析。

如果注册成功,肯定不会有水印******ebook converter DEMO Watermarks******* ,先用它搜一下字符串,可惜的是搜不到:

IDA搜不到,但X32DBG不一定搜不到。我们把它拖进去看看搜一搜,然后搜到了:

然后我们动静结合,把这个指令的地址转到IDA看看,然后F5大体看看执行流程:

这个字符串的引用只有一处,可以判断,这个指针指向的内容是用来判断是否是注册的。先命名好一个名字,然后查看一下它的引用,看一看有没有可疑引用。所谓的可疑引用是有守护线程或者定时器来时刻检测注册状态是否非法,这只是一个简单搜索,并不能保证全部找到,但幸运的是,这里只有一个,并且还是定时器,如下图:

编过程序的同志都知道定时器都需要设置Enabled或者类似属性启用,True就是1。
unknown_libname_774我们可以大胆的猜测是来设置这个是用来设置这个状态的,事实就是如此。
综上:将mov dl, 0x1改为mov dl, 0x0,然后将0x614394的内容改为1,然后查看是否破解成功。
显示破解成功,并且转化后不带水印。

此程序的所有功能都被解除了,但是我提一句,程序使用还是有问题,会产生异常,原因自己找找,产生的异常并不是由于反调试,具体原因自己分析。本篇文章是对程序付费功能限制进行逆向和思考,故不再叙述。
敬告
- 通过本文说明逆向破解,虽然能解除所有功能限制,但不能完全正常使用,会有程序异常出现。
- 本文和破解的相关程序仅限用于学习和研究目的,否则,一切后果自负。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
- 你的 IDA 的 F5 的结果可能和我的不一样,因为它本来就不准确,只能提供一些参考,需要一些调整。IDA 的 F5 不是万能的,它会因一些花指令和变形指令干扰导致反编译成伪代码失败,汇编是最重要。
彩蛋
如果心细的话,你可以翻一翻plugin文件夹,里面会有直接打开电子书阅读器,可以直接打开ePub等文件,是不是大大方便了电脑端阅读电子书呢?

思考
- 验证不要仅仅靠一个全局变量(然而本程序应该是一个类,因为最后有释放该内存的函数)进行校验,要多设立检验点增大破解难度,并使用被假破解提供假象,迷惑破解者,但会提高人力成本。
- 一次验证后,要多重验证,防止自己已被破解而不知。本程序还是考虑到了,启动一个定时器来频繁校验,但在 IDA 面前,这不是个秘密,稍作深入分析很容易被发现,更改一个字节就能关闭此定时器。但过多的验证可能会增大程序内存和 CPU 占用,增大人力成本,甚至影响用户体验。
- 程序必要时加一个壳,提高破解门槛,但会以牺牲内存或者运行速度为代价。
羽夏逆向破解日记簿——关于逆向epub格式转化器与思考的更多相关文章
- 羽夏逆向破解日记簿——RunAsDate的实现原理分析
前言 RunAsDate是一个小工具,允许您在指定的日期和时间运行程序,不过有人用它来破解有时间限制了.此实用程序不会更改计算机的当前系统日期和时间,但只会将指定的日期/时间注入所需的应用程序.该 ...
- 20165306 Exp1 PC平台逆向破解
20165306 Exp1 PC平台逆向破解 一.逆向及Bof基础实践说明 1. 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,fo ...
- 2017-2018-2 20155303『网络对抗技术』Exp1:PC平台逆向破解
2017-2018-2 『网络对抗技术』Exp1:PC平台逆向破解 --------CONTENTS-------- 1. 逆向及Bof基础实践说明 2. 直接修改程序机器指令,改变程序执行流程 3. ...
- 20155308《网络攻防》 Exp1 PC平台逆向破解(5)M
20155308<网络攻防> Exp1 PC平台逆向破解(5)M 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是 ...
- 2017-2018-2 20155333 《网络对抗技术》 Exp1 PC平台逆向破解
2017-2018-2 20155333 <网络对抗技术> Exp1 PC平台逆向破解 1. 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行 ...
- 羽夏逆向指引—— Hook
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易,如果本篇文章有帮助你的, ...
- 2018-2019-2 20165312《网络攻防技术》Exp1 PC平台逆向破解
2018-2019-2 20165312<网络攻防技术>Exp1 PC平台逆向破解 一.Exp1.1 直接修改程序机器指令,改变程序执行流程 知识要求:Call指令,EIP寄存器,指令跳转 ...
- 【MyEclipse 2015】 逆向破解实录系列【终】(纯研究)
声明 My Eclipse 2015 程序版权为Genuitec, L.L.C所有. My Eclipse 2015 的注册码.激活码等授权为Genuitec, L.L.C及其付费用户所有. 本文只从 ...
- 【MyEclipse 2015】 逆向破解实录系列【2】(纯研究)
声明 My Eclipse 2015 程序版权为Genuitec, L.L.C所有. My Eclipse 2015 的注册码.激活码等授权为Genuitec, L.L.C及其付费用户所有. 本文只从 ...
- 20165223《网络对抗技术》Exp1 PC平台逆向破解
目录--PC平台逆向破解 1 逆向及BOF基础实践说明 1.1 实践内容 1.2 实践要求 1.3 基础知识 2 实验步骤 2.1 直接修改程序机器指令,改变程序执行流程 2.2 通过构造输入参数,造 ...
随机推荐
- KingbaseES V8R6集群运维案例之---securecmdd工具usePAM配置
案例说明: 默认在部署securecmdd工具后,在配置文件securecmdd_config中配置参数usePAM=yes,在有的系统主机环境,会导致securecmd客户端连接失败. 适用版本: ...
- Games101-作业5
说明 本次作业主要实现Whitted-光线追踪,作业框架只需要我们编写两个部分,一个是求解观测光线--从摄像机到每个像素的向量:第二个是判断射线与三角形的交点. 求解观测光线 需要对每个像素求解在实际 ...
- Scala 不可变集合Set
1 package chapter07 2 3 object Test06_ImmutableSet { 4 def main(args: Array[String]): Unit = { 5 // ...
- Unity 2022.3.20f1新功能,异步实例化预制体Object.InstantiateAsync
今天查看Unity 2022.3.20f1更新日志,发现新增了个异步实例化的功能,这个功能解决了Unity历史上实例化预制体卡顿的痛点,简直不要太爽. 具体的API文档请点击跳转. 做了个简单的实例化 ...
- ET介绍——为什么使用C# .net core做服务端?
为什么使用C# .net core做服务端? 游戏服务端从早期的单服到分布式,开发越来越复杂,对稳定性,开发效率要求越来越高.开发语言的选择也逐步发生了变化,C 到 C++ 到 C++ + PYTHO ...
- requests进阶
requests进阶 三.requests模块处理cookie相关的请求 1 爬虫中使用cookie 为了能够通过爬虫获取到登录后的页面,或者是解决通过cookie的反扒,需要使用request来处理 ...
- 首届OpenHarmony竞赛训练营结营颁奖,75所高校学子助力建设开源生态
由OpenAtom OpenHarmony(以下简称"OpenHarmony")项目群工作委员会和OpenHarmony项目群技术指导委员会主办的首届OpenHarmony竞赛 ...
- 开源图形驱动在OpenHarmony上的使用和落地
本文转载自 OpenHarmony TSC 官方微信公众号<峰会回顾第10期 | 开源图形驱动在OpenHarmony上的使用和落地> 演讲嘉宾 | 黄 然 回顾整理 | 廖 ...
- Go 语言中结构体的使用和示例
结构体(简称struct)用于创建不同数据类型的成员集合,放入一个单一的变量中.虽然数组用于将相同数据类型的多个值存储在单一变量中,但结构体用于将不同数据类型的多个值存储在单一变量中.结构体对于将数据 ...
- 官方直播丨“Hello Ability:从页面跳转开始”周三晚不见不散
12月8日 19:00-20:30,Hello HarmonyOS系列课程的第四期"Hello Ability:从页面跳转开始"线上直播,将带你学习如何快速通过JS page间.A ...