实战 | 记一次渗透中遇见的apk逆向 sign解码分析

admin 2024年11月10日21:45:38评论30 views字数 1721阅读5分44秒阅读模式

作者:tiantang

本文首发奇安信攻防社区:https://forum.butian.net/share/2290 

0x01 前言

在对某次渗透测试任务中,目标为一个apk,对其进行渗透测试,在使用抓包测试中发现存在sign的数据包防篡改,通过分析获取加密方法。

小编只想说:tiantang大佬yyds实战  | 记一次渗透中遇见的apk逆向 sign解码分析

实战  | 记一次渗透中遇见的apk逆向 sign解码分析

0x02 初步渗透

配置好https证书,使用Burpsuite配置代理,抓取目标apk注册数据包

实战  | 记一次渗透中遇见的apk逆向 sign解码分析
发现存在用户遍历的问题,不存在的用户会显示未注册,存在的用户显示已发送短信。
放到intruder模块进行手机号爆破,看下有没有测试的手机号信息
姜姜,修改mobile参数发现会显示认证失败,请求的数据包中存在sign参数

实战  | 记一次渗透中遇见的apk逆向 sign解码分析

这里解释下什么是sign

sign签名校验法本质上是对客户端传输数据合法性的一种校验手段其常用手法为,在用户客户端传输的数据中额外加上时间戳以及特殊字符,随后一起得出整体数据的加密值(常用MD5,SHA1等加密算法)这就导致了用户在不知晓程序的原始数据生成sign值的方法情况下,若对传输到服务端的数据进行篡改,在后端都会鉴权失败,导致用户篡改后的数据无效。

.
0x03 解决sign签名问题

目前想到的有三种方法:

测试下sign是否为弱加密方法测试下sign是否可以置空绕过对apk进行逆向,分析其加密算法

首先看来下加密字符,长度不太像md5的,可能是其他的加密算法,丢到cmd5上也没解开,G下一个
置空发送也是失败了

实战  | 记一次渗透中遇见的apk逆向 sign解码分析

只能尝试最不擅长的apk分析源码了
首先使用几个查壳工具查看下存不存在加壳

实战  | 记一次渗透中遇见的apk逆向 sign解码分析

实战  | 记一次渗透中遇见的apk逆向 sign解码分析

还行,用了几个工具都没显示加壳了,省了不少事情
使用AndroidKiller工具分析一下这个apk

实战  | 记一次渗透中遇见的apk逆向 sign解码分析
我干,试了好几个工具不知道为啥都会爆这个错误,有没有大佬讲解下的。
既然这样不行的话只能使用frida-dexdump脱源码了,这里就不讲怎么操作了,网上应该都有操作流程。
脱下来了两个dex文件,通过dex2还原成jar格式查看源码。

实战  | 记一次渗透中遇见的apk逆向 sign解码分析
通过搜索sign关键字,分析了半天,并未发现存在相关的加密代码。

实战  | 记一次渗透中遇见的apk逆向 sign解码分析
实战  | 记一次渗透中遇见的apk逆向 sign解码分析

0x04 神奇的思路二

实战  | 记一次渗透中遇见的apk逆向 sign解码分析

想着既然java代码里没有,它又是存在加密的想到可能是通过js实现的,所以想着怎么把apk中的其他源码搞出来。
在网上搜寻找到了一个方法,在没有壳的情况下,把apk后缀名改成zip方法,在解压缩,获取到了更多的信息了

实战  | 记一次渗透中遇见的apk逆向 sign解码分析
使用idea再次进行搜索,终于在漫长的查询中发现了其加密的算法,果然是在js当中的。

实战  | 记一次渗透中遇见的apk逆向 sign解码分析
存在一个为secretKey的加密密钥,通过跳转也获取到了

实战  | 记一次渗透中遇见的apk逆向 sign解码分析

懒得写python的脚本,直接丢给chatgpt,帮我写一下。

实战  | 记一次渗透中遇见的apk逆向 sign解码分析
gpt牛皮,面向gpt渗透
不过目前还是有个问题,不知道是传什么样的值来做加密,主要因为菜看不懂js,调的层级太多了。

想到了两种方法:

通过hook查看能不能获取到加密之前的信息通过分析猜一下,会加密那些数据包信息
1
实战  | 记一次渗透中遇见的apk逆向 sign解码分析

方法一:

因为我安装了现成的环境,使用xp框架配合Inspeckage来进行hook

首先打开Inspeckage,选择你要抓取的apk,然后打开目标的apk程序

实战  | 记一次渗透中遇见的apk逆向 sign解码分析
然后使用adb工具执行下面的命令
adb forward tcp:8008 tcp:8008

实战  | 记一次渗透中遇见的apk逆向 sign解码分析

打开你本机的127.0.0.1:8008

实战  | 记一次渗透中遇见的apk逆向 sign解码分析
要保证App is running: true Module enable: true都为true
然后打开burp进行抓包,获取当前加密的sign值

实战  | 记一次渗透中遇见的apk逆向 sign解码分析

获取到的为d3开头的,打开网页点击成on状态,然后查看hash

实战  | 记一次渗透中遇见的apk逆向 sign解码分析
又陷入的坑里,发现并没有存在我想要的值,只能把最后的希望放到方法二了

2
实战  | 记一次渗透中遇见的apk逆向 sign解码分析

方法二:

首先需要判断下这个sign有没有把head包也做了加密,还是只是data的数据一些数据。
通过测试发现,更改cookie的信息和token都不会影响sign的认证,只有在改data里面的值会显示认证失败。
那就好办了直接把data要发送的数据,放到py脚本中,进行加密,看看加密后的结果一不一致

实战  | 记一次渗透中遇见的apk逆向 sign解码分析

奈斯

实战  | 记一次渗透中遇见的apk逆向 sign解码分析
实战  | 记一次渗透中遇见的apk逆向 sign解码分析

后言

实战  | 记一次渗透中遇见的apk逆向 sign解码分析

这是本小白的第一次进行sign的逆向,中间遇到了很多挫折,绕过很多弯路,搞了好几天才成功,总体过程中也学到了很多知识点,只能说坚持就是胜利,成功就在眼前。

实战  | 记一次渗透中遇见的apk逆向 sign解码分析

原文始发于微信公众号(渗透Xiao白帽):实战 | 记一次渗透中遇见的apk逆向 sign解码分析

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月10日21:45:38
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   实战 | 记一次渗透中遇见的apk逆向 sign解码分析https://cn-sec.com/archives/1831561.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息