某电商App sign签名算法解析(六)

公众号: 奋飞安全 等级 589 0 0
标签:

一、目标

sign的入参是加密的,不过带有很明显的两个特征,一个是 == 结尾,再一个就是 R4iSK 开头。

有这两个特征,我们就可以入手了。

某电商App sign签名算法解析(六)

二、步骤

先从Base64入手

== 结尾的数据大概率是Base64,我们先Hook下

// Base64
var Base64Class = Java.use("android.util.Base64");
Base64Class.encodeToString.overload("[B", "int").implementation = function(a,b){
    var rc =  this.encodeToString(a,b);        
    console.log(">>> Base64 " + rc);
    return rc;
}

跑一下

某电商App sign签名算法解析(六)

结果倒是有了,不过不是我们想要的,先留着吧,说不定以后用的到。

匹配 R4iSK 开头

这个套路我们很熟练了,

// 靠字符串去定位
var strCls = Java.use("java.lang.StringBuilder");
strCls.toString.implementation = function(){
    var result = this.toString();

    if(result.toString().indexOf("R4iSK") == 0 && result.toString().length < 200)
    {
        console.log(result.toString());

        var stack = threadinstance.currentThread().getStackTrace();
        console.log("Rc Full call stack:" + Where(stack));

    }
    return result;
}

愉快的跑一下

某电商App sign签名算法解析(六)

这次逮住了,虽然这个 CrashReport 的类名有点怪怪的

Hook 处理函数

var OperCls = Java.use("com.jxxxxong.sdk.xxcrashreport.a.a.a");
OperCls.a.overload('[B').implementation = function(a){
        var result = this.a(a);

        var StrCls = Java.use('java.lang.String');
        var inStr = StrCls.$new(a);

        console.log(inStr + " >>> " + result);

        return result;
}

入参是个 byte[] ,返回值是个 看上去像是Base64 但是大概率又不是 Base64 的东东

打印 byte[] 有两种方案,一种是直接转成Hex字符串打出来,一种是赌他实际是个String,直接转成String打印出来。我们这里先尝试转成String

 >>> R4iSKKKKKKKKKBC0CtGnLKMgYWz/LGKKKK==

打印出来的结果是这样的,入参没有打印出来,说明入参不是简单的 String.getBytes()。

往上回溯堆栈

我们继续沿着堆栈上溯,找找 a.o 的init函数,

某电商App sign签名算法解析(六)

发现了这个入参的byte[] 经历了 一次 xxcrashreport.a.a.a.b 函数的洗礼。

点进去看看 发现 原来是做了一次zip压缩。 啥也别说了,先 Hook这个b函数

OperCls.b.implementation = function(a){
        var StrCls = Java.use('java.lang.String');
        var inStr = StrCls.$new(a);

        console.log(inStr + " >>> ");

        var result = this.b(a);            
        return result;
}

再跑一下,结果出来了。

{"msg":[{"appId":"fba8ae5a5078417d90ae1355af234d4f","clientVersion":"10.3.2","buildCode":"92141","appArch":"32"}]} >>> 
 >>> R4iSKKKKKKKKKK3Ckm6NCKyP4XpntPMcsmTiVIdoeOlPYBLNS1PK0O4e747X79c5P3zFQbh3LbJlFUCRaaIQTPKmipOYkJUu6OAqZT1xx6MMacwy/v5yxRvbdYAwdhXVCF7zmi+DHbQ16PPDpn/R9PPnPifGbirJeG9yKKKK

收工~ 太冷了,鲜啤就不上了,上二锅头。

三、总结

原文String调用一次getBytes(),之后转成了 byte[],然后调用 b 函数做一次zip压缩,最后调用一次 a 函数做了一次魔改了Base64操作。

这次app唯一的破绽就在于密文的开头是不变的,所以我们在做加密的时候尽量保证每次的结果都不一样,而且密文要无规律。

某电商App sign签名算法解析(六) 君子务本,本立而道生

TIP: 本文的目的只有一个就是学习更多的逆向技巧和思路,如果有人利用本文技术去进行非法商业获取利益带来的法律责任都是操作者自己承担,和本文以及作者没关系,本文涉及到的代码项目可以去 奋飞的朋友们 知识星球自取,欢迎加入知识星球一起学习探讨技术。有问题可以加我wx: fenfei331 讨论下。

关注微信公众号: 奋飞安全,最新技术干货实时推送

收藏
评论区

相关推荐

某站App签名算法解析(一)
一、目标我们来分析某站 App的sign签名算法,先搜索一下 游戏 ,抓包结果: 二、步骤 这个sign依然是32位的字符串都9020年了,这种规模用户的App应该是不会裸奔在java层了,我们就直接一点,在so里面搜索 sign可惜没有结果…… 藏起来的东西一定是重要的东西so层导出函数给java层调用,有两种方法,一种是静态注册,直接会体现在so的导出表
https://cloud.tencent.com/developer/article/write/1830331
一、目标今天的目标是这个sign和appcode 二、步骤 Jadx没法上了app加了某梆的企业版,Jadx表示无能为力了。 FRIDADEXDumpDexDump出来,木有找到有效的信息。 Wallbreaker葫芦娃的Wallbreaker可以做些带壳分析,不过这个样本,用Frida的Spawn模式可以载入,Attach模式会失败。而直接用Objecti
IOS 某电商App签名算法解析(二) Frida RPC调用
一、目标Android下用frida来做rpc调用计算签名,我们已经玩的很熟练了。今天介绍在IOS下的玩法。要点如下: 参数类型确认 NSDictionary NSArray等ObjectC对象的构造和复制 ObjectC 类方法和对象方法的调用 附送福利, ObjectC的nil 参数如何构造 二、步骤 参考Android下的玩法参照 [某段子App协议分
某酒店App sign、appcode签名解析(二) 脱壳分析
一、目标之前我们介绍过 。带壳分析也是迫不得已,谁不希望零距离接触呀。App升级了 5.3.3,我们的工具也升级了。今天的新朋友是 BlackDex 脱壳 延时Hook 二、步骤 BlackDex脱壳 安装BlackDex 在显示的进程列表中选择 com.platexx.boxxoota 是的,壳已经脱好了,脱壳后的文件在 /sdcard/Android/d
某内容电商App sign签名分析 复习下之前的技巧
一、目标现在内容电商,社交电商,直播电商等等概念多的眼花缭乱,终极目的就一条,卖货给你。正如我们分析他的sign签名一样,套路就一条, jadx + frida这个sign数了数,正好32位,难道是 md5 ? 二、步骤 上jadx先搜索下 "sign" 记得带上引号。结果只有40多个,而且第二个开上去就有眼缘,点进去看看String a m7166a(b
Java电商项目
\[toc\] [到Github获取源码请点击此处](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fgithub.com%2Fliuyj24%2FAwesome-Shop) =========================================================
#华为推送# 电商应用如何提高用户购买率?推送服务助您一臂之力,现在接入更有专人为您解决技术问题
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201116140523923.png#pic_center)   新用户留存率、复购率低? 如何提高用户活跃和留存?   缺乏有效触达用户的渠道? 如何精准触达用户?   ……   在电商行业高速发展过程中,APP运营无法避免上述问题。   结合华为推送功能,我
Android 网络性能监控方案
> 无论是 Android app 还是 Jar 应用,代码一旦分发出去,都会以某种形式处于不可信环境中,难免被有心人分析破解。隐藏在代码中的秘密,无论是私有算法,或是私有协议,或者是加解密秘钥,都可能被攻击者破解出来,然后侵犯原作者的商业利益或知识产权。所以应用被逆向破解是商业风险源头之一。 1:移动应用安全现状分析 ------------ 根据工信
React技术栈实现XX点评电商App
> 项目地址:[https://github.com/Nealyang/React-Fullstack-Dianping-Demo](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fgithub.com%2FNealyang%2FReact-Fullstack-Dianping-Demo)
Spring Cloud微服务架构从入门到会用(三)—服务间调用Feign
微服务最重要的一个功能是服务间调用,各个服务互相依赖。比如电商系统有订单服务,有库存服务。在我们购买一件商品的时候,需要生成订单和减库存。这里我们就要用到服务间调用Feign。 Feign是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求,而不用像Java中通过封装HTTP请求报文的方式直接调用。 接下来我们新建两个modu
某A系电商App x-sign签名分析
一、目标前不久(我去,都大半年了)分析过 我们找到了几个伪装成so的jar包。虽然rpc调用ok了,但是它的实际运算过程还是在so里面的。今天我们从它们同族的App来入手,利用Native层字符串定位的方式来定位下在哪个so中去做的运算。App版本: v4.15.1 二、步骤 特征字符串定位一开始选择的特征字符串是 x ,后来发现没有 xsign 好使In
某A系电商App doCommandNative浅析
一、目标李老板: 奋飞呀,xsign你都水了好几篇了,一直在Apk里面打转,咱们啥时候分析分析它的so?奋飞: 循序渐进嘛,我们上次刚定位了它的so,今天我们来分析分析。App版本: v4.15.1 二、步骤 Native层的入口先回忆下这个堆栈这个jni函数有两个参数,第一个参数是int型,第二个参数是Object数组我们先上frida看看它是不是我们的目
某电商App 返回数据加密解密分析(四)
一、目标最近在抓包某电商App的时候发现一个加密数据,它在做通讯地址请求的时候,请求数据做了加密。返回数据中的地址信息也是密文。今天我们的目标就是这个数据的加密解密。App版本: v10.3.0 二、步骤 分析一下1、数据的结尾是"",说明是Base64编码,那么我们可以尝试去Hook Base64相关函数,然后打印堆栈。2、返回数据格式是 json,那么我
某电商App sign签名算法解析(五)
一、目标李老板: 奋飞呀,据说某电商App升级了,搞出了一个64位的sign。更牛的是入参都加密了!奋飞:这么拉风,拉出来咱们盘盘。v10.3.2 二、步骤 32位和64位我们掌握了那么多方法,先搜字符串呢?还是先Hook呢?子曾经曰过:看到32位签名就要想起MD5和HmacSHA1,看到64位签名就要想起HmacSHA256。那就先搞搞java的密码学相关
某电商App sign签名算法解析(六)
一、目标sign的入参是加密的,不过带有很明显的两个特征,一个是 结尾,再一个就是 R4iSK 开头。有这两个特征,我们就可以入手了。 二、步骤 先从Base64入手 结尾的数据大概率是Base64,我们先Hook下// Base64var Base64Class Java.use("android.util.Base64");Base64Class.e