iOS逆向开发(2):获取APP的类声明 | class-dump | dumpdecrypted

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: iOS逆向开发(2):获取APP的类声明 | class-dump | dumpdecrypted之前介绍了怎么操作越狱的iOS设备(以下简称为手机),但简单操作手机并不是目标,小程的目标是手机上特定的APP,比如微信、淘宝、QQ音乐等等,因为小程可以从这些APP上拿到一些有用的信息或资源--比如,“微信的那个页面是用什么控件来布局的?”、“QQ音乐的歌手头像,能批量地拿到吗?”,等等。

iOS逆向开发(2):获取APP的类声明 | class-dump | dumpdecrypted
之前介绍了怎么操作越狱的iOS设备(以下简称为手机),但简单操作手机并不是目标,小程的目标是手机上特定的APP,比如微信、淘宝、QQ音乐等等,因为小程可以从这些APP上拿到一些有用的信息或资源--比如,“微信的那个页面是用什么控件来布局的?”、“QQ音乐的歌手头像,能批量地拿到吗?”,等等。

很明显,如果你知道目标APP的所有类的声明,你就可能直接观察到,或者推导到一些有用的信息。实际上,把目标APP的类信息拿到,是至关重要的一步,因为这一步的成功让你有了分析的资料,进而决定了后续的动作,比如借鉴目标APP的实现方案,或者进一步做注入的工作。

为了感性一点,小程先贴上一个APP的部分类的结构信息,然后来简单看看,可以分析到什么。

这是“花椒直播”APP的视频编码类:
花椒直播的某个类

现在的直播主要是看美女,不过这不是重点。重点是,直播是要开播的,开播就要录像,然后要把视频编码,再推到服务器。而这个类,就是“视频编码”的关键类(通过注入就能证实)。可以直接看到,它是用AVAssetWriter来实现视频编码的,也就是我们经常说的“硬件编码”,而不是用libx264之类的第三方库来做视频编码。还可以看到,在编码初始化时,指定了分辨率与码率,如果有必要,我们能查出是什么值。

这是“花椒直播”APP的崩溃汇报类(疑似):
花椒崩溃汇报类

可以看到,APP的ID跟版本可能是上报的信息,那又怎么样呢?如果我们想恶作剧,是可以做到不断的崩溃再启动再崩溃的,然后修改这两个信息的内容,是可以不断地跟分析数据的技术人员打招呼的。通过给某个产品制造异常,然后给分析异常的人发送某个明文信息,是很可能做到的。

以上这个例子,是在得到类的结构信息后,做出的一些“感性”的分析。

那么,怎么样才能得到类的结构信息呢?

本文介绍如何获取目标APP的类的结构信息。

其实,还是工具的使用。一个叫classdump,另一个叫dumpdecrypted。

一般情况下,使用classdump就可以解决问题。

小程用的是mac电脑。

(一)class-dump
class-dump或class-dump-z,都可以分析出类结构,使用上相似。

(1)获取
class-dump-z:

wget http://networkpx.googlecode.com/files/class-dump-z_0.2a.tar.gz
解压后,拷贝到bin目录:
sudo cp mac_x86/class-dump-z /usr/local/bin
class-dump:

http://stevenygard.com/projects/class-dump 查找并下载,或者直接:
下载 http://stevenygard.com/download/class-dump-3.5.tar.gz
把class-dump拷贝到/usr/local/bin目录,并chmod +x class-dump。
(2)使用
class-dump-z Payload/QQ.app/QQ > ../../dumpinfo --所有信息放到一个文件
class-dump -H Spotify.app -o ../headers --这种方式可以分出不同的文件

class-dump -A -a Spotify.app > ../../addressinfo --带有地址信息
根据函数的地址,可以用gdb或lldb来下断点调试。

class-dump也可以指定指令集,比如--arch arm64。
对于小程来说,一般这样使用class-dump: class-dump -A -a --arch arm64 target.app > ../dumpinfo

这样可以把所有的类信息放到dumpinfo文件,而且每个方法跟变量都是有地址的(方便之后可能进行的动态调试)。

但需要注意一个问题,classdump只能对没有加密的APP进行分析,如果APP是加密了的,那classdump是无能为力的(直接提示加密了!)。

哪些APP是加密状态的呢?有没有办法破解呢?

基本上,只有从AppStore下载的APP才是加密了的,其它通过PP助手、爱思等工具拿到的ipa安装包(实际是压缩包,里面有target.app),都是经过了破解。

小程觉得,不用管那么多,先用classdump来跑一下,如果提示加密,再来考虑破解。

破解的工具是clutch。

应该使用clutch的最新版本,特别是对于ios10.x的系统。

可以在https://github.com/KJCracks/Clutch/releases下载(下载-debug版本即可)。

把clutch拷贝到手机的/usr/bin目录,给权限:chmod +x clutch

这样使用clutch:

./Clutch -? --查看选项
./clutch -i --查看可以破解的软件
./clutch -d x --根据序号来破解某个APP
破解完,clutch会提示破解后的ipa包所在的目录。把ipa拷贝到电脑,就可以classdump了。

另一个分析类结构的工具是dumpdecrypted。

之所以引入dumpdecrypted,主要是因为小程发现:使用最新的clutch2.0.4-debug,未能破解微信6.5.12版本(也不能成功破解7.0版本)。甚至于,微信6.5.x版本,运行后,ps aux都找不到进程信息。

那怎么办呢?

最简单的办法,其实是,使用手机上的pp助手、爱思之类的工具,安装一个微信,这个微信就已经砸壳的了;或者,在电脑上通过上网或助手工具,下载一个微信ipa,一般也是解密了的。

如果非要用dumpdecrypted来弄一下,也是可以。小程把办法贴在下面,大家可以在需要时再阅读。

生成dumpdecrypted.dylib:

git clone https://github.com/stefanesser/dumpdecrypted
cd dumpdecrypted
make --生成dumpdecrypted.dylib
在手机cydia上搜索Filza,并安装。利用Filza找出微信的安装路径。(不能使用cycript,因为进程id都找不到。)

比如,微信安装目录:/var/mobile/Containers/Bundle/Application/4777DEE2-6805-45F7-B3D0-CB4277DD5389/WeChat.app

拷贝dumpdecrypted.dylib到手机:

scp dumpdecrypted.dylib root@xx.xx.xx.xx:/
启动微信(重要!),ssh到手机,cd到dumpdecrypted.dylib所在的目录,执行:
ldid -S dumpdecrypted.dylib
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/4777DEE2-6805-45F7-B3D0-CB4277DD5389/WeChat.app/WeChat

在当前目录生成WeChat.decrypted文件,即为破解后的文件。

scp WeChat.decrypted到pc,先观察一下这个文件:

file WeChat.decrypted --可以看到包括两个指令集:armv7跟arm64

otool -l WeChat.decrypted | grep crypt

WeChat.decrypted (architecture armv7):

 cryptoff 16384
cryptsize 55377920
  cryptid 1

WeChat.decrypted (architecture arm64):

 cryptoff 16384
cryptsize 59883520
  cryptid 0

可以看到,armv7是加密了的,而arm64是解密了的,所以在使用class-dump与hopper时,都应该选择arm64。
提取头文件:

class-dump -A -a --arch arm64 WeChat.decrypted > dumpinfo
dumpinfo里面为所有头文件信息,比如:MicroMessengerAppDelegate为AppDelegate类。

(二)效果演示
为了再“感性”一下,小程再贴一下“微信”的类结构,作为后续更多分析的热身。

微信在每次进入“附近的人”时,都会把手机的位置信息传递给这个类的方法:
设置位置信息的类与方法

从这里可以看出,只要注入到红框内的那个函数,把传递进来的位置更换成目标位置(比如定到大平洋),就可以看到你想要的“附近的人”。比如,定位到纽约,可以看到这样的人:
纽约某个县的附近的人

要实现这个效果,拿到类结构信息只是第一步,接下来还要定位目标类(甚至要调试),再写hook代码。

所谓“万达高楼平地起”,小程觉得,如果想往一个方向研究,那就应该有耐心,一步一步掌握好知识与技能。

总结一下,本文主要介绍了class-dump工具的使用,其它内容都是次要的。

这是有价值的吗?

相关文章
|
2天前
|
JavaScript 前端开发 Android开发
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
34 13
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
4天前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
29 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
4天前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
23 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
1月前
|
iOS开发 开发者
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
143 67
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
|
1月前
|
安全 数据安全/隐私保护 Android开发
【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
235 75
|
2月前
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
90 11
|
2月前
|
iOS开发 开发者 MacOS
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
145 66
|
9月前
|
iOS开发 开发者 UED
2023年iOS App Store上架流程详解(上)
在2023年,随着苹果发布机制的微调,有些关于iOS App上架流程的资料已经过时。本文将根据最新的要求和经验,详细介绍iOS App上架的流程。
|
9月前
|
iOS开发 开发者
苹果iOS App Store上架操作流程详解:从开发者账号到应用发布
很多开发者在开发完iOS APP、进行内测后,下一步就面临上架App Store,不过也有很多同学对APP上架App Store的流程不太了解,下面我们来说一下iOS APP上架App Store的具体流程,如有未涉及到的部分,大家可以及时咨询,共同探讨。
|
9月前
|
安全 数据安全/隐私保护 iOS开发
iOS App 上架流程图文教学
在上架App 之前必须先准备好开发者帐号,但申请开发者帐号因法兰克早在之前已经申请好了,故就跳过此步骤,直接从产生凭证到上传App开始讲起。首先,要将自己辛苦写好的App 送审的话,则要依序做完下列几件事情即可。

热门文章

最新文章

  • 1
    MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
  • 2
    【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 3
    原生鸿蒙版小艺APP接入DeepSeek-R1,为HarmonyOS应用开发注入新活力
  • 4
    【Azure App Service】基于Linux创建的App Service是否可以主动升级内置的Nginx版本呢?
  • 5
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 6
    【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
  • 7
    【Azure Function】Function App出现System.IO.FileNotFoundException异常
  • 8
    【Azure Logic App】使用MySQL 新增行触发器遇见错误 :“Unknown column 'created_at' in 'order clause'”
  • 9
    阿里云APP备案流程图以及备案所需材料整理,跟着教程一步步操作
  • 10
    【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
  • 1
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    14
  • 2
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    28
  • 3
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    34
  • 4
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    29
  • 5
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    23
  • 6
    uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
    143
  • 7
    【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
    235
  • 8
    app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
    90
  • 9
    深入探索iOS开发中的SwiftUI框架
    145
  • 10
    ios样式开关按钮jQuery插件
    60