-
上一篇文章地址: iOS逆向之Deb包介绍
-
今天群里看到几位小伙伴的问题,本篇文章主要介绍一下这几个问题.
-
群是开放的,本着学习的目的创建了iOS逆向群,希望大家互相交流.
-
如果群里有朋友也熟悉iOS逆向,你也可以帮助一下刚入门的朋友,互相学习.
1.
如果遇到bool类型的方法,我们如何调试.
我依然用源项目代码做实验.
ViewController
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic,strong)UIButton *revealBtn;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
[self.view addSubview:self.revealBtn];
[self booljudge];
}
-(BOOL)booljudge{
NSLog(@"hello bool judge");
int i = 100;
if (i > 0) {
NSLog(@"i > 0 ture");
return true;
}else{
NSLog(@"i < 0 false");
return false;
}
}
-(UIButton*)revealBtn{
if (!_revealBtn) {
_revealBtn = [UIButton buttonWithType:UIButtonTypeCustom];
_revealBtn.frame = CGRectMake(100,100, 100,40);
_revealBtn.backgroundColor = [UIColor redColor];
[_revealBtn setTitle:@"测试" forState:UIControlStateNormal];
[_revealBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[_revealBtn addTarget:self action:@selector(revealClick) forControlEvents:UIControlEventTouchUpInside];
}
return _revealBtn;
}
-(void)revealClick{
NSLog(@"hello");
}
@end
我在代码中加入了 -(BOOL)booljudge的方法
-
我们编译源码生成 ipa,找到可执行文件.
-
我们找到后,然后进行class-dump进行导出头文件,如果你是从这篇文章开始看的,你可以周到class-dump的文章进行阅读.
-
我们找到生成的头文件 ViewController
#import "UIViewController.h"
@class UIButton;
@interface ViewController : UIViewController
{
UIButton *_revealBtn;
}
- (void).cxx_destruct;
- (_Bool)booljudge;
@property(retain, nonatomic) UIButton *revealBtn; // @synthesize revealBtn=_revealBtn;
- (void)revealClick;
- (void)viewDidLoad;
@end
-
我们会看到
- (_Bool)booljudge
方法 -
我们接着写hook方法的代码
-(id)booljudge{
NSLog(@"this a bool function");
return %orig;
}
我会返回的类型改成id,这样只需要return %orig 进行返回即可.
保证源码正常执行.
如果修改了return ture 或者 return false ,只会执行一种逻辑.
-
我们接着对tweak工程进行编译到安装.如果你看到这里的朋友,你可以查看一下tweak工程文章,如何创建tweak项目.
-
下面是打印的日志输出
源代码是这样写的
-(BOOL)booljudge{
NSLog(@"hello bool judge");
int i = 100;
if (i > 0) {
NSLog(@"i > 0 ture");
return true;
}else{
NSLog(@"i < 0 false");
return false;
}
}
hook 代码
-(id)booljudge{
NSLog(@"this a bool function");
return %orig;
}
如果需要分析代码中的源码逻辑,需要大家亲自动手试试.
2.
有位小伙伴的cycript -p 命令执行不成功
- 有可能是系统的原因导致的.
我的手机系统是iOS12.3
cycript -p 应用名/进程名 出错了
我们该如何处理呢?
- 我们需要安装另一款软件.
1
wget http://apt.saurik.com/debs/cycript_0.9.594_iphoneos-arm.deb
2
wget http://www.tateu.net/repo/files/net.tateu.cycriptlistenertweak_1.0.0_iphoneos-arm.deb
3
wget http://www.tateu.net/repo/files/net.tateu.cyrun_1.0.5_iphoneos-arm.deb
4
pkg -i cycript_0.9.594_iphoneos-arm.deb
5
dpkg -i net.tateu.cycriptlistenertweak_1.0.0_iphoneos-arm.deb net.tateu.cyrun_1.0.5_iphoneos-arm.deb
- 我们安装完成后,我们可以这样执行命令
cyrun -n SpringBoard -e
Cycript加载到SpringBoard中。SpringBoard将终止并自动重启
cyrun -n SpringBoard -d
SpringBoard卸载Cycript。SpringBoard将终止并自动重启
- 我们来尝试一下
我们已经注入TEST项目
- 我们打印一下层级结构
UIApp.keyWindow.recursiveDescription().toString()
- 其他命令需要亲自了解一下.
3.
在点击事件中加入其他控件
这里更简单了,我曾经写的hookdemo里,咱们加过alertView
%new
-(void)newMethod{
NSLog(@"first new mehtod");
UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"温馨提示" message:@"我的第一个tweak工程创建成功了" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:@"取消",nil];
[alertView show];
}
其他控件也可以同样的添加.
4.
总结
-
本篇文章主要介绍了如何解决三个问题
-
如果遇到bool类型的方法,我们如何调试.
-
cycript -p 命令执行不成功
-
在点击事件中加入其他控件
如果大家尝试后,不适合自己的方案可以找一下原因.由于很多因素存在,比如系统原因.
如果你出现了同样的问题,或者其他问题可以反馈到群里.
我会以文章的形式,把解决方案分享到iOS逆向文章.
感谢您的阅读,感谢您的关注.
网友评论