遇到APP数据加密如何解密测试

admin 2025年1月28日02:35:55评论18 views字数 2410阅读8分2秒阅读模式

 

原文链接:https://www.freebuf.com/articles/mobile/413935.html

作者:alexyin

0x1 加解密的意义
遇到APP数据加密如何解密测试

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

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

AAAAA+AAAAA/AAA=

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

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

0x2 先说解密实战与结果

一次项目中遇到的

遇到APP数据加密如何解密测试

密码字段加密

遇到APP数据加密如何解密测试

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

遇到APP数据加密如何解密测试

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

遇到APP数据加密如何解密测试
遇到APP数据加密如何解密测试
0x3 基础概论与准备

首先你需要有一个越狱的苹果手机+你准备测试的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博客

遇到APP数据加密如何解密测试

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

{/**   * Called synchronously when about to call CCCrypt.   *   * @this {object} - Object allowing you to store state for use in onLeave.   * @param {functionlog - Call this function with a string to be presented to the user.   * @param {arrayargs - Function arguments represented as an array of NativePointer objects.   * @param {objectstate - 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 {functionlog - Call this function with a string to be presented to the user.   * @param {NativePointerretval - Return value represented as a NativePointer object.   * @param {objectstate - Object allowing you to keep state across function calls.   */onLeave(log, retval, state) {  }}

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

0x4 数据包的定义
遇到APP数据加密如何解密测试

此处hook到了密钥和iv

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

以下是参考

0x0 aes1280x1 des0x2 3des0x3 cast0x4 rc40x5 rc2

填充模式的参考如下

0x1 是pkcs7padding0x2 是ecb 密钥

因为aes128他密钥是16字节

遇到APP数据加密如何解密测试

iv也是16字节

遇到APP数据加密如何解密测试

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

密钥:30313032303330343035303630373038

iv:30313032303330343035303630373038

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

0x5 总结

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

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

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

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

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

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

遇到APP数据加密如何解密测试

原文始发于微信公众号(神农Sec):遇到APP数据加密如何解密测试

 

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月28日02:35:55
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   遇到APP数据加密如何解密测试http://cn-sec.com/archives/3680448.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息