惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V2EX - 技术
V2EX - 技术
T
Troy Hunt's Blog
The Last Watchdog
The Last Watchdog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
S
Secure Thoughts
Hacker News - Newest:
Hacker News - Newest: "LLM"
WordPress大学
WordPress大学
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 司徒正美
TaoSecurity Blog
TaoSecurity Blog
博客园 - Franky
有赞技术团队
有赞技术团队
Google Online Security Blog
Google Online Security Blog
罗磊的独立博客
L
LINUX DO - 最新话题
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
NISL@THU
NISL@THU
小众软件
小众软件
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Recent Commits to openclaw:main
Recent Commits to openclaw:main
K
Kaspersky official blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
W
WeLiveSecurity
SecWiki News
SecWiki News
Google DeepMind News
Google DeepMind News
O
OpenAI News
V
V2EX
AI
AI
博客园_首页
Apple Machine Learning Research
Apple Machine Learning Research
大猫的无限游戏
大猫的无限游戏
美团技术团队
C
Cyber Attacks, Cyber Crime and Cyber Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Security Archives - TechRepublic
Security Archives - TechRepublic
博客园 - 三生石上(FineUI控件)
G
GRAHAM CLULEY
月光博客
月光博客
T
Threatpost
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
V
Vulnerabilities – Threatpost
Last Week in AI
Last Week in AI
爱范儿
爱范儿
C
CXSECURITY Database RSS Feed - CXSecurity.com
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Cloudbric
Cloudbric
酷 壳 – CoolShell
酷 壳 – CoolShell
The Hacker News
The Hacker News
N
News | PayPal Newsroom
Know Your Adversary
Know Your Adversary

isaced

使用 TypeScript 构建的 appstore-connect-sdk 归档 我用 SwiftUI 写了一个 V2ex 客户端 Docker 容器化多应用部署 Swift Server-side SDWebImage 为什么无法读取 webpmux 生成的 WebP 动图? [译] 探索 Swift 4 中新的 String API 对一个 Django 站点做 ab 压力测试 fir-mac 开发笔记 iOS10 Safari 引导用户信任企业签名 Swift Web 开发之 Vapor - 模版 Leaf(三) Swift Web 开发之 Vapor - 路由(二) HoloLens 初体验 Swift Web 开发之 Vapor - 入门(一) Jenkins for iOS 搭建日记 Xcode 使用 Configuration 来配置不同的项目环境 图床从SAE迁移到七牛 给 UIProgressView 脱掉那层微弱的渐变 初用 CocoaAsyncSocket 记一次 SQLite 性能优化 有多色 - 开发小记 海岛风情 - 泰国普吉岛六日游 EGOCache 源码解析 日语五十音假名临摹校验算法 [iOS] UITextView 追加文字自动跳到顶部解决方法 Cocoa 新的依赖管理工具:Carthage 新年快乐! 博客主机换到搬瓦工 写了个iOS小游戏:有多色 iOS 后台任务之 Long-running background task 悄悄的就必须用 XCode 5.1.1 上传了! HTTP Content-type 与 AFNetworking Objective-Cloud 初体验(1) 掌中站上架小记 NSLoger 上线了 Python Markdown 做语法限制 Nginx + Gunicorn + Django 部署小记 用Shell脚本批量裁剪App Icon各个尺寸 LaunchRocket使用小记 用宏提速NSCoding 2014新年伊始:近期读过的好文推荐 [iOS] stringWithFormat 和 initWithFormat 有何不同? Apache + Flask + mod_wsgi + Koding 部署小记 收集几个Objective-C的HTML解析库 NSMapTable: 不只是一个能放weak指针的 NSDictionary 2013,再见! Emlog到Typecho的迁移工具:emlog2typecho [iOS]给上拉下拉刷新PullToRefresh做本地化 [iOS]代码推荐:大图缩放视图 - Vertigo iOS:hidesBottomBarWhenPushed的正确用法 Xcode 5新的Interface Builder,你准备好了吗? [翻译]如何使用Django创建简单的博客 我的Mac音乐播放器 初识 NSDataDetector Objective-C 计算代码运行时间 WordPress上传文件自动重命名 iOS:仿jing.fm的音乐播放视图 我的啃黑苹果之路 关于 搜索 项目
iOS HOOK 注入与重签名
2016-07-10 · via isaced

起因是在虾神的公众号上看到一篇文章 《Pokemon Go 锁区破解》,正好周围几个小伙伴正在玩这游戏,便仔细研究了下所谓的破解锁区。这次锁区其实是 GPS 锁区,游戏开发商为了缩小初始运营范围,在中国范围内都无法正常游戏,也就是服务端通过客户端发送的定位位置数据来判断是否让该玩家继续游戏。文章中介绍的原理就是利用 OC Runtime Method Swizzling 对原应用进行重写 CLLocation 的 coordinate 方法返回自己想要的经纬度信息,以达到欺骗服务端进行游戏,然后进行重签名打包。最让人激动的是最终的应用可以在非越狱的设备上运行,于是已阻止不了向前探索的脚步。

游戏作弊是不支持的,但是技术研究可以有!

流程

大致流程如下,后面会详细讲解每一步:

  1. 脱壳:拿到解密后的 .ipa
  2. 注入:对原应用修改和注入
  3. 重签名:用自己的证书签名
  4. 打包:压缩成 .ipa 进行安装

脱壳

由于手里没有越狱机子,也没有进行脱壳试验,按 [Urinx/iOSAppHook] 中提到的方法直接从 xx 助手 市场里下载越狱应用可用。如果自己有越狱设备的话可以用 dumpdecrypted 进行砸壳。

MachOView

注入

如果是拿到 .ipa,进行解压即可找到 Payload 文件夹,可安装 iOSOpenDev 来创建工程,使用 CaptainHook 轻松方便写 Hook 代码,iOSOpenDev 中已经集成了 CaptainHook ,具体相关代码可以参考 [PokemonHook] 。

生成动态库(.dylib)后使用 yololib 工具进行注入,不知为何使用 [KJCracks/yololib] Release 中的 yololib-Mac 最终会在设备上闪退,使用 Urinx/iOSAppHook 则没有问题,一条命令对 .app 中的二进制进行 .dylib 注入,再把注入的 .dylib 拖到目录里即可。注入成功后可以用 MachOView 程序查看整个 MachO 文件的结构,便可看到注入的 dylib 会在 Load Commands 区段中。

yololib xxx.app/xxx LocationFaker.dylib

重签名

ios-app-signer

重签名也是很重要的一个步骤,签名错误或者失败都会导致应用无法安装使用。我比较喜欢用图形化界面的 iOS App Signer 来重签名,自动加载出本机的证书和 PP 文件,相当方便;当然也有命令行工具,比如 Urinx/iOSAppHook 中的 AppResign 或者 Fastlane sign ,前提还是一样需要把设备的 UDID 加进 Provisioning Profile 中,一般来说 Bundle identifier 不需要改变即可,也有应用内做了相关检测手段导致重签名或者更改 Bundle identifier 后无法使用的情况,那就需要更多其他的手段进行反攻了。

打包

对 Payload 文件夹右键压缩,改名 xx.ipa 即可,推荐用 Xcode (Window->Device) 安装,失败还有错误信息可看。

另外在这里推荐一个 Quick Look 插件用来快速预览 .mobileprovis 和 .ipa 的证书、签名、设备等信息,对着文件按下空格就能看到非常方便。 chockenberry/Provisioning

provisioning-quick-look

参考

推荐

  • iOSRE - iOS 逆向论坛,学习逆向有很多干货