推荐序

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

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

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

作者介绍:刘培庆,目前在网易信息安全部门工作。个人博客地址: 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

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' dopod '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 MonkeyDevDESCspec.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' dopod '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项目地址请点击阅读原文查看。

https://github.com/AloneMonkey/MonkeyDev

内容转载自公众号

AloneMonkey
了解更多

使用 CocoaPods 给微信集成 SDK 打印收发消息相关推荐

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

    推荐序 本文介绍的是一套逆向工具,可以在非越狱手机上给任意应用增加插件.在文末的示例中,作者拿微信举例,展示出在微信中打印收发消息的功能. 这套工具可以加快逆向开发的速度,其重签名思想也可以用于二次分 ...

  2. java调用个人微信api接口实现收发消息发朋友圈

    个人微信api接口,java调用个人微信api接口实现收发消息发朋友圈 1.微信好友收发消息         /**      * 给微信好友发消息      * @author wechatno:t ...

  3. 调用个人微信API协议接口收发消息,发朋友圈

    调用个人微信API协议接口收发消息,发朋友圈 java调用个人微信的API接口收发消息 /** * 接受微信好友发来聊天消息 * @author wechatno:tangjinjinwx * @pa ...

  4. 在微信中查看打印的消息

    在微信中调试程序时启用控制台查看打印信息 在页面body之后加入下面这段代码 <script src="//cdn.jsdelivr.net/npm/eruda">&l ...

  5. 使用spring集成的kafka收发消息

    1. 引入maven依赖 <dependency><groupId>org.springframework.integration</groupId><art ...

  6. iOS SDK开发系列三之微信支付SDK封装Demo以及xcodebuild简单打包脚本实现

    前言 SDK开发系列文章一 SDK开发系列文章二 之前两个文章介绍了Cocoapods的原理,Xcode环境变量以及动态库和静态库的介绍,这些基本知识就单独抽出来了,方便以后翻阅.看了一遍网上的一些静 ...

  7. SAP系统和微信集成的系列教程之一:微信开发环境的搭建

    系列目录 (1) 微信开发环境的搭建 ( 本文 ) (2) 如何通过微信公众号消费API (3) 微信用户关注公众号之后,自动在SAP C4C系统创建客户主数据 (4) 如何将SAP C4C主数据变化 ...

  8. Jeewx-Api 1.3.2 版本发布,微信开发SDK

    JEEWX-API 是一款JAVA版的微信开发SDK,支持微信公众号.小程序.微信企业号.支付宝生活号SDK和微博SDK.你可以基于她,快速的傻瓜化的进行微信开发.支付窗开发和微博开发. 基于jeew ...

  9. 微信开发SDK,Jeewx-Api 1.3.1 版本发布

    JEEWX-API 是一款JAVA版的微信开发SDK,支持微信公众号.小程序.微信企业号.支付宝生活号SDK和微博SDK.你可以基于她 快速的傻瓜化的进行微信开发.支付窗开发和微博开发. 基于jeew ...

最新文章

  1. Vista 下的注册 com 类失败解决方法
  2. 金融行业创新突围,华为如何趟过产业数字化深水区?
  3. hdu 5504(枚举+找规律)
  4. 微信小程序中嵌套html_微信小程序:web-view嵌套H5实现微信支付功能解决方案及填坑...
  5. 英特尔展示体育行业与大数据技术应用
  6. 51nod 1101 换零钱 完全背包的变型 动态规划
  7. css3动画事件—webkitAnimationEnd
  8. 课程设计哈夫曼编/译码系统
  9. php curl get post请求
  10. 全能扫描王(一款识别率超高的OCR识别APP)
  11. 在计算机系统中 cpu指什么地方,在计算机中cpu指的是什么
  12. 虚拟项目团队构建与管理
  13. Neo4j Server shutdown initiated by request最简暴的解决办法。
  14. 计算机专业考计量经济学,计量经济学期末考试题库(完整版)及答案()(47页)-原创力文档...
  15. Coremail论客副总裁:从传统走向自主可控,金融行业邮件系统的转型升级
  16. Mac安装Drozer apk安全测试框架踩坑记录, ‘openssl/opensslv.h‘ file not found 和implicit declaration of function‘xx‘
  17. linux安装升级git
  18. 《暗黑2》经典数值公式分析总结(三)
  19. 1-5 CAD基础 圆(circle)
  20. 360浏览器怎么设置html5播放,360浏览器如何开启小窗口播放网页视频

热门文章

  1. BZOJ 2957楼房重建
  2. 内存管理器(二)边界标识法
  3. c++ stack 的使用
  4. hadoop中HBase子项目入门讲解
  5. java 中的 Enumeration 在Vector,Hashtable和web中的应用
  6. Windows API函数大全
  7. android资料整理
  8. ubuntu使用相关
  9. C# ref和out关键字
  10. Linux下通过gettimeofday函数获取程序段执行时间