使用 CocoaPods 給微信集成 SDK 打印收發消息ios
推薦序git
本文介紹的是一套逆向工具,能夠在非越獄手機上給任意應用增長插件。在文末的示例中,做者拿微信舉例,展現出在微信中打印收發消息的功能。github
這套工具能夠加快逆向開發的速度,其重簽名思想也能夠用於二次分發別人的應用。web
其實這也展現出蘋果在應用安全上的防禦還須要增強,但願「董小姐」能夠看到本文(偷笑)。xcode
做者介紹:劉培慶,目前在網易信息安所有門工做。我的博客地址: http://www.alonemonkey.com/。感謝做者受權轉發。安全
背景微信
筆者自己是一個iOS逆向的愛好者,曾在使用iOSOpenDev在Xcode開發越獄插件的時候,因爲工具已經好幾年沒有更新,安裝和使用起來都會諸多問題,因此最初筆者只是想改良iOSOpenDev的兼容問題,後面在開發中不斷冒出新的idea,並在工具中實現了這些想法,因此就有了本文將要給你們強烈推薦的工具MonkeyDev。session
用途架構
在使用以前,你們關心的都是它的功能,能夠作什麼。那麼MonkeyDev這個工具能夠作什麼呢?總結來講能夠作以下這些事情:app
大概瞭解了以後下面就經過具體的實際應用來體會它的強大之處吧。
環境準備
在使用以前首先是環境的配置,若是配置不對的話,可能會出一些奇怪的問題,你也能夠結合Wiki來操做。
git clone --recursive https://github.com/theos/theos.git /opt/theos
brew install ldid
ssh-keygen -t rsa -P ''
ssh-copy-id -i /Users/username/.ssh/id_rsa root@ip
安裝
你能夠經過以下命令選擇指定的Xcode進行安裝,也能夠默認安裝。
sudo xcode-select -s /Applications/Xcode-xxx.app
xcode-select -p
git clone https://github.com/AloneMonkey/MonkeyDev.git
cd MonkeyDev/bin
sudo ./md-install
sudo ./md-uninstall
sudo ./md-update
模塊介紹
安裝完成以後,打開Xcode,點擊File - New - Project...,選擇iOS滑動到最下方能夠看到MonkeyDev提供的模塊:
介紹下這幾個模塊的用途:
越獄模塊
使用CaptainHook提供的頭文件進行OC函數的Hook,以及屬性的獲取。
使用theos提供的logify.pl工具將.xm文件轉成.mm文件進行編譯,默認集成CydiaSubstrate,可使用MSHookMessageEx和MSHookFunction來Hook OC函數和指定地址。
能夠直接建立運行於越獄設備的命令行工具
非越獄模塊
這是自動給第三方應用集成Reveal、Cycript和注入dylib的模塊,支持調試dylib和第三方應用,支持Pod給第三放應用集成SDK,只須要準備一個砸殼後的ipa或者app文件便可。
功能介紹
關於CaptainHook Tweak、Logos Tweak 和 Command-line Tool的使用這裏再也不介紹,有問題能夠查看項目Wiki
下面主要介紹MonkeyApp的使用,開啓你的非越獄插件開發之旅~
準備
在開始使用前,須要準備一個砸殼後的應用,可使用越獄手機砸殼,而後獲取ipa或app,沒有越獄手機直接從某助手下載越獄應用便可。
建立項目
點擊File - New - Project...建立iOS項目,選擇MonkeyApp。
建立完成以後,你會獲得一個這樣的工程:
這裏我建立的項目名字就是MonkeyApp,因此下面對應的都是MonkeyApp,你本身建立的由你的項目名字而定! 另外Xcode 8須要另外在App裏面增長動態庫的依賴,以下:
MonkeyAppDylib這個是將被注入目標App的動態庫,你本身要hook的代碼能夠在MonkeyAppDylib.m文件裏面寫,我在裏面寫了一些Demo代碼,直接運行便可看到效果,支持OC runtime的HOOK,C函數的fishhook。
AntiAntiDebug這個裏面是反反調試的代碼。
fishhook這個是自動集成的fishhook模塊。
下面Framewroks已經自動集成了Reveal.framework和Cycript.framework。
拖入砸殼應用編譯
打開某助手選擇應用遊戲裏面的越獄應用,下載一個應用就是已經砸殼了的。
而後打開TargetApp目錄,拷貝ipa文件到當前目錄下面,以下圖所示:
而後點擊運行便可,運行後能夠從控制檯看到動態庫已經注入成功,Reveal已經成功加載!固然手機上面也運行起來了!
打開Mac上的Reveal便可查看應用的界面結構啦!以下圖所示:
默認還集成了Cycript,從Cycript官網下載SDK,而後進去SDK目錄運行以下命令便可:
./cycript -r iphoneip:6666
獲取微信消息
下面以一個簡單獲取微信收到的消息爲例,來進一步介紹它的使用,首先打開MonkeyAppDylib.m文件,在最下面寫入以下代碼:
@interface CMessageWrap
@property (nonatomic, strong) NSString* m_nsContent;
@property (nonatomic, assign) NSInteger m_uiMessageType;
@end
CHDeclareClass(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);
}
而後從新運行就能看到效果了:
而後就能夠愉快的開發非越獄插件了,還能夠直接調試!
使用CocoaPods集成SDK
MonkeyDev還支持CocoaPods給第三方應用集成SDK,新建Podfile,寫入:
target 'MonkeyAppDylib' do
pod 'FLEX'
end
這裏的Target要設置爲動態庫而不是App,而後執行Pod install。而後將以下選項改回Yes。
在MonkeyAppDylib.m文件中加入SDK初始化代碼:
#import <FLEX/FLEXManager.h>
void initCycriptServer(){
[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidFinishLaunchingNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) {
[[FLEXManager sharedManager] showExplorer];
CYListenServer(6666);
}];
}
運行效果以下:
非越獄插件商店
既然能夠支持CocoaPods了,那麼徹底能夠將本身寫的非越獄插件傳到CocoaPods,而後經過pod一鍵安裝!
下面就將上面寫的獲取微信消息插件放到CocoaPods,新建Cocoa Touch Framework項目,而後增長頭文件CaptainHook.h和本身的源文件PrintWXMessage.m,並將上面的代碼拷貝過來,以下圖所示:
而後生成framework弄成zip包(zip包須要包含模擬器和真機的架構才能經過本地驗證),編輯PrintWXMessage.podspec文件內容以下:
Pod::Spec.new do |spec|
spec.name = "PrintWXMessage"
spec.version = "1.0.0"
spec.summary = "Print WX Message for MonkeyDev"
spec.description = <<-DESC
- Print WX Message for MonkeyDev
DESC
spec.homepage = "https://github.com/AloneMonkey/MonkeyDev"
spec.license = { :type => "BSD", :file => "LICENSE" }
spec.author = { "AloneMonkey" => "liupeiqing1993@163.com" }
spec.social_media_url = "http://weibo.com/xiaoqing28"
spec.platform = :ios, "8.0"
spec.source = { :http => "https://github.com/AloneMonkey/MonkeyDevPod/raw/master/PrintWXMessage/LatestBuild/PrintWXMessage.zip"}
spec.vendored_frameworks = "PrintWXMessage.framework"
end
這裏source直接寫的是zip包的地址,裏面就是筆者生成的framework動態庫。
增長私有CocosPods:
pod repo add MonkeyDevSpecs https://github.com/AloneMonkey/MonkeyDevSpecs.git
將PrintWXMessage包發佈到私有Pod:
pod repo push MonkeyDevSpecs PrintWXMessage.podspec
修改Podfile文件內容以下,而後pod install安裝,而且把原來寫在MonkeyAppDylib.m的打印微信消息的代碼刪除。
source 'https://github.com/AloneMonkey/MonkeyDevSpecs.git'
target 'MonkeyAppDylib' do
pod 'PrintWXMessage'
end
~ MonkeyApp pod install
Cloning spec repo `alonemonkey` from `https://github.com/AloneMonkey/MonkeyDevSpecs.git`
Analyzing dependencies
Downloading dependencies
Installing PrintWXMessage (1.0.0)
Generating Pods project
Integrating client project
[!] Please close any current Xcode sessions and use `MonkeyPod.xcworkspace` for this project from now on.
Pod installation complete! There is 1 dependency from the Podfile and 1 total pod installed.
運行便可看到插件已經完美集成成功!!!
MonkeyDev項目地址請點擊閱讀原文查看。