修改SO文件

若没有源码,又想修改SO里的返回值,只能进行反编译修改,以下是修改教程。

准备工具

  • IDA Pro软件
  • 010Editor软件(Android Stuido可下载个插件:Binary/hex editor,类似插件都行)

修改步骤

  1. 使用IDA Pro打开so文件

注意:
1,64位的so需用ida64软件图标打开,32位使用ida软件图标打开
2,若是打不开,可以使用管理员权限

image.png
  1. 在Functions窗口,右键,选择“快速搜索”

    image.png
  2. 输入要过滤的关键字

    image.png

    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;
}
  1. 假设,修改add2方法(其它方法同理),选中add2方法

    image.png

    此时,视图窗口是看不懂的。鼠标选中视图窗口,按快捷键F5(windows可能要加上Fn键),结果如下:

    image.png

    此时,能看出伪代码与源码基本无差;也可看到代码的‘地址’是多少

  2. 选中IDA View-A标签,回到视图窗口(红框是方法的返回值),选中红框,如下:

    image.png
  3. 点击,Hex View-1标签,看到40 0C 00 11被选中
    image.png
  4. 使用 010Edito软件,或其它类似软件/插件,修改该红框内容
    image.png

    鼠标选中,改成要修改的值即可,比如我要返回数值5,对应的内容则是A0 00 80 52

  5. 修改后保存。
  6. 查看是否修改成功。若使用010Edito软件,删除so以外的其它自动生成的文件。

    image.png

    image.png

    查看视图窗口、伪代码,均表明修改成功。

  7. 最后,替换修改后的so,使用add2方法发现,无论入参什么值,返回都是5

版权声明:
作者:Zad
链接:https://www.techfm.club/p/128004.html
来源:TechFM
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>