看前必读

  本软件是商业软件,本篇文章仅仅介绍 逆向分析过程 和 关于开发软件防止逆向的思考 ,不会提供任何成品破解补丁或成品软件,仅限用于学习和研究目的,否则,一切后果自负。您必须在下载后的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,然后查看是否破解成功。

  显示破解成功,并且转化后不带水印。

  此程序的所有功能都被解除了,但是我提一句,程序使用还是有问题,会产生异常,原因自己找找,产生的异常并不是由于反调试,具体原因自己分析。本篇文章是对程序付费功能限制进行逆向和思考,故不再叙述。

敬告

  1. 通过本文说明逆向破解,虽然能解除所有功能限制,但不能完全正常使用,会有程序异常出现。
  2. 本文和破解的相关程序仅限用于学习和研究目的,否则,一切后果自负。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
  3. 你的 IDA 的 F5 的结果可能和我的不一样,因为它本来就不准确,只能提供一些参考,需要一些调整。IDA 的 F5 不是万能的,它会因一些花指令和变形指令干扰导致反编译成伪代码失败,汇编是最重要。

彩蛋

  如果心细的话,你可以翻一翻plugin文件夹,里面会有直接打开电子书阅读器,可以直接打开ePub等文件,是不是大大方便了电脑端阅读电子书呢?

思考

  1. 验证不要仅仅靠一个全局变量(然而本程序应该是一个类,因为最后有释放该内存的函数)进行校验,要多设立检验点增大破解难度,并使用被假破解提供假象,迷惑破解者,但会提高人力成本。
  2. 一次验证后,要多重验证,防止自己已被破解而不知。本程序还是考虑到了,启动一个定时器来频繁校验,但在 IDA 面前,这不是个秘密,稍作深入分析很容易被发现,更改一个字节就能关闭此定时器。但过多的验证可能会增大程序内存和 CPU 占用,增大人力成本,甚至影响用户体验。
  3. 程序必要时加一个壳,提高破解门槛,但会以牺牲内存或者运行速度为代价。

羽夏逆向破解日记簿——关于逆向epub格式转化器与思考的更多相关文章

  1. 羽夏逆向破解日记簿——RunAsDate的实现原理分析

    前言   RunAsDate是一个小工具,允许您在指定的日期和时间运行程序,不过有人用它来破解有时间限制了.此实用程序不会更改计算机的当前系统日期和时间,但只会将指定的日期/时间注入所需的应用程序.该 ...

  2. 20165306 Exp1 PC平台逆向破解

    20165306 Exp1 PC平台逆向破解 一.逆向及Bof基础实践说明 1. 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,fo ...

  3. 2017-2018-2 20155303『网络对抗技术』Exp1:PC平台逆向破解

    2017-2018-2 『网络对抗技术』Exp1:PC平台逆向破解 --------CONTENTS-------- 1. 逆向及Bof基础实践说明 2. 直接修改程序机器指令,改变程序执行流程 3. ...

  4. 20155308《网络攻防》 Exp1 PC平台逆向破解(5)M

    20155308<网络攻防> Exp1 PC平台逆向破解(5)M 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是 ...

  5. 2017-2018-2 20155333 《网络对抗技术》 Exp1 PC平台逆向破解

    2017-2018-2 20155333 <网络对抗技术> Exp1 PC平台逆向破解 1. 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行 ...

  6. 羽夏逆向指引—— Hook

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易,如果本篇文章有帮助你的, ...

  7. 2018-2019-2 20165312《网络攻防技术》Exp1 PC平台逆向破解

    2018-2019-2 20165312<网络攻防技术>Exp1 PC平台逆向破解 一.Exp1.1 直接修改程序机器指令,改变程序执行流程 知识要求:Call指令,EIP寄存器,指令跳转 ...

  8. 【MyEclipse 2015】 逆向破解实录系列【终】(纯研究)

    声明 My Eclipse 2015 程序版权为Genuitec, L.L.C所有. My Eclipse 2015 的注册码.激活码等授权为Genuitec, L.L.C及其付费用户所有. 本文只从 ...

  9. 【MyEclipse 2015】 逆向破解实录系列【2】(纯研究)

    声明 My Eclipse 2015 程序版权为Genuitec, L.L.C所有. My Eclipse 2015 的注册码.激活码等授权为Genuitec, L.L.C及其付费用户所有. 本文只从 ...

  10. 20165223《网络对抗技术》Exp1 PC平台逆向破解

    目录--PC平台逆向破解 1 逆向及BOF基础实践说明 1.1 实践内容 1.2 实践要求 1.3 基础知识 2 实验步骤 2.1 直接修改程序机器指令,改变程序执行流程 2.2 通过构造输入参数,造 ...

随机推荐

  1. Oracle 隐式数据类型转换

    Oracle类型转换规则: 对于insert和update操作,oracle将值转换为受影响的的列的类型. 对于select操作,oracle会将列的值的类型转换为目标变量的类型. 看如下实验: 1. ...

  2. [apue] 作为 daemon 启动, Unix Domain Socket 侦听失败?

    前段时间写一个传递文件句柄的小 demo,有 server 端.有 client 端,之间通过 Unix Domain Socket 通讯. 在普通模式下,双方可以正常建立连接,当server端作为d ...

  3. Vue3 Diff 之 patchKeyedChildren 动态示例

    在学习全网学习各路大神的关于Vue3 Diff算法分析文章的时候,一定离不开关键方法 patchKeyedChildren. patchKeyedChildren 处理的场景比较多,大致有 5 个主要 ...

  4. C# 布尔值和条件语句:入门指南和实用示例

    C# 布尔值 在编程中,通常需要一个只能有两个值之一的数据类型,比如: 是 / 否 开 / 关 真 / 假 为此,C# 有一个 bool 数据类型,可以取 true 或 false 的值. 布尔值 使 ...

  5. 解析 Go 编程语言数据类型:bool、整数、浮点数和字符串详细介绍

    数据类型 数据类型是编程中的重要概念.数据类型指定了变量值的大小和类型.Go是静态类型的,这意味着一旦变量类型被定义,它只能存储该类型的数据. 基本数据类型 Go 有三种基本数据类型: bool:表示 ...

  6. HarmonyOS线性容器特性及使用场景

      线性容器实现能按顺序访问的数据结构,其底层主要通过数组实现,包括ArrayList.Vector.List.LinkedList.Deque.Queue.Stack七种. 线性容器,充分考虑了数据 ...

  7. 基于 Scriptable 从零开始美化iOS桌面(一)

    今天我为大家带来新的作品,iOS17桌面组件神器(Scriptable)原创脚本,精美作品分享!喜欢的话就点关注吧!更多脚本正在路上... * script : ONE-Progress.js * v ...

  8. c# MCV 实现跨域

    前言 core跨域严格来说是要分为两步的,因为分为简单跨域和复杂跨域,第一种为直接允许跨域,第二种因为存在某些框架本身不允许put,delete这两个,那么这就是一个问题了.对的,那么mvc这种重量级 ...

  9. 实时数仓构建:Flink+OLAP查询的一些实践与思考

    今天是一篇架构分享内容. 1.概述 以Flink为主的计算引擎配合OLAP查询分析引擎组合进而构建实时数仓,其技术方案的选择是我们在技术选型过程中最常见的问题之一.也是很多公司和业务支持过程中会实实在 ...

  10. 低成本FPGA的MIPI测试GOWIN和LATTICE CROSSLINK

    本次实验MIPI屏,2.0寸,分辨率是240*320 RGB888, 接口如下: 接上IO就是RST和MIPI的时钟和数据接口,另外就是电源和地. 一:GOWIN的测试方案 Gowin的案例中,首先是 ...