app逆向-apk的sign签名绕过

admin 2025年3月24日19:44:11评论8 views字数 2579阅读8分35秒阅读模式

前言

来自Ricordi..学员的app逆向破解签名的案例!

app破解过程

在写完解密脚本后发现存在签名认证所以我们需要进行绕过sign才能重发

app逆向-apk的sign签名绕过

然后我们修改数据包重发过后报错

app逆向-apk的sign签名绕过

这个时候呢我们就需要去逆向sign位置去绕过他,这里我们使用到hook方法中的排序定位去锁定sign函数被调用的位置,什么是排序定位呢?

排序定位(collections)

在APP应用程序请求数据时,为了确保数据不被篡改,通常会在请求参数加上一个sign签名算法,而这个签名算法一般使用消息摘要算法来进行加密,如MD5、SHA、MAC算法等。

一般APP应用程序在进行数据签名的时候,会先对数据进行排序。因为摘要结果不可逆,服务端需要根据接收到的数据来复现算法,以此来比对摘要结果。而排序可以保证不会因为参数顺序不同而导致摘要结果不同。

脚本如下:

Java.perform(function () {    varcollections=Java.use("java.util.Collections");    collections.sort.overload('java.util.List').implementation=function (a) {        varresult=Java.cast(a, Java.use("java.util.ArrayList"));        console.log("collections.sort List: ", result.toString());        showStacks();        returnthis.sort(a);    }    collections.sort.overload('java.util.List''java.util.Comparator').implementation=function (a, b) {        varresult=Java.cast(a, Java.use("java.util.ArrayList"));        console.log("collections.sort List Comparator: ", result.toString());        showStacks();        returnthis.sort(a, b);    }})functionshowStacks() {    Java.perform(function () {        console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Exception").$new()));    });}

我们将这个脚本使用进行hook一下,看看效果

app逆向-apk的sign签名绕过

然后被com.******.online.http.RequestUtil.paraMap调用所有我们反编译去看一下

app逆向-apk的sign签名绕过

我们锁定到代码后使用frida打印一下看看

app逆向-apk的sign签名绕过

我们右键代码部分生成frida片段进行打印一下

app逆向-apk的sign签名绕过

打印代码如下

app逆向-apk的sign签名绕过

然后我们进行输入打印一下

app逆向-apk的sign签名绕过

app逆向-apk的sign签名绕过

sign参数

我们输入的值确实传入了sign参数进行会话验证

app逆向-apk的sign签名绕过

我们发现他传入了addMap这个是一个HashMap的一个数据所以我们使用打印HashMap的方法去打印一下这个参数

app逆向-apk的sign签名绕过

脚本如下

TargetClass.exampleHashMapMethod.implementation=function (hashmap){    console.log("n直接打印hashmap结果:n"+hashmap);    //遍历 map    varmap=hashmap.keySet().iterator();    while (map.hasNext()){        varkeySet=map.next().iterator();        varvalueSet=hashmap.get(keySet);        console.log("n遍历map打印hashmap结果:nkey:"+keySet+"nvalue:"+valueSet);    }        //修改map        hashmap.clear();        hashmap.put("change","66666");        returnthis.exampleHashMapMethod(hashmap);}

我们将这段代码中我们所需要的复制一下然后拿到我们的hook代码中遍历一下,注意我们需要将其中的hashmap改为源代码中的addMap

app逆向-apk的sign签名绕过

我们的打印结果如图,我们打印了在进行添加sign之前的账号,密码,时间戳等这些东西,这些函数和数据在源代码中也能看的出来是先获取addMap中的数据后在进行添加sign

app逆向-apk的sign签名绕过

代码中也说明了,我们也可以打印一下md5看一下

app逆向-apk的sign签名绕过

处理frida片段(md5)

生成frida片段去登录打印一下md5函数进行处理后的这个字符串的值

app逆向-apk的sign签名绕过

在结果中也能看出来,将string这一段的字符串进行md5加密得到

app逆向-apk的sign签名绕过

app逆向-apk的sign签名绕过

app逆向-apk的sign签名绕过

所以我们要去提交我们修改过后的数据就需要进行这一步操作服务器才会接收我们的数据

签名绕过

为什么服务器会知道呢,因为开发人员也会同样的在后端配置相同的加密和方法去比对sign中的数据是否和出去sign值的参数拼接进行一次md5的加密判断是否相同,相同则认为数据包没有被篡改,否则判断存在篡改行为执行丢弃数据包。

app逆向-apk的sign签名绕过

所以我们需要将这两个数据都进行修改才能让服务接收,所以我们就去hook md5拦截md5的数据并篡改即可,将刚刚生成的hook md5的片段放到我们写的脚本中去,注意我们需要修改一下参数才能进行发送到python在联动burp

app逆向-apk的sign签名绕过

我们这里拦截了签名原文和加密后的原文数据包我们需要修改两次

app逆向-apk的sign签名绕过

app逆向-apk的sign签名绕过

我们将签名前的原文和签名后的原文都进行修改后服务器响应密码错误

app逆向-apk的sign签名绕过

app逆向-apk的sign签名绕过

app逆向-apk的sign签名绕过

至此我们的sign就绕过了并且服务器正常响应了我们修改后的数据

总结

感谢学员分享,已发kfc奖励。感兴趣的可以公众号回答回复"深情哥"进群,有公开课会在群里面通知,包括审计和src。edu邀请码获取也可以联系深情哥。

内部edu+src培训,包括src挖掘,edu挖掘,小程序逆向,js逆向,app渗透,导师是挖洞过30w的奥特曼,edu上千分的带头大哥!!!联系深情哥即可。

app逆向-apk的sign签名绕过

原文始发于微信公众号(湘安无事):app逆向-apk的sign签名绕过

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

发表评论

匿名网友 填写信息