修改SO文件
若没有源码,又想修改SO里的返回值,只能进行反编译修改,以下是修改教程。
准备工具
- IDA Pro软件
- 010Editor软件(Android Stuido可下载个插件:Binary/hex editor,类似插件都行)
修改步骤
- 使用IDA Pro打开so文件
注意:
1,64位的so需用ida64软件图标打开,32位使用ida软件图标打开
2,若是打不开,可以使用管理员权限
-
在Functions窗口,右键,选择“快速搜索”
-
输入要过滤的关键字
4.add1和add3方法实现都一样,如下:
extern "C"
JNIEXPORT jint JNICALL
Java_com_hz_nativelib_NativeLib_add1(JNIEnv *env, jobject thiz, jint x) {
return x + 3;
}
extern "C"
JNIEXPORT jint JNICALL
Java_com_hz_nativelib_NativeLib_add2(JNIEnv *env, jobject thiz, jint x) {
return x + 3;
}
-
假设,修改add2方法(其它方法同理),选中add2方法
此时,视图窗口是看不懂的。鼠标选中视图窗口,按快捷键F5(windows可能要加上Fn键),结果如下:
-
选中IDA View-A标签,回到视图窗口(红框是方法的返回值),选中红框,如下:
- 点击,Hex View-1标签,看到
40 0C 00 11
被选中 - 使用 010Edito软件,或其它类似软件/插件,修改该红框内容
鼠标选中,改成要修改的值即可,比如我要返回数值
5
,对应的内容则是A0 00 80 52
- 修改后保存。
-
查看是否修改成功。若使用010Edito软件,删除so以外的其它自动生成的文件。
查看视图窗口、伪代码,均表明修改成功。
- 最后,替换修改后的so,使用add2方法发现,无论入参什么值,返回都是
5
共有 0 条评论