記一次利用動態除錯so包破解協議 (2)
阿新 • • 發佈:2018-11-22
繼續上一篇https://blog.csdn.net/u014476720/article/details/83650566的操作
上一篇只分析出so包裡面的 buildParam2 裡面的加密方式,這一篇來看看buildParam1的加密方式
這裡分析是已使用者主頁的介面
對應在分析buildParam1裡面的加密方式的時候比較坑,可能是工具的原因,又或者是開發者設定的阻礙吧
ida列印的:
frida 打印出來的:
兩個工具 = 後面都是有其他資料,直接拿內容去加密,很鬱悶加密的內容和抓包的資料對不上
靜態分析了一下so包,發現了一個可疑的方法返回
用frida 列印看看
返回了固定字串 “&}ad3Y/[email protected],"TB5kKX7UF!;}+kLdM.=”
後來分析了很久,反覆列印輸出測試,得出加密的固定格式是:
&}ad3Y/[email protected],\"TB5kKX7UF!;}+kLdM.= + 內容 + &}ad3Y/[email protected],\"TB5kKX7UF!;}+kLdM.=
使用的程式碼
#!/usr/bin/env python # coding=utf-8 from __future__ import print_function import frida, sys rdev = frida.get_remote_device() session = rdev.attach("cn.mama.cityquan") native_hook_code = """ Interceptor.attach(Module.findExportByName("libframework.so" , "sk_get"), { onEnter: function(args) { send("sk_get value: "+Memory.readCString(args[0])); }, onLeave:function(retval){ send("sk_get return:"+Memory.readCString(retval)); } }); Interceptor.attach(Module.findExportByName("libframework.so" , "md5sum"), { onEnter: function(args) { send("md5sum value0: " + Memory.readCString(args[0])); send("md5sum value1: " + args[1]); send("md5sum value2: " + Memory.readCString(args[2])); }, onLeave:function(retval){ send("return:"+retval); } }); """ def on_message(message, data): print(message) script = session.create_script(native_hook_code) script.on('message', on_message) script.load() sys.stdin.read()
糾結了很久,終於搞定了