iOS逆向学习笔记13(Monkey的安装及其基本使用)

1. Monkey介绍

  Monkey是一个为越狱和非越狱开发人员准备的工具。
Monkey github 链接

2. Monkey安装及注意事项

  进入到上面所说的链接之后,操作如下:



  进入wiki页面后,就有关于monkey的介绍,及其安装文档链接,点击安装,如下图所示:


2.1 环境要求

使用工具前确保如下几点:

  • 安装最新的theos
sudo git clone --recursive https://github.com/theos/theos.git /opt/theos

注意,由于Mac OS 11以上系统opt路径下有权限问题需要解决,因此我们可以在用户根目录下创建一个隐藏文件,将theos复制到这个文件夹中,如下图所示:



然后再在.zshrc文件中配置theos路径,如下图所示:



如果下面的命令能够执行成功就表示theos配置成功了,如下图所示:
  • 安装ldid(如安装theos过程安装了ldid,跳过)
brew install ldid
  • 配置免密码登录越狱设备(如果没有越狱设备,跳过)
ssh-keygen -t rsa -P ''
ssh-copy-id -i /Users/username/.ssh/id_rsa root@ip

或者安装sshpass自己设置密码:

brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb

2.2 安装

你可以通过以下命令选择指定的Xcode进行安装:

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

默认安装的Xcode为:

xcode-select -p

执行安装命令:

sudo /bin/sh -c "$(curl -fsSL https://raw.githubusercontent.com/AloneMonkey/MonkeyDev/master/bin/md-install)"

如果安装的过程中,出现下面这种错误,如下所示:



就执行下面的命令

sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/PrivatePlugIns/IDEOSXSupportCore.ideplugin/Contents/Resources /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Specifications

然后再次执行安装命令就可以了

sudo /bin/sh -c "$(curl -fsSL https://raw.githubusercontent.com/AloneMonkey/MonkeyDev/master/bin/md-install)"

3. Monkey基本使用

3.1创建一个工程,使用安装Monkey之后生成的插件,如下图所示:



3.2 链接真机,调试运行

如果遇到如下图所示的错误


解决方法
运行结果如下:

3.3 hook其他APP


然后再次运行就可以了
我们使用上上个案例中的AntiHookDemo来练习一下,首先拖入ipa包,如下图所示:



如果我们想要Hook AntiHookDemo中下图中红框中的方法



只要在MonkeyDemoDylib.xm文件中编写如下代码:

运行结果如下:

Monkey使用起来之所以这么简单,是因为这个框架里面有一个库,如下图红框所示:



它能在编译期间将MonkeyDemoDylib.xm中的代码转化为我们平时hook函数的代码然后放入到MonkeyDemoDylib.mm文件中
#line 1 "/Users/shen/Documents/IOS_Projects/逆向班/MonkeyDemo/MonkeyDemoDylib/Logos/MonkeyDemoDylib.xm"


#import 


#include 
#if defined(__clang__)
#if __has_feature(objc_arc)
#define _LOGOS_SELF_TYPE_NORMAL __unsafe_unretained
#define _LOGOS_SELF_TYPE_INIT __attribute__((ns_consumed))
#define _LOGOS_SELF_CONST const
#define _LOGOS_RETURN_RETAINED __attribute__((ns_returns_retained))
#else
#define _LOGOS_SELF_TYPE_NORMAL
#define _LOGOS_SELF_TYPE_INIT
#define _LOGOS_SELF_CONST
#define _LOGOS_RETURN_RETAINED
#endif
#else
#define _LOGOS_SELF_TYPE_NORMAL
#define _LOGOS_SELF_TYPE_INIT
#define _LOGOS_SELF_CONST
#define _LOGOS_RETURN_RETAINED
#endif

@class ViewController; 
static void (*_logos_orig$_ungrouped$ViewController$button1Click)(_LOGOS_SELF_TYPE_NORMAL ViewController* _LOGOS_SELF_CONST, SEL); static void _logos_method$_ungrouped$ViewController$button1Click(_LOGOS_SELF_TYPE_NORMAL ViewController* _LOGOS_SELF_CONST, SEL); 

#line 5 "/Users/shen/Documents/IOS_Projects/逆向班/MonkeyDemo/MonkeyDemoDylib/Logos/MonkeyDemoDylib.xm"


static void _logos_method$_ungrouped$ViewController$button1Click(_LOGOS_SELF_TYPE_NORMAL ViewController* _LOGOS_SELF_CONST __unused self, SEL __unused _cmd) {
    NSLog(@"hook成功了!!");
    _logos_orig$_ungrouped$ViewController$button1Click(self, _cmd);
}


static __attribute__((constructor)) void _logosLocalInit() {
{Class _logos_class$_ungrouped$ViewController = objc_getClass("ViewController"); { MSHookMessageEx(_logos_class$_ungrouped$ViewController, @selector(button1Click), (IMP)&_logos_method$_ungrouped$ViewController$button1Click, (IMP*)&_logos_orig$_ungrouped$ViewController$button1Click);}} }
#line 13 

之后将这个文件链接到应用程序之中,这就是Monkey的基本使用了。

你可能感兴趣的:(iOS逆向学习笔记13(Monkey的安装及其基本使用))