前言
跟着龍哥搞了幾次unidbg了,這次也自己嘗試用來分析下某潮流app了。
分析
1.抓包
先抓個包
我們要搞的就是這個sign-v1了。
2.調試找參數
jadx一頓分析,一搜:
搜出來還不少,往下翻,找找一些特徵,很快找到這裏
點進去
ok,用objection hook之後,發現不是這個方法,但是確實是這個方法所在的類的b方法:
然後調用了這個getsign,getsign就在下面
再來hook下這兩個方法:
基本確定,就是這裏了,抓包工具也對比就是這裏:
3.ida查看:
打開ida看看,發現是靜態綁定的
可以的,感覺很簡單
調試
1.搭架子
首先搭一下架子,然後既然他不是動態註冊的,那就可以不用設置調用jni_load了:
看着沒毛病,直接調用吧
2.調用&補環境
廢話不多說,直接拿着hook到的參數拿來調用:
看下,這個ach是啥,ok,看樣子就是隨機生成一個16位的字符串
補一下環境
繼續看
原來就是把這幾個加起來
補一下:
結果已經出來了。但是打印的是一個dvmobject對象。很奇怪了。再看看hook的結果:
其實是個有三個元素的字符串數組。所以他應該是對象
斷點調試一下
結果這麼寫會報錯:
強轉string[]也不行,就很尷尬
3.結果修復
問了一下unidbg的大佬,應該這麼寫:
這麼寫就可以了。
DvmObject[] result = (DvmObject[])
vm.getObject(number.intValue()).getValue(); String sign = result[2].toString();
4.另一種調用
首先,我們都知道有,地址調用,符號調用,如下:
其實,根據我問的unidbg玩的6的大佬,還有另一種調用
這麼寫,代碼量減少了很多。
但是有個問題就是,那個network類,需要在構造方法裏定義一下:
另外,這個方法的簽名,怎麼拿到,用jadx的smali代碼查看:
這裏就直接有了,複製過去就可以用,注意最後的【;】也要帶上。
5.驗證是否可用
試試剛纔的兩種調用的結果,能不能拿來請求,然後正常返回呢?
ok,兩個都可以 ,說明主動調用,整個過程,很成功
結語
整個過程很輕鬆加愉快。除了最後的dvmObject數組的轉換,其他沒啥需要記錄的。