iOS 非越狱下的代码注入
目录
- 免责声明
- 非越狱下的代码注入步骤
- 使用 ViewDebug 和导出的 Objective-C 类的头文件分析目标 App
- Objective-C 方法常见的 Hook 方式
免责声明
本文为一篇严肃的学术研究型文章,文中所提及的注入手段仅供 iOS 底层技术的学习与交流,不针对任何公司与 App。
为防止读者将本文用于商业或者非法用途,本文不提供任何注入工具与重签名脚本。
读者如果将本文用于商业或者非法用途,则所产生的后果由读者自行承担。
非越狱下的代码注入步骤
材料与工具
WeChat.ipa
包(已脱壳)class-dump
与Sublime Text
yololib
与MachOView
XCode
与iPhone
- 重签名脚本
① 解压
WeChat.ipa
包,获取WeChat
的MachO
文件,使用class-dump
从MachO
文件中导出Objective-C
类的头文件将导出的
Objective-C
类的头文件拖入Sublime Text
中,以备后面分析 App 时查找和使用② 新建
iOS - App
工程InjectCodeDemo
在工程
InjectCodeDemo
的根目录下新建IPA
目录,并将已脱壳的WeChat.ipa
拖入IPA
目录中③ 在工程
InjectCodeDemo
中新建动态库HzpService.framework
和HcgService.dylib
关于
HzpService.framework
:- 新建注入工具类
HzpInjectTool
关于
HcgService.dylib
:- 新建注入工具类
HcgInjectTool
- 将
Target(HcgService) - Build Settings - Architectures - Base SDK
修改为iOS
- 将
Target(HcgService) - Build Settings - Signing - Code Signing Identity
修改为iOS Developer
- 新建注入工具类
④ 在工程
InjectCodeDemo
中导入新建的动态库HzpService.framework
和HcgService.dylib
并修改Target(InjectCodeDemo) - Build Phases
⑤ 将重签名脚本拷贝到工程
InjectCodeDemo
的根目录下
并在Target(InjectCodeDemo) - Build Phases
中添加New Run Script Phase
注意:
Run Script
的顺序需要在Embed Frameworks
之前
即需要先使用WeChat.app
覆盖InjectCodeDemo.app
,然后再将动态库拷贝到WeChat.app/Frameworks
目录下
⑥ 连入
iPhone
真机,并将Target(InjectCodeDemo)
改为真机调试⑦ 注意:
App
安装期间需要保持iPhone
处于开启状态
否则会提示Unlock iPhone to Continue
- 因为
XCode
编译阶段动态库拷贝机制的问题
所以每次在运行 App 之前,都需要使用Command + Shift + K
清空 XCode 缓存
以保证(执行脚本)和(拷贝动态库)之间相对顺序的正确性
否则会提示The file "InjectCodeDemo" couldn’t be opened because you don’t have permission to view it.
使用 ViewDebug 和导出的 Objective-C 类的头文件分析目标 App
① 分析登录按钮点击事件
登录按钮的类型为
FixTitleColorButton
,继承自UIButton
点击登录按钮将会触发WCAccountMainLoginViewController
类的onNext
方法
通过class-dump
导出的头文件进行验证,确实在WCAccountMainLoginViewController.h
中找到了-onNext
方法
分析账号输入框和密码输入框
账号输入框和密码输入框的类型均为
WCUITextField
,均继承自UITextField
在WCAccountMainLoginViewController.h
中找到了疑似存储账号和密码的成员变量:
存储账号的成员变量:WCAccountTextFieldItem* _textFieldUserNameItem
存储密码的成员变量:WCAccountTextFieldItem* _textFieldUserPwdItem
那么,WCAccountMainLoginViewController
类中存储账号和密码的成员变量(WCAccountTextFieldItem
类型)和ViewDebug
中的账号密码输入框(WCUITextField
类型)之间有什么联系呢?我们尝试在继承链中查找一下:
WCAccountTextFieldItem
继承自WCBaseTextFieldItem
在WCBaseTextFieldItem
中有WCUITextField
类型的m_textField
成员变量
而WCUITextField
又继承自UITextField
,UITextField
可以通过text
属性拿到输入框中的内容
理一下登录按钮与账号密码输入框之间的联系
- 点击登录按钮将会触发
WCAccountMainLoginViewController
类的-onNext
方法 - 账号密码输入框是
WCAccountMainLoginViewController
类中两个WCAccountTextFieldItem
类型的成员变量(_textFieldUserNameItem
、_textFieldUserPwdItem
) - 在
-onNext
方法中可以拿到成员变量_textFieldUserNameItem
、_textFieldUserPwdItem
WCAccountTextFieldItem
继承自WCBaseTextFieldItem
WCBaseTextFieldItem
中有WCUITextField
类型的成员变量m_textField
而WCUITextField
又继承自UITextField
UITextField
可以通过text
属性拿到输入框中的内容
- 点击登录按钮将会触发
Objective-C 方法常见的 Hook 方式
① 使用 method_exchangeImplementations
备注:
onceToken
应该定义为静态局部变量static dispatch_once_t onceToken;
② 使用 class_replaceMethod
备注:
onceToken
应该定义为静态局部变量static dispatch_once_t onceToken;
③ 使用 method_getImplementation 和 method_setImplementation
备注:
onceToken
应该定义为静态局部变量static dispatch_once_t onceToken;
注意
在
Objective-C
方法中,self
代表当前实例对象或者当前类对象,这种说法不准确
在Objective-C
方法中,self
代表的是当前方法调用者
iOS 非越狱下的代码注入相关推荐
- iOS开发技术之应用代码注入防护
1.介绍 在应用开发过程中,我们需要考虑到应用安全的问题.而应用安全的问题涉及到很多方面的内容,随着iOS系统的不断更新,我们需要在防护的手段上发生一些改变. 如下所示: [1]防止静态分析:代码混淆 ...
- iOS非越狱渠道运营必知的10条
做运营到底是做点啥?入口,转化,留存,掏用户钱,悠忽用户传,靠着用户改. 入口:不断问自己一个问题,用户在哪里?转化,根据入口的用户特性来制定宣传语和着陆页:留存是关键,用户留不下来,推广越快,死得越 ...
- 【干货分享】IOS非越狱渠道运营必知的10条
做运营到底是做点啥?入口,转化,留存,掏用户钱,悠忽用户传,靠着用户改.入口:不断问自己一个问题,用户在哪里?转化,根据入口的用户特性来制定宣传语和着陆页:留存是关键,用户留不下来,推广越快,死得越早 ...
- 专注于非越狱环境下iOS应用逆向研究,从dylib注入,应用重签名到App Hook
专注于非越狱环境下iOS应用逆向研究,从dylib注入,应用重签名到App Hook. 注意!本文所有操作均在以下环境下成功进行,不同平台或环境可能存在某些问题,欢迎大家在issue中提出问题以及相互 ...
- iOS逆向(4)-代码注入,非越狱窃取微信密码
利用LLDB对微信进行分析,然后利用分析的结果,再逐步讲解如何Hook微信的登录过程,截获微信密码. 在上一篇文章(APP重签名)中,已经介绍了如何对APP重签名,并且利用XCode将微信跑起来,既然 ...
- iOS逆向工程——非越狱调试
其实iOS的逆向分析业界已经十分成熟了,网上也有许多有趣的尝试(一步一步实现iOS微信自动抢红包(非越狱).本文着重于如何在非越狱机器上进行调试,出于学习及总结的目的,记录于此. 本文以破解游戏梦幻西 ...
- IOS逆向笔记之HOOK实现(非越狱)
HOOK是越狱的最终目标,目的是给应用添加功能如插件或者是更改应用的某个功能来满足我们的需求,如微信中添加抢红包插件.本文将以最近比较火的"快看"漫画为例子去除付费漫画中的收费弹窗 ...
- iOS安全–在非越狱平台进行越狱开发(附分析流程)
目的:在不越狱的前提下,使用动态库库注入的方式来hook应用的某些函数以篡改应用行为. 需要的工具: 砸壳: dumpdecrypted class-dump: class-dump Cycript: ...
- iOS冰与火之歌番外篇 - 在非越狱手机上进行App Hook(转载)
作者简介:郑旻(花名蒸米),阿里巴巴移动安全部门资深安全工程师,香港中文大学移动安全(Android & iOS)方向博士,曾在腾讯.百度以及硅谷的FireEye实习.在博士期间发表了多篇移动 ...
最新文章
- javascript运动系列第二篇——变速运动
- 二叉树的层序遍历和二叉树的线索化
- python包安装_Python及图像处理相关包安装
- autossh配置socks代理
- python动态心形代码_Python实现酷炫的动态交互式数据可视化,附代码!
- ZOJ 3761 Easy billiards 月赛E DFS
- 固件是通用的吗_冷镦和冷挤压是一回事吗,两者有什么区别?
- 获取当前时间---年月日时分秒------iOS
- Java学习笔记(完结)
- docker-compose中解决depends_on无效问题
- iphone震动反馈怎么设置_苹果魅族都在用的震动反馈 到底是怎样实现的?
- 面向物联网的可重构流式深度卷积神经网络加速器
- 知识树软件的IPO图
- C++入门(六)之String
- 微信服务器保留几年记录_MongoDB日志记录
- 【Ubuntu】SMBus Host controller not enabled(虚拟机进入不了图形界面)
- 微信小程序布局-图片+文字
- 多肉商店html网页代码,[转载]国外多肉植物及种子购买网站(转载)
- Embedding Label Structures:细粒度特征表示的标签结构嵌入
- 微信小程序--页面劫持