某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`伪代码也能分析,此贴位提及)等,很适合交流学习
还有具体补丁也不详细说明了,分析点后面跳转处可实现补丁 无敌小儿 发表于 2024-3-26 12:52
已经修改为MOV BYTE PTR , 1 不管用,可能是修改的不对
提供一个思路,向下看有一个cmp BYTE PTR , 0,然后你改成MOV BYTE PTR , 1就行了 > 简单反调试
可以安装 (https://github.com/x64dbg/ScyllaHide) 自动处理常见的调试器检测哦。
---
> 还有具体补丁也不详细说明了,分析点后面跳转处可实现补丁
只修改跳转可能不够完美(例如程序其它地方可能也在检测这个值),如果能找到赋值的地方强制修改,可能会更通用一些。 支持一下 看着有难度 支持下 学习一下 学习了,真不错啊。 跟大佬学习一下思路 你是怎么通过exe看到源码的??+
Moinul 发表于 2024-3-26 11:50
你是怎么通过exe看到源码的??+
这软件用了QT库函数,带有函数名称 感谢大佬的精彩分享。