-
-
[原创]逆向分析某软件sign算法
-
发表于: 2022-9-13 20:17 17278
-
hook结果截图如下:
解决此错误,需继承AbstractJni类实现callStaticObjectMethod函数与callIntMethod函数,在两个函数中补充java层调用即可
运行unidbg代码获取结果
逆向分析某软件网络请求中sign字段算法
逆向分析某软件网络请求中sign字段算法
jadx
ida
frida
charles
unidbg
jadx
ida
frida
charles
unidbg
a.post请求中的header中存在sign字段,如下图:
a.post请求中的header中存在sign字段,如下图:
b.定位sign字段:
在jadx中定位sign字段:
b.定位sign字段:
在jadx中定位sign字段:
c.分析上一步骤中代码e13的值获取,定位hook wh.a0中的e函数 (通过String e13
=
a0.e(sb3.toString()); 代码得知)
wh.a0中的e函数代码:
c.分析上一步骤中代码e13的值获取,定位hook wh.a0中的e函数 (通过String e13
=
a0.e(sb3.toString()); 代码得知)
wh.a0中的e函数代码:
a函数代码如下:
a函数代码如下:
e函数hook脚本
function test3(){
console.log(
" start script"
);
Java.perform(function(){
var clazz1
=
Java.use(
"wh.a0"
);
clazz1.e.overload(
"java.lang.String"
).implementation
=
function(str1){
console.log(
"str1 e wh.a0---> "
,str1);
var
str
=
this.e(str1);
console.log(
"str e wh.a0---> "
,
str
);
return
str
;
}
});
}
hook结果:
入参 :str1 e wh.a0
-
-
-
> {
"body"
:
"8Tz0XVDUD6QZP6LTMrPkz76wGAobLxV6q2/rblfQeJ86b1nMxkhkN/nctnCdx2Cu"
}
/
account
/
v4
/
login
/
passwordV1QiLCJhbGciOiJIUzI1NiJ9
出参 :
str
e wh.a0
-
-
-
>
4c225a29b975221241fda831b77827bc
入参分析:
{
"body"
:
"8Tz0XVDUD6QZP6LTMrPkz76wGAobLxV6q2/rblfQeJ86b1nMxkhkN/nctnCdx2Cu"
} 为post请求中的参数部分
/
account
/
v4
/
login
/
password 为请求中的一部分
V1QiLCJhbGciOiJIUzI1NiJ9 为算法获取到的信息(com.xxx.common.utils.b类中的h函数得出)
e函数hook脚本
function test3(){
console.log(
" start script"
);
Java.perform(function(){
var clazz1
=
Java.use(
"wh.a0"
);
clazz1.e.overload(
"java.lang.String"
).implementation
=
function(str1){
console.log(
"str1 e wh.a0---> "
,str1);
var
str
=
this.e(str1);
console.log(
"str e wh.a0---> "
,
str
);
return
str
;
}
});
}
hook结果:
入参 :str1 e wh.a0
-
-
-
> {
"body"
:
"8Tz0XVDUD6QZP6LTMrPkz76wGAobLxV6q2/rblfQeJ86b1nMxkhkN/nctnCdx2Cu"
}
/
account
/
v4
/
login
/
passwordV1QiLCJhbGciOiJIUzI1NiJ9
出参 :
str
e wh.a0
-
-
-
>
4c225a29b975221241fda831b77827bc
入参分析:
{
"body"
:
"8Tz0XVDUD6QZP6LTMrPkz76wGAobLxV6q2/rblfQeJ86b1nMxkhkN/nctnCdx2Cu"
} 为post请求中的参数部分
/
account
/
v4
/
login
/
password 为请求中的一部分
V1QiLCJhbGciOiJIUzI1NiJ9 为算法获取到的信息(com.xxx.common.utils.b类中的h函数得出)
d.分析b步骤中的a13值获取,定位到的加密截图如下:
d.分析b步骤中的a13值获取,定位到的加密截图如下:
通过上图得知,getEncryptDeviceId()函数为native层实现,native中部分算法如下:
通过上图得知,getEncryptDeviceId()函数为native层实现,native中部分算法如下:
a.使用frida 的rpc功能验证第
4
步b步骤中的e13和a13的值的获取函数是否正确
b.e13的rpc代码如下:
a.使用frida 的rpc功能验证第
4
步b步骤中的e13和a13的值的获取函数是否正确
b.e13的rpc代码如下:
function test4(){
console.log(
" start script"
);
Java.perform(function(){
var clazz
=
Java.use(
"wh.a0"
);
var str1
=
"{\"body\":\"8Tz0XVDUD6QZP6LTMrPkz76wGAobLxV6q2/rblfQeJ86b1nMxkhkN/nctnCdx2Cu\"}/account/v4/login/passwordV1QiLCJhbGciOiJIUzI1NiJ9"
var str2
=
clazz.e(str1);
console.log(
"str2 e wh.a0-----> "
,str2);
});
}
rpc.exports
=
{
test4:test4
}
test4()
输出结果:
str2 e wh.a0
-
-
-
-
-
>
4c225a29b975221241fda831b77827bc
function test4(){
赞赏记录
参与人
雪币
留言
时间
伟叔叔
为你点赞~
2023-3-18 01:19
一笑人间万事
为你点赞~
2023-1-11 17:32
纪元
为你点赞~
2022-11-19 03:46
赞赏
看原图
赞赏
雪币:
留言: