安卓逆向初體驗~
受害者:
6ZqG5LyX5pWw5o2u
通過 Charles 抓包發現關鍵資訊請求均攜帶
sign
參數,且每次請求的值都不一樣:
使用 jadx 将對應的 apk 反編譯并分析,全局搜素
"sign"
關鍵字沒有相關結果。通過生成的代碼檔案結構大概可以判斷該 apk 使用了 360 加強:
通過 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 類即可擷取加密的結果。