# iOS進(jìn)階 # 逆向的了解

iOS逆向

1.class-dump解密

class dump 是一個(gè)用于檢查保存在 Mach-O 文件中的 objective-c 運(yùn)行時(shí)信息的工具,攻防中最常用、實(shí)用的命令行工具。我們用它來還原砸包后的文件。你可以通過 class dump :查看閉源的應(yīng)用、frameworks、bundles。

class-dump的安裝

下載:class-dump-3.5.dmg

下載好后,雙擊dmg文件,將其中的 class-dump 文件放到/usr/bin 目錄下,然后就可以在命令行中使用了。

但是 mac os 10.11以后沒法獲取/usr/bin 的權(quán)限,開了Rootless機(jī)制的Mac無法獲取/usr/bin的權(quán)限

我們可以換個(gè)思路

第一步,打開Terminal,輸入mkdir ~/bin,在當(dāng)前用戶根目錄下創(chuàng)建一個(gè)bin目錄;

命令: mkdir ~/bin

第二步,把class-dump給拷貝到這個(gè)目錄里,并賦予其可執(zhí)行權(quán)限;

命令一: mv /.../class-dump ~/bin    (/.../class-dump是指的class-dump的完整路徑) 

命令二: chmod +x ~/bin/class-dump

第三步,打開~/.bash_profile文件,配置環(huán)境變量

命令一: vi ~/.bash_profile

命令二: 按 i 鍵進(jìn)入編輯模式,寫入下面一行代碼, export PATH=$HOME/bin/:$PATH    按ESC然后輸入冒號(hào)(shift+;),然后輸入wq,退出即可。

第四步,在Terminal中執(zhí)行source命令

命令:source ~/.bash_profile

完成以上步驟,在terminal中執(zhí)行class-dump實(shí)驗(yàn)一下,應(yīng)該就可以了。

解析方法

class-dump -H XXX.app -o 接受地址

解析結(jié)果

AF-Demo :基本可以解析出對(duì)應(yīng)的頭文件,沒有聲明的方法也被dump出來了。

原碼: GlobalTimelineViewController.h
@interface GlobalTimelineViewController : UITableViewController

@end

解析出來的 GlobalTimelineViewController.h

#import "UITableViewController.h"

@class NSArray;

@interface GlobalTimelineViewController : UITableViewController
{
    NSArray *_posts;
}

@property(retain, nonatomic) NSArray *posts; // @synthesize posts=_posts;
- (void).cxx_destruct;
- (void)tableView:(id)arg1 didSelectRowAtIndexPath:(id)arg2;
- (double)tableView:(id)arg1 heightForRowAtIndexPath:(id)arg2;
- (id)tableView:(id)arg1 cellForRowAtIndexPath:(id)arg2;
- (long long)tableView:(id)arg1 numberOfRowsInSection:(long long)arg2;
- (void)viewDidLoad;
- (void)reload:(id)arg1;

@end

Swift-Demo: 無法解析 class-dump是利用Object-C語言的runtime特性

Wechat: 無法解析,原因和前面hpooer一樣,因?yàn)閣echat是appstore的包,是加過殼的

2.Hopper逆向

超級(jí)強(qiáng)大的反編譯軟件,不僅可以把機(jī)器碼解析成匯編,還能解析出相似與Objc的偽代碼。

下載Hopper Disassembler v4:安裝文件

這里測(cè)試了三個(gè)包:

AF-Demo(本地打包,OC項(xiàng)目),

Swift-Demo(本地打包,Swift項(xiàng)目),

微信(Appstore包)

AF-Demo

基本可以看到類名、方法名、屬性、方法實(shí)現(xiàn)的偽代碼

我們用終端檢查一遍:
otool -l Downloads/reversePack/SwiftDemo | grep cryptid

//結(jié)果: 1表示加密,0表示未加密
cryptid 0

解析結(jié)果

img

Swift-Demo

可以看到部分類名、方法名、屬性等,方法實(shí)現(xiàn)解析的不完整

我們用終端檢查一遍:
otool -l Downloads/reversePack/SwiftDemo | grep cryptid

//結(jié)果: 1表示加密,0表示未加密
cryptid 0

hpooer結(jié)果

img

Appstore-微信

基本沒有什么有用的信息,AppStore的ipa是加過殼的

我們用終端檢查一遍:
otool -l Downloads/reversePack/WeChat | grep cryptid

//結(jié)果: 1表示加密,0表示未加密
cryptid 1
cryptid 1

hpooer結(jié)果

img

3.Dumpdecrypted 砸殼

設(shè)備:iphone5 10.3.3、mac電腦、wifi

砸殼工具: 下載地址

iphone越獄

越獄: 百度一下 很簡(jiǎn)單

務(wù)必在Cydia中安裝 cycript、adv-cmds 、pstree

砸殼工具安裝

不同的越獄設(shè)備有不同的架構(gòu)
下載好了后 cd 到目錄下,執(zhí)行下面命令

make

`xcrun --sdk iphoneos --find gcc` -Os  -Wimplicit -isysroot `xcrun --sdk iphoneos --show-sdk-path` -F`xcrun --sdk iphoneos --show-sdk-path`/System/Library/Frameworks -F`xcrun --sdk iphoneos --show-sdk-path`/System/Library/PrivateFrameworks -arch armv7 -arch armv7s -arch arm64 -dynamiclib -o dumpdecrypted.dylib dumpdecrypted.o

`xcrun --sdk iphoneos --find gcc` -Os  -Wimplicit -isysroot `xcrun --sdk iphoneos --show-sdk-path` -F`xcrun --sdk iphoneos --show-sdk-path`/System/Library/Frameworks -F`xcrun --sdk iphoneos --show-sdk-path`/System/Library/PrivateFrameworks -arch armv7 -arch armv7s -arch arm64 -c -o dumpdecrypted.o dumpdecrypted.c

可能報(bào)錯(cuò):

dyld: could not load inserted library ‘dumpdecrypted.dylib’ because no suitable image found. Did find: dumpdecrypted.dylib: required code signature missing for ‘dumpdecrypted.dylib’

解決辦法:

//dumpdecrypted 需要簽名
## 列出可簽名證書
security find-identity -v -p codesigning
## 為dumpecrypted.dylib簽名
codesign --force --verify --verbose --sign "iPhone Developer: xxx xxxx (xxxxxxxxxx)" dumpdecrypted.dylib

連接越獄手機(jī)

1、mac端 brew 安裝 usbmuxd

brew install usbmuxd

2、將手機(jī)端的22號(hào)端口映射到本地的2222號(hào)端口,用usbmuxd自帶iproxy

sudo iproxy 2222 22

3、連接

1、數(shù)據(jù)線連接方式
ssh root@localhost -p 2222

2、wifi連接方式 (iphone上的ip地址)
ssh root@192.168.xx.xx -p 2222

ip地址記得換成你自己的ip 
輸入密碼 默認(rèn)alpine 修改密碼 請(qǐng)輸入passwd

連接不上的問題?

10.3.3越獄后 ssh 連接不上的問題,

1.cydia卸載OpenSSL 和 Openssh

2.添加源 : http://cydia.ichitaso.com/test

3.在cydia搜索頁面搜索Dropbear并安裝

4.重新安裝OpenSSL (Openssh就不用了,裝不裝都無所謂)

5.重啟設(shè)備

6.最后電腦上執(zhí)行ssh root@ip -p 2222 就可以了連上了 (默認(rèn)密碼alpine)

獲取當(dāng)前的進(jìn)程

ps -e

如下就是正在運(yùn)行的WeChat
PID TTY           TIME CMD
680 ??         0:01.76 /var/containers/Bundle/Application/0B9C2D83-D6BA-4D24-B624-5AEB733DAE9D/WeChat.app/WeChat

cycript進(jìn)入(鉤入)該應(yīng)用程序

確保手機(jī)已經(jīng)下載了cycript工具 使用命令cycript 進(jìn)程id (進(jìn)程id就是上面獲取到的PID)如:

cycript -p 680 

可以使用control+d 或者 輸入exit(0)命令 退出cycript

cycript獲取沙盒路徑

yang:~ root# cycript -p 680
cy# NSHomeDirectory()
@"/var/mobile/Containers/Data/Application/6AFE1710-57C2-42CC-84FB-73B9A96C605A"
cy# [NSHomeDirectory() stringByAppendingString:@"/Documents"]
@"/var/mobile/Containers/Data/Application/6AFE1710-57C2-42CC-84FB-73B9A96C605A/Documents"

將砸殼工具拷貝到沙盒路徑下

新打開一個(gè)終端窗口 把dumpdecrypted.dylib 拷貝進(jìn)去沙盒路徑路徑 Documents或者tmp目錄都可以,如果Documents砸殼會(huì)有問題,可以拷貝到tmp目錄

1、數(shù)據(jù)線連接
scp -p 2222  Mac中dumpdecrypted.dylib的路徑  root@localhost:沙盒路徑路徑

2、wifi連接
scp  Mac中dumpdecrypted.dylib的路徑  root@越獄機(jī)ip地址:沙盒路徑路徑 

如下:

scp -p 2222 /Users/yang/Downloads/reversePack/dumpdecrypted-master/dumpdecrypted.dylib root@192.168.0.146:/var/mobile/Containers/Data/Application/6AFE1710-57C2-42CC-84FB-73B9A96C605A/Documents

輸入默認(rèn)密碼 alpine

開始砸殼

cd到該沙盒路徑下(也就是我們前面獲取到的微信的沙盒目錄) 指定一個(gè)環(huán)境變量,這個(gè)環(huán)境變量會(huì)去加載指定目錄下的文件 ,這個(gè)文件地址使用我 ps -e 獲取出來的wechat地址。

格式如下:

DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib 可執(zhí)行文件的路徑(即之前獲取到的Bundle路徑)

運(yùn)行后 就會(huì)開始解密 解密文件會(huì)放到同級(jí)目錄 可以ls查看是否有.decrypted這個(gè)解密文件 有的話 則為解密成功 

如下:

DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/containers/Bundle/Application/0B9C2D83-D6BA-4D24-B624-5AEB733DAE9D/WeChat.app/WeChat

WeChat.decrypted 文件會(huì)生成在當(dāng)前目錄

將解密文件拷貝到Mac上

新開終端 將越獄機(jī)內(nèi)的解密文件拷貝到Mac上 

1、usb連接
scp -p 2222  root@localhost:沙盒中解密文件路徑    Mac指定路徑 

2、wifi連接
scp   root@越獄機(jī)ip地址:沙盒中解密文件路徑  Mac指定路徑 

class-dump 解密

class-dump --arch armv7 WeChat.decrypted -H -o /Users/yang/Downloads/reversePack/dumpdecrypted-master/wechat

class-dump會(huì)還原出所有的.h文件 如下是部分文件

摘取內(nèi)容如下:

//
//     Generated by class-dump 3.5 (64 bit).
//
//     class-dump is Copyright (C) 1997-1998, 2000-2001, 2004-2013 by Steve Nygard.
//

#import "NSObject.h"
#import "UIAlertViewDelegate.h"

@class NSString;
@interface WXGClearCache : NSObject <UIAlertViewDelegate>
{
    unsigned long _cacheMask;
}

+ (id)sharedInstance;
@property(nonatomic) unsigned long cacheMask; // @synthesize cacheMask=_cacheMask;
- (void)alertView:(id)arg1 clickedButtonAtIndex:(int)arg2;
- (void)parseFileInformationsWithXml:(id)arg1;

// Remaining properties
@property(readonly, copy) NSString *debugDescription;
@property(readonly, copy) NSString *description;
@property(readonly) unsigned int hash;
@property(readonly) Class superclass;

@end
img
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,172評(píng)論 3 119
  • 粉紅色的絨花團(tuán)兒悠悠地飄下,觸摸一下絨花癡呆的面龐,再打一個(gè)旋兒,憂傷地滑落在地上。 這個(gè)16歲的花季少...
    心靈是我獨(dú)舞的城池閱讀 606評(píng)論 0 0
  • 再寫不出那些語言, 完美的謊言。 當(dāng)初遇見, 那心動(dòng)瞬間。 陽光下的陪伴, 突然少一絲溫暖。 風(fēng)吹過落葉, 飄向無...
    三葉江風(fēng)閱讀 188評(píng)論 0 0
  • 進(jìn)入大學(xué)后的第一節(jié)心理課,印象比較深刻的是1:老師給我們講了什么是心理學(xué),讓我對(duì)心理學(xué)有了深刻的認(rèn)識(shí). 2:我們經(jīng)...
    思思思雨雨雨閱讀 524評(píng)論 0 1
  • ——《風(fēng)雪追擊》觀后感 “雖然我們每個(gè)人都是蜉蝣一樣的存在,但是計(jì)算一只一寸的蟲子都有五分靈魂,把這些靈魂聚集起來...
    鳳之子閱讀 851評(píng)論 0 1

友情鏈接更多精彩內(nèi)容