首页
社区
课程
招聘
[分享] [calleng逆向日记] iOS crackMe的破解 与 Frida(Objection) 的入门使用(thanks to roysue)
发表于: 2023-9-30 14:43 5348

[分享] [calleng逆向日记] iOS crackMe的破解 与 Frida(Objection) 的入门使用(thanks to roysue)

2023-9-30 14:43
5348

入门学习逆向的个人笔记,预览(欢迎探讨)

  • C/C++的学习和数据结构

[原创] [calleng的逆向日记] 22y11m-23y3m29d 实现macOS编辑, iOS端编译和调试C/C++
[原创] [calleng的逆向日记] 23/03/30 (C++概念构建篇01) 补充完毕
[分享] [calleng的逆向日记] 22y11m-23y6m7d Win10Arm下的 gdb调试.[数据结构/严蔚敏-之迷宫问题]

  • iOS的学习和逆向

[分享] IOS软件安全工程师技能表(2017.7by非虫) (为自己学习导航) 图片不清楚下面有导图下载
[分享] Frida-Tool的一些 介绍, 和在 iOS下的一些用法 [个人笔记汇总]
[原创] [calleng的逆向日记] 弹窗的修改原理-OC篇 [源码学习和HOOK实践]23/09/24 --待续
[讨论] [calleng的逆向日记] 自学iOS逆向时候,如何自己解决问题.
[分享] [calleng逆向日记] iOS crackMe的破解 与 Frida(Objection) 的入门使用(thanks to roysue)
[分享] (iOS Hook原理,OC底层实现)Frida前置知识的(royuse)的一些知识注解(图片三次压缩失真,详情见附件)
[原创] (calleng逆向日记)Frida前置知识, ObjC runtime的"反射"-KVC-实例代码理解和分析
[分享] [calleng的逆向日记] Frida 前置知识, 类与方法的底层实现, 逻辑批注, (参考AloneMonkey的书)
[原创] (calleng逆向日记)Frida前置知识, ObjC runtime的"反射" KVC实例Demo分析第二部(Demo底部下载)
[分享] [calleng的逆向日记] iOS crackMe and Frida(Objection) Get Started (Oct,16th)
[分享] [calleng的逆向日记] Frida在iOS上内存漫游与黑盒调用 Get Started Section 4


Frida(Objection) 的入门(感谢roysue)

3天以前, 我加了很多的移动安全的名人, 倔金, 简书, 搜索了iOS逆向课程的相关笔记. 发现看不懂的,就是今天的移动端逆向的前沿技术.
发掘论坛现有的文章, 一步步做走, 不动再到(张小龙&马化腾)群里,论坛,提问.
后期,随着资料增多, 做个 技术 list, 出来.


classical

第一部分,基础知识

- (IBAction)buttonClick:(id)sender {}

关键字 具体定义
- 减号表示这是一个实例方法。这意味着该方法是与特定对象实例相关联的,只能由对象的实例调用。
(IBAction) 这是方法的返回类型,IBAction 实际上是一个宏定义,它表示 "Interface Builder Action"。这种返回类型通常用于与用户界面元素(如按钮)关联的方法。在 Interface Builder 或者 Xcode 的 Interface Builder 面板中,你可以将用户界面元素的事件(例如按钮的点击)直接与带有 IBAction 返回类型的方法关联起来。
buttonClick 这是方法的名称,用于标识方法。在这个例子中,方法名是 buttonClick,通常会根据方法的功能和处理的事件来命名。
(id)sender 这是方法的参数列表,它接受一个参数 sender,它是一个类型为 id 的对象,通常用来表示触发事件的对象。在按钮点击事件中,sender 通常是触发点击的按钮对象。

Objection 基础知识

功能说明 具体用法
1, 查看包路径,缓存路径,文件路径,lib路径 env
2, 查看当前注入的包的路径 pwd
3, 列出内存中模块 memory list modules
4, 列出导出表 memory list exports UnCrackable\ Level\ 1
5, 获取当前应用存储的cookies ios cookies get --json
6, 在堆上找一个类的实例化内存对象把内存地址打印出来 ios heap search instances UILabel
7, 打印域中变量值 这里可以得到 结果 ios heap execute 0x119e0c9e0 text --return-string
8, 查看二进制文件信息,查看是否加密判断是否加壳 ios info binary
9, dump存储的密码 ios keychain
10, hook 一些加解密算法的库 ios monitor crypto
11, 查看是否有凭据存储 ios nsurlcredentialstorage
12, 查看用户的一些信息 ios nsuserdefaults get
13, hook证书绑定相关方法 ios sslpinning
14, hook相关:列出所有类 ios hooking list classes
15, hook相关:列出相关类的所有方法 ios hooking list class_methods ViewController
16, hook这个类的所有方法 hook后去点击查看调用 ios hooking watch class ViewController
17, hook 这个buttonclick方法 这里要注意OC中的方法签名要记得加":"完整方法签名是:-[ViewController buttonClick:] ios hooking watch method "-[ViewController buttonClick:]" --dump-args --dump-backtrace --dump-return

Objection参数练习









下面hooking 时候, 需要 在屏幕上点击 button按钮, 才能被Frida命中



第二部分,破解 CrackeMe


CrakeMe (Objctive-c 注释)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#import "ViewController.h"  // 导入视图控制器头文件
 
#include "maxpower.h"  // 导入 maxpower.h 头文件
 
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *theLabel;         // 用于显示隐藏文本的标签
@property (weak, nonatomic) IBOutlet UILabel *Hint;             // 提示标签
@property (weak, nonatomic) IBOutlet UITextField *theTextField; // 文本输入框
@property (weak, nonatomic) IBOutlet UIButton *bVerify;         // 验证按钮
 
@end
 
@implementation ViewController
 
- (void)viewDidLoad {
    [super viewDidLoad];  // 调用父类的 viewDidLoad 方法
     
    self.Hint.numberOfLines = 1;                   // 设置 Hint 标签的文本行数为 1
    self.Hint.adjustsFontSizeToFitWidth = true;    // 自动调整字体大小以适应宽度
    [self.Hint sizeToFit];                        // 根据内容大小调整标签大小
     
    self.theLabel.hidden = true;                   // 隐藏 theLabel 标签
     
    // 调用 do_it() 函数,并将其返回的字符串赋给 theLabel 的文本属性
    NSString *hiddenText = [NSString stringWithCString:do_it() encoding:NSASCIIStringEncoding];
    self.theLabel.text = hiddenText;
}
 
- (IBAction)buttonClick:(id)sender {
 
    UIAlertView *alert;  // 创建 UIAlertView 对象
     
    // 检查用户输入的文本是否与 theLabel 标签的文本相匹配
    if ([self.theTextField.text isEqualToString:self.theLabel.text]) {
        alert = [[UIAlertView alloc] initWithTitle:@"Congratulations!"  // 显示恭喜消息
                                           message:@"You found the secret!!"
                                          delegate:self
                                 cancelButtonTitle:@"OK"
                                 otherButtonTitles:nil];
         
    } else {
        alert = [[UIAlertView alloc] initWithTitle:@"Verification Failed."  // 显示验证失败消息
                                           message:@"This is not the string you are looking for. Try again."
                                          delegate:self
                                 cancelButtonTitle:@"OK"
                                 otherButtonTitles:nil];
    }
     
    [alert show];  // 显示 UIAlertView
}
 
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // 处理内存警告
    // 在这里可以释放不需要的资源,以减少内存使用
}
 
@end

实例分析





[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2023-11-8 00:26 被calleng编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 3303
活跃值: (30941)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2023-9-30 23:09
1
游客
登录 | 注册 方可回帖
返回
//