逆向 x蜂窝 zzzghostsigh
版本 9.3.7
新版本是64位的so
charles 抓包
目标字段 zzzghostsigh
frida java
function hook_xPreAuthencode() {
Java.perform(function() {
var helper = Java.use("com.mfw.tnative.AuthorizeHelper");
helper.xPreAuthencode.implementation = function(ctx, str1, str2) {
console.log("xPreAuth-str1", str1);
console.log("xPreAuth-str2", str2);
var ret = this.xPreAuthencode(ctx, str1, str2);
console.log("xPreAuth-ret", ret);
console.log("===========");
return ret;
}
})
}
function hook_xPreAuthencode_event() {
Java.perform(function() {
var helper = Java.use("com.mfw.tnative.AuthorizeHelper");
helper.xPreAuthencode.implementation = function(ctx, str1, str2) {
str1 = "ever"
console.log("xPreAuth-str1", str1);
console.log("xPreAuth-str2", str2);
var ret = this.xPreAuthencode(ctx, str1, str2);
console.log("xPreAuth-ret", ret);
console.log("===========");
return ret;
}
})
}
setTimeout(() => {
//hook_xPreAuthencode();
hook_xPreAuthencode_event();
}, 1000);
模拟参数 ever
xPreAuth-str1 ever
xPreAuth-str2 com.mfw.roadbook
xPreAuth-ret a5f8420454b5a08684c3605f83fe4453ea05efd7
从加密结果可知 无论我们输入的长度多长 都输出固定长度密文,那可以猜测这可能是一个哈希加密
so 层 libmfw.so
搜索java 没有 xPreAuthencode
那就是动态注册:搜索load
sub_30548
sub_30548。是一个签名校验函数。因为点进去会看到签名校验的三兄弟。
sub_312E0
将入参修改一下,然后[v9是和inputtext],输入的值有关。[v13是一个buffer]。[v10是v9的长度]。那么由此可得这个sub_312E0,
应该就是加密的函数,因为sub_2E1F4,没有和输入值有关的。并且v13是一个buffer,这是C语言常用的一种格式。会将加密值放到
一个buffer中。
发现可疑的数字,疑似sha1加密,因为sha1的magic number就是5个,在数字上按H将其转换为16进制表示
修改
获取sha1 py源码
SHA1 py 源码
SHA1 java 源码
我们期望的正确值 ever:a5f84204 54b5a086 84c3605f 83fe4453 ea05efd7
运行源码返回值:55472e5395290a0b2ecaa2898fe883d58747cb7d
修改1:修改初始向量,后面的两位是修改过的(v30[3] v30[4])
修改源码后的返回值:d6b63f45cc70fee14aaad95181f8eb4385a7b59d
修改2:修改轮询
修改源码后的返回值 a5f84204 54b5a086 be6f01d5 4a52a2dd ea05efd7
修改3:最后一次轮询
修改源码后的返回值 a5f84204 54b5a086 84c3605f 83fe4453 ea05efd7