下面介绍三个反编译工具
对于so文件的逆向工具选择
Objection是一款移动设备运行时漏洞利用工具,该工具由Frida驱动,可以帮助研究人员访问移动端应用程序,并在无需越狱或root操作的情况下对移动端应用程序的安全进行评估检查。
安装命令
pip3 install objection
frida是一款便携的、自由的、支持全平台的hook框架,可以通过编写JavaScript、Python代码来和frida_server端进行交互
frida的安装可以参考:https://www.jianshu.com/p/60cfd3f6afde
1、Dex2jar是一种工具,可以将Android的.dex文件转换为Java的.class文件,以便更方便地进行反编译和分析。
d2j-dex2jar.bat classes.dex
2、我们可以看到函数getSignatureString(byte[]),它由本机库实现。实现getSignatureString的so函数实在 (/lib/armeabi-v7a/libstrings.so):
3、Signature密钥查找 签名算法 (HMACSHA256) 的密钥通过方法 Scrambler::getstring() 获取。反编译此方法会显示密钥是动态生成的:
4、Fook函数
import frida
import sys
session = frida.get_usb_device(1000000).attach("com.instagram.android")
script = session.create_script("""
fscrambler = Module.findExportByName(null,"_ZN9Scrambler9getStringESs");
Interceptor.attach(ptr(fscrambler), {
onLeave: function (retval) {
send("key: " + Memory.readCString(retval));
}
});
""")
def on_message(message, data):
print(message)
script.on('message', on_message)
script.load()
sys.stdin.read()
执行
$ adb shell
shell@mako:/ $ su
root@mako:/ # /data/local/tmp/frida-server &
[1] 3354
root@mako:/ # exit
shell@mako:/ $ exit
$ python hook.py
{u'type': u'send', u'payload': u'key: 4d53d9e2da15fd018e591939cd9689a8e7bbed50841fcb35b976ce63461cb834'}
得到flag:4d53d9e2da15fd018e591939cd9689a8e7bbed50841fcb35b976ce63461cb834