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

测试机一直是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群里刷出的什么存在感。

时间: 2024-08-26 09:11:31

64位IOS系统中敲壳提取32位程序的相关文章

64位Win2003系统让IIS运行在32位的环境下

安装了WIN2003系统64位的,IIS也是运行在64位下面,可是要使用伪静态,又找不到64位的伪静态组件,所以只好让IIS 运行在32位下面了,方法如下: cscript %systemdrive%\inetpub\adminscripts\adsutil.vbs set w3svc/appPools/enable32bitapponwin64 1 如果又想恢复或者修改成64位下面运行IIS,就执行下面的命令: cscript %systemdrive%\inetpub\adminscript

ubuntu系统中查看可执行文件是32位还是64位

执行file <执行文件名>,即可.返回解决如下: <执行文件名>: ELF 64-bit LSB  executable, x86-64, version 1 (GNU/Linux), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=b60356b08cbd518cd976647f608553b7a0fb05c3, not stripped 如果为x86-64,则为64位.

在MacOS和iOS系统中使用OpenCV

来源:http://blog.devtang.com/blog/2012/10/27/use-opencv-in-ios/ 前言 OpenCV 是一个开源的跨平台计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法. 最近试着在MacOS和iOS上使用OpenCV,发现网上关于在MacOS和iOS上搭建OpenCV的资料很少.好不容易搜到些资料,却发现由于OpenCV和XCode的版本更新,变得不再有用了.有些问题费了我很多时间,在此总结分享给大家,希望后来人少走些弯路. 可以预见到,随着

MAC下Unity编译成Xcode后倒入IOS系统中的各种坑总结

unity3d版本: 5.3.0f4 xcode版本: 7.3.1 - xcode7.3.1已经支持免开发者证书真机调试, 这个版本下不再需要花费99刀购买个人开发者证书,仅需要个人appstoreID即可进行调试: - 该版本unity3d工程编译成xcode可执行文件后,导入IOS过程中会报2次错误,具体描述如下: 1. "unknown type name __declspec" 解决方法:xcode中找到il2cpp-config.h文件,在181行(上下)找到 #define

如何在ios 系统 中抓包??

为了实现在ios系统上抓包,如下步骤: 1,设备越狱 2,在cydia-软件源-设置中改为开发者,否则有些deb搜索不到 安装如下软件:OpenSSH,OpenSSL,wget (下载工具) Aptitude 及 APT 0.6 Transitional (deb包工具) unzip 及 zip (解压缩及压缩打包工具) 3,安装并启动sshd后,通过ssh -l root IPAD_IP_ADDRESS登录,默认口令是:alpine,这是ios系统默认的root密码,记得及时修改. 4,命令行

[转]在MacOS和iOS系统中使用OpenCV

OpenCV 是一个开源的跨平台计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法. 最近试着在MacOS和iOS上使用OpenCV,发现网上关于在MacOS和iOS上搭建OpenCV的资料很少.好不容易搜到些资料,却发现由于OpenCV和XCode的版本更新,变得不再有用了.有些问题费了我很多时间,在此总结分享给大家,希望后来人少走些弯路. 可以预见到,随着XCode和OpenCV的版本更新,本文可能不再有效了. 所以特此注明,文本介绍的搭建方法仅针对于 XCode4.5.1 和 Op

有关iOS系统中调用相机设备实现二维码扫描功能的注意点(3/3)

今天我们接着聊聊iOS系统实现二维码扫描的其他注意点. 大家还记得前面我们用到的输出数据的类对象吗?AVCaptureMetadataOutput,就是它!如果我们需要实现目前主流APP扫描二维码的功能,即只有当二维码进入视图中心的方框中时才进行扫描识别功能,这样做的目的主要是为了提高用户的使用体验,需要用到这个类里面的一个属性:rectOfInterest,这个属性是一个CGRect结构体类型.但和我们平时经常使用的CGRect有点不一样.以下截取了官网文档对这个属性的表述: /*! @pro

64位系统里的IIS运行32位ODP.NET的方法

在64位Win7里的IIS里部署使用了ODP.NET的网站,Oracle的版本是11.20.3.20.直接部署会提示错误:在64位环境里使用了32位的程序.自己折腾了两天,最后才从别人的博客里找到解决方案:http://blog.sina.com.cn/s/blog_591f3ba1010175as.html 解决方案是:在IIS里新建一个启用了32位应用程序的应用程序池(默认设置为不启用),ASP.NET的版本为4.0,然后指定发布的网站采用这个32位应用程序池即可.

(64位oracle使用32位的PLSQL)安装64位的oracle数据库软件,使用32位的PLSQL Developer连接方法

由于PLSQL Developer没有提供64位的,于是根据网上的资料做了一下整理,发上来 1.下载并安装Oracle 11g R2 64位,在服务器上安装时忽略硬件检测失败信息: 2.下载Oracle 11g R2 32 位 客户端,将其解压到D:\app\Jack\product目录下,并命名为instantclient: 客户端下载可以自己去百度一下:instantclient-basic-nt-11.2.0.2.0.zip 一定可以找到,记得是下32位的 3.下载并安装PL/SQL 9.