优雅的在64位上Hook MobileGestalt(或一部分其他短函数)

我说真的。硬编码所有系统版本地址的黑灰产真是努力Cry

起源于下午闲的没事的个人Research,这一思路我首先在数月前在我的博客上提到过 http://mayuyu.io/2017/04/05/2017-04-04-Random-Thoughts-On-Hooking-Short-Functions/

因为MG函数的特征非常固定。即MGCopyAnswer的第一个branch为真实跳转地址。所以我们可以通过内嵌Capstone Engine来实现自动判断。而非黑灰产努力cry的硬编码所有系统offset再加几十个switch case

所以实现步骤即为:

  • 获取函数实现地址
  • 开始CSE解码并计算第一个分支指令
  • 对目标地址使用MSHF
  • 开始刷墙赚钱


PoC代码:
(PoC的意思是 PROOF OF CONCEPT )
https://github.com/Naville/MobileGestaltHooking

你可以在我的博客上看到更多 http://mayuyu.io/2017/06/27/HookingMGCopyAnswerLikeABoss/

1 个赞

已修正昨天没好好读汇编也没认真测试搞出的错。应该是第一个branch

disasm的参数可以修改因为我们不需要disasm那么多指令。
当然带来的性能影响也微乎其微其实无所谓

对于MGCA, 其实99%的情况只需要解析 B 这一条指令, 手动写几行代码来解析也足够

玩了一把 发现这行log注释掉就闪退 log出来就ok是什么情况 还有想回车换行一回车就回复出去了 尴尬

除了要hook MobileGestalt的一些参数外,也需要改USB串口,IOKit驱动核心函数:IONotificationPort,这样插上itunes显示的序列号和UDID都是更改过的数据,对于养号,一键新机,aso都是很有用处。

2 个赞

真他妈惊了卧槽。

不不不我就是瞎玩我对这些都没啥兴趣呢

张总 淡定 have 啊 try 我是不会骗人的,总感觉简单的现象背后有个大坑

我知道啊。我的意思也是为啥不log就崩所以真他妈惊了卧槽

PC连接主要是lockdownd提供的数据, HOOK这个进程才是关键