freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

遇到APP数据加密如何解密测试
2024-10-29 11:10:07
所属地 江苏省

文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!

0x01 加解密的意义

1730169621_67204b15bd2dfa60d01b0.png!small?1730169622294

相信大部分测试过app的好兄弟都被这个问题困扰过,app数据包部分字段被加密,又或者是整个数据包被加密,这种大部分是json的数据你不解开根本就没法测试。于是乎本教程就出来了,本篇主要针对ios-app做一个初步的解析。

首先如图所示,类似这样的大概率是aes加密

AAAAA+AAAAA/AAA=

对初级加密还有不懂的朋友可以看我上篇文章,本文就不过多赘述了

经验分享 | WEB渗透测试中遇到加密内容的数据包该如何测试 - FreeBuf网络安全行业门户

0x02 先说解密实战与结果

一次项目中遇到的

1730170189_67204d4d5ed35023d8762.png!small?1730170189652

密码字段加密

1730169621_67204b15bd2dfa60d01b0.png!small

使用frida-trace -i “CCCrypt” hook ios成功拉取到了key与iv

1730169943_67204c57742f59df4bc31.png!small?1730169944907

可以看到也是成功的还原了加解密数据

1730170053_67204cc5674ef51cd56e4.png!small?1730170053990


1730170076_67204cdc39d512a193a3a.png!small?1730170076807

0x03 基础概念与准备

首先你需要有一个越狱的苹果手机+你准备测试的app

在pc端与苹果端部署好frida环境,可参考网上写好的文章

【iOS安全】越狱iOS安装Frida | Frida使用 | 修改Frida-trace源码_ios frida-CSDN博客

frida-trace -UF -i “CCCrypt”

然后这条命令是在你开启app时候使用的 意思是

frida-trace = 你的frida工具

-UF = 指定当前打开正在运行的app

-i = 选择模式

“CCCrypt” = 这是一个苹果默认的加密框架,你可以看到很多加密都是从这个框架里走的,因为苹果app商店审核机制非常的严格,你用一些自研的加密方式可能会上不了商店,这就是你为啥要钩这个的原因。

frida和burp抓包其实差不多也是在特定时间点触发特定事件的时候去捕获数据,这个CCCrypt就是执行加解密操作的时候,应该很好理解。

感兴趣的可移步

CCCrypt函数——iOS加解密必知-CSDN博客

1730170676_67204f348ad3b8a17d22f.png!small?1730170677148

在你执行完成这一步的时候本地会生成钩取该函数的脚本,打开并修改成如下提供的脚本

{
  /**
   * Called synchronously when about to call CCCrypt.
   *
   * @this {object} - Object allowing you to store state for use in onLeave.
   * @param {function} log - Call this function with a string to be presented to the user.
   * @param {array} args - Function arguments represented as an array of NativePointer objects.
   * @param {object} state - Object allowing you to keep state across function calls.
   */
  onEnter(log, args, state) {
    log('CCCrypt() → 操作类型→', args[0]);
    log('CCCrypt() → 算法类型→', args[1]);
    log('CCCrypt() → 填充模式→', args[2]);
    log('CCCrypt() → 算法密钥→', hexdump(args[3]));
    log('CCCrypt() → 密钥长度→', args[4]);
    log('CCCrypt() → 算法 IV→', hexdump(args[5]));
    log('CCCrypt() → 加密/解密内容→', hexdump(args[6]));
    log('CCCrypt() → 加密/解密结果→', hexdump(args[8]));
  },

  /**
   * Called synchronously when about to return from CCCrypt.
   *
   * See onEnter for details.
   *
   * @this {object} - Object allowing you to access state stored in onEnter.
   * @param {function} log - Call this function with a string to be presented to the user.
   * @param {NativePointer} retval - Return value represented as a NativePointer object.
   * @param {object} state - Object allowing you to keep state across function calls.
   */
  onLeave(log, retval, state) {
  }
}

这个是为了方便回显我们查看。

0x04 数据包的定义

1730169943_67204c57742f59df4bc31.png!small

此处hook到了密钥和iv

从算法类型判断0x0为aes128 加密算法

以下是参考

0x0 aes128
0x1 des
0x2 3des
0x3 cast
0x4 rc4
0x5 rc2

填充模式的参考如下

0x1 是pkcs7padding
0x2 是ecb 密钥

因为aes128他密钥是16字节

1730170970_6720505ab6703589685ed.png!small?1730170971569


iv也是16字节

1730170979_67205063633328d0657cf.png!small?1730170980886


所以我们这里得到他的密钥和iv

密钥:30313032303330343035303630373038

iv:30313032303330343035303630373038

然后就可以愉快的加解密去继续渗透了

0x05 总结

此处的最难点在于,你得买个苹果手机hhh。

本文用到的加解密网站推荐

加密:http://tool.chacuo.net/cryptaes

解密:https://www.ddosi.org/code/#recipe=Generate_all_hashes('All',true)

因为aes会有不同的填充类型 有时候会踩坑

也可以用utools的加解密 也是用起来很顺手

1730171159_67205117d2b0feb777705.png!small?1730171160104

最后的最后 如果你对本篇有不懂的或者想要交流技术的可以私信我 回见~~

# 渗透测试 # app安全 # 移动App # app抓包
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录