在⾮越狱⼿机上进⾏AppHook
0x00序
冰指的是⽤户态,⽕指的是内核态。如何突破像冰箱⼀冷笑话谜语大全 样的⽤户态沙盒最终到达并控制如⽕焰⼀般燃烧的内核就是《iOS冰与⽕之歌》这⼀
系列⽂章将要讲述的内容。但在讲主线剧情前,我们今天先聊⼀聊分⽀剧情-在⾮越狱的iOS上进⾏AppHook。利⽤这个技术,你可以在⾮
越狱的iOS系统上实现各种hook功能(e.g.,微信⾃动抢红包,⾃动聊天机器⼈,游戏外挂等),但写这篇⽂章的⽬的并不是⿎励⼤家使⽤外
挂,更不是⿎励⼤家去卖外挂,所以千万不要⽤这个技西方哲学智慧 术去做⼀些违法的事情。
《iOS冰与⽕之歌》系列的⽬录如下:
iv怎么订电影票 e-CPwnandiOSarm64ROP
2.在⾮越狱的iOS上进⾏AppHook(番外篇)
3.█████████████
4.█████████████
5.█████████████
0x01Mach-OLC_LOAD_DYLIBHook
提取ipa中的⼆进制⽂件->修改⼆进制⽂件的LoadCommands列表,加⼊要hook的dylib–>在函数constructor函数中完成对特定
函数的hook->对修改后的ipa进⾏签名,打包和安装。
⾸先我们先来看⼀下我们将要进⾏注⼊的⽬标app,这个app⾮常简单,就是调⽤上⼀章讲过的talker这个类输出⼀句”Hello,iOS!”。
在Products⽂件夹中我们能够看到这个⽂件,也就是编译完后的app:
其实就是个⽂件夹,⾥⾯可以看到很多的资源⽂件(签名信息,图⽚等),但最重要的东西就是与⽂件夹同名的IceAndFire
这个⼆进制⽂件了。我们可以⽤xxd命令来看⼀下⾥⾯的内容:
这个⼆进制⽂件⾥保存了IceAndFire这个app的所有逻辑,但是直接看⼆进制编码太⾟苦了,这⾥我推荐⼀个叫做MachOView的软件(可以
在我的github⾥下载),通过这个软件就可以看到整个MachO⽂件的结构了:
在LoadCommands这个数据段父母宝贝 ⾥,我们可以看到IceAndFire这个⼆进制⽂件会在启动的时候⾃动加载Foundation,等动态
库。如果我们对MachO这个⽂件的LoadCommands结构体进⾏修改,是不是就可以让IceAndFire这个app在启动的时候加载我们⾃定义的
⽤来hook的dylib呢?没错,这个想法是可⾏的。并且我们只要在dylib的构造函数⾥完成相应的hook逻辑,就可以在app启动的时候对指定
函数进⾏hook操作了。
编译好yololib后,我们只需要在mac上执⾏:
命令即可完成dylib的注⼊,如图所⽰:
现在我们再⽤MachOView看⼀下IceAndFire这个⼆进制⽂件就会看到已经被我们成功注⼊进去了:
“@executable_path/”的意思是⼆进制⽂件会在当前⽬录张保仔 下对进⾏加载,所以我们编译好的要和⼆进制⽂件⼀
起放到⽂件夹⾥,这样才能保证我们在运⾏app的时候能够被正确的加载。
0x02CaptainHookforDylib
修改好了app⼆进制⽂件的LoadCommands结构体后,我们再来看看如何构造进⾏hook的第三⽅dylib。因为app⾃⼰肯定不会主动调⽤第
三⽅dylib中的函数,所以如果我们想要让第三⽅dylib进⾏hook操作就要把hook的逻辑写到构造函数⾥。实现构造函数很简单,只要在函数
前声明”__attribute__((constructor))static”即可,我们先写个”Hello,IceandFire!”测试⼀下:
编译好dylib⽂件后,我们将这个dylib⽂件与app⼀起签名、打包、安装。然后我们运⾏⼀下程序就可以看到我们注⼊的dylib库已经在程序启
动的时候成功加载并执⾏了。
下⼀步就是要实现对特定函数的hook。在这⾥我推荐使⽤CaptainHook这个framework。作者已经帮我们实现了hook所需要的各种宏,只要
按照如下步骤就可以完成针对特定函数的hook:
1.使⽤CHDeclareClass()声明想要hook的class
2.在构造函数中⽤CHLoadClass()或CHLoadLateClass()加载声明过的class
3.使⽤CHMethod()hook相应的method
4.在CHMethod()中可以使⽤CHSuper()来调⽤原函数
5.在构造函数中使⽤CHClassHook()来注册将要hook的method
⽐如我们想要hookTalker这个class⾥的saymethod,让app在调⽤say的时候修改method的参数,让say的话都变成”Hello,Android!”,我们
只需要这样编写dylib的源码:
1
2
.
/yololib
[binary][dylib
file
]
.
/yololib
[被插⼊dylib的⼆进制⽂件][要插⼊的dylib]
CHMethod()这个宏的格式是:参数的个数,返回值的类型,类的名称,lector的名称,lector的类型,lector对应的参数的变量名。
CHClassHook()这个宏的格式是:参数的个数,返回值的类型,类的名称,lector的名称。
编写完代码后,我们对源码进⾏编译,将⽣成的dylib⽂件与app⼀起签名、打包、安装。然后我们运⾏⼀下程序就可以看到我们注⼊的dylib
库已经成功的hook了saymethod了,原本应该输出”Hello,iOS!”,已经被我们成功的变成了”Hello,Android!”:
0x03签名、打包和安装
1
2
3
4
5
6
7
8
9
1
0
1
1
1
2
1
3
1
4
1
5
1
6
#import
CHDeclareClass(Talker);
CHMethod(1,
void
,Talker,say,
id
,arg1)
{
NSString
*tmp=
@"Hello,Android!"
;
CHSuper(1,Talker,say,tmp);
}
__attribute__((constructor))
static
void
entry()
{
NSLog
(
@"Hello,IceAndFire!"
);
CHLoadLateClass(Talker);
CHClassHook(1,Talker,say);
}
我们知道越狱后的iPhone有⼀个很重要的特性就是可以关闭app的签名校验,关掉签名校验后,AppStore上的app(⽆论是收费的还是免费
的)就可以随意盗版并且免费安装了。但是在⾮越狱的iPhone上,系统要求app必须要有合法的签名,负责⽆法进⾏安装。其实除了
AppStore上的app有合法的签名外,我们还可以使⽤开发者证根芹菜 书或者企业证书来让没有合法签名的app拥有合法的签名。
当我们拥有开发者帐号并且在机器上安装了证书的话,就可以在KeychainAccess这个⼯具中看到我们的签名信息:
我们接下来要⼲的事情就是使⽤这个开发者证书来对我们修改后的进⾏签名。步骤如下:
1.⾸先先保证⽂件夹下有正确的provision⽂件:
如果没有的话,可以去苹果的开发者中⼼()⽣成。如果是个⼈开发者要注意将iOS设备的UDID加到开发者
的设备列表中再⽣成provision⽂件,如果是企业证书则没有设备数量的限制。
2.正确的编写签名时使⽤的:
这⾥最需要注意的就是application-identifier要包含正确的TeamID(可以在开发者中⼼查看)和对应的BundleID。
3.使⽤codesign对hook的dylib进⾏签名:
4.使⽤codesign对app进⾏签名:
5.使⽤xcrun将打包成:
6.使⽤itunes或者mobiledevice进⾏安装。
成功的话会显⽰”OK”。然后就可以在⾮越狱的⼿机上使⽤我修改后的app了。
0x04Class-dump和ida
codesign-f-s
"iPhoneDeveloper:zhengmin1989@(XXXXXXXXX)"
/hook1
.dylib
codesign-f-s
"iPhoneDeveloper:zhengmin1989@(XXXXXXXXX)"
--
xcrun-sdkiphoneosPackageApplication-
v
-o~
/iOSPwn/hook/github/IceAndFire
.ipa
通过上⾯⼏节的介绍,我们已经将⾮越狱apphook的流程⾛过⼀遍了,但这时候有⼈会问:”你hook的app是⾃⼰写的,你当然知道应该
hook哪个函数了,我想hook的app都是AppStore上的,并没有源码,我该怎么办?”其实这个问题也不难解决。只要⽤好class-dump和ida
即可。
Class-dump是⼀款可以⽤来dump头⽂件⼯具:
⽐如我们想要dumpXXX的头⽂件,只需要执⾏:
经过dump后,所有的头⽂件都会保存在”header”这个⽂件夹中:
每个头⽂件中都包含了类和⽅法的声明:
可以看到,利⽤class-dump能够很好的帮助我们了解app的内部结构。但是class-dump只能获取app的头⽂件,并不能知道每个⽅法具体的
逻辑,这时候我们就需要⽤到ida了。
利⽤ida我们可以获取到⼀个⽅法具体的逻辑,不过这需要你对arm汇编有⼀定的了解:
⽐如上图所⽰的函数就是调⽤NSLog(@”%@n”)来向控制台输出参数的内容。只有了解了某个函数具体是做什么的,我们能才知道如何hook这
个函数。
0x05微信⾃动抢红包的原理
⾄于微信⾃动抢红包的插件⽆⾮就是hook了接收微信消息的函数,然后判断消息中有没有红包,有的话就直接调⽤打开红包的函数即可。但
因为这篇⽂章的主要⽬的是介绍⾮越狱⼿机的apphook,⽽不是⿎励⼤家使⽤外挂,所以具体实现的细节就不公布了,有兴趣的同学可以⾃
⼰尝试写⼀个。虽然效果没有机械流那么酷炫,但的确省时省⼒啊。
0x06总结
.
/class-dump
-H-oheaderXXX
通过这篇⽂章我们可以看到,即使是在⾮越狱的iOS系统上依然可以玩出很多的花样,因此各⼤it⼚商不要盲⽬的相信⾮越狱iOS系统的安全
性。针对红包和⽀付等⽐较重要的逻辑⼀定要有混淆和加固,针对app本⾝⼀定要有完整性校验。不然好⼼的⽩帽⼦可能只是写个⾃动抢红
包的外挂玩玩,但是⿊客就可能利⽤这种技术开发各种外挂来牟取暴利或者让⽤户在⽆意当中安装上带有后门的app,随后会发⽣什么就只
有天知道了。
最后感谢我的同事⿊雪和耀刺对这篇⽂章的帮助和指导。
PS:⽂中涉及代码可在我的github下载:
本文发布于:2023-03-23 14:04:43,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/1679551485357200.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:自动抢红包.doc
本文 PDF 下载地址:自动抢红包.pdf
留言与评论(共有 0 条评论) |