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 55377920cryptid 1

WeChat.decrypted (architecture arm64):

 cryptoff 16384
cryptsize 59883520cryptid 0

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

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

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

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

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

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

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

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

这是有价值的吗?
原文地址https://www.cnblogs.com/freeself/p/10640998.html

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

  1. iOS逆向开发,突破微信强制升级,让低版本的iPhone也能正常使用

    (1)安装与运行 在网上搜索微信的历史版本,下载一个兼容多开的版本(实际上是bundleID不一样),比如5.0版本.当然也可以通charles等,在AppStore上下载微信旧版本,再重签名. 通过 ...

  2. IOS 逆向开发(一)密码学 非对称加密RSA

    IOS 逆向开发(一)密码学 RSA 1. 密码学发展简介 2. 非对称加密RSA产生过程 3. RSA 数学原理 3.1 离散对数问题 3.1.1 原根 3.2 欧拉函数Φ 3.3 欧拉定理 3.4 ...

  3. IOS 逆向开发(二)密码学 HASH

    IOS 逆向开发(二)密码学 HASH 1. HASH算法简介 1.1 HASH是什么? 1.2 Hash的特点 1.3 Hash的作用 1.4 Hash有哪些流行的算法 1.5 Hash算法的碰撞 ...

  4. iOS逆向 开发工具

    iOS逆向开发交流群 iOS逆向开发所需要的一些工具集合

  5. iOS开发: 获取App的ipa包以及资源文件

    本文介绍两种工具,用于Mac获取App Store线上项目的ipa包 1.iTunes: 2.Apple Configurator: 前言 Mac在iTunes 12.7中取消了App Store应用 ...

  6. iOS逆向之某多多App抓包

    阅读此文档的过程中遇到任何问题,请关注公众号[移动端Android和iOS开发技术分享]或加QQ群[309580013] 1.目标 由于某多多App现使用longlink进行数据传输,使用charle ...

  7. iOS逆向之深入解析App签名的双向验证机制和原理

    一.非对称加密 通常说的签名就是数字签名,它是基于非对称加密算法实现的. 对称加密是通过同一份密钥加密和解密数据,而非对称加密则有两份密钥,分别是公钥和私钥,用公钥加密的数据,要用私钥才能解密,用私钥 ...

  8. android获取版本号报错,Android开发:获取安卓App版本号的方法步骤

    在Android开发过程中,想要开发一个完整功能的App,各个地方的内容都要涉及到,比如获取App的系统版本号就是必须要有的功能.Android的App版本号相关内容比iOS的App版本号内容要多,而 ...

  9. android获取安卓版本,Android开发:获取安卓App版本号的方法步骤

    今天国庆节,在这举国欢庆的日子里,发一篇博文留念一下这个特殊的日子,国庆依然奋战在工作一线. 在Android开发过程中,想要开发一个完整功能的App,各个地方的内容都要涉及到,比如获取App的系统版 ...

最新文章

  1. OOM?教你如何在PyTorch更高效地利用显存
  2. 零基础入门学习Python(19)-内嵌函数和闭包
  3. java grpc 客户端处理 go 服务端多返回值_grpc基础实践(二)
  4. 【Python】如何获取Numpy三维数组中目标值的位置
  5. 嵌入式 IOT 汽车 航空 AI 领域从IP到片上系统SOC信息检索网站 DR
  6. IE7下position:relative的问题
  7. php mysql time_wait_[PHP]MySQL的wait_timeout与pdo对象
  8. Windows10下VB6.0开发——利用PictureBox控件实现数据点实时绘图
  9. java内功 ---- jvm虚拟机原理总结,侧重于虚拟机类加载执行系统
  10. c语言和测绘程序设计,测绘程序设计(C语言版)
  11. ArcGIS API For JavaScript - 地图常用函数方法
  12. c语言12个实验报告,C语言实验报告合集
  13. 【新品重磅发布】FOHEART·HF1面部表情捕捉头盔
  14. 解决序列号不正确无法安装Win2003 SP1
  15. 2018年中考计算机考试成绩,2018年北京中考考试科目、时间及成绩公布通知
  16. MATLAB在数学建模中的应用 随手笔记(二)----- 数据拟合方法
  17. 特效制作软件AE(After Effects)插件安装
  18. linux中524端口,liunx下攻击分析及如何通过交换机封端口
  19. ubuntu error symbol ‘grub_calloc‘ not fount
  20. mysql求学号的总分_有一个student表,有学号,姓名,科目,成绩等字段,请写一条sql语句,算出学生的总分数?...

热门文章

  1. 仿Android端饿了么外卖的效果
  2. Excel表格规范录入数据
  3. matlab冲激激励,实验一 阶跃响应与冲激响应.doc
  4. 大学十年---林锐(转)
  5. vue-webpack.config使用七牛云cdn镜像加速
  6. 七牛云刷新缓存(cdn刷新)
  7. 5G关键技术,D2D通信-ielab
  8. Android安装包APK如何解压
  9. 关于垂直线和水平线判断问题
  10. 2014广州入户新规则--广州积分入户8月1日起接受申报 详细指引