安卓逆向经典案例—H5appXX运维

在这里插入图片描述

H5app的class不一定是android.webkit.WebView
也可能是腾讯X5内核或者是uc webview
殊途同归也要去hook webview的系统函数和可调式方法setWebContentsDebuggingEnabled。

在这里插入图片描述

突破sign算法,输出协议和加密算法的作用是什么?

分析c-sign值

在这里插入图片描述

在加密的位置下断点

在这里插入图片描述

这里密码没有加密

在这里插入图片描述
找到setTimeout函数,用来设置加密的函数

在这里插入图片描述

登录后显示的setTimeout延时函数为什么是异步的?

进入函数

在这里插入图片描述

什么是极光推送

跟进去,定位到传递手机账号的位置,再跟

在这里插入图片描述
得到c-sign

在这里插入图片描述

'J{"c_timestamp":1719152459747,
"c_account":"12",
"c_sign":"23052081735759B6B882378F705AB0F7",
"upvs":"2024-06-23-ccssoft"}'

g.e无法跳转的原因?

  1. 浏览器,或这webview提供的系统函数,无法看源码
  2. VM文件应该想到函数是java代码,是js调用的java文件(函数)

在这里插入图片描述

找到关键代码就是上述浏览器中找到的值

在这里插入图片描述

这样就可以在java代码中还原c_sign了

public ModuleResult jsmethod_encryptCcssoft_sync(UZModuleContext uZModuleContext) {
        String[] strArr;
        JSONObject jSONObject = new JSONObject();
        Long valueOf = Long.valueOf(uZModuleContext.optLong("timestamp", new Date().getTime()));
        String optString = uZModuleContext.optString("msg", "32025601");
        String optString2 = uZModuleContext.optString("upvs", new SimpleDateFormat("yyyy-MM-dd").format(new Date()) + "-ccssoft");
        int longValue = (int) (valueOf.longValue() % 2);
        String[] strArr2 = {"bx1acuimpzf3k2eluw4ffh7sklmdshhtq0cifotpap2wm8qvd1k6psuokdcfjl04mi7th4q2t7kffmod9qj3huznncbbk4p9w46z6tp7lb282om4q5me7uigi7fl0nbt", "qw6bnqbshxkec2ytag0iqdinmt94hkajkdk9f5oa5dn2nzeosqvp0jfxq2elz6sqal7pcjjvi5rm1mgtnp3ob6bl5iueqjzqienlflaiwb5otzcnvful6kmwij3fcrj4", "enp1ogzjzz15fcd1a4ekwiacxlhwgygqd6mdd5ocnjipjnjcbjpeqtm2t7c92cyhapkomeqrfkdtglwlfipgscbt6lfbxxwmq2fudipm72ld8ygln78bnidw4i9od7ch"};
        Arrays.sort(new String[]{optString, String.valueOf(valueOf), strArr2[longValue], optString2});//四个参数:optString(设备ID),时间戳,数组中三个固定值,时间格式化后的参数
        String str = "";
        for (int i = 0; i < 4; i++) {
            str = str + strArr[i];
        }
        StringBuilder sb = new StringBuilder();
        sb.append(str);
        sb.append(strArr2[longValue == 0 ? (char) 2 : (char) 1]);
        String MD5 = MD5Util.MD5(sb.toString());//第一次MD5
        StringBuilder sb2 = new StringBuilder();
        sb2.append(MD5);//第二次MD5
        sb2.append(strArr2[longValue == 0 ? (char) 2 : (char) 1]);
        String upperCase = HashUtil.hash(MD5Util.MD5(sb2.toString())).toUpperCase();//第三次MD5
        try {
            jSONObject.put("c_timestamp", valueOf);
            jSONObject.put("c_account", optString);
            jSONObject.put("c_sign", upperCase);
            jSONObject.put("upvs", optString2);
        } catch (JSONException unused) {
        }
        return new ModuleResult(jSONObject);
    }

法一、抠代码

法二、可以直接使用自吐算法(如果算法是标准算法,代码又在java中,可以直接跑自吐)

'J{"c_timestamp":1719155384875,"c_account":"12","c_sign":"3542F4335AAD34E4EE5B9401558E2B0C","upvs":"2024-06-23-ccssoft"}'

在这里插入图片描述

这样就得到三次MD5的输入值。

算法还原

未完待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吕昀hui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值