woflant 发表于 2024-3-26 10:39

某PDF编辑器逆向记录

本帖最后由 woflant 于 2024-3-26 10:41 编辑

## 前言

本次逆向仅供学习交流,无任何其他意图,如有侵权请联系删除



## `0x0` 所需工具

查壳:`die`

调试:`xdbg`

## `0x1` 查壳 & 运行

### 查壳

直接上`die`查壳,应该是没有加壳(一般这种软件都不会加壳,会拖慢运行速度,影响用户体验),而且用到了`QT`库



没加壳直接运行先看看,加了壳可能就没有这篇帖子了:)

### 运行



无需多言,逆向目标就是开通会员了



## `0x2` 调试 & 分析

### 传统字符串搜索大法

先搜索字符串,过滤包含“`vip`”的字符,有几个可疑点,下断点,如下图



这里为甚么要过滤“`vip`”字符?

像这种软件,常见过滤字符有“`pro`”、“`regist`”、“`vip`”等等,当然有些软件没有相关字符串,一般是在相关提示处回溯堆栈



下完断点直接运行碰碰运气,程序直接结束,应该是有反调试



### 简单反调试

常规反调试函数有:`IsDebuggerPresent`、`CheckRemoteDebuggerPresent`,下断重新运行



断在`IsDebuggerPresent`处



同时观察右下角堆栈,调用方是不是程序段,简单过掉,返回值的`eax`改为`0x0`



继续运行,还是断在`IsDebuggerPresent`处,调用方是系统`dll`,略过



### 断点分析-1

然后会在“`isvip`”字符处断n次



观察上下汇编段,没有可疑大跳转,且`QT`库函数都是字符串处理,此处应该不是关键点,先暂时取消该断点



### 断点分析-2

继续运行,这次断在“`isVipUser`”字符处



上下观察,发现调用“`QVariant(bool)`”(`bool`型变量)、“`QObject::setProperty(char const *, class QVariant const &)`”(设置属性)等QT库函数,附近还出现“`isVipUser`”字符,这个地方很可疑



### 重点分析 & 尝试修改

在`call`段首下断,重新运行到段首,细细分析





一顿分析,此处非常可疑,从上图分析可知,关键点在于`0x35FB93`处的``,该处初始值为`0x0`,先更改为`0x1`,运行看看是否达到效果



到位,逆向结束



## 结语

这个软件难度不大,虽然也捣鼓了两天:)

无壳、字符串搜索、反调试、汇编代码分析(`ida`伪代码也能分析,此贴位提及)等,很适合交流学习



还有具体补丁也不详细说明了,分析点后面跳转处可实现补丁

byh3025 发表于 2024-3-26 13:56

无敌小儿 发表于 2024-3-26 12:52
已经修改为MOV BYTE PTR , 1 不管用,可能是修改的不对

提供一个思路,向下看有一个cmp BYTE PTR , 0,然后你改成MOV BYTE PTR , 1就行了

爱飞的猫 发表于 2024-3-27 10:19

> 简单反调试

可以安装 (https://github.com/x64dbg/ScyllaHide) 自动处理常见的调试器检测哦。

---

> 还有具体补丁也不详细说明了,分析点后面跳转处可实现补丁

只修改跳转可能不够完美(例如程序其它地方可能也在检测这个值),如果能找到赋值的地方强制修改,可能会更通用一些。

z87239385 发表于 2024-3-26 10:42

支持一下

W315557227 发表于 2024-3-26 11:04

看着有难度 支持下

saccsf 发表于 2024-3-26 11:25

跟大佬学习一下思路

onlyougao 发表于 2024-3-26 11:26

学习一下

TheWeiJun 发表于 2024-3-26 11:30

学习了,真不错啊。

bujimo3 发表于 2024-3-26 11:39

跟大佬学习一下思路

Moinul 发表于 2024-3-26 11:50

你是怎么通过exe看到源码的??+

woflant 发表于 2024-3-26 12:01

Moinul 发表于 2024-3-26 11:50
你是怎么通过exe看到源码的??+

这软件用了QT库函数,带有函数名称

kelekvc 发表于 2024-3-26 12:22

感谢大佬的精彩分享。
页: [1] 2 3 4 5 6 7 8
查看完整版本: 某PDF编辑器逆向记录