首页
社区
课程
招聘
[原创]逆向分析某软件sign算法
发表于: 2022-9-13 20:17 17278

[原创]逆向分析某软件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(){

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 3
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//