使用 CocoaPods 給微信集成 SDK 打印收發消息

 

使用 CocoaPods 給微信集成 SDK 打印收發消息ios

 

推薦序git

 

本文介紹的是一套逆向工具,能夠在非越獄手機上給任意應用增長插件。在文末的示例中,做者拿微信舉例,展現出在微信中打印收發消息的功能。github

這套工具能夠加快逆向開發的速度,其重簽名思想也能夠用於二次分發別人的應用。web

 

其實這也展現出蘋果在應用安全上的防禦還須要增強,但願「董小姐」能夠看到本文(偷笑)。xcode

 

做者介紹:劉培慶,目前在網易信息安所有門工做。我的博客地址: http://www.alonemonkey.com/。感謝做者受權轉發。安全

背景微信

筆者自己是一個iOS逆向的愛好者,曾在使用iOSOpenDev在Xcode開發越獄插件的時候,因爲工具已經好幾年沒有更新,安裝和使用起來都會諸多問題,因此最初筆者只是想改良iOSOpenDev的兼容問題,後面在開發中不斷冒出新的idea,並在工具中實現了這些想法,因此就有了本文將要給你們強烈推薦的工具MonkeyDev。session

用途架構

在使用以前,你們關心的都是它的功能,能夠作什麼。那麼MonkeyDev這個工具能夠作什麼呢?總結來講能夠作以下這些事情:app

  • 可使用Xcode開發CaptainHook Tweak、Logos Tweak 和 Command-line Tool,在越獄機器開發插件,這是原來iOSOpenDev功能的遷移和改進。
  • 只需拖入一個砸殼應用,自動集成Reveal、Cycript和注入的動態庫並重簽名安裝到非越獄機器。
  • 支持調試本身編寫的動態庫和第三方App
  • 支持經過CocoaPods第三方應用集成SDK以及非越獄插件,簡單來講就是經過CocoaPods搭建了一個非越獄插件商店。

大概瞭解了以後下面就經過具體的實際應用來體會它的強大之處吧。

環境準備

在使用以前首先是環境的配置,若是配置不對的話,可能會出一些奇怪的問題,你也能夠結合Wiki來操做。

  • 安裝最新的theos

git clone --recursive https://github.com/theos/theos.git /opt/theos

  • 安裝ldid

brew install ldid

  • 若是是用於越獄開發,須要配置免密碼登陸越獄設備,若是沒有越獄機器能夠跳過這步。

ssh-keygen -t rsa -P ''

ssh-copy-id -i /Users/username/.ssh/id_rsa root@ip

安裝

你能夠經過以下命令選擇指定的Xcode進行安裝,也能夠默認安裝。

  • 指定Xcode安裝:

sudo xcode-select -s /Applications/Xcode-xxx.app

  • 默認安裝的Xcode:

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 Tweak

使用CaptainHook提供的頭文件進行OC函數的Hook,以及屬性的獲取。

  • Logos Tweak

使用theos提供的logify.pl工具將.xm文件轉成.mm文件進行編譯,默認集成CydiaSubstrate,可使用MSHookMessageExMSHookFunction來Hook OC函數和指定地址。

  • Command-line Tool

能夠直接建立運行於越獄設備的命令行工具

非越獄模塊

  • MonkeyApp

這是自動給第三方應用集成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.frameworkCycript.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項目地址請點擊閱讀原文查看。

 

 

 

 

 

相關文章
相關標籤/搜索