当我们在做逆向工作时,总会遇到需要查看某个 so 文件的情况,甚至可能需要对其进行一些微小的修改。这时候,我们就需要来点反编译的魔法了。
不过别担心,只要你掌握了 IDA Pro 和 010 Editor 这两个工具,就能轻松愉悦地完成反编译和修改工作啦。
IDA Pro 是一款由意大利公司 Hex-Rays 开发的反汇编工具,其功能十分强大。首先,它支持多种处理器架构,包括 x86、ARM、MIPS 等。其次,它可以对二进制文件进行静态分析,还可以通过调试器进行动态分析。此外,IDA Pro 还支持多种插件,可以帮助用户更加高效地进行反汇编和分析。
010 Editor 是一款十分强大的二进制文件编辑器,主要用于分析、编辑和处理任意格式的二进制文件。
当我们需要查看 so 源码时,可以使用 IDA Pro 工具对 so 文件进行反编译,然后就能阅读源码了。如果涉及到修改需求时,则可以先在 IDA Pro 工具里找到对应代码的汇编地址
,然后使用 010 Editor 打开 so 文件,以汇编地址作为关键字进行查找,找多对应的代码,直接修改即可。
由于 010 Editor 工具里是以十六进制展示代码,所以修改时,需要特别注意,不要改错地方或者键入错误的内容,否则会导致 so 文件执行异常。
- IDA Pro 下载地址:
Mac:https://www.macz.com/mac/734.html?id=NzY4OTYwJl8mMjcuMTg2LjEyNS40OQ==
Windows:https://soft.macxf.com/soft/2059.html?id=MjkzODQ%3D
Mac 的直接拖拽安装即可:
- 010 Editor 下载地址:
https://www.sweetscape.com/download/010editor/
1. 利用 IDA Pro 反编译 so 文件
1.1 将输入法切换到系统默认的 ABC
在开始正式的反编译工作前,需要做一件重要的事情,就是把输入法切换到系统默认的 ABC。
三方的输入法和 IDA Pro 有兼容性问题,会导致崩溃,所以,使用 IDA Pro 期间,输入法只能是在 ABC 模式下,否则会出现如下崩溃提示:
1.2 确认 so 文件是 32 位还是 64 位
在使用 IDA 反编译 so 之前,需要确定下自己的 so 文件是 32 位的还是 64 位的,以便启用不同的 IDA 程序进行反编译。确认的方式可以使用如下命令:
file filename.so
输出信息:
可以看到,我这里的 so 文件是 32 位的。
1.3 启动 IDA Pro
我们在 mac 上安装好了 IDA Pro 后,是不能直接点击软件图标打开它的,,正确的启动方式如下:
右键 ida
,选择“显示包内容”
之后按如下提示进行选择:
首次进入时,选择 go
即可:
这是打开之后的界面:
直接把 so 文件拖拽进来,点击 ok
,就可以开始反编译了:
这里选择允许即可:
大概等待一会,就反编译完成了!
此时我们看到界面左侧有一个 Function name
的窗口,这里面会列出所有的函数名字,我们可以根据需要查看,也可以直接检索,检索的方式是点击右键,选择“Quick filter”,然后输入函数名字即可。
我搜索了一个名叫 fprintf
的函数:
然后双击第一个搜索结果,再双击下图红框圈出来的地方,即 sub_1D508:
进入 sub_1D508 后,直接按 F5 键,即可将其转化为 C 语言实现的伪代码,然后就可以正常阅读了:
以上就是反编译的操作流程。
2. 利用 010 Editor 修改 so 文件
下面我们来实践下,修改代码中的某个值。比如我想修改刚刚代码中第 43 行的 return 返回值,将 2 改为 0。
修改方式是,先用鼠标选中需要修改的值 2
,然后在页面底部查看它的地址: 1D592
,我们需要记住这个地址。
此时,我们切换到 IDA View-A 界面,在里面查找到 1D592
,右侧的 #2
就是我们需要修改的值。
我们同样用鼠标选中 #2
,然后切换到 Hex View-1 窗口,查看其十六进制的表示:
我们看到对应的 02 20
也被选中了,02
就是我们要修改的值的十六进制表示。
我们把整个十六进制串拷贝一下,如红框圈起来所示:
然后用 010 Editor 打开 so 文件,用 ctrl+F 调出搜索框,粘贴刚刚拷贝的十六进制串,定位到对应的代码,然后将 02
改为 00
。
修改完后,修改后的值会显示为红色。此时记得点击 保存,然后可以关掉工具。
此时,我们使用 IDA Pro 再次打开 so 文件,找到刚刚的代码,发现 2 已经变成了 0。
以上就是修改的流程。
本文只是演示了修改静态资源值,如果你对汇编语言很熟悉,可以直接修改代码逻辑。