apk逆向之so库的破解和调用

2,406 阅读2分钟

小知识,大挑战!本文正在参与“  程序员必备小知识  ”创作活动

当你习惯了python的便捷,在逆向安卓是碰到so库的加密分析时,除了使用ida进行函数分析之外,so库的调用也成了一个问题,尤其是遇到只有arm架构的so时,明显感觉到头疼

so库调用方式尝试

1.重新编写一个app进行so库的调用 (不推荐)

痛点:

  • 前期开发费时费力,
  • 开发完毕后只能运行在真机或者模拟器,
  • 如果要执行定时任务相较python或者javaweb而言效率和性能相差太大

2.使用javaweb的形式进行调用(局限性太大,若熟悉树莓派可优选)

优势:

  • 调试方便
  • 可拉进服务器直接定时执行

痛点:

  • 如果使用windows的服务器那么只支持x86的so库, linux的服务器同样不支持arm的so库,即便使用docker也无法运行arm的容器, 除非服务器系统是arm架构, 目前现存的arm系统除了android之外估计都在树莓派了

3.使用python调用so库(若熟悉树莓派可优选)

痛点:

  • 和上面的问题一样, 不支持arm的so库

4.使用 python第三方库 AndroidNativeEmu 调用so(观望)

痛点

  • 该库目前只支持简单的函数调用,很多功能还未实现,期待后期的发展

5. 使用unidbg(推荐)

优势:

  • 虚拟jvm环境,支持arm32和arm64的so库
  • 弥补了上面javaweb的不足

痛点:

  • 该库的原理是从so中寻找函数,面对动态加载的so比较麻烦, 不如原生System.loadXXX加载方便

总结

有条件折腾的话还是选择树莓派吧

小记

  1. 最近在ubuntu x86 32位的系统上启动springboot调用so库,出现以下问题:
/tmp/lib/jniLibs/libkey.so: libstdc++.so: cannot open shared object file: No such file or directory

由于自身能力有限,对C语言不熟,暂时搁置, 来日再处理