日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

某次元app之data参数分析

發布時間:2024/4/11 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 某次元app之data参数分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天我們要分析的app 是5Y2K5qyh5YWD54mI5pys5Y+3djUuMC44 ,小伙伴們可以去各大應用商定自行下載。

同系列文章推薦下:
1.聚美app之 _sign參數分析
2.大潤發優鮮app之paramsMD5參數分析
3.美圖秀秀 sig參數分析
4.貝殼app Authorization參數分析
5.豆瓣app sig參數分析
6.半次元app之data參數分析

1.先抓個包

老規矩,先用charles 抓個包,可以看到該app用的更多是post請求,請求參數 叫 “data”,請求值很明顯被加密了,那么今天研究的參數就是它,發現字符串是以"="結尾,根據經驗大膽的猜測是被base64處理過,猜測估計是使用了AES/DES或者一些其他算法。

2.jadx靜態分析

直接搜索"data" ,肯定會有一大堆返回結果。那么就換個思路,比如一些常用詞,比如AES ,DES,base64,encryp。這里搜索AES

然后 看這里(SecretKeySpec secretKeySpec = new SecretKeySpec(randomString.getBytes(Charset.defaultCharset()), "AES");)感覺很像,來點進去看一看。

看關鍵詞,這里就很明顯使用了AES加密的ECB模式,在ECB模式中只需要一個16位的key。
然后繼續追進去看,發現key 是randomString.getBytes(Charset.defaultCharset()) 這個方法返回來的,它又是randomString = getRandomString(i); 方法回來的,繼續往上追。

這里來到了private static native String getRandomString(int i);,看關鍵詞 native,好吧,加密的key 是來自于so層的。這時候需要看看so里面的邏輯是咋寫的,不過從so里面返回的只是key,理論上來說這個key 應該是固定的,所以說我們可以直接hook它在java層的返回結果。

3.frida動態調試

打開frida服務,運行命令:

frida -U com.banciyuan.bcywebview -l hook_banciyuan_java.js

js代碼如下:

Java.perform(function(){var Encrypt = Java.use("com.banciyuan.bcywebview.utils.encrypt.Encrypt");Encrypt.a.overload("java.lang.String").implementation = function (str){console.log("↓↓↓↓↓↓↓↓↓↓hook開始↓↓↓↓↓↓↓↓↓↓↓↓↓↓");console.log("AES加密前參數: "+str);var res = Encrypt.a(str);console.log("AES加密后結果: "+res);console.log("↑↑↑↑↑↑↑↑↑↑↑hook結束↑↑↑↑↑↑↑↑↑↑↑↑↑");return res;}Encrypt.getRandomString.implementation = function (a) {console.log('getRandomString入參數: ', a);var aes_key = this.getRandomString(a);console.log('加密的key: ', aes_key);return aes_key;}// Encrypt.b.implementation = function (str, str2){// console.log("b方法參數1: "+ str);// console.log("b方法參數2: "+ str2);// // console.log("↓↓↓↓↓↓↓↓↓↓↓↓打印b方法調用的堆棧↓↓↓↓↓↓↓↓↓↓↓↓");// // printStack();// // console.log("↑↑↑↑↑↑↑↑↑↑↑↑打印b方法調用的堆棧↑↑↑↑↑↑↑↑↑↑↑↑");// var bres = Encrypt.b(str, str2);// console.log("方法返回結果: "+ bres);// console.log("方法返回結果: "+ Object.keys(bres))// send(bres)// return bres;// }function printStack(){var threadef = Java.use('java.lang.Thread');var threadinstance = threadef.$new();var stack = threadinstance.currentThread().getStackTrace();for(var i = 0;i<stack.length;i++){send("stack:" + stack[i].toString());}}} )

效果如圖:


這里就很明顯的能看到,輸入的參數和輸出的結果以及key。
然后key已經被hook出來了,接下來,打開對應的so文件,去驗證下我們的猜想。

查看so文件

這里的so文件叫 librandom.so,在導出表里面直接看到so層的方法名Java_com_banciyuan_bcywebview_utils_encrypt_Encrypt_getRandomString
,然后還找到對應的aes-key,也驗證了hook出來的值。

4.python還原一下

該app使用的是AES加密算法,對該算法不清楚的可移步這篇文章(python 實現AES加密算法)。
可以看到data 計算的結果,和hook出來的值一樣,然后請求也成功了。

完事,手工。

總結

以上是生活随笔為你收集整理的某次元app之data参数分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。