1. 程式人生 > >記一次利用動態除錯so包破解協議 (2)

記一次利用動態除錯so包破解協議 (2)

繼續上一篇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()

 

糾結了很久,終於搞定了