2015年11月20日星期五

iOS(十一)三方市场ipa采集分析

一、采集方式分析
以pp助手市场为例,官网地址:
在pp助手网站不支持直接下载iOS app,需要通过助手应用来下载
故采用分析助手方式来获取app下载url
另外一般市场没有提供类似cydia源Packages信息,故平台采集市场都是根据市场应用列表来爬取app的

二、pp助手市场app列表

在市场"软件“一栏可以看见有应用"推荐、分类、排行、必备”几项,其中排行app较少,需要完整app list,建议从“推荐” or “分类”获取
  

三、抓包分析

1、ipa文件url

从pp助手下载ipa文件,以下为同一个ipa(find and call),但是从两个域名获取:
http://r10.25pp.com
http://or.25pp.com
直接访问这两个域名及子目录皆403 Forbidden,只能访问对应ipa具体url
url结构比较容易理解,其中20120615应该是app上传到市场的时间,但ipa后面部分的数字意义不明,无法构造
故直接爬取下载站点方式不可行

2、App推荐列表

访问推荐页面时,会给http://mobileup.25pp.com/index.php提交post请求,该网站直接访问会无响应:
post内容如下,开头应该是访问的内容参数,中间数字为特定格式,最后为设备型号:
之后服务器就会反馈App列表推荐页面的app信息了,从中可以解析出各个app的下载url:

3、more

一次post只能获取少量app信息,往下拉刷新会有更多app,其中有一个位用来设定反馈的结果:
其参数用16进制标示:
“推荐”一栏中只有17页app信息:

四、采集建议

由于一般市场推荐app不一定全面覆盖该市场所有app,故建议从分类栏获取app list:
  • 影音娱乐:其中第一框为该分类,第二框为app list页面
  • 社交通信:post其他内容不变,只有分类位变化
  • 生活购物
  • 系统工具
  • 阅读学习
  • 出行导航
  • 摄影美化
  • 办公理财
  • 运动健康

五、小结

ipa三方市场应该基本都是类似方式,只有app store由于使用ssl以及对app加密故不适用
平台爬取可以根据上述内容中对分类列表一一构造数据post,从反馈app list来获取url

2015年11月3日星期二

iOS(十)cydia源采集方式


cydia使用debian的APT包管理器
故推测在linux下可以直接使用apt工具来进行样本采集

1、获取cydia源

ios源配置文件:/etc/apt/sources.list.d/cydia.list
ios添加源后,可以源文件里面查看,其配置与debian源基本一致

2、linux添加cydia源

apt源配置文件:/etc/apt/sources.list
如将cyida的官方源“deb http://apt.saurik.com/ ios/1240.10 main”等添加进linxu源里

3、linux apt更新失败

apt-get update 
更新源设置,linux下可以成功解析部分cydia源url,但更多则失败了

4、cydia源url

正常cydia添加一个源后,都会下载该源的Release和Packages信息存储到本地
那么cyida存储位置为:/var/mobile/Library/Caches/com.saurik.Cydia/lists
从各个文件名可以推测为实际url

5、cydia源解析

既然cydia使用debian包管理器,那么source.list文件源地址写法应该与apt包管理器应该一致,即
  • 第一个区域指示源的类型:
    • deb” 表示二进制软件包,
    • deb-src” for source packages.
  • 第二个区域表示源的基本 URL
    • 此区域存在于一个 Debian 镜像或其他任何由第三方所建的软件源文档中。
    • 这个 URL 可以用 file:// 起始来表示系统里安装了本地仓库,或以 http:// 表示仓库可通过网络服务器来获取,或用 ftp:// 表示软件源在一个 FTP 服务器上。
      • cyida源主要使用http://协议
    • 源常见目录:
      • /dists/ 目录包含"发行版"(distributions), 此处是获得 Debian 发布版本(releases)和已发布版本(pre-releases)的软件包的正规途径. 有些旧软件包及 packages.gz 文件仍在里面.
      • /pool/ 目录为软件包的物理地址. 软件包均放进一个巨大的 "池子(pool)", 按照源码包名称分类存放. 为了方便管理, pool 目录下按属性再分类("main", "contrib" 和 "non-free"), 分类下面再按源码包名称的首字母归档. 
      • /tools/ 用于创建启动盘, 磁盘分区, 压缩/解压文件, 启动 Linux 的 DOS 下的小工.
      • /doc/ 基本的 Debian 文档, 如 FAQ, 错误报告系统指导等..
      • /indices/ 维护人员文件和重载文件.
      • /project/ 大部分为开发人员的资源, 如:project/experimental/ 本目录包含了处于开发中的软件包和工具, 它们均处于 alpha 测试阶段
  • 最后这一区域的句法取决于仓库的结构
    • 仓库是用来简单地描述一个软件源的子目录 
    • 通常用 “./” 表示子目录不存在 - 这个软件源就位于给定的 URL上。
    • 不过一般来讲,仓库的结构类似于一个 Debian 的镜像, 包括很多分支,每一分支有很多组成部分。通常命名选定的分支,然后命名下面的组成部分(或分区)(从maincontrib 和non-free中选择) 来激活一个典型的 Debian 镜像。
故可以推测出cydia源解析方式为:
  • 普通仓库结构:http://源URL/dists/stable/Release
  • "./"仓库结构:http://源URL/Packages.*
  • cydia应用自身官方源“apt.saurik.com”例外,其源地址为安装cydia时写入
    • source.list:deb http://apt.saurik.com/ ios/1240.10 main
    • 故URL为:http://apt.saurik.com/dists/ios/1240.10/Release

6、下载验证

6.1 普通仓库结构

  • 源名称:bigboss
  • source.list:deb http://apt.thebigboss.org/repofiles/cydia/ stable main
  • 样本采集记录:
  • 推测URL:http://apt.thebigboss.org/repofiles/cydia/dists/stable/Release
  • 从Release解析Packages地址:http://apt.thebigboss.org/repofiles/cydia/dists/stable/main/binary-iphoneos-arm/Packages
  • 采集问题:没有对常规debian源正确解析

6.2"./"仓库结构

  • 源名称:insanelyiph0ne
  • source.list:deb http://repo.insanelyi.com/ ./
  • 采集记录:
  • 推测URL:http://repo.insanelyi.com/Packages.gz
  • 采集问题:部分墙外源网络状态较差,需多次下载测试

6.3 cydia官方源

  • 源名称:saurik(cydia作者名字)
  • source.list:deb http://apt.saurik.com/ ios/1240.10 main
  • 采集记录:
  • 故URL为:http://apt.saurik.com/dists/ios/1240.10/Release
  • 推测cydia官方源source.list记录地址应是根据ios版本 or cydia版本
  • 建议采集方式:整个爬取http://apt.saurik.com/网站

7、Release与Packages

7.1 Release文件

Release文件记录源、Packages等信息:
  • 如:http://apt.thebigboss.org/repofiles/cydia/dists/stable/Release

7.2 Packages文件

Packages文件记录源里面app的信息,而Packages.bz2 or Packages.gz文件则是其压缩包
  • 如从Bigboss源Release解析的Packages地址:http://apt.thebigboss.org/repofiles/cydia/dists/stable/main/binary-iphoneos-arm/Packages

7.3 deb文件地址

Packages中最重要的信息如上图:
  • Package为程序名
  • Filename为实际文件名
故解析实际deb下载URL为:
  • http://源URL/Filename
实测:
  • http://apt.thebigboss.org/repofiles/cydia/debs2.0/actionmenu_1.3.0_iphoneos-arm.deb
  • http://apt.thebigboss.org/repofiles/cydia/debs2.0/abgrouper_0.3.deb


2015年11月2日星期一

iOS(九)内存dump应用&手动解密


1.获取应用Mach-o头信息
otool -l /var/mobile/Applications/xxxx/coyote.app/coyote >> /tmp/coyote.txt
搜索LC_ENCRYPTION_INFO,其中cryptoff为混淆代码在文件中的偏移(不包括头部信息,文件的前4096字节),cryptsize为混淆代码的大小,cryptid由于指示在将代码有文件加载到内存中是否需要解混淆

2.gdb附加进程
先获取应用pid
ps aux | grep coyote
gdb -p pid
3.获取进程基址
gdb中使用:info sh
获取到coyote基址为:0xe0000
4.计算解密后应用内存位置
起始位置:基址+cryptoff偏移=0xe0000+hex(16384)=0xe4000
终止位置:基址+cryptoff偏移+cryptsize混淆代码大小=0xe0000+hex(16384+5357568)=0x600000
5.dump解密后的应用
dump binary memory dump.bin 0xe4000 0x600000

CVE/CNVD list

报告记录&poc: 最近fuzz出了不少crash,提交记录git: https://github.com/gandalf4a/crash_report 其中CVE记录如下: (不定期持续更新) 2025 CVE-2025-22134:heap-buffer-o...