查看原文
其他

对某app的加密定位与hook

hackerhack 刨洞安全团队 2023-12-16

这是某专属 src 的 app 资产,比较冷门,无意间收集到了

当初因为一些原因,搁置了下来,没有进行测试,现在手头有空了,回过头来看看

开始

此 app 可认为给部分公司内的人员使用,故无注册功能

开局只有一个登录框

使用 burp 抓登陆包时,发现了加密数据包

一连抓了两个,判断加密参数对变化

大致可以推断出 sign 是随着 request_data 中 credential 对变化而变化的

把 app 拖入 jdax,很幸运,没有进行任何混淆处理

对credential的定位

快速定位 credential 的加密处

loginresetupdate,根据经验判断,果断点击第一个

我们发现 request_data 的其他参数基本都是固定的

可以看到 credential 的加密与 CipherUtil 中的 encryptTokenpassword 方法相关,再次点击进入

convertAuthUsername 方法本质上返回一个 string,并无卵用

根据代码逻辑分析,可知:

str1->username
str2->id_card
str3->password
str4->old_password,也就是空

这里唯一没法判断的是 str2,但是根据经验推测,id_card 是身份证号,而这种数据应该是登陆后保存在本地才能获取的,初始化登陆时多半为空

直接果断编写 hook 脚本,看看是否跟我们猜想的一样:

function credital_encrypt(){
    Java.perform(function(){
        console.log("Fucking credital...")
        Java.use("com.richfit.qixin.utils.CipherUtil").encryptTokenpassword.implementation = function(str1,str2,str3,str4){
            //str1->username; str2->""; str3->password; str4->""
            var res = this.encryptTokenpassword("test1","","123456","")
            //send(res);
            console.log(res);
            return res;
            }
        })
}
function main(){
    credital_encrypt();
}
setImmediate(main);

这里我采用了 attach 方式启动,更加方便

果不其然,生成的结果与原数据包中的 credential 一模一样(数据包2)

对sign的定位

接下来再定位 sign

现在的 app 中很多关键词都会被集成写入某个类中,jdax 自带的交叉引用搜索也有时候不灵

所以这里换用关键词 sign_method

点击进入

与原猜想相符合,sign 关键词被写入了类中

sign 为字符串 64c8d2a0e0b2c0bbb611130862cd7b62+str2+str2.length 的 md5 加密值

而 str2 也在下面指明了是 request_data 的值,那一切也就迎刃而解了

编写 hook 脚本:

function md5_encrypt(){
    Java.perform(function(){
        console.log("Fucking Md5...")
        Java.use("com.richfit.rfutils.utils.MD5Utils").digest.implementation = function(a){
            var res = this.digest('64c8d2a0e0b2c0bbb611130862cd7b62{"login_type":"manual","credential":"7S809HYx8eUGDAwKEo2TWUUUrVpj4XgTswTOyU8aS9pdqd+SZqDVP16ieWLj5QzmgXQx4gESwAddmNFSgY1ePclyxnA13JJ8gXQx4gESwAdSOJnrVtdBwjyuh1SMWDnvM6oFcq35MPhnLn91ABYP5hkfnlYuHaO9BSeaVdv2e2Y=","device_type":"android","is_brief":"true"}253')
            //send(res);
            console.log(res);
            return res;
            }
        })
}
function main(){
    md5_encrypt();
}
setImmediate(main);

返回结果

与原 md5 值相同,说明我们的 hook 思路是正确的

现在我们能对整个数据包进行加密解密的工作

到此完结

结束

本文利用了一个简单的例子,起到抛砖引玉的作用,并未真正进行漏洞挖掘

接下来我们的测试就方便很多了,比如利用 Brida、编写 burp 插件帮助我们进行测试,但不是本文的重点,故不进行讲述


本文作者:hackerhack原文地址:https://xz.aliyun.com/t/12623


关注公众号后台回复 0001 领取域渗透思维导图,0002 领取VMware 17永久激活码,0003 获取SGK地址,0004 获取在线ChatGPT地址,0005 获取 Windows10渗透集成环境,0006 获取 CobaltStrike 4.9.1破解版


加我微信好友,邀请你进交流群





往期推荐



对某金融App的加解密hook+rpc+绕过SSLPinning抓包

疑似境外黑客组织对CSDN、吾爱破解、bilibili等网站发起DDoS攻击

Fofa新产品 - 绕CDN溯源真实IP!

Cobalt Strike 4.8 正式发布上线!

团队在线Windows进程识别正式内测

突发!微信疑似存在RCE

《永结无间》客户端RCE漏洞

NSA组织"二次约会"间谍软件功能复现及加解密分析

发现新恶意团伙"紫狐"!针对finalshell的供应链事件

APK逆向分析入门-以某斗地主APP为例

APK逆向分析入门-以某车载音乐APP为例

记一次渗透中因为JS拿下整个云

记一次红队经历

日常记录对某站点的实战渗透

国产之光IDE,自带国产特色VIP功能!

善攻者,动于九天之上。善守者,藏于九地之下!

谈一谈我是如何入门安全的,七年安全生涯总结

备用号,欢迎关注


继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存