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

1、目標

Android愈來愈很差玩了,年輕人,該搞搞IOS了。套路其實都是差很少的,不要被Arm彙編攔住了。python

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

先按照以前的 [Ios逆向環境搭建 (一)] 把抓包和frida環境搞好。算法

main.png

咱們今天的目標仍是它, sign安全

2、步驟

觀察一下

從 sign的長度和參數類型上看, sign sv st 能夠看出,IOS版本的簽名算法大機率和Android差很少。這能節省咱們不少分析時間,直接進入主題吧。微信

第一步 砸殼

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

而後開始運行砸殼命令,砸殼後的文件會經過 ssh拷貝到電腦上。ssh

python dump.py com.3xxbuy.xxmobile
複製代碼

TIP: 注意,砸殼以前請保障 SSH是通的,使用 usbmuxd 把本地的2222端口轉發到iOS上的22端口,配置好 ssh免密登陸函數

iproxy 2222 22
ssh -p 2222 root@127.0.0.1
複製代碼

第二步 IDA

砸殼成功後,會在當前目錄生成對應的 ipa文件,ipa和apk相似,也是個壓縮包,咱們解壓先。學習

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

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

IDA嚼完以後, Shift + F12 ,進入 字符串窗口,咱們繼續查找字符串 sign=

str1.png

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

str2.png

來到 cfstr_Sign_4, 繼續 X

str3.png

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

str4.png

不對,沒有計算過程, 把結果都翻了一遍,尚未收穫。

試試 sv= ,由於sv這個字段比較少見,和它在一塊兒的大機率是 sign計算過程。

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

str5.png

F5一下,仔細看看這個函數。怎麼看都像是sign的計算過程

rc1.png

第三步 Frida

掛上咱們心愛的Frida了

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

一個典型的ObjectC的函數就是這樣, + 表示這是個類靜態函數, 第一個參數指向接收Objective-C消息對象的指針。第二個參數是指向傳遞給對象的selector或消息的指針。 這兩個參數咱們暫時不用管。 第三 第四個參數纔是咱們要關心的真正的入參。

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個入參和結果都打印出來

rc2.png

沒毛病,就是咱們想要的結果。下一次咱們再說說如何RPC調用吧。

3、總結

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

IOS的玩法和Android差很少,特徵串定位,而後掛上Frida。

F5大法好。

ffshow.jpeg

你必定要學套路,這樣纔能有效的縮短學習的時間;但當你學會套路,而且開始使用套路的時候,必定要找到跟別人不同得使用方法,這樣才能讓你從一堆不會飛得雞裏面,揮動翅膀,凌空飛起來,變成翱翔的鷹。

TIP: 本文的目的只有一個就是學習更多的逆向技巧和思路,若是有人利用本文技術去進行非法商業獲取利益帶來的法律責任都是操做者本身承擔,和本文以及做者不要緊,本文涉及到的代碼項目能夠去 奮飛的朋友們 知識星球自取,歡迎加入知識星球一塊兒學習探討技術。有問題能夠加我wx: fenfei331 討論下。

關注微信公衆號: 奮飛安全,最新技術乾貨實時推送

相關文章
相關標籤/搜索