安卓逆向(x车app,登录token)
一、抓包分析随便输入个手机号之后点击登录,通过抓包可以看到这个token值是加密的,那么接下来就找这个token的生成地方二、静态分析代码打开jadx(没有的可以去github找找),把apk拖进来,然后全局搜token发现有很多个比较难定位,换请求地址搜搜看(appapi-gw.yiche.com/app-biz-svc/user/login)(看到这些0oO就想起了搞同盾滑块那段折磨人的日子…
·
一、抓包分析
随便输入个手机号之后点击登录,通过抓包可以看到这个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值就分析完毕啦,因为安卓逆向是最近才捡起来学的,所以更新的案例可能比较简单,慢慢来吧,溜了溜了…
更多推荐
已为社区贡献2条内容
所有评论(0)