app:名稱,引力波
抓取新聞數據時發現,請求頭signature一直在變化,數了一下, 32位,估計是md5加密

首先,先把apk文件用apktool進行編譯,sh apktool d lejiagu.apk
生成如圖所示文件,我們觀察文件內容信息,發現tencent_stub這個文件,表示的是騰訊的樂加固,現在我們需要脫殼
一般市場上大部分的apk都是有加固的。像騰訊,360,愛幫,很多很多
我們沒必要去破解這些加固的代碼,只需要了解這個流程,hook勾住祝函數代碼就可以了,
脫殼原理:
在殼APK解密源APK后,源APK被加載前,攔截這個過程中的系統函數 把內存中的Dex文件去 dump出來
手動脫殼:
通過動態調試,跟蹤計算Dex源文件的內存偏移地址,從內存中Dump出Dex文件
難度大,寄存器,匯編,反調試,反讀寫
IDA
工具脫殼:
HOOK技術/內存特征尋找
簡單易操作
基於xposed 脫殼工具:
Fdex2:Hook ClassLoader loadClass方法 通用脫殼
dumpDex:https://github.com/WrBug/dumpDex
本次使用Fdex2
現在root后的安卓的機子上安裝xposed,安裝好以后再安裝fdex2,網上安裝包一大堆,自己找
安裝好以后運行fdex2,點擊你需要脫殼的app 會自動生成脫殼后的dex文件,如圖

從新運行此app。脫殼后的dex文件會在圖片上提示的dex輸出目錄里,此時我們需要adb命令進入手機安卓手機(需要usb鏈接電腦)(虛擬機也行),abd用homebrew安裝
執行命令 adb shell進入手機端 su獲取root權限 進入到/data/user/0/com.iCitySuzhou.suzhou001 里面.把文件mv到/scard里面,在使用pull命令將文件復制到電腦上

我們發現了dex文件,現在需要把他移動到sdcard文件夾里面,不移動到里面是無法復制到電腦上到(虛擬機可直接打開文件夾復制)
mv *.dex /sdcard dex文件就幾個此處選擇移動所有dex到/sdcard里面
移動好以后,我們使用 adb pull命令進行復制
adb pull adb pull /sdcard/ /Users/wxy/Desktop/android_section1/ (adb pull無法一起復制多個文件,只能復制文件夾,想偷懶到可以直復制文件夾,省事)
這是復制到電腦上之后的文件

我們將五個dex文件一一打開。找到關鍵的dex,一般的關鍵性的dex都是最大的文件,所以一般選擇最大dex文件進行打開

此時我們選擇
text_search 文本搜索

找關鍵參數signature
這時候發現很多,我們一個個的往下找

charels抓包的時候不止signature,還有和他在一起的appversion,sysversion 我們可以找和有這兩個參數在一起的
在這里

雙擊點進去

找到signature

發現signature是通過m12059函數進行賦值,而m12059傳入udid 和valueof()
udid是釘死的,valuof()是個時間戳,用法自己上百度上查
再調用mo293a函數,雙擊m12059a,find useage找到m12059函數,點進去

發現這個函數返回一個c2387.m11218a值,而"%S&&%S&&%S".format 后面的參數是str,str2,還有固定的字符串,對比前面的函數發現str 是udid str2是valueof 這函數的的參數是將str str2和固定的字符串,三個字符串拼接起來,拼接后的值傳入c2387.m11218a,由此我們可以想到將c2387.m11218a函數打包編譯成jar文件,用pycharm的第三方庫jpype運行該jar(先決條件是此函數沒有導入其他的函數,或者導入的函數較少,不然其他的包都要帶入)
雙擊,find useage打開此函數,

呃,看不懂,應該是個md5加密,沒有其他的導入包,整好符合我們的條件
我們將此函數復制放到pycharm 新建一個mysig.java

現將java文件打包成class文件
javac mysig.java
生成mysig.class
后將class文件編譯成jar文件
jar -cvf mysig.jar * 此步驟會將此目錄下所有class文件編譯成jar
編譯完成后我們新建一個python文件,思路:調用jar文件。將三個字符串拼接的值放入傳入jar

結束
參考猿人學
