文档章节

64位IOS系统中敲壳提取32位程序

kingsOSZT
 kingsOSZT
发布于 2015/09/21 12:20
字数 1214
阅读 817
收藏 0

测试机一直是5s和6,Clutch敲壳,实际是一个内存dump的过程,所以每次敲壳后的程序载入IDA都不能开心的F5来查看交叉引用以及简要逻辑。


终于决定要搞下这个坑,发现竟然并不是太简单的事情,或许还是IOS的相关知识掌握的不多。


首先,我们查找到lipo这个东西。lipo是command-tools里面的工具,之前或许是随着xcode一起下发的,貌似某个6.x的版本之后,就独立了出来,需要单独下载。

xcode-select --install

此处也是一个坑,为了文件交换的方便,我使用的是一个9.8的mac虚拟机,里面的xcode也是很早期的了,所以lipo -info查看fat文件时,并没有显示出arm64的结构。


lipo工具可以合并也可以拆分,这里我们需要的是拆分功能。

lipo xxx -thin armv7 -output xxx.armv7

thin功能,可以可以拿到一个只包含armv7的版本,这样重新替换原有app,就可以以32位方式进行运行,进行内存dump后,也就拿到了32位程序,看起来好像很简单。


然后替换后的程序是不可以执行的,查看crash信息,内存错误,无法执行。


中间的插曲是我自己xcode写了一个demo,去测试只包含armv7架构的程序在iphone5S上面的运行,发现是编译无法通过,在build setting中还有一个问题。

No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=i386)

在5S以后,App store的审核已经不允许不包含64位架构的程序上架了,但是貌似不应该不支持编译出来自己测试是不是呢?然而换5,不更改项目属性的前提下,直接编译运行成功,就是说xcode根本不让32位程序运行在64位上?

设置”Build Active Architecture Only”为“NO”

这里这个选项是说,是否只编译唯一的架构。理论上来说,这里因为我只想编译出armv7的版本,特意设置yes。

剧情跟我们想的不一样,设置为NO以后,5S成功运行,导出文件lipo info后却发现,程序的确只包含了armV7,跟我们想要的结果是一样的,所以这个选项到底想做什么,不能懂了,至少证明了32位app是可以运行在64位系统的了,至此,问题还没解决,已经用掉我一天的时间。


lipo不能运行,自己祭出010editor自己修改试试吧,需要做的只是告诉系统,我是一个32位程序,我身上并没有打包arm64代码。理论上可以做到,不过我尝试无数次之后,或许还是对于mach-o文件格式不够精通吧,毕竟只局限于知道结构大概。


仅仅靠与自己的测试demo对比的情况下,头部修改一样,并且offset也无异常的情况下,程序依然是crash。这里就不贴图了,依然是消耗掉大量时间。


痛定思痛,重新回头看lipo,发现lipo带有一个remove参数

lipo xxx -remove arm64 -output xxx.remove

导入替换,程序成功运行!

上面两图中,一个thin一个remove,thin是只包含,remove是只移除,对于只有armv7和arm64的程序来说,只包含一个与只移除另一个的结果貌似应该是一样的,然而结果的确有点出乎意料,thin后的程序是少了一个头的。

虽然可以运行了,事情还没有结束,clutch无法敲壳!

看clutch日志,貌似他还是在以64的方式在dump,看得到吃不着的感觉的确酸爽,难道去改clutch的代码强制32dump?貌似时间不允许了,看懂代码找到关键点修改好不知道要多久。重新找敲壳工具。

https://github.com/stefanesser/dumpdecrypted

下载后直接make,生成dumpdecrypted.dylib,此文件要放入需要敲壳的app的Documents目录。这里也有小技巧,因为人肉查找这个目录是在是个体力活。

#cycript -p pid
#[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0]

导入成功后,到documents目录,执行敲壳

DYLD_INSERT_LIBRARIES=/path/to/dumpdecrypted.dylib /path/to/executable

成功解出,欢快的F5之~



PS:每次替换文件记得修改权限。

chmod 755 xxx

中间遇到的小坑实在令人发指,期间有些问题问到很多群里,冷嘲热讽,浪费很多时间,被我怒喷一记,话说实在不懂这些不能解决根本问题的人,在一个QQ群里刷出的什么存在感。


© 著作权归作者所有

kingsOSZT
粉丝 2
博文 26
码字总数 8456
作品 0
松江
私信 提问
Xcode的Architectures和Valid Architectures的区别,以及st...

作者:shede333 主页:http://my.oschina.net/shede333 版权声明:原创文章,版权声明:自由转载-非商用-非衍生-保持署名 [Creative Commons BY-NC-ND 3.0][] --- [Creative Commons BY-NC-...

shede333
2013/10/29
12.7K
1
【AR】开始使用Vuforia开发iOS(2)

原 设置iOS开发环境 安装Vuforia iOS SDK 如何安装Vuforia iOS示例 编译并运行Vuforia iOS示例 支持iOS金属 iOS 64位迁移 设置iOS开发环境 适用于iOS的Vuforia引擎目前支持运行iOS 9及更高版...

lichong951
2018/06/11
0
0
iOS 11 将抛弃 32 位应用,近 20 万款 App 成牺牲者

此前,苹果已经确认将会在今年的 6 月 5 日举办今年的 WWDC 开发者大会,新一代的苹果手机操作系统 iOS 11 也将会在会上发布。现在,有消息称,iOS 11 将会彻底放弃 32 位应用程序,如果消息...

王练
2017/03/15
2.6K
16
iOS 7: 如何为iPhone 5s编译64位应用

随着iPhone 5S的推出,大家开始关心5S上所使用的64位CPU A7。 除了关心A7的性能以外,大家还会关心一个问题,那就是使用A7的64位系统对应用有没有什么要求。特别是应用开发者,大家都比较关心...

孙启超
2013/10/15
2.4K
4
iOS 11 将不支持多年没更新的 32 位应用

在未来版本的 iOS 系统中,苹果可能要移除对 32 位应用的支持了。几天前,苹果发布了 iOS 10.3 第一个测试版,在 iOS 10.3 中开启 32 位应用时,提示窗口上显示应用需要更新才能在未来版本的...

局长
2017/02/01
1K
3

没有更多内容

加载失败,请刷新页面

加载更多

视频如何加水印?

很多视频制作者的视频都被他人盗用过,为了防止自己的劳动成果被他人窃取,给视频加水印对于视频制作者来说,是一件非常重要的事情。那么下面分享一个手机给视频加水印的方法,一起来看看吧!...

白米稀饭2019
32分钟前
5
0
004-Envelop-基于Blockstack的文件传输dapp

本篇文章主要介绍基于Blockstack的文件传输工具; ####A-链接地址 官网地址:https://envelop.app/ Github地址:https://github.com/envelop-app ####B-特性: 1: Share private files easil...

Riverzhou
35分钟前
7
0
SpringCloud——声明式调用Feign

Feign声明式调用 一、Feign简介 使用Ribbon和RestTemplate消费服务的时候,有一个最麻烦的点在于,每次都要拼接URL,组织参数,所以有了Feign声明式调用,Feign的首要目标是将Java HTTP客户端...

devils_os
40分钟前
7
0
《JAVA核心知识》学习笔记 (22. 数据结构)

22.1.1. 栈(stack) 栈( stack)是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈顶 (top)。它是后进先出(LIFO)的。对栈的基本操作只有 push(进栈)和 pop(出栈...

Shingfi
46分钟前
6
0
你对AJAX认知有多少(1)?

AJAX(一) AJAX技术对于前段或者后端工程师来说,都是必不可缺的 那我们这几期都来细细品味一下AJAX的相关知识,直接上干货喽~ 1、什么是AJAX,为什么要使用Ajax(请谈一下你对Ajax的认识) 什么...

理性思考
53分钟前
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部