iOS逆向之iOSOpenDev

2022-11-24 20:01:20 字數 3608 閱讀 1237

上篇談到使用theos進行越獄開發,但是流程相對而言較複雜,本篇我們談一下iosopendev進行越獄開發。通過使用iosopendev,我們可以使用xcode進行開發、編譯、生成並執行到裝置上。

安裝成功後,開啟xcode,新建工程,我們可以看到iosopendev已經整合在xcode中了,並附帶了很多模板:

第一步:新建工程,這裡選擇“logos tweak”,新建完成之後,工程結構如下圖所示:

可以看到有一個.xm檔案,我們開啟看一下內容:

//logos by dustin howett

// see

#error iosopendev post-project creation from template requirements (remove these lines after completed) -- \

link to libsubstrate.dylib: \(1) go to targets > build phases > link binary with libraries and add /opt/iosopendev/lib/libsubstrate.dylib \

(2) remove these lines from *.xm files (not *.mm files as they're automatically generated from *.xm files)

%hook classname

+ (id)sharedinstance

- (void)messagewithnoreturnandoneargument:(id)originalargument

- (id)messagewithreturnandnoarguments

%end

.xm檔案提示需要連結 libsubstrate.dylib,另外看一下很多%開頭的語句。%是legos中的指示符,和theos中一樣。

和theos一樣,這裡我們也只是顯示一個alert框,**也一樣:

#import

%hook springboard

%orig;

uialertview *alert = [[uialertview alloc] initwithtitle:@"

hello, gof!

" message:@"

leegof is very handsome

"delegate:self cancelbuttontitle:@"ok"

otherbuttontitles:nil];

[alert show];

}%end

再看一下.mm檔案,已經自動根據.xm檔案生成了如下**:

#line 1 "/users/goflee/desktop/逆向工程/code/tweakdemo/tweakdemo/tweakdemo.xm"

#import

#include

#if defined(__clang__)

#if __has_feature(objc_arc)

#define _logos_self_type_normal __unsafe_unretained

#define _logos_self_type_init __attribute__((ns_consumed))

#define _logos_self_const const

#define _logos_return_retained __attribute__((ns_returns_retained))

#else

#define _logos_self_type_normal

#define _logos_self_type_init

#define _logos_self_const

#define _logos_return_retained

#endif

#else

#define _logos_self_type_normal

#define _logos_self_type_init

#define _logos_self_const

#define _logos_return_retained

#endif

@class

springboard;

static

); #line 3 "/users/goflee/desktop/逆向工程/code/tweakdemo/tweakdemo/tweakdemo.xm"

static

uialertview *alert = [[uialertview alloc] initwithtitle:@"

hello, gof!

" message:@"

leegof is very handsome

"delegate:self cancelbuttontitle:@"ok"

otherbuttontitles:nil];

[alert show];

}static __attribute__((constructor)) void

_logoslocalinit() } }

#line 13 "/users/goflee/desktop/逆向工程/code/tweakdemo/tweakdemo/tweakdemo.xm"

接著我們看一下target中的“user-defined”:

在這裡,配置“iosopendevdevice”欄位為聯調的裝置ip。直接連線真機執行(選擇build for -- profiling),可以看到**已經生效。如下圖所示:

錯誤一:failed to create directory /var/root/iosopendevpackages on device 10.1.xx.xx,如下圖所示:

【解決方案】:在終端輸入如下指令:

iosod sshkey -h 10.1.xx.xx
重新再試即可。

錯誤二:執行的時候,有可能出現這樣的錯誤:use of undeclared identifier 'hblogerror',如下圖所示:

【解決方案】:在.xm檔案中加入如下巨集定義:

#define hblogerror nslog

IOS逆向 3 helloworld

第三集內容 寫一個命令列的helloworld 要使用make進行編譯,makefile怎麼寫?找到一篇微博,經過修改 還好懂一點llvm 到下面這個makefile。c clang frameworks framework foundation libraries lobjc source hel...

iOS逆向工程之KeyChain與Snoop it

今天部落格中使用者名稱和密碼的儲存和更新就是使用的官方文件給的示例。也就是說,直接拷貝的開發文件上的 呢,這些 今天就不往上拷貝了,具體的看官方的開發文件即可。一 keychain的使用 keychain的使用在此呢不做多說,因為我之前也沒怎麼用過keychain呢,今天部落格中關於keychain...

IOS逆向 5 GDB除錯helloworld

administratormato iphone root gdb hello gdb info file symbols from private var root hello mac os x executable private var root hello,file type mach o ...