當(dāng)前位置:首頁 > IT技術(shù) > 移動平臺 > 正文

IOS 某電商App簽名算法解析(一) 還是套路
2022-04-19 11:23:46

一、目標(biāo)

Android越來越不好玩了,年輕人,該搞搞IOS了。套路其實都是差不多的,不要被Arm匯編攔住了。

反正Android早就不講武德了,重要算法都在so里面,和ios差不多了。

先按照之前的 [Ios逆向環(huán)境搭建 (一)] 把抓包和frida環(huán)境搞好。

IOS 某電商App簽名算法解析(一) 還是套路_ios

我們今天的目標(biāo)還是它, sign

二、步驟

觀察一下

從 sign的長度和參數(shù)類型上看, sign sv st 可以看出,IOS版本的簽名算法大概率和Android差不多。這能節(jié)省我們很多分析時間,直接進入主題吧。

第一步 砸殼

在 frida-ios-dump 目錄下面, 輸入命令 **python dump.py -l ** 列出手機里面的App列表, 找到我們要搞的包名

然后開始運行砸殼命令,砸殼后的文件會通過 ssh拷貝到電腦上。

python dump.py com.3xxbuy.xxmobile

TIP: 注意,砸殼之前請保障 SSH是通的,使用 usbmuxd 把本地的2222端口轉(zhuǎn)發(fā)到iOS上的22端口,配置好 ssh免密登錄

iproxy 2222 22
ssh -p 2222 root@127.0.0.1

第二步 IDA

砸殼成功后,會在當(dāng)前目錄生成對應(yīng)的 ipa文件,ipa和apk類似,也是個壓縮包,我們解壓先。

在 Payload/xx4iPhone 下面找到它的可執(zhí)行文件,xx4iPhone 100多mb的這個就是了。 拖進 IDA吧

IDA細(xì)嚼慢咽得很長時間(很長是指好幾個小時.....),可以倒杯水,休息一把。刷刷 小視頻,帶薪摸魚。

IDA嚼完之后, Shift + F12 ,進入 字符串窗口,我們繼續(xù)查找字符串 sign=

IOS 某電商App簽名算法解析(一) 還是套路_iOS_02

雙擊一個結(jié)果,進去,在變量名稱上面按 X 鍵 (交叉參考),就是查看哪些地方調(diào)用這個變量。

IOS 某電商App簽名算法解析(一) 還是套路_android_03

來到 cfstr_Sign_4, 繼續(xù) X

IOS 某電商App簽名算法解析(一) 還是套路_iOS_04

看這個比較像 JDCTCCHelper requestParamsWithUrl:dict: ,進去看看, 喚起 F5大法 (進入Arm匯編代碼窗口之后按F5,IDA會翻譯出C的偽代碼)

IOS 某電商App簽名算法解析(一) 還是套路_android_05

不對,沒有計算過程, 把結(jié)果都翻了一遍,還沒有收獲。

試試 sv= ,因為sv這個字段比較少見,和它在一起的大概率是 sign計算過程。

又是一番 X , 被我們定位到了 +[XXSignService getSignWithDic:keys:]

IOS 某電商App簽名算法解析(一) 還是套路_f5_06

F5一下,仔細(xì)看看這個函數(shù)。怎么看都像是sign的計算過程

IOS 某電商App簽名算法解析(一) 還是套路_iOS_07

第三步 Frida

掛上我們心愛的Frida了

id __cdecl +[XXSignService getSignWithDic:keys:](XXSignService_meta *self, SEL a2, id a3, id a4)

一個典型的ObjectC的函數(shù)就是這樣, + 表示這是個類靜態(tài)函數(shù), 第一個參數(shù)指向接收Objective-C消息對象的指針。第二個參數(shù)是指向傳遞給對象的selector或消息的指針。 這兩個參數(shù)我們暫時不用管。 第三 第四個參數(shù)才是我們要關(guān)心的真正的入?yún)ⅰ?/p>

if (ObjC.available)
{
try
{
console.log('I am Comming in!');

var className = "XXSignService";
var funcName = "+ getSignWithDic:keys:";
var hook = eval('ObjC.classes.' + className + '["' + funcName + '"]');
console.log("[*] Class Name: " + className);
console.log("[*] Method Name: " + funcName);
console.log(hook);

// /*
Interceptor.attach(hook.implementation, {
onEnter: function(args) {
var receiver = new ObjC.Object(args[0]);
console.log("Target class : " + receiver);

var message1 = ObjC.Object(args[2]);
var message2 = ObjC.Object(args[3]);

console.log('msg1=' + message1.toString());
console.log('msg2=' + message2.toString());

},
onLeave: function(retval) {
var message = ObjC.Object(retval);
console.log('getSignWithDic rc is:' + message.toString());

}
});
// */


}
catch(err)
{
console.log("[!] Exception2: " + err.message);
}

}

我們把2個入?yún)⒑徒Y(jié)果都打印出來

IOS 某電商App簽名算法解析(一) 還是套路_android_08

沒毛病,就是我們想要的結(jié)果。下一次我們再說說如何RPC調(diào)用吧。

三、總結(jié)

可執(zhí)行文件100MB,IDA搞起來真的很慢。

IOS的玩法和Android差不多,特征串定位,然后掛上Frida。

F5大法好。

IOS 某電商App簽名算法解析(一) 還是套路_android_09

你一定要學(xué)套路,這樣才能有效的縮短學(xué)習(xí)的時間;但當(dāng)你學(xué)會套路,并且開始使用套路的時候,一定要找到跟別人不一樣得使用方法,這樣才能讓你從一堆不會飛得雞里面,揮動翅膀,凌空飛起來,變成翱翔的鷹。

TIP: 本文的目的只有一個就是學(xué)習(xí)更多的逆向技巧和思路,如果有人利用本文技術(shù)去進行非法商業(yè)獲取利益帶來的法律責(zé)任都是操作者自己承擔(dān),和本文以及作者沒關(guān)系。

關(guān)注微信公眾號: 奮飛安全,最新技術(shù)干貨實時推送

本文摘自 :https://blog.51cto.com/u

開通會員,享受整站包年服務(wù)立即開通 >