【逆向分析】抖音小程序ttpkg.js文件解包記錄
VSole2022-09-08 08:24:11
一、通過Fiddler抓包獲取到小程序的配置信息文件,其中包含ttpkg.js文件的路徑
抓包相信大家肯定已經會了吧,不會的可以參考吾愛和看雪論壇的相關文章
二、瀏覽器打開對應的ttpkg.js文件,并保存到本地
這里怎么保存的不用我多說吧,重點在后面的分析過程
三、通過16進制分析工具進行數據分析
我這里使用的是WinHex,其他的工具都大同小異,自行選擇3.1 ttpkg的文件結構
這里通過搜索引擎查找相關資料,居然只找到一篇相關的,大概結構可參考這篇文章:https://blog.csdn.net/weixin_29002961/article/details/117869108
這里貼出文件的大概結構信息(實際肯定有差距)
3.2 通過WinHex分析數據
打開文件,第一眼就可以看到大量的明文數據,前四個字節是固定標識,后面很多文件路徑之類的東西,再往下翻會看到文件內容之類的東西文件頭
部分文件內容
我這里復制了一份導入到可以格式化代碼的編輯器里面,通過代碼格式化可以看出大概的文件結構
之所以要復制一份是防止破壞源文件的結構(你猜我是怎么知道的[手動狗頭])
我這里使用的phpstorm導入的文件,通過代碼格式化后可以看到31行有一個json的開始,并且沒有亂碼之類的,結束的地方在1210行,后面再跟的就是一個js代碼的開頭了,可以猜測在文件的某個地方存有文件開始位置和結束位置或者文件長度的數據
打開WinHex在文件頂部,查看兩個明文之間的間距是多少,這種一般都會有一定的規律,這里看到間距的長度為C,C是16進制的,所以在十進制中代表的12,也就是每個明文路徑之間有十二個字節的間距,這里經過多次對比后確定長度就是C
3.3 對比每組數據的差異與共同點
選中數據后點鼠標右鍵選擇編輯-復制選塊-十六進制數值>
然后粘貼到編輯器里面,并把每個端后面的文件名復制到后面,按照兩個字符為一組用空格進行分割,下面是我分析出來的數據
藍色框里代表不同的數據,紅色框里代表相同的數據,通過分析可得出第三個框里的數據為文件名稱的長度,其余的都是結構體剩余的字節,比如int類型占用四個字節,'app-service.js'的長度為14,所以對應的16進制為E,'app.js'的長度為6,在16進制里也就是'6',這里定位了文件名稱長度的位置,就是每段空白字符的第9-12個字節,因為使用的是大端存儲的,所以是逆序的,大端存儲和小端存儲可以百度一下。
文件頂部數據比較特殊,通過之前的分析可分析出以下數據:版本號、4個空字節占用、文件個數、第一個文件名稱長度,這里我們發現文件頭里面并沒有我們需要的文件起始位置和結束位置的信息

3.4 定位文件起始位置和結束位置
因為第一個文件為json,所以我們就會想起最開始的那個json頭,先找一下偏移位置是多少,再去數據里找相應的16進制數據。這里就定位了文件名稱后面第一個4個字節就是我們要找的文件內容開始位置,因為使用的大端存儲,所以是逆序的,源數據為:6F 25 00 00,通過逆序后就是00 00 25 6F,跟我們手動找到的文件頭偏移地址一致

數據長度也通過同樣的方式分析,通過右鍵把json開始的{設置為選塊起始位置,再把結尾的地方選擇為選塊結束位置,即可


OK,至此所需要的數據就找完了,有了這些數據就可以把文件名稱對應的文件內容寫出來了
最終解包效果圖如下:

VSole
網絡安全專家








>
