天天看點

關于某 App 請求參數 sign 字段加密分析

安卓逆向初體驗~

受害者:

6ZqG5LyX5pWw5o2u
           

通過 Charles 抓包發現關鍵資訊請求均攜帶

sign

參數,且每次請求的值都不一樣:

關于某 App 請求參數 sign 字段加密分析

使用 jadx 将對應的 apk 反編譯并分析,全局搜素

"sign"

關鍵字沒有相關結果。通過生成的代碼檔案結構大概可以判斷該 apk 使用了 360 加強:

關于某 App 請求參數 sign 字段加密分析

通過 FDex2 擷取響應的 dex 檔案,再次使用 jadx 打開,搜尋關鍵 "sign" 即可出現結果。

耐心分析即可将代碼定位到實作加密的地方:

long a = DateUtils.m18817a();
request.headers("timestamp", String.valueOf(a));
request.headers("sign", Tools.m20203a(a, request.getBaseUrl()));
           

m20203a

方法定義如下:

public static String m20203a(long j, String str) {
        HashMap hashMap = new HashMap();
        hashMap.put("timestamp", String.valueOf(j));  
        hashMap.put("path", str.substring(27, str.length()));  
        hashMap.put("version", "1.0.0");
        StringBuffer stringBuffer = new StringBuffer();  
        for (Map.Entry<String, String> entry : m20205a((Map<String, String>) hashMap).entrySet()) {
            stringBuffer.append(entry.getKey());
            stringBuffer.append(entry.getValue());
        }
        stringBuffer.append("FA0338436BFA405CAE9161748831F40B");
        return MD5Util.m18744b(stringBuffer.toString().trim().getBytes()).toUpperCase(Locale.CHINA);
    }
           

到此加密邏輯就顯現了,即通過對請求的 URL 的一部分、目前時間戳和版本号加上指定字元做哈希處理。

對于

java

不太了解的情況下,也可以将相關代碼摳出來,放到新的

java

檔案中,編譯後通過

python

執行終端指令運作對應的 java 類即可擷取加密的結果。