一、抓包分析
在这里插入图片描述
随便输入个手机号之后点击登录,通过抓包可以看到这个token值是加密的,那么接下来就找这个token的生成地方
二、静态分析代码
打开jadx(没有的可以去github找找),把apk拖进来,然后全局搜token发现有很多个比较难定位,换请求地址搜搜看(appapi-gw.yiche.com/app-biz-svc/user/login)
在这里插入图片描述
(看到这些0oO就想起了搞同盾滑块那段折磨人的日子…听说看多这玩意会近视…)
先右键那个变量,然后点查找用例,然后跳到这里来,然后右键图中箭头的地方,跳到声明处
在这里插入图片描述
接下来就到了真正token加密的地方,这里看到DES/CBC/这些关键字眼
在这里插入图片描述
下图是js中DES加密方法的调用,和java代码稍微对比一下就能知道key和iv了

//DES加密
function encryptByDES(message, key){
    var keyHex = CryptoJS.enc.Utf8.parse(key);
    var encrypted = CryptoJS.DES.encrypt(message, keyHex, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
    return encrypted.ciphertext.toString();
}
可以看出key和iv分别是这两个,但这是byte类型的,用下面的代码转一下就行
public static byte[] O000000o = {109, 114, 88, 110, 53, 112, 72, 88};
public static byte[] O00000Oo = {107, 57, 53, 56, 57, 73, 97, 117};


//byte转string
function byteToString(arr) {
	if(typeof arr === 'string') {
		return arr;
	}
	var str = '',
		_arr = arr;
	for(var i = 0; i < _arr.length; i++) {
		var one = _arr[i].toString(2),
			v = one.match(/^1+?(?=0)/);
		if(v && one.length == 8) {
			var bytesLength = v[0].length;
			var store = _arr[i].toString(2).slice(7 - bytesLength);
			for(var st = 1; st < bytesLength; st++) {
				store += _arr[st + i].toString(2).slice(2);
			}
			str += String.fromCharCode(parseInt(store, 2));
			i += bytesLength - 1;
		} else {
			str += String.fromCharCode(_arr[i]);
		}
	}
	return str;
}

现在key和iv都知道了,但是加密的内容我们还不知道,可以把抓包的token值放到WT-JS工具解密看下加密的内容
在这里插入图片描述
可以看到加密的内容出来了
三、请求验证
在这里插入图片描述

到此易车app的token值就分析完毕啦,因为安卓逆向是最近才捡起来学的,所以更新的案例可能比较简单,慢慢来吧,溜了溜了…

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐