重签名:
iOS App 签名的原理--总结的非常细,一看就明白
逆向学习笔记9——代码重签名
ios-app-signer 执行重签名
fishhook的原理
iOS逆向工程 - fishhook原理--讲的明白,需要结合mach-o文件一起看。
逆向学习笔记6——MachO文件
LLDB
常用命令
- po
- breakpoint set
- 参数打印: po r1。 p (SEL)$r1
- 栈信息:bt
- 返回地址: p/x $lr
- 列举模块:image -o -f
- 能实时的执行代码中的代码逻辑:expr
反反调试
1. 反调试。通过sysctl函数反调试。检测我们的进程有没有被附件调试。
2. 反注入
3. hook检查
4. 完整性检查(Load Command的修改,重签名校验-boundleID是否被修改,app目录下有没有embedded.mobileprovision文件及文件中包含的签名信息)
5. 代码混淆
动态调试-断点
方法名设置:
breakpoint set -n "-[SKTGraphicView alignLeftEdges:]"
地址设置:breakpoint set -a 0x16f6c3950
打印函数入参: po $x0
调用block: expr ((void ()(BOOL,NSString*))0x2c7140)(NO, @"Test")
看过"小黄书"的朋友们应该都对函数OC函数下断点步骤很清楚:
LLDB连接到程序
查看app二进制偏移:image -o -f
在hopper或者IDA查看需要下断点的函数的文件偏移
LLDB输入br s -a 'app二进制偏移+函数的文件偏移'
但是作为传统的方式以上方法存在两个问题
需要hopper或者IDA支持,这两个软件对电脑配置的要求较高,而且反汇编速度较慢。
不能对“已经通过运行时替换函数实现地址的函数”进行拦截
作为一个逆向开发新手,特分享一个以小技巧,可以免除对反汇编软件的依赖,而且拦截成功率更高。
LLDB连接到程序
找到需要下断点的类,如MMServiceCenter,然后在LLDB命令行输入po [MMServiceCenter _shortMethodDescription]。以微信的[MMServiceCenter getService:]断点为例,操作如下:
image.png
然后在命令行输入b 0x100bd04f0即可实现下断操作,实践效果如下:
image.png
LLDB查找到具体一个方法的内存地址:
po [MMServiceCenter _shortMethodDescription]
po [0x1c003f7a0 _methodDescription]
po [0x1c003f7a0 _ivarDescription]
跟踪查看view的布局结构:
po [0x15de47fa0 _autolayoutTrace]
IWindow:0x15bd31430
| UILayoutContainerView:0x15be35140
| | UINavigationTransitionView:0x15bd2b020
| | | UIViewControllerWrapperView:0x15bd475e0
| | | | UIView:0x15be48700
| | | | | UIView:0x15be488f0
| | | | | | UIImageView:0x15be48ae0
| | | | | | UIButton:0x15be4b220
| | | | | | | UIButtonLabel:0x15bd356d0
| | | | | | UILabel:0x15be4bae0
| | | | | | UIButton:0x15be4bdc0
| | | | | | | UIButtonLabel:0x15bd36700
| | | | | | UIButton:0x15bd36a00
| | | | | | | UIButtonLabel:0x15bd36d20
查看一个view对象的层次结构:
po [0x15de47fa0 recursiveDescription]
<YJProfileUserBaseInfoView: 0x15de47fa0; frame = (0 0; 414 64); layer = <CALayer: 0x1c4039ae0>>
| <UILabel: 0x15de483c0; frame = (20 30; 330 28); text = '晴天'; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x1c42803c0>>
| | <_UILabelContentLayer: 0x1c44252e0> (layer)
| <UIButton: 0x15bd9e560; frame = (308 30; 86 28); hidden = YES; opaque = NO; layer = <CALayer: 0x1c063cf60>>
| | <UIButtonLabel: 0x15bd9ef40; frame = (14.3333 5.33333; 57.3333 17); text = '点击登录'; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x1c0482670>>
| | | <_UILabelContentLayer: 0x1c44262a0> (layer)
| <UIImageView: 0x15bd9f240; frame = (360 27; 34 34); clipsToBounds = YES; opaque = NO; gestureRecognizers = <NSArray: 0x1c065c650>; layer = <CALayer: 0x1c063ee80>>
| <UIImageView: 0x15bd9f470; frame = (359 17.6667; 36 45); hidden = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1c063efe0>>
| <UIImageView: 0x15bd9fea0; frame = (377 42; 22 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1c063f460>>
逆向分析工具
工具分类 | 工具名称 |
---|---|
越狱工具 | 盘古、pp越狱助手 |
砸壳工具 | dumpdecrypted、Clutch、Frida-ios-dump(推荐) |
查看头文件工具 | class-dump |
反汇编工具 | Hopper, IDA Pro |
调试器 | Cycript, gdb |
UI分析工具 | Reveal |
集成开发工具 | Theos ---> iOSOpenDev ---> MonkeyDev |
网络分析工具 | Charles、Wireshark |
最好的论坛了
Other:
学习资料资源入口整理(一起整理啦)
无须越狱、自动集成、只需要一个砸壳的应用---MonkeyDev
我的debug速查表(入门级)My debug cheatsheet
逆向学习笔记1 —— 工具安装
逆向学习笔记
实例
我是怎样一步一步实现微信自动抢红包的?
钉钉红包插件逆向开发实践
PP逆向分析之钉钉抢红包插件的实现-iOS篇
免越狱版 iOS 微信抢红包插件
去掉腾讯视频啰嗦广告
逆网易云音乐 vip下载
逆向微信消息界面实现(只是界面UIKit哦)
网友评论