iOS的逆向工程微信一個是攔截了信息;另外一個就是攔截了定位,這樣附近的人等需要用到經緯度功能的地方都可以自定義自己想要的經緯度。例如可以定位到日本,去看看日本的美眉。哈哈。。

由於之前的iOSOpenDev已經不維護,所有網上有個大神對此做了一個升級,最主要是可以傻瓜式使用了,dylib注入、打包等等一系列自動化。iOSOpenDev

雖然都是自動化了,不過本人還是嘗試了手工dylib注入、打包等功能。首先讓我們先看看這個非越獄神器的神奇之處,讓我先體驗一把。(安裝的話自己對照官網安裝即可,我這裡就不囉嗦了!)

嘗試自動化工具

大家首先按照官網的教程新建一個MonkeyApp工程,我這裡新建的是WeiXin,接下來我們需要一個已經敲掉殼的ipa文件,如果你自己按照教程一步一步的搞也可以,不過還有更省事的方法,就是通過pp助手在越獄應用中下載一個越獄版微信即可,放到指定路徑下。

編寫代碼

寫代碼的地方有好幾個文件其實都是可以寫的,只是不同的語法而已。比如.xm後綴的就是支持Logos語法,例如%hook%orig等語法。不過本人寫在WeiXinDylib.m這個文件裡,這個文件其實最後會生成一個動態包名WeiXinDylib,這個包就是我們需要注入到APP中的。

  • 微信消息攔截

WeiXinDylib.m這個文件的最後加上以下代碼

12345678910111213141516
@interface CMessageWrap@property (nonatomic, strong) NSString* m_nsContent;@property (nonatomic, assign) NSInteger m_uiMessageType;@endCHDeclareClass(CMessageMgr)CHMethod2(void, CMessageMgr, AsyncOnAddMsg, NSString*, msg, MsgWrap, CMessageWrap*, msgWrap){NSString* content = [msgWrap m_nsContent];if([msgWrap m_uiMessageType] == 1){NSLog(@"收到消息: %@", content);}CHSuper2(CMessageMgr, AsyncOnAddMsg, msg, MsgWrap, msgWrap);}CHConstructor{CHLoadLateClass(CMessageMgr);CHClassHook2(CMessageMgr, AsyncOnAddMsg, MsgWrap);}

這樣的話我們就攔截到了微信收發消息,在Xcode控制檯則會打印出我們所收發的消息。

  • 微信自定義定位(大家比較期待的功能,想撩哪裡的美眉都可以喲!)

同樣找到WeiXinDylib.m這個文件然後在最後加如下代碼

123456789101112131415161718192021
CHDeclareClass(CLLocationManager)CHMethod(0,void,CLLocationManager,startUpdatingLocation){NSLog(@"定位被攔截");CHSuper(0,CLLocationManager, startUpdatingLocation);CGFloat lat = 35.707013;CGFloat lng = 139.730562;CLLocation *tokyoLocation = [[CLLocation alloc] initWithLatitude:lat longitude:lng];CLLocation *cantonLocation = [[CLLocation alloc] initWithLatitude:30.231695 longitude:120.283835];[NSThread sleepForTimeInterval:4];#pragma clang diagnostic push#pragma clang diagnostic ignored "-Wdeprecated-declarations"dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{[self.delegate locationManager:self didUpdateToLocation:tokyoLocation fromLocation:cantonLocation];});#pragma clang diagnostic pop}CHConstructor{CHLoadLateClass(CLLocationManager);CHClassHook(0,CLLocationManager, startUpdatingLocation);}

我這裡是寫死的經緯度,其實大家也可以彈出一個框然後輸入也是可以的。代碼裡攔截到了方法之後我將現場sleep了4秒。主要是如果不sleep我發現這時候回調不起作用的。

總結:其實動態注入的本質就是通過運行時進行method swizzling,進行了方法的替換而已。

體驗各種手工工具

  • Hopper Disassembler是Mac上的一款二進制反彙編器,跟IDA功能一樣

  • Cycript 是一款腳本語言,是混合了objective-c與javascript語法的一個工具,讓開發者在命令行下和應用交互,在運行時查看和修改應用。與lldb有點類似

  • class-dump(http://stevenygard.com/projects/class-dump/) 能夠將工程裡邊所有的方法提取出來,生成一個.h文件

  • iReSign APP重簽名,我們也可以使用命令一步一步來簽名,這個工具幫我們把命令集成了寫了一個界面

  • yololib 將dylib動態包注入到APP中

  • ios-deploy 一個非越獄版遠程lldb調試工具

這些工具的安裝我就不囉嗦了,大家要不就去官網看怎麼安裝,要不就自行百度了。

我這裡可以說一下有的工具下載下來之後,如果使用有時候我們的終端先cd到對應的文件下,然後才能使用相應的命令。其實這樣也是比較繁瑣的。這裡我們可以把他們的路徑加到.bash_profile文件中,這樣在終端則可以直接使用了。

例如我將cycript加到這個文件裡,我在終端就可以直接使用了。

iOS的逆向工程微信一個是攔截了信息;另外一個就是攔截了定位,這樣附近的人等需要用到經緯度功能的地方都可以自定義自己想要的經緯度。例如可以定位到日本,去看看日本的美眉。哈哈。。

由於之前的iOSOpenDev已經不維護,所有網上有個大神對此做了一個升級,最主要是可以傻瓜式使用了,dylib注入、打包等等一系列自動化。iOSOpenDev

雖然都是自動化了,不過本人還是嘗試了手工dylib注入、打包等功能。首先讓我們先看看這個非越獄神器的神奇之處,讓我先體驗一把。(安裝的話自己對照官網安裝即可,我這裡就不囉嗦了!)

嘗試自動化工具

大家首先按照官網的教程新建一個MonkeyApp工程,我這裡新建的是WeiXin,接下來我們需要一個已經敲掉殼的ipa文件,如果你自己按照教程一步一步的搞也可以,不過還有更省事的方法,就是通過pp助手在越獄應用中下載一個越獄版微信即可,放到指定路徑下。

編寫代碼

寫代碼的地方有好幾個文件其實都是可以寫的,只是不同的語法而已。比如.xm後綴的就是支持Logos語法,例如%hook%orig等語法。不過本人寫在WeiXinDylib.m這個文件裡,這個文件其實最後會生成一個動態包名WeiXinDylib,這個包就是我們需要注入到APP中的。

  • 微信消息攔截

WeiXinDylib.m這個文件的最後加上以下代碼

12345678910111213141516
@interface CMessageWrap@property (nonatomic, strong) NSString* m_nsContent;@property (nonatomic, assign) NSInteger m_uiMessageType;@endCHDeclareClass(CMessageMgr)CHMethod2(void, CMessageMgr, AsyncOnAddMsg, NSString*, msg, MsgWrap, CMessageWrap*, msgWrap){NSString* content = [msgWrap m_nsContent];if([msgWrap m_uiMessageType] == 1){NSLog(@"收到消息: %@", content);}CHSuper2(CMessageMgr, AsyncOnAddMsg, msg, MsgWrap, msgWrap);}CHConstructor{CHLoadLateClass(CMessageMgr);CHClassHook2(CMessageMgr, AsyncOnAddMsg, MsgWrap);}

這樣的話我們就攔截到了微信收發消息,在Xcode控制檯則會打印出我們所收發的消息。

  • 微信自定義定位(大家比較期待的功能,想撩哪裡的美眉都可以喲!)

同樣找到WeiXinDylib.m這個文件然後在最後加如下代碼

123456789101112131415161718192021
CHDeclareClass(CLLocationManager)CHMethod(0,void,CLLocationManager,startUpdatingLocation){NSLog(@"定位被攔截");CHSuper(0,CLLocationManager, startUpdatingLocation);CGFloat lat = 35.707013;CGFloat lng = 139.730562;CLLocation *tokyoLocation = [[CLLocation alloc] initWithLatitude:lat longitude:lng];CLLocation *cantonLocation = [[CLLocation alloc] initWithLatitude:30.231695 longitude:120.283835];[NSThread sleepForTimeInterval:4];#pragma clang diagnostic push#pragma clang diagnostic ignored "-Wdeprecated-declarations"dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{[self.delegate locationManager:self didUpdateToLocation:tokyoLocation fromLocation:cantonLocation];});#pragma clang diagnostic pop}CHConstructor{CHLoadLateClass(CLLocationManager);CHClassHook(0,CLLocationManager, startUpdatingLocation);}

我這裡是寫死的經緯度,其實大家也可以彈出一個框然後輸入也是可以的。代碼裡攔截到了方法之後我將現場sleep了4秒。主要是如果不sleep我發現這時候回調不起作用的。

總結:其實動態注入的本質就是通過運行時進行method swizzling,進行了方法的替換而已。

體驗各種手工工具

  • Hopper Disassembler是Mac上的一款二進制反彙編器,跟IDA功能一樣

  • Cycript 是一款腳本語言,是混合了objective-c與javascript語法的一個工具,讓開發者在命令行下和應用交互,在運行時查看和修改應用。與lldb有點類似

  • class-dump(http://stevenygard.com/projects/class-dump/) 能夠將工程裡邊所有的方法提取出來,生成一個.h文件

  • iReSign APP重簽名,我們也可以使用命令一步一步來簽名,這個工具幫我們把命令集成了寫了一個界面

  • yololib 將dylib動態包注入到APP中

  • ios-deploy 一個非越獄版遠程lldb調試工具

這些工具的安裝我就不囉嗦了,大家要不就去官網看怎麼安裝,要不就自行百度了。

我這裡可以說一下有的工具下載下來之後,如果使用有時候我們的終端先cd到對應的文件下,然後才能使用相應的命令。其實這樣也是比較繁瑣的。這裡我們可以把他們的路徑加到.bash_profile文件中,這樣在終端則可以直接使用了。

例如我將cycript加到這個文件裡,我在終端就可以直接使用了。

iOS非越獄逆向工程

工具使用

使用的話我也只是簡單給大家演示一樣,起個拋磚引玉的作用,其實每個工具都非常的強大的。

class-dump

class-dump -H 解壓完成的APP的文件路徑/weixin.app -o /Users/xxxx/Desktop/指定生成文件路徑

這樣就可以生成很多.h文件了。直接看起來比較費事,大家可以新建一個Xcode工程,然後把文件複製進去,這樣看起了就比較舒服了。

通過這個工具我們可以找到我們感興趣類的方法,這樣就可以做對應的攔截修改了。

yololib

yololib 可執行文件 要被注入的.dylib

例如

./yololib WeiXin.app libWeiXinDylib.dylib

注:這樣寫的話要保證yololib、WeChat、WeChat.app處於同一目錄下。

將我們注入的dylib文件放到WeChat.app目錄下。

cp hook.dylib WeChat.app/

iReSign

首先我們要對我們的dylib動態包進行簽名

codesign -f -s “iPhone Developer:xxxx” WeiXin.app/libWeiXinDylib.dylib

然後點擊iReSign直接點擊運行對ipa包簽名

iOS的逆向工程微信一個是攔截了信息;另外一個就是攔截了定位,這樣附近的人等需要用到經緯度功能的地方都可以自定義自己想要的經緯度。例如可以定位到日本,去看看日本的美眉。哈哈。。

由於之前的iOSOpenDev已經不維護,所有網上有個大神對此做了一個升級,最主要是可以傻瓜式使用了,dylib注入、打包等等一系列自動化。iOSOpenDev

雖然都是自動化了,不過本人還是嘗試了手工dylib注入、打包等功能。首先讓我們先看看這個非越獄神器的神奇之處,讓我先體驗一把。(安裝的話自己對照官網安裝即可,我這裡就不囉嗦了!)

嘗試自動化工具

大家首先按照官網的教程新建一個MonkeyApp工程,我這裡新建的是WeiXin,接下來我們需要一個已經敲掉殼的ipa文件,如果你自己按照教程一步一步的搞也可以,不過還有更省事的方法,就是通過pp助手在越獄應用中下載一個越獄版微信即可,放到指定路徑下。

編寫代碼

寫代碼的地方有好幾個文件其實都是可以寫的,只是不同的語法而已。比如.xm後綴的就是支持Logos語法,例如%hook%orig等語法。不過本人寫在WeiXinDylib.m這個文件裡,這個文件其實最後會生成一個動態包名WeiXinDylib,這個包就是我們需要注入到APP中的。

  • 微信消息攔截

WeiXinDylib.m這個文件的最後加上以下代碼

12345678910111213141516
@interface CMessageWrap@property (nonatomic, strong) NSString* m_nsContent;@property (nonatomic, assign) NSInteger m_uiMessageType;@endCHDeclareClass(CMessageMgr)CHMethod2(void, CMessageMgr, AsyncOnAddMsg, NSString*, msg, MsgWrap, CMessageWrap*, msgWrap){NSString* content = [msgWrap m_nsContent];if([msgWrap m_uiMessageType] == 1){NSLog(@"收到消息: %@", content);}CHSuper2(CMessageMgr, AsyncOnAddMsg, msg, MsgWrap, msgWrap);}CHConstructor{CHLoadLateClass(CMessageMgr);CHClassHook2(CMessageMgr, AsyncOnAddMsg, MsgWrap);}

這樣的話我們就攔截到了微信收發消息,在Xcode控制檯則會打印出我們所收發的消息。

  • 微信自定義定位(大家比較期待的功能,想撩哪裡的美眉都可以喲!)

同樣找到WeiXinDylib.m這個文件然後在最後加如下代碼

123456789101112131415161718192021
CHDeclareClass(CLLocationManager)CHMethod(0,void,CLLocationManager,startUpdatingLocation){NSLog(@"定位被攔截");CHSuper(0,CLLocationManager, startUpdatingLocation);CGFloat lat = 35.707013;CGFloat lng = 139.730562;CLLocation *tokyoLocation = [[CLLocation alloc] initWithLatitude:lat longitude:lng];CLLocation *cantonLocation = [[CLLocation alloc] initWithLatitude:30.231695 longitude:120.283835];[NSThread sleepForTimeInterval:4];#pragma clang diagnostic push#pragma clang diagnostic ignored "-Wdeprecated-declarations"dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{[self.delegate locationManager:self didUpdateToLocation:tokyoLocation fromLocation:cantonLocation];});#pragma clang diagnostic pop}CHConstructor{CHLoadLateClass(CLLocationManager);CHClassHook(0,CLLocationManager, startUpdatingLocation);}

我這裡是寫死的經緯度,其實大家也可以彈出一個框然後輸入也是可以的。代碼裡攔截到了方法之後我將現場sleep了4秒。主要是如果不sleep我發現這時候回調不起作用的。

總結:其實動態注入的本質就是通過運行時進行method swizzling,進行了方法的替換而已。

體驗各種手工工具

  • Hopper Disassembler是Mac上的一款二進制反彙編器,跟IDA功能一樣

  • Cycript 是一款腳本語言,是混合了objective-c與javascript語法的一個工具,讓開發者在命令行下和應用交互,在運行時查看和修改應用。與lldb有點類似

  • class-dump(http://stevenygard.com/projects/class-dump/) 能夠將工程裡邊所有的方法提取出來,生成一個.h文件

  • iReSign APP重簽名,我們也可以使用命令一步一步來簽名,這個工具幫我們把命令集成了寫了一個界面

  • yololib 將dylib動態包注入到APP中

  • ios-deploy 一個非越獄版遠程lldb調試工具

這些工具的安裝我就不囉嗦了,大家要不就去官網看怎麼安裝,要不就自行百度了。

我這裡可以說一下有的工具下載下來之後,如果使用有時候我們的終端先cd到對應的文件下,然後才能使用相應的命令。其實這樣也是比較繁瑣的。這裡我們可以把他們的路徑加到.bash_profile文件中,這樣在終端則可以直接使用了。

例如我將cycript加到這個文件裡,我在終端就可以直接使用了。

iOS非越獄逆向工程

工具使用

使用的話我也只是簡單給大家演示一樣,起個拋磚引玉的作用,其實每個工具都非常的強大的。

class-dump

class-dump -H 解壓完成的APP的文件路徑/weixin.app -o /Users/xxxx/Desktop/指定生成文件路徑

這樣就可以生成很多.h文件了。直接看起來比較費事,大家可以新建一個Xcode工程,然後把文件複製進去,這樣看起了就比較舒服了。

通過這個工具我們可以找到我們感興趣類的方法,這樣就可以做對應的攔截修改了。

yololib

yololib 可執行文件 要被注入的.dylib

例如

./yololib WeiXin.app libWeiXinDylib.dylib

注:這樣寫的話要保證yololib、WeChat、WeChat.app處於同一目錄下。

將我們注入的dylib文件放到WeChat.app目錄下。

cp hook.dylib WeChat.app/

iReSign

首先我們要對我們的dylib動態包進行簽名

codesign -f -s “iPhone Developer:xxxx” WeiXin.app/libWeiXinDylib.dylib

然後點擊iReSign直接點擊運行對ipa包簽名

iOS非越獄逆向工程

選一下對應文件的路徑然後點擊重新簽名即可。那個entitlements.plist文件不選的話也可以成功。不過最好自己新建一個,內容如下:

1234567891011121314
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>application-identifier</key><string>com.aa.aa.weixin</string><key>get-task-allow</key><false/><key>keychain-access-groups</key><array><string>com.aa.aa.weixin</string></array></dict></plist>

大家把com.aa.aa.weixin改成自己的bundle id即可。然後複製新建一個文件就可以啦。

Cycript

  • 找到進程ID

    ps -e | grep WeChat

  • 鉤住進程

    cycript -p 12435

    cycript -r ip:6666

接下來可以幹我們想幹的事情了,使用任何oc代碼。

cy# alertView = [[UIAlertView alloc] initWithTitle:@”注入” message:@”Cyript” delegate:nil cancelButtonTitle:@”確定” otherButtonTitles:nil]

cy# [alertView show]

其實我們在逆向工程的時候,大部分是用的內存地址調用

cy# [#0x108840380 show]

調用方式就是#內存地址,我們可以藉助Xcode的Debug View Hierarchy這個工具獲取

iOS的逆向工程微信一個是攔截了信息;另外一個就是攔截了定位,這樣附近的人等需要用到經緯度功能的地方都可以自定義自己想要的經緯度。例如可以定位到日本,去看看日本的美眉。哈哈。。

由於之前的iOSOpenDev已經不維護,所有網上有個大神對此做了一個升級,最主要是可以傻瓜式使用了,dylib注入、打包等等一系列自動化。iOSOpenDev

雖然都是自動化了,不過本人還是嘗試了手工dylib注入、打包等功能。首先讓我們先看看這個非越獄神器的神奇之處,讓我先體驗一把。(安裝的話自己對照官網安裝即可,我這裡就不囉嗦了!)

嘗試自動化工具

大家首先按照官網的教程新建一個MonkeyApp工程,我這裡新建的是WeiXin,接下來我們需要一個已經敲掉殼的ipa文件,如果你自己按照教程一步一步的搞也可以,不過還有更省事的方法,就是通過pp助手在越獄應用中下載一個越獄版微信即可,放到指定路徑下。

編寫代碼

寫代碼的地方有好幾個文件其實都是可以寫的,只是不同的語法而已。比如.xm後綴的就是支持Logos語法,例如%hook%orig等語法。不過本人寫在WeiXinDylib.m這個文件裡,這個文件其實最後會生成一個動態包名WeiXinDylib,這個包就是我們需要注入到APP中的。

  • 微信消息攔截

WeiXinDylib.m這個文件的最後加上以下代碼

12345678910111213141516
@interface CMessageWrap@property (nonatomic, strong) NSString* m_nsContent;@property (nonatomic, assign) NSInteger m_uiMessageType;@endCHDeclareClass(CMessageMgr)CHMethod2(void, CMessageMgr, AsyncOnAddMsg, NSString*, msg, MsgWrap, CMessageWrap*, msgWrap){NSString* content = [msgWrap m_nsContent];if([msgWrap m_uiMessageType] == 1){NSLog(@"收到消息: %@", content);}CHSuper2(CMessageMgr, AsyncOnAddMsg, msg, MsgWrap, msgWrap);}CHConstructor{CHLoadLateClass(CMessageMgr);CHClassHook2(CMessageMgr, AsyncOnAddMsg, MsgWrap);}

這樣的話我們就攔截到了微信收發消息,在Xcode控制檯則會打印出我們所收發的消息。

  • 微信自定義定位(大家比較期待的功能,想撩哪裡的美眉都可以喲!)

同樣找到WeiXinDylib.m這個文件然後在最後加如下代碼

123456789101112131415161718192021
CHDeclareClass(CLLocationManager)CHMethod(0,void,CLLocationManager,startUpdatingLocation){NSLog(@"定位被攔截");CHSuper(0,CLLocationManager, startUpdatingLocation);CGFloat lat = 35.707013;CGFloat lng = 139.730562;CLLocation *tokyoLocation = [[CLLocation alloc] initWithLatitude:lat longitude:lng];CLLocation *cantonLocation = [[CLLocation alloc] initWithLatitude:30.231695 longitude:120.283835];[NSThread sleepForTimeInterval:4];#pragma clang diagnostic push#pragma clang diagnostic ignored "-Wdeprecated-declarations"dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{[self.delegate locationManager:self didUpdateToLocation:tokyoLocation fromLocation:cantonLocation];});#pragma clang diagnostic pop}CHConstructor{CHLoadLateClass(CLLocationManager);CHClassHook(0,CLLocationManager, startUpdatingLocation);}

我這裡是寫死的經緯度,其實大家也可以彈出一個框然後輸入也是可以的。代碼裡攔截到了方法之後我將現場sleep了4秒。主要是如果不sleep我發現這時候回調不起作用的。

總結:其實動態注入的本質就是通過運行時進行method swizzling,進行了方法的替換而已。

體驗各種手工工具

  • Hopper Disassembler是Mac上的一款二進制反彙編器,跟IDA功能一樣

  • Cycript 是一款腳本語言,是混合了objective-c與javascript語法的一個工具,讓開發者在命令行下和應用交互,在運行時查看和修改應用。與lldb有點類似

  • class-dump(http://stevenygard.com/projects/class-dump/) 能夠將工程裡邊所有的方法提取出來,生成一個.h文件

  • iReSign APP重簽名,我們也可以使用命令一步一步來簽名,這個工具幫我們把命令集成了寫了一個界面

  • yololib 將dylib動態包注入到APP中

  • ios-deploy 一個非越獄版遠程lldb調試工具

這些工具的安裝我就不囉嗦了,大家要不就去官網看怎麼安裝,要不就自行百度了。

我這裡可以說一下有的工具下載下來之後,如果使用有時候我們的終端先cd到對應的文件下,然後才能使用相應的命令。其實這樣也是比較繁瑣的。這裡我們可以把他們的路徑加到.bash_profile文件中,這樣在終端則可以直接使用了。

例如我將cycript加到這個文件裡,我在終端就可以直接使用了。

iOS非越獄逆向工程

工具使用

使用的話我也只是簡單給大家演示一樣,起個拋磚引玉的作用,其實每個工具都非常的強大的。

class-dump

class-dump -H 解壓完成的APP的文件路徑/weixin.app -o /Users/xxxx/Desktop/指定生成文件路徑

這樣就可以生成很多.h文件了。直接看起來比較費事,大家可以新建一個Xcode工程,然後把文件複製進去,這樣看起了就比較舒服了。

通過這個工具我們可以找到我們感興趣類的方法,這樣就可以做對應的攔截修改了。

yololib

yololib 可執行文件 要被注入的.dylib

例如

./yololib WeiXin.app libWeiXinDylib.dylib

注:這樣寫的話要保證yololib、WeChat、WeChat.app處於同一目錄下。

將我們注入的dylib文件放到WeChat.app目錄下。

cp hook.dylib WeChat.app/

iReSign

首先我們要對我們的dylib動態包進行簽名

codesign -f -s “iPhone Developer:xxxx” WeiXin.app/libWeiXinDylib.dylib

然後點擊iReSign直接點擊運行對ipa包簽名

iOS非越獄逆向工程

選一下對應文件的路徑然後點擊重新簽名即可。那個entitlements.plist文件不選的話也可以成功。不過最好自己新建一個,內容如下:

1234567891011121314
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>application-identifier</key><string>com.aa.aa.weixin</string><key>get-task-allow</key><false/><key>keychain-access-groups</key><array><string>com.aa.aa.weixin</string></array></dict></plist>

大家把com.aa.aa.weixin改成自己的bundle id即可。然後複製新建一個文件就可以啦。

Cycript

  • 找到進程ID

    ps -e | grep WeChat

  • 鉤住進程

    cycript -p 12435

    cycript -r ip:6666

接下來可以幹我們想幹的事情了,使用任何oc代碼。

cy# alertView = [[UIAlertView alloc] initWithTitle:@”注入” message:@”Cyript” delegate:nil cancelButtonTitle:@”確定” otherButtonTitles:nil]

cy# [alertView show]

其實我們在逆向工程的時候,大部分是用的內存地址調用

cy# [#0x108840380 show]

調用方式就是#內存地址,我們可以藉助Xcode的Debug View Hierarchy這個工具獲取

iOS非越獄逆向工程

iOS的逆向工程微信一個是攔截了信息;另外一個就是攔截了定位,這樣附近的人等需要用到經緯度功能的地方都可以自定義自己想要的經緯度。例如可以定位到日本,去看看日本的美眉。哈哈。。

由於之前的iOSOpenDev已經不維護,所有網上有個大神對此做了一個升級,最主要是可以傻瓜式使用了,dylib注入、打包等等一系列自動化。iOSOpenDev

雖然都是自動化了,不過本人還是嘗試了手工dylib注入、打包等功能。首先讓我們先看看這個非越獄神器的神奇之處,讓我先體驗一把。(安裝的話自己對照官網安裝即可,我這裡就不囉嗦了!)

嘗試自動化工具

大家首先按照官網的教程新建一個MonkeyApp工程,我這裡新建的是WeiXin,接下來我們需要一個已經敲掉殼的ipa文件,如果你自己按照教程一步一步的搞也可以,不過還有更省事的方法,就是通過pp助手在越獄應用中下載一個越獄版微信即可,放到指定路徑下。

編寫代碼

寫代碼的地方有好幾個文件其實都是可以寫的,只是不同的語法而已。比如.xm後綴的就是支持Logos語法,例如%hook%orig等語法。不過本人寫在WeiXinDylib.m這個文件裡,這個文件其實最後會生成一個動態包名WeiXinDylib,這個包就是我們需要注入到APP中的。

  • 微信消息攔截

WeiXinDylib.m這個文件的最後加上以下代碼

12345678910111213141516
@interface CMessageWrap@property (nonatomic, strong) NSString* m_nsContent;@property (nonatomic, assign) NSInteger m_uiMessageType;@endCHDeclareClass(CMessageMgr)CHMethod2(void, CMessageMgr, AsyncOnAddMsg, NSString*, msg, MsgWrap, CMessageWrap*, msgWrap){NSString* content = [msgWrap m_nsContent];if([msgWrap m_uiMessageType] == 1){NSLog(@"收到消息: %@", content);}CHSuper2(CMessageMgr, AsyncOnAddMsg, msg, MsgWrap, msgWrap);}CHConstructor{CHLoadLateClass(CMessageMgr);CHClassHook2(CMessageMgr, AsyncOnAddMsg, MsgWrap);}

這樣的話我們就攔截到了微信收發消息,在Xcode控制檯則會打印出我們所收發的消息。

  • 微信自定義定位(大家比較期待的功能,想撩哪裡的美眉都可以喲!)

同樣找到WeiXinDylib.m這個文件然後在最後加如下代碼

123456789101112131415161718192021
CHDeclareClass(CLLocationManager)CHMethod(0,void,CLLocationManager,startUpdatingLocation){NSLog(@"定位被攔截");CHSuper(0,CLLocationManager, startUpdatingLocation);CGFloat lat = 35.707013;CGFloat lng = 139.730562;CLLocation *tokyoLocation = [[CLLocation alloc] initWithLatitude:lat longitude:lng];CLLocation *cantonLocation = [[CLLocation alloc] initWithLatitude:30.231695 longitude:120.283835];[NSThread sleepForTimeInterval:4];#pragma clang diagnostic push#pragma clang diagnostic ignored "-Wdeprecated-declarations"dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{[self.delegate locationManager:self didUpdateToLocation:tokyoLocation fromLocation:cantonLocation];});#pragma clang diagnostic pop}CHConstructor{CHLoadLateClass(CLLocationManager);CHClassHook(0,CLLocationManager, startUpdatingLocation);}

我這裡是寫死的經緯度,其實大家也可以彈出一個框然後輸入也是可以的。代碼裡攔截到了方法之後我將現場sleep了4秒。主要是如果不sleep我發現這時候回調不起作用的。

總結:其實動態注入的本質就是通過運行時進行method swizzling,進行了方法的替換而已。

體驗各種手工工具

  • Hopper Disassembler是Mac上的一款二進制反彙編器,跟IDA功能一樣

  • Cycript 是一款腳本語言,是混合了objective-c與javascript語法的一個工具,讓開發者在命令行下和應用交互,在運行時查看和修改應用。與lldb有點類似

  • class-dump(http://stevenygard.com/projects/class-dump/) 能夠將工程裡邊所有的方法提取出來,生成一個.h文件

  • iReSign APP重簽名,我們也可以使用命令一步一步來簽名,這個工具幫我們把命令集成了寫了一個界面

  • yololib 將dylib動態包注入到APP中

  • ios-deploy 一個非越獄版遠程lldb調試工具

這些工具的安裝我就不囉嗦了,大家要不就去官網看怎麼安裝,要不就自行百度了。

我這裡可以說一下有的工具下載下來之後,如果使用有時候我們的終端先cd到對應的文件下,然後才能使用相應的命令。其實這樣也是比較繁瑣的。這裡我們可以把他們的路徑加到.bash_profile文件中,這樣在終端則可以直接使用了。

例如我將cycript加到這個文件裡,我在終端就可以直接使用了。

iOS非越獄逆向工程

工具使用

使用的話我也只是簡單給大家演示一樣,起個拋磚引玉的作用,其實每個工具都非常的強大的。

class-dump

class-dump -H 解壓完成的APP的文件路徑/weixin.app -o /Users/xxxx/Desktop/指定生成文件路徑

這樣就可以生成很多.h文件了。直接看起來比較費事,大家可以新建一個Xcode工程,然後把文件複製進去,這樣看起了就比較舒服了。

通過這個工具我們可以找到我們感興趣類的方法,這樣就可以做對應的攔截修改了。

yololib

yololib 可執行文件 要被注入的.dylib

例如

./yololib WeiXin.app libWeiXinDylib.dylib

注:這樣寫的話要保證yololib、WeChat、WeChat.app處於同一目錄下。

將我們注入的dylib文件放到WeChat.app目錄下。

cp hook.dylib WeChat.app/

iReSign

首先我們要對我們的dylib動態包進行簽名

codesign -f -s “iPhone Developer:xxxx” WeiXin.app/libWeiXinDylib.dylib

然後點擊iReSign直接點擊運行對ipa包簽名

iOS非越獄逆向工程

選一下對應文件的路徑然後點擊重新簽名即可。那個entitlements.plist文件不選的話也可以成功。不過最好自己新建一個,內容如下:

1234567891011121314
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>application-identifier</key><string>com.aa.aa.weixin</string><key>get-task-allow</key><false/><key>keychain-access-groups</key><array><string>com.aa.aa.weixin</string></array></dict></plist>

大家把com.aa.aa.weixin改成自己的bundle id即可。然後複製新建一個文件就可以啦。

Cycript

  • 找到進程ID

    ps -e | grep WeChat

  • 鉤住進程

    cycript -p 12435

    cycript -r ip:6666

接下來可以幹我們想幹的事情了,使用任何oc代碼。

cy# alertView = [[UIAlertView alloc] initWithTitle:@”注入” message:@”Cyript” delegate:nil cancelButtonTitle:@”確定” otherButtonTitles:nil]

cy# [alertView show]

其實我們在逆向工程的時候,大部分是用的內存地址調用

cy# [#0x108840380 show]

調用方式就是#內存地址,我們可以藉助Xcode的Debug View Hierarchy這個工具獲取

iOS非越獄逆向工程

iOS非越獄逆向工程

ios-deploy

這個工具與Cycript有點類似的。首先就是安裝ios-deploy

ios-deploy –debug –bundle WeiXin.app

運行完之後就可以像Xcode控制器內置的lldb一樣,可以在終端執行任意lldb命令啦。比如斷點等等

Hopper disassembler

這個工具使用起來簡單,但是也是非常的強大的。我們打開這個工具,直接將.app拖到這個工具裡就可以了。

接下來我們可以搜索全局的方法、類等。甚至可以直接修改指令的,然後再生成對應的APP

結論

這一篇主要是理論,讓大家有個大體的瞭解。下一篇來個實戰,教大家如果根據內存地址動態打斷點,如何獲取微信當前的視圖控制器的名字,這樣我們結合Hopper或者class-dump出來的.h文件進行修改或攔截了。

相關推薦

推薦中...