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无法跳转的原因?
- 浏览器,或这webview提供的系统函数,无法看源码
- 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());//第一次MD5StringBuilder sb2 = new StringBuilder();sb2.append(MD5);//第二次MD5sb2.append(strArr2[longValue == 0 ? (char) 2 : (char) 1]);String upperCase = HashUtil.hash(MD5Util.MD5(sb2.toString())).toUpperCase();//第三次MD5try {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的输入值。
算法还原
未完待续