使用CocoaPods给微信集成SDK打印收发消息

简介:

推荐序

本文介绍的是一套逆向工具,可以在非越狱手机上给任意应用增加插件。在文末的示例中,作者拿微信举例,展示出在微信中打印收发消息的功能。

这套工具可以加快逆向开发的速度,其重签名思想也可以用于二次分发别人的应用。

其实这也展示出苹果在应用安全上的防护还需要加强,希望“董小姐”可以看到本文(偷笑)。

作者介绍:刘培庆,目前在网易信息安全部门工作。个人博客地址: http://www.alonemonkey.com/。感谢作者授权转发。

背景

笔者本身是一个iOS逆向的爱好者,曾在使用iOSOpenDev在Xcode开发越狱插件的时候,由于工具已经好几年没有更新,安装和使用起来都会诸多问题,所以最初笔者只是想改良iOSOpenDev的兼容问题,后面在开发中不断冒出新的idea,并在工具中实现了这些想法,所以就有了本文将要给大家强烈推荐的工具MonkeyDev。

用途

在使用之前,大家关心的都是它的功能,可以做什么。那么MonkeyDev这个工具可以做什么呢?总结来说可以做如下这些事情:

  • 可以使用Xcode开发CaptainHook Tweak、Logos Tweak 和 Command-line Tool,在越狱机器开发插件,这是原来iOSOpenDev功能的迁移和改进。
  • 只需拖入一个砸壳应用,自动集成Reveal、Cycript和注入的动态库并重签名安装到非越狱机器。
  • 支持调试自己编写的动态库和第三方App
  • 支持通过CocoaPods第三方应用集成SDK以及非越狱插件,简单来说就是通过CocoaPods搭建了一个非越狱插件商店。

大概了解了之后下面就通过具体的实际应用来体会它的强大之处吧。

环境准备

在使用之前首先是环境的配置,如果配置不对的话,可能会出一些奇怪的问题,你也可以结合Wiki来操作。

  • 安装最新的theos 
 
 
  1. git clone --recursive https://github.com/theos/theos.git /opt/theos 
  • 安装ldid
 
 
  1. brew install ldid 

如果是用于越狱开发,需要配置免密码登录越狱设备,如果没有越狱机器可以跳过这步。

 
 
  1. ssh-keygen -t rsa -P '' 
  2.  
  3. ssh-copy-id -i /Users/username/.ssh/id_rsa root@ip  

安装

你可以通过如下命令选择指定的Xcode进行安装,也可以默认安装。

  • 指定Xcode安装:
 
 
  1. sudo xcode-select -s /Applications/Xcode-xxx.app 
  • 默认安装的Xcode:
 
 
  1. xcode-select -p 
  • 执行安装命令:
 
 
  1. git clone https://github.com/AloneMonkey/MonkeyDev.git 
  2.  
  3. cd MonkeyDev/bin 
  4.  
  5. sudo ./md-install  
  • 如需卸载,执行卸载命令:
 
 
  1. sudo ./md-uninstall 
  • 如需更新,执行更新命令:
 
 
  1. sudo ./md-update 

模块介绍

安装完成之后,打开Xcode,点击File - New - Project...,选择iOS滑动到最下方可以看到MonkeyDev提供的模块:

介绍下这几个模块的用途:

越狱模块

  • CaptainHook Tweak

使用CaptainHook提供的头文件进行OC函数的Hook,以及属性的获取。

  • Logos Tweak

使用theos提供的logify.pl工具将.xm文件转成.mm文件进行编译,默认集成CydiaSubstrate,可以使用MSHookMessageEx和MSHookFunction来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.framework和Cycript.framework。

拖入砸壳应用编译

打开某助手选择应用游戏里面的越狱应用,下载一个应用就是已经砸壳了的。

然后打开TargetApp目录,拷贝ipa文件到当前目录下面,如下图所示:

然后点击运行即可,运行后可以从控制台看到动态库已经注入成功,Reveal已经成功加载!当然手机上面也运行起来了!

打开Mac上的Reveal即可查看应用的界面结构啦!如下图所示:

默认还集成了Cycript,从Cycript官网下载SDK,然后进去SDK目录运行如下命令即可:

 
 
  1. ./cycript -r iphoneip:6666 

获取微信消息

下面以一个简单获取微信收到的消息为例,来进一步介绍它的使用,首先打开MonkeyAppDylib.m文件,在最下面写入如下代码:

 
 
  1. @interface CMessageWrap 
  2. @property (nonatomic, strong) NSString* m_nsContent; 
  3. @property (nonatomic, assign) NSInteger m_uiMessageType; 
  4. @end 
  5. CHDeclareClass(CMessageMgr) 
  6.  
  7. CHMethod2(void, CMessageMgr, AsyncOnAddMsg, NSString*, msg, MsgWrap, CMessageWrap*, msgWrap){ 
  8.     NSString* content = [msgWrap m_nsContent]; 
  9.     if([msgWrap m_uiMessageType] == 1){ 
  10.         NSLog(@"收到消息: %@", content); 
  11.     } 
  12.     CHSuper2(CMessageMgr, AsyncOnAddMsg, msg, MsgWrap, msgWrap); 
  13.  
  14. CHConstructor{ 
  15.     CHLoadLateClass(CMessageMgr); 
  16.     CHClassHook2(CMessageMgr, AsyncOnAddMsg, MsgWrap); 
  17.  

然后重新运行就能看到效果了:

然后就可以愉快的开发非越狱插件了,还可以直接调试!

使用CocoaPods集成SDK

 
 
  1. target 'MonkeyAppDylib' do 
  2.      pod 'FLEX' 
  3. end  

这里的Target要设置为动态库而不是App,然后执行Pod install。然后将如下选项改回Yes。

在MonkeyAppDylib.m文件中加入SDK初始化代码:

 
 
  1. #import <FLEX/FLEXManager.h> 
  2.  
  3. void initCycriptServer(){ 
  4.     [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidFinishLaunchingNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) { 
  5.         [[FLEXManager sharedManager] showExplorer]; 
  6.         CYListenServer(6666); 
  7.     }]; 
  8.  

运行效果如下:

非越狱插件商店

既然可以支持CocoaPods了,那么完全可以将自己写的非越狱插件传到CocoaPods,然后通过pod一键安装!

下面就将上面写的获取微信消息插件放到CocoaPods,新建Cocoa Touch Framework项目,然后增加头文件CaptainHook.h和自己的源文件PrintWXMessage.m,并将上面的代码拷贝过来,如下图所示:

然后生成framework弄成zip包(zip包需要包含模拟器和真机的架构才能通过本地验证),编辑PrintWXMessage.podspec文件内容如下:

 
 
  1. Pod::Spec.new do |spec| 
  2.   spec.name             = "PrintWXMessage" 
  3.   spec.version          = "1.0.0" 
  4.   spec.summary          = "Print WX Message for MonkeyDev" 
  5.   spec.description      = <<-DESC 
  6.                           - Print WX Message for MonkeyDev 
  7.                         DESC 
  8.  
  9.   spec.homepage         = "https://github.com/AloneMonkey/MonkeyDev" 
  10.  
  11.   spec.license          = { :type => "BSD", :file => "LICENSE" } 
  12.   spec.author           = { "AloneMonkey" => "liupeiqing1993@163.com" } 
  13.   spec.social_media_url = "http://weibo.com/xiaoqing28" 
  14.   spec.platform         = :ios, "8.0" 
  15.   spec.source           = { :http => "https://github.com/AloneMonkey/MonkeyDevPod/raw/master/PrintWXMessage/LatestBuild/PrintWXMessage.zip"
  16.   spec.vendored_frameworks = "PrintWXMessage.framework" 
  17. end  

这里source直接写的是zip包的地址,里面就是笔者生成的framework动态库。

增加私有CocosPods:

 
 
  1. pod repo add MonkeyDevSpecs https://github.com/AloneMonkey/MonkeyDevSpecs.git 

将PrintWXMessage包发布到私有Pod:

 
 
  1. pod repo push MonkeyDevSpecs PrintWXMessage.podspec 

修改Podfile文件内容如下,然后pod install安装,并且把原来写在MonkeyAppDylib.m的打印微信消息的代码删除。

 
 
  1. source 'https://github.com/AloneMonkey/MonkeyDevSpecs.git' 
  2.  
  3. target 'MonkeyAppDylib' do 
  4.      pod 'PrintWXMessage' 
  5. end 
  6.  
  7. ~ MonkeyApp pod install 
  8. Cloning spec repo `alonemonkey` from `https://github.com/AloneMonkey/MonkeyDevSpecs.git` 
  9. Analyzing dependencies 
  10. Downloading dependencies 
  11. Installing PrintWXMessage (1.0.0) 
  12. Generating Pods project 
  13. Integrating client project 
  14.  
  15. [!] Please close any current Xcode sessions and use `MonkeyPod.xcworkspace` for this project from now on
  16. Pod installation complete! There is 1 dependency from the Podfile and 1 total pod installed.  

运行即可看到插件已经完美集成成功!!!

MonkeyDev项目地址请点击阅读原文查看。





作者:AloneMonkey
来源:51CTO
目录
相关文章
|
2月前
|
Java API 开发工具
支付与银行业线上客户协议应用中的DocuSign集成方式选择——SDK和API
跨境支付公司和Docusign进行集成时,碰到问题时的解决方案。分别用SDK和API集成后的各自使用体验。
46 2
支付与银行业线上客户协议应用中的DocuSign集成方式选择——SDK和API
|
2月前
|
Web App开发 前端开发 JavaScript
如何快速与呼叫中心系统CTI/API/SDK接口集成
由于呼叫中心系统涉及通信、CTI、终端设备、中继线路等技术与概念,从事信息管理系统、ERP、CRM、工单系统等的研发人员一般不是非常熟悉这部分技术,当需要提供具备呼叫中心能力的解决方案时,往往要用较多的时间来研究这些相对复杂的技术,对接过程比较长,开发调试有一定的阻力,基于此,我们提出一种更加简便高效的集成方法,可以零代码集成呼叫中心平台,实现项目快速上线。
如何快速与呼叫中心系统CTI/API/SDK接口集成
|
4月前
|
前端开发
命令行创建React项目
命令行创建React项目
命令行创建React项目
|
4月前
|
JSON JavaScript 前端开发
全面的.NET微信网页开发之JS-SDK使用步骤、配置信息和接口请求签名生成详解
全面的.NET微信网页开发之JS-SDK使用步骤、配置信息和接口请求签名生成详解
|
4月前
|
开发工具 数据安全/隐私保护
您需要检查并确保应用是否正确集成了EMAS的SDK
您需要检查并确保应用是否正确集成了EMAS的SDK
27 1
|
4月前
|
分布式计算 Hadoop Java
hadoop sdk 优化小结(裁剪、集成kerberos组件、定制等)
hadoop sdk 优化小结(裁剪、集成kerberos组件、定制等)
41 0
|
6月前
|
开发工具 Android开发 iOS开发
AppsFlyer 研究(一)AppsFlyer SDK 集成(2)
AppsFlyer 研究(一)AppsFlyer SDK 集成
161 0
|
12天前
|
小程序 前端开发 API
微信小程序全栈开发中的异常处理与日志记录
【4月更文挑战第12天】本文探讨了微信小程序全栈开发中的异常处理和日志记录,强调其对确保应用稳定性和用户体验的重要性。异常处理涵盖前端(网络、页面跳转、用户输入、逻辑异常)和后端(数据库、API、业务逻辑)方面;日志记录则关注关键操作和异常情况的追踪。实践中,前端可利用try-catch处理异常,后端借助日志框架记录异常,同时采用集中式日志管理工具提升分析效率。开发者应注意安全性、性能和团队协作,以优化异常处理与日志记录流程。
|
12天前
|
小程序 安全 数据安全/隐私保护
微信小程序全栈开发中的身份认证与授权机制
【4月更文挑战第12天】本文探讨了微信小程序全栈开发中的身份认证与授权机制。身份认证包括手机号验证、微信登录和第三方登录,而授权机制涉及角色权限控制、ACL和OAuth 2.0。实践中,开发者可利用微信登录获取用户信息,集成第三方登录,以及实施角色和ACL进行权限控制。注意点包括安全性、用户体验和合规性,以保障小程序的安全运行和良好体验。通过这些方法,开发者能有效掌握小程序全栈开发技术。
|
12天前
|
JavaScript 前端开发 小程序
微信小程序全栈开发之性能优化策略
【4月更文挑战第12天】本文探讨了微信小程序全栈开发的性能优化策略,包括前端的资源和渲染优化,如图片压缩、虚拟DOM、代码分割;后端的数据库和API优化,如索引创建、缓存使用、RESTful API设计;以及服务器的负载均衡和CDN加速。通过这些方法,开发者可提升小程序性能,优化用户体验,增强商业价值。

热门文章

最新文章