天天看點

記一次利用動态調試so包破解協定 (2)

繼續上一篇https://blog.csdn.net/u014476720/article/details/83650566的操作

上一篇隻分析出so包裡面的 buildParam2 裡面的加密方式,這一篇來看看buildParam1的加密方式

記一次利用動态調試so包破解協定 (2)

這裡分析是已使用者首頁的接口

對應在分析buildParam1裡面的加密方式的時候比較坑,可能是工具的原因,又或者是開發者設定的阻礙吧

ida列印的:

記一次利用動态調試so包破解協定 (2)

frida 列印出來的:

記一次利用動态調試so包破解協定 (2)

兩個工具  =  後面都是有其他資料,直接拿内容去加密,很郁悶加密的内容和抓包的資料對不上

靜态分析了一下so包,發現了一個可疑的方法傳回

記一次利用動态調試so包破解協定 (2)

用frida 列印看看

記一次利用動态調試so包破解協定 (2)

傳回了固定字元串 “&}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()
           

糾結了很久,終于搞定了