无须越狱、自动集成、只需要一个砸壳的应用


#1

不贴码了,扫这个加群吧~

前言

之前基于iOSOpenDev重新弄了一个[MonkeyDev]https://github.com/AloneMonkey/MonkeyDev ,最初的版本支持Xcode 9和最新theos创建CaptainHook Tweak和Logos Tweak,后面又增加了一个Command-line Tool工具的支持。

然后想到如果是非越狱机器或者使用Xcode调试第三方应用的时候很多集成步骤,注入dylib,集成Reveal、Cycript等等,这些步骤其实都是重复性的工作,所以现带给大家MonkeyDev支持,一步到位!

那么需要怎么做呢?

安装MonkeyDev

这个看第一篇文章,或者看github文档 就可以了。

很多人就是因为没有仔细看文档,然后出错了不知道怎么解决,所以先仔细看一遍文档把。

使用:一步到位

CaptainHook Tweak、Logos Tweak and Command-line Tool的使用这里就不讲了,如果有不会的我到时再单独写一篇文章。

这里主要介绍的功能是MonkeyDev一步集成非越狱调试。

准备好砸壳的ipa或者app

第一步是准备好砸壳的ipa或者app,可以从第三方应用市场或者http://www.iphonecake.com去下一个。

创建MonkeyApp项目

点击File - New - Project...创建iOS项目,选择MonkeyApp

创建完成之后,你会得到一个这样的工程:

解析一下,这里我创建的项目名字就是MonkeyApp,所以下面对应的都是MonkeyApp,你自己创建的由你的项目名字而定!

MonkeyAppDylib这个是将被注入目标App的动态库,你自己要hook的代码可以在MonkeyAppDylib.m文件里面写,我在里面写了一些Demo代码,支持OC runtime的HOOK,C函数的fishhook。

AntiAntiDebug这个里面是反反调试的代码。

fishhook这个是自动集成的fishhook模块。

下面Framewroks已经自动集成了Reveal.frameworkCycript.framework

拖入编译

我准备了一个砸壳了的ipa文件,然后我右键项目里面的TargetApp文件夹Show in Finder,把ipa文件拖入下面的位置(当然app文件夹也可以的):


put ipa or app here这个文件不要删除。

好了,还要做什么吗? 不, 不用了。编译运行到非越狱手机。

打开电脑的Reveal,就可以看到界面了:

Cycript查看界面也没有问题:

这里Cycript默认端口是6666

更多功能

Demo App

MonkeyApp不拖入App或者ipa的情况下,会有一个默认的App,以供读者自己测试,样子大概是这个样子····

对了,运行前,你要把AntiAntiDebug.m这个文件的

rebind_symbols((struct rebinding[1]){{"sysctl", my_sysctl, (void*)&orig_sysctl}},1);

这行代码注释去掉,因为Demo应用有反调试,但是hooksysctl这个在某些应用里会导致_dyld_debugger_notification这样的崩溃。

em… Demo就是这个样子:

你可以自己修改MonkeyAppDylib.m里面的代码,这个是笔者针对Demo写的例子啦。。。。

CHDeclareClass(CustomViewController)

CHOptimizedMethod(0, self, NSString*, CustomViewController,getMyName){
    //get origin value
    NSString* originName = CHSuper(0, CustomViewController, getMyName);
    
    NSLog(@"origin name is:%@",originName);
    
    //get property
    NSString* password = CHIvar(self,_password,__strong NSString*);
    
    NSLog(@"password is %@",password);
    
    //change the value
    return @"AloneMonkey";
    
}

CHConstructor{
    CHLoadLateClass(CustomViewController);
    CHClassHook(0, CustomViewController, getMyName);
}

默认集成的库

本工具会默认集成Reveal.frameworkCycript.framework,em…

集成的Reveal.framework是最新版本的,所以你可能需要最新的Reveal,否则使用自己的Reveal.framework替换掉/opt/MonkeyDev/frameworks下面的Reveal.framework

Cycript.framework/opt/MonkeyDev/library目录下面。

可以在如下位置删除掉默认集成的库:

增加自己的库

emmm。。。。。

动态库的话,把你的*.framework文件拷贝到/opt/MonkeyDev/frameworks目录下面,然后在下图的位置add进去,emmm。。。。就可以了。

静态库的话,直接增加到上面,指定search path就可以了,和正常开发没啥区别。。。

后续TODO

后续可能还有增加自动符号还原,lldb脚本,or pod支持啥的。。。


#2

耶微信重签名


#3

CaptainHook.h not found- -


#4

你是安装的最新的theos吗?

最新的theos,头文件在这,工具会自动导入
/opt/theos/vendor/include/CaptainHook/CaptainHook.h


#5

README-zh.md


#6


#7

作为一个行动的矮子,膜膜膜


#8

mark


#9

收下学习了,谢谢


#10

二维码过期了。。。


#11

README有入群方式。


#12

楼主,你好。
我在用你的MonkeyDev做开发,不过我编好Logos插件。
所以我在MonekyApp模板中新建了个Target 为Logos的插件,并在App中添加了Logos插件依懒,但运行App的时候Logos插件并没有加载。
后来用otool -L Target 发现Logos插件 并没有像 @executable_path/Frameworks/libHelloMonkeyDevDylib.dylib (compatibility version 0.0.0, current version 0.0.0) 这样插入到LoadCommnad。
这个要怎么破?


#13

你把你的插件加到动态库的target试试。


#14

哈哈,很神奇的操作,添加到动态库里是可以的,多谢楼主1!!:beers:


#15

已经进去了


#16

这个要怎么重签呢?


#17

拖入文件,运行就重签了啊


#18

哦哦,我还以为是能直接改bundle id呢,放两个微信


#19

你都没试过你怎么知道不可以?


#20

哈哈,我都没仔细看,你是作者啊。上午刚试了下,发现这真是个神器啊,改签名我还得研究研究