iOS 逆向-非越狱手机Hook App

引子


由于对iOS逆向分析很感兴趣,所以也花了很长一段时间学习了iOS逆向相关知识,并积累了一些相关经验,
这几天又到看雪论坛逛了一下,看看最近有没有什么大牛分享心得成果的!还真让我看到一篇有意思的文章【原创】微信双开是定时炸弹?关于非越狱iOS上微信分身高危插件ImgNaix的分析 ,通过读完这篇文章,让我又有了站在巨人的肩膀上,也来探究和学习一下非越狱设备如何Hook App的兴趣了。

思路


越狱和非越狱Hook iOS App的关键就是让App在启动的时候加载自己的dylib。那么在非越狱上加载dylib的思路就是利用:Mach-o LC_LOAD_DYLIB , 在App在被加载的时候,把我们的动态库dylib也一起加载起来。

关于非越狱设备Hook App网上有很多资料,下面摘抄来自阿里安全工程师的博客“iOS冰与火之歌番外篇 - 在非越狱手机上进行App Hook”关于非越狱手机Hook App的思路。也可以在IOS应用逆向工程官方论坛搜索更多关于逆向的资料。

今天我就来介绍一种不需要越狱就能hook iOS app方法,也就是Mach-O LC_LOAD_DYLIB Hook。这种方法是通过修改binary本身来加载第三方dylib并实现hook,具体思路是:

提取ipa中的二进制文件 -> 修改二进制文件的Load Commands列表,加入要hook的dylib –> hook.dylib在函数constructor函数中完成对特定函数的hook->对修改后的ipa进行签名,打包和安装。


工具

MachOView
iReSign
yololib
同步助手(或者pp助手、iTools)

本文实践工程

被注入目标代码工程:AppRe
生成动态库dylib代码工程:dylib


1.目标App

也就是要被注入的App。这里我们自己写一个简单的App,代码非常简单:点击“点击我”按钮弹出一个窗口,显示一句话“Hello iOS!”以及app的bundleid。

- (void)viewDidLoad {[super viewDidLoad];//布局UIButtonself.view.backgroundColor = [UIColor whiteColor];UIButton *button  =[UIButton buttonWithType:UIButtonTypeSystem ];[button setTitle:@"点击我" forState:UIControlStateNormal];[button setFrame:CGRectMake((self.view.frame.size.width-120)/2, (self.view.frame.size.height-40)/2, 120, 40)];[button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];[self.view addSubview:button];
}- (void)buttonClick:(id)sender
{[self say:@"Hello iOS!"];
}- (void)say:(NSString *)string
{NSString *identifier = [[NSBundle mainBundle] bundleIdentifier];UIAlertController *alert = [UIAlertController alertControllerWithTitle:string message:identifier preferredStyle:UIAlertControllerStyleAlert];UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:nil];[alert addAction:okAction];[self presentViewController:alert animated:YES completion:nil];
}

这里写图片描述

2.生成动态库dylib

由上面的代码可知,在viewController类中有一个say的函数,该函数完成了弹窗的功能。
那么我们接下来要做的是,将通过hook viewController 的say方法,把“Hello iOS!”改成“Hello, Android!”

xcode本身不直接提供构建dylib的工程,但是可以通过其他方式来构建,这里也直接使用“iOS冰与火之歌番外篇 - 在非越狱手机上进行App Hook”提供的代码工程直接修改一下。我也是从文中学习到CaptainHook的使用,摘抄下来:

下一步就是要实现对特定函数的hook。在这里我推荐使用CaptainHook这个framework。作者已经帮我们实现了hook所需要的各种宏,只要按照如下步骤就可以完成针对特定函数的hook:

使用 CHDeclareClass() 声明想要hook的class

在构造函数中用 CHLoadClass() 或 CHLoadLateClass() 加载声明过的class

使用CHMethod() hook相应的method

在CHMethod()中可以使用CHSuper()来调用原函数

在构造函数中使用CHClassHook()来注册将要hook的method

CHDeclareClass(ViewController);
//参数个数、返回值类型、类名、selector名称、selector的类型、selector对应的参数的变量名
CHMethod(1, void, ViewController, say, id, arg1)
{NSString* tmp=@"Hello, Android!";CHSuper(1, ViewController, say, tmp);
}__attribute__((constructor)) static void entry()
{CHLoadLateClass(ViewController);CHClassHook(1, ViewController,say);
}

注意:

  • 生成动态库dylib使用的签名方式要和你要注入dylib的可执行文件重签名后的签名方式一致。

通过“iOS冰与火之歌番外篇 - 在非越狱手机上进行App Hook”提供的源码生成的dylib注入app之后,会导致App闪退,通过调试和各种折腾发现在生成dylib工程中配置正确的Entitlements.plist即可解决。
图片1

2.注入dylib

注入dylib这一步,如果要深入理解的话,就需要学习mach-o文件结构相关知识了。这里只需知道在mach-o文件结构的Load Commands 中的如何LC_LOAD_DYLIB指定了一个要加载的dylib,那么App在启动的时候就会自动加载该dylib。

注入dylib实际就是修改mach-o的结构体,插入一条新的load command 即LC_LOAD_DYLIB。这里也使用大神提供的工具yololib来进行修改mach-o结构体注入dylib,使用很简单。也可以使用二进制编辑器010Editor来进行修改,手动修改会比较麻烦。

./insertdylib AppRe hook1.dylib

这里,我将该工具yololib重新命名为insertdylib,方便自己快速记忆。
这里写图片描述

注入后我们使用machOView工具可以发现mach-o结构体成功被插入了一条load command(如果你熟悉命令行也可以使用otool查看)。

这张图是旧的图O(∩_∩)O哈哈~,因为machOView有时会闪退,该死的,写该文章的时候就一直闪退。图片中dev_sfa.png,实际也是hook.dylib重命名过来的,伪装成一个png图片!!
图片3

注意:

这里有个坑!在执行insertdylib的两个参数binary文件dylib文件,不要带上全路径。要把dylib文件拷贝到AppRe.app目录,然后cd 到AppRe.app目录,然后直接insertdylib binaryfile dylibfile如果带上了全路径那么路径也被插入到mach-o结构体中,导致注入失败。

3.重签名

当AppRe.app注入之后,剩下的就是打包和重签名了!对于重签名我推荐大牛的iReSign

把AppRe.app 转成ipa 很简单,新建一个Payload目录,把AppRe.app放到Payload目录里面,在执行下面命令即可

zip -qry AppRe.ipa Payload/

进行重签名.步骤如下:

  1. 拖拽进对应的AppRe.ipa文件到iReSign中.

  2. 拖拽进对应mobileprovision文件,这里我使用的是dev的开发授权文件

  3. “entitlements.plist的路径”可以不填,在iReSign源码中看出来,iReSign会自动成成一个entitlements.plist文件的。

  4. 勾选修改ID。 即修改Info.plist的bundle identifier 。因为我们一般情况下是没有原App的证书的,所以需要修改bundle identifier

  5. 选择对应的签名。这里的签名一定要和生成dylib的时选择的签名是一致的!这里我使用的是dev的签名

  6. 点击“重新签名!”,会在ipa所在目录重新生成一个AppRe.-resignipa的包。

这里写图片描述

4.安装

使用同步助手或者pp助手都可以,拖拽安装到手机并运行!
这里写图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/34348.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

彻底告别等待越狱!不越狱安装下载的IPA,iPhone 4S iOS5已测!!希望大家支持!

希望这个教程能够真正帮助到想要测试的人,毕竟通过这个办法可以不越狱安装绝大多数IPA。第一次写教程,难免有错,望包容~ 我搜过论坛,发现有人在6月份就开始发了教程,但是都含含糊糊,并没有说清楚&#xff…

苹果的反跟踪新功能大受欢迎,你更新了吗?

微信搜索逆锋起笔关注后回复编程pdf领取编程大佬们所推荐的 23 种编程资料! 作者 | 罗燕珊 Facebook 担忧 iOS 14.5 将大幅影响收入,并不是没有道理的。在不久前的 4 月 27 日,苹果正式推送了 iOS 14.5,而此次更新最受关注的变化是…

Apipost:不登录、离线脱机都能用!

现在市面上很多产品,基本上都会强制用户登录使用,虽然大多数人都已经司空见惯,但是心里属实会有点膈应:毕竟很多强制登录都是为了更多获取用户信息。 对于很多用户而言,我们对很多新产品可能只是想先体验一下&#xf…

批量给TXT文档插入带标题合成图片-Chatgpt生成TXT文档配图神器

1、我们用《Chatgpt 3.5-turbo软件》批量生成txt文档,但是这样txt文档里不带图片,直接发布到网站上,光有文字没有图片,效果也不是很理想,就需要一款配图软件。 2、提高文章的可读性和吸引力:插入图片可以丰…

小文智能宣布接入ChatGPT,智能化客户服务,开创全新用户体验

小文智能是一家致力于用AI技术解放劳动力的公司,最近我们接入了ChatGPT技术,深度探索AI在智能对话机器人领域应用的更多可能,这将为我们的客户带来更为优质的人机对话服务和全新的用户体验。 ChatGPT是一种基于人工智能的自然语言处理技术&a…

深度分析C3.ai的投资前景,股价暴涨200%后,未来是否还会继续上涨?

来源:猛兽财经 作者:猛兽财经 C3.ai(AI)是Forrester Wave在企业AI领域的领导者。该公司在开发人工智能“平台”方法方面走在了时代的前面,在能源领域、航空航天和国防等各个行业都有大量应用。 人工智能行业在2022年的市场规模已经达到了1365…

“千年老二”Bing要翻身?

微软推出新版Bing和Edge,打响互联网巨头AI大战的第一枪,首轮赛跑定位大众最常接触的搜索引擎和浏览器。 Statcounter数据显示,全球搜索引擎市场份额中,谷歌占92.9%,Bing仅占3.03%,剩余不到5%,留…

李彦宏解读百度电话会议:文心一言会更适合中国市场

雷递网 雷建平 2月23日 百度(NASDAQ:BIDU,HKEX: 9888)昨日发布财报。2022年,百度实现营收1236.75亿元,归属百度的净利润(非美国通用会计准则)206.8亿元,同比增长10%。 百…

百度财报解读:营收持平净利增,“文心一言”站C位

ChatGPT之火,点燃了投资者对AI赛道的热情。 而自百度宣布生成式AI产品“文心一言”(ERNIE Bot)将于3月推出以来,这家公司一直处于市场关注的焦点。 2月22日,百度发布了2022年第四季度及全年财报。财报显示&#xff0c…

2023年Q1美团财报解读:拨开云雾 始见月明

原文出处:走马财经 5月底,随着京东、阿里巴巴、腾讯、快手、拼多多、美团等相继发布财报,中国互联网主流大公司的财报发布季结束。 一方面他们体量够大,另一方面他们要么深耕零售,要么与零售、消费息息相关&#xff…

B站电话会议解读:今年整体亏损更明显收窄 2024年盈亏平衡

雷递网 雷建平 3月3日 哔哩哔哩(NASDAQ: BILI,HKEX:9626;简称“B站”)昨日公布截至2022年12月31日的第四季度和全年财务报告。财报显示,2022财年B站总营收219亿元,同比增长13%。 B站2022年增值服务业务收入…

两个月 8 万行代码, 我是如何写出 GPT-Runner 直接对话文件和管理运行 AI 预设的

前言 实时对话代码库?? 我是第一批 copilot 内测用户,早在 2021 年 11 月我就开始体验 copilot 了。在 chatgpt 出来第二天我就注册并体验了。 可以说别人还在农耕时代我就早早地用上了蒸汽机。这让我在开发效率上获得了巨大的优势&#x…

Spring Boot 3.1 正式发布,更新了一大批新特性。。学不动了!

点击关注公众号,Java干货及时送达 学习 Spring Cloud 微服务的正确姿势! 用上 ChatGPT 啦,强的离谱! 终于把 Spring Boot 3.0 写成书了! Spring Boot 3.1 正式发布 大家好,我是R哥。 上一篇:Spr…

图谱实战 | Shopee 多语言商品知识图谱技术构建方法和应用

转载公众号 | DataFunTalk 导读 Shopee 是一家服务于全球多个市场的电商平台,致力于为消费者提供更加便捷,安全,快速良好的消费体验。Shopee 深耕多种不同的语言和市场,在这种国际化的服务平台上,需要处理多语言和混合…

前沿对话:中国AIGC新机遇,如何掘金大模型和应用双赛道

3月29日消息,首届中国AIGC产业峰会在京举行,大会由量子位主办,聚集起了领域内产学研代表,分享和探讨了包括大模型、生成式AI、ChatGPT等在内时下热议趋势和话题。 图片来源:由无界AI生成 在题为《中国AIGC新机遇》的圆…

【你问我答】与ChatAI智能对话—AI应用研习社

ChatGPT是一种基于深度学习的自然语言处理模型,它可以用于聊天机器人、智能客服、语音助手等多种应用场景。ChatGPT的核心技术是GPT(Generative Pre-trained Transformer),它是一种非常强大的语言模型,可以生成高质量的…

chatgpt赋能python:Python做聊天程序:打造智能交流

Python 做聊天程序:打造智能交流 Python 是一种易于学习、灵活性强、最近几年得到广泛应用的编程语言。在当今数字化时代,即便是日常生活中我们都需要与人交流,但人们社交媒体的繁荣已经印证了人们对在线交流工具的需求。以下将对 Python 如…

Android性能分析之---卡顿分析

一、性能分析---场景 低性能的APP常见的表现有启动/界面切换慢、动画掉帧、卡顿(启动卡,点击按钮卡,进入新页面卡等)、耗电,甚至出现应用无响应、程序崩溃的现象。当我们着手解决这些性能问题时,面对的第一…

Android检测应用卡顿

当应用发生卡顿时,我们如何得知是什么原因导致的呢?是机器性能差,还是代码问题,抑或是其他应用抢占CPU资源问题呢?特别是概率比较低,难以复现的卡顿问题。使用BlockCanary库可以帮助你记录应用发生卡顿时的…

Android进阶之用起来很卡,解决方法

最近开始安装使用android studio,痛苦的发现安装或者后期升级后as运行时非常的卡。于是,深入的研究解决方法并不断的尝试,最后总结出如下的两点。 一、工具软件配置 1、解决网络连接问题 (1)问题描述 检查你的 Andr…