引言
上一篇介绍了,cycript安装、配置环境,那么安装完成过以后,说能够调试App,怎么调试、修改App的内存呐?
此文只是用于学习,有哪些不便的、或者侵犯权益的问题,请告知删除!
准备工具、资料
- 砸壳后的ipa包
- MonkeyDev
- Cycript环境
- 真机(俺是iPhoneX)
安装MonkeyDev集成非越狱调试
MonkeyDev是基于iOSOpenDev,最初的版本支持Xcode 9和最新theos创建CaptainHook Tweak和Logos Tweak,后面又增加了一个Command-line Tool工具的支持;
具体相关的内容可以进入到AloneMonkey的博客查看,感谢AloneMonkey贡献这么好用的工具。
下载MonkeyDev
github地址:MonkeyDev
下载安装
使用请阅读Wiki文档: Wiki
安装成功Xcode是酱紫滴 !
Command + N
注意
有的哥么喜欢装多个Xcode,所以安装的时候一定要看清是不是当前你需要安装的xcode。
xcode-select -p //查看默认xocde
sudo xcode-select -s /Applications/xxx(需要安装的Xcode名称).app
创建 MonkeyDev项目酱紫的:
- 项目名称是
ZacharyDev
,所以下面所有的内容对应的ZacharyDev
,项目名称可以根据自己进行自定义。 -
ZacharyDevBylib
这个是将被注入目标App的动态库,你自己要hook的代码可以在ZacharyDevBylib.m
文件里面写,里面写了一些Demo代码,支持OC runtime的HOOK,C函数的fishhook。 -
antiAntiDebug
这个里面是反反调试的代码。 -
fishhook
这个是自动积尘的fishhook模块。 -
Frameworks
已经自动集成了Reveal.framework
和Cycript.framework
。
拖入编译
- 准备好砸过壳的ipa包,这里我准备的是某信的砸壳版(越狱版),没有的下载pp助手下载一个ok?
- 将1中ipa包拖入自建项目目录
ZacharyDev/ZacharyDev/TargetApp
- Run到真机上面
来付出行动,come on!
相信哥么们已经安装好某信了,当然哥么你得分清那个是你自己的,还是你现在要调试的,不要弄混了!
打开Reveal
,就可以看到熟悉的界面了。
Reveal是啥? ->Reveal
当然回归正题,咱们主要是Cycript调试。
Cycript修改(只是内存的简单修改)、调试App
- 首先将上述的AppRun到真机,也就是你的测试机上面
- 打开终端输入
cycript
进入Cycript
环境,链接你的手机服务,这样才能调试App- 链接成功将直接进入到
cycript
环境
- 链接成功将直接进入到
cy#
- 注意:链接不上的问题
- 请重启调试的App
*** _syscall(connect(socket_, info->ai_addr, info->ai_addrlen)):../Console.cpp(306):CYSocketRemote [errno=61]
问题
- 链接后面的端口必须是6666吗?
- 答:不是,在
xxxx(你的项目名)Dylib.m
有这句话,你可以设置成任何数哥么
- 答:不是,在
CHConstructor{
NSLog(INSERT_SUCCESS_WELCOME);
[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidFinishLaunchingNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) {
#ifndef __OPTIMIZE__
CYListenServer(6666);
#endif
}];
}
调试、修改程序(一)
下面重点来了
cy# [UIApplication sharedApplication].statusBarHidden = YES
你会神奇的发现某信的状态条消失了。
- 再来一个
cy# choose(UILabel)
[#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#"<_UIStatusBarStringView: 0x126505880; frame = (0 0; 0 0); userInteractionEnabled = NO; layer = <_UILabelLayer: 0x1235e4070>>",#"<_UIStatusBarStringView: 0x126505fd0; frame = (0 0; 0 0); userInteractionEnabled = NO; layer = <_UILabelLayer: 0x126505ba0>>",#"<_UIStatusBarStringView: 0x1265097b0; frame = (14.3333 3.66667; 38.3333 18); text = '11:20'; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x1235e9cf0>>",#"<_UIStatusBarStringView: 0x12650b120; frame = (0 0; 0 0); userInteractionEnabled = NO; layer = <_UILabelLayer: 0x12650b800>>",#"<_UIStatusBarStringView: 0x12650ba10; frame = (0 0; 0 0); userInteractionEnabled = NO; layer = <_UILabelLayer: 0x12650bd30>>",#"<_UIStatusBarStringView: 0x12650bf90; frame = (0 0; 0 0); userInteractionEnabled = NO; layer = <_UILabelLayer: 0x1235fa340>>",#"<_UIStatusBarStringView: 0x12650c700; frame = (0 0; 0 0); userInteractionEnabled = NO; layer = <_UILabelLayer: 0x1235f90b0>>",#"<_UIStatusBarStringView: 0x12650ccc0; frame = (0 0; 0 0); userInteractionEnabled = NO; layer = <_UILabelLayer: 0x12650cfe0>>",#"<_UIStatusBarStringView: 0x126512860; frame = (0 0; 0 0); userInteractionEnabled = NO; layer = <_UILabelLayer: 0x1265118a0>>",#"<_UIStatusBarStringView: 0x126513a00; frame = (0 0; 0 0); userInteractionEnabled = NO; layer = <_UILabelLayer: 0x126511400>>",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">",#">"]
cy# #0x1266b7b00.text = "¥一个亿" //从上面找到钱的UILabel地址
"\xc2\xa5\xe4\xb8\x80\xe4\xb8\xaa\xe4\xba\xbf"
一个亿小目标完成
@王总
调试、修改程序(二)
从上面一堆乱码一样的东西中定位到你想要定位的内容会很恶心,那么有没有好点的方法?
- 有,来吧,跟着哥么走就是有肉吃,我吃肉少不了汤喝,啊啊哈哈哈哈哈哈
-
首先用Xcode Run当前调试程序,如下:
直接拿到了这个UILabel的地址,那么是不是快多了?有没有觉的有很多好玩的地方可以去挖掘,可以在尝试一下,
步步高点改器,哪里想改,点哪里 so easy
注意一点,仅供技术交流