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工具的使用,其它内容都是次要的。

这是有价值的吗?

相关文章
|
9天前
|
开发框架 小程序 前端开发
圈子社交app前端+后端源码,uniapp社交兴趣圈子开发,框架php圈子小程序安装搭建
本文介绍了圈子社交APP的源码获取、分析与定制,PHP实现的圈子框架设计及代码编写,以及圈子小程序的安装搭建。涵盖环境配置、数据库设计、前后端开发与接口对接等内容,确保平台的安全性、性能和功能完整性。通过详细指导,帮助开发者快速搭建稳定可靠的圈子社交平台。
96 18
|
9天前
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
|
5天前
|
JSON 供应链 搜索推荐
淘宝APP分类API接口:开发、运用与收益全解析
淘宝APP作为国内领先的购物平台,拥有丰富的商品资源和庞大的用户群体。分类API接口是实现商品分类管理、查询及个性化推荐的关键工具。通过开发和使用该接口,商家可以构建分类树、进行商品查询与搜索、提供个性化推荐,从而提高销售额、增加商品曝光、提升用户体验并降低运营成本。此外,它还能帮助拓展业务范围,满足用户的多样化需求,推动电商业务的发展和创新。
22 5
|
5天前
|
移动开发 安全 搜索推荐
圈子社交系统APP,同城本地圈子论坛开发,让身边的人沟通更加紧密
圈子社交系统APP是一款基于社交网络的移动应用,用户可创建、加入和管理兴趣圈子。主要功能包括:动态分享与交流、实时聊天、会员体系与身份认证、活动策划等。该APP注重个性化定制、社交关系深化、隐私安全及跨平台互联,提供丰富的社交体验。
|
8天前
鸿蒙语言开发 几十套鸿蒙ArkTs app毕业设计及课程作业
鸿蒙语言开发 几十套鸿蒙ArkTs app毕业设计及课程作业
17 1
|
17天前
|
JSON 缓存 前端开发
HarmonyOS NEXT 5.0鸿蒙开发一套影院APP(附带源码)
本项目基于HarmonyOS NEXT 5.0开发了一款影院应用程序,主要实现了电影和影院信息的展示功能。应用包括首页、电影列表、影院列表等模块。首页包含轮播图与正在热映及即将上映的电影切换显示;电影列表模块通过API获取电影数据并以网格形式展示,用户可以查看电影详情;影院列表则允许用户选择城市后查看对应影院信息,并支持城市选择弹窗。此外,项目中还集成了Axios用于网络请求,并进行了二次封装以简化接口调用流程,同时添加了请求和响应拦截器来处理通用逻辑。整体代码结构清晰,使用了组件化开发方式,便于维护和扩展。 该简介概括了提供的内容,但请注意实际开发中还需考虑UI优化、性能提升等方面的工作。
76 11
|
14天前
|
前端开发 数据库 UED
uniapp开发,前后端分离的陪玩系统优势,陪玩app功能特点,线上聊天线下陪玩,只要4800
前后端分离的陪玩系统将前端(用户界面)和后端(服务器逻辑)分开开发,前者负责页面渲染与用户交互,后者处理数据并提供接口。该架构提高开发效率、优化用户体验、增强可扩展性和稳定性,降低维护成本,提升安全性。玩家可发布陪玩需求,陪玩人员发布服务信息,支持在线聊天、预约及线下陪玩功能,满足多样化需求。[演示链接](https://www.51duoke.cn/games/?id=7)
|
20天前
|
供应链 搜索推荐 API
1688APP原数据API接口的开发、应用与收益(一篇文章全明白)
1688作为全球知名的B2B电商平台,通过开放的原数据API接口,为开发者提供了丰富的数据资源,涵盖商品信息、交易数据、店铺信息、物流信息和用户信息等。本文将深入探讨1688 APP原数据API接口的开发、应用及其带来的商业收益,包括提升流量、优化库存管理、增强用户体验等方面。
99 6
|
21天前
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
67 3
|
13天前
|
安全 算法 机器人
双重防护!红娘相亲app搭建开发,婚恋交友系统登录方式,密码+验证码的优势
在婚恋交友系统中,密码和验证码是两种重要的安全措施。密码用于验证用户身份,应设置为复杂组合以防止未经授权的访问;验证码则通过图形或字符识别,防止自动化攻击如暴力破解和注册机器人。两者同时开启可显著提高安全性,防止暴力破解和自动化注册,提升用户信任感。建议要求强密码、定期更新验证码样式,并在可疑登录时增加验证码复杂性。这样既能保障用户信息安全,又兼顾了用户体验。 ![交友11111.jpg](https://ucc.alicdn.com/pic/developer-ecology/hy2p6wcvgk4oe_c9eb8d6eb8144866b0cd1d96ffb0c907.jpg)