Android 逆向apk的.so动态库

那么我们上篇文章中提及了安全性问题, Android apk如何加固防止被破解(防止逆向编译),那么本篇文章提及一点,so动态库的安全性与重要性。

首先我们要知道, .so动态库是做什么用的,它不像.smail文件可修改,它是属于汇编语言,如果直接去修改,文件会发生错乱。早上有人来问我,游戏打入渠道sdk之后发生错误,且只有armeabi里发生错误,这种情况可以断定.so动态库中有了兼容的冲突。

通常我们会看到libs下面有这么几个文件夹,mips、armeabi、armeabi-v7a和x86,其实是代表着不同的CPU类型,那么在arm下有不同的指令,想要了解的可以参考这篇文章 《Android ARM常用的汇编指令合集》

实现步骤:

  1. 使用apktool命令编译出来apk的目录
  2. 然后用IDA打开.so文件,在apk根目录的lib文件夹下
  3. 菜单中有个Search,可以用text作为入口
  4. 找到入口,一般为init方法
  5. 使用动态调试,给libdvm.so中的函数:dvmDexFileOpenPartial 下断点,然后得到dex文件在内存中的起始地址和大小,然后dump处dex数据即可
  6. 分析底层加载dex源码,知道有一个函数:dvmDexFileOpenPartial 这个函数有两个重要参数,一个是dex的其实地址,一个是dex的大小,而且知道这个函数是在libdvm.so中的。所以我们可以使用IDA进行动态调试获取信息
  7. 双开IDA开始获取内存中的dex内容,双开IDA,走之前的动态破解so方式来给dvmDexFileOpenPartial函数下断点,获取两个参数的值,然后使用一段脚本,将内存中的dex数据保存到本地磁盘中。
  8. 分析获取到的dex内容,得到了内存中的dex之后,我们在使用dex2jar工具去查看源码,但是发现保存,以为是dump出来的dex格式有问题,但是最后使用baksmali工具进行处理,得到smali源码是可以的,然后我们就开始分析smali源码。

Tips:

  • debugger模式
  • 通过dump出内存中的dex数据,其实不管apk如何加固,最后都是会加载到内存中的
  • 可以尝试调用so中的native方法,在知道了这个方法的定义之后 adb shell input text 命令来辅助我们的输入

我们以 趣头条.apk 为例,反向思维来看下这个包是如何加密的,首先我们来看目录结构:

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值