一、目标

我们来分析某东的sign签名算法,先搜索一个商品,抓包结果:

1:charles

二、步骤

sign是32位的字符串,从长度上看,很像md5,我们先用jadx全局搜索 sign=

1:jadx1

一共十几个结果,一个一个去hook肯定不现实,我们点进去分析代码找到了这个部分:

1:jadx2

这就简单了,我们在源头拦住,直接hook javax.crypto.spec.SecretKeySpec 相关的函数:

var secretKeySpec = Java.use('javax.crypto.spec.SecretKeySpec');
secretKeySpec.$init.overload('[B','java.lang.String').implementation = function (a,b) {var result = this.$init(a, b);console.log(">>> 算法名" + b);return result;
}

挂上我们心爱的frida跑着,Duang…… 某东app挂了,白屏,偶尔还重启。看来是监测到了被搞了。

之前看雪上读到过一篇检测 frida 的文章(参考链接在文末)。这里我们做了如下两步来反检测:

  1. 更名: 将frida-server改名为fenfeiserver
  2. 改端口: 手机里面用 fenfeiserver -l 127.0.0.1:8080 来启动; 电脑里面先映射 adb forward tcp:8080 tcp:8080; 然后启动 frida -H 127.0.0.1:8080 -l jd.js com.jingdong.app.mall

输出结果:

>>> 算法名HmacSHA256
mac ======================================
算法名:HmacSHA256
mac ======================================
doFinal参数:yingyan&{"msg":[{"appId":"","clientVersion":"9.2.2","buildCode":"85371","uuid":""}]}&85&android&9.2.2&xiaomi&Redmi 6A&uvReport&8.1.0&lc029&jd_AjVDrKGR&1344*720&27&1605345127514&xx-xx
doFinal结果(hex):3ac0a00ed48d8fffadef281d97b970c13b3c8dec06d685ae0d62615f28c7751b

其实从字面上也能看出这不是我们要的结果,SHA256的结果是64位的字符串,而我们需要的sign是32位的。

怎么办? 把jadx里面能搜到的sign hook了遍都没有找到,只好从http请求下手了。

我们hook http请求,找到sign所在的请求,然后打出堆栈信息

var OkHttpClient = Java.use("okhttp3.OkHttpClient");OkHttpClient.newCall.implementation = function (request) {var result = this.newCall(request);console.log(request.toString());var stack = threadinstance.currentThread().getStackTrace();console.log("http >>> Full call stack:" + Where(stack));return result;
};

输出结果

1:http

很明显这个http请求是我们的目标,但是这个堆栈没有给我们有用的提示,这应该是启动了一个新的线程来做的http请求,所以组装参数的函数没有体现在这里。

下面用一个比较猥琐的办法,hook currentTimeMillis

我们仔细观察一下,请求里面有个 st=1605338355285 换算一下正好是当前的时间戳,那么我们hook java获取当前系统时间函数,然后找到和http请求里面相同的时间,再打印出堆栈,不就可以找到组装参数的地方了嘛

var SystemClass = Java.use('java.lang.System');
SystemClass.currentTimeMillis.implementation = function(){var result = this.currentTimeMillis();console.log("==== " + result + " ====");return result;
}

结果还是令人沮丧,没有和http请求里面的值相同的时间戳,看来要么app并没有用currentTimeMillis函数,要么就是在so层把活偷偷的干了。

在so文件里面搜索 sign=

这次前方传来好消息

Binary file ./libjdbitmapkit.so matchse

看来有可能是这哥们干的,拖进ida伺候。

1:ida

找到它的调用者 Java_com_jingdong_common_utils_BitmapkitUtils_getSignFromJni,它应该就是目标了,hook之:

var checkHookG = Java.use('com.jingdong.common.utils.BitmapkitUtils');
checkHookG.getSignFromJni.implementation = function(a,b,c,d,e,f){var result = this.getSignFromJni(a,b,c,d,e,f);console.log(">>> checkHookG = " + b + ' / ' + c + ' / ' + d + ' / ' + d + ' / ' + f + ' \n rc= ' + result);return result;
}

1:rc

逮住了,就是它,收工。

三、总结

sign的查找要多方尝试,除了直接了当的找sign还可以从它的兄弟参数入手。

参考链接: https://bbs.pediy.com/thread-217482.htm 多种特征检测 Frida

Tip:

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

关注微信公众号,最新技术干货实时推送

某东签名算法解析(一)相关推荐

  1. Android逆向之旅--「最右」签名算法解析(ARM指令学习恶心篇)

    一.前言 今天开始我们后续会开展三篇左右的arm指令学习,因为之前一直都有同学和我说有没有详细的arm指令分析,这个之前的确一直没有好的样本,有的人可能说可以用自己写的C代码然后反编译so来学习,那样 ...

  2. 最右android工资,Android逆向之旅—最右App的签名算法解析(ARM指令学习不舍篇)

    一.逆向分析 本文继续来看最后一篇介绍ARM指令学习,之前的两篇文章已经详细介绍了ARM指令的基础知识,本文继续把剩下来的所有都介绍完了,首先一定要去看前面的基础篇和进阶篇,不然我都很难保证你看这篇文 ...

  3. IOS 某电商App签名算法解析(二) Frida RPC调用

    一.目标 Android下用frida来做rpc调用计算签名,我们已经玩的很熟练了. 今天介绍在IOS下的玩法.要点如下: 参数类型确认 NSDictionary NSArray等ObjectC对象的 ...

  4. 头条小视频和西瓜视频signature签名算法

    点击上方↑↑↑蓝字[协议分析与还原]关注我们 "分析今日头条内小视频和西瓜视频分享后浏览器打开所用的signature签名算法." 上月写的一篇关于使用微信的wxid加好友的文章, ...

  5. Live回顾:向卫东教授——5G赋予自动驾驶新前景

    基于5G的V2X当仁不让地成为能实现城市级自动驾驶的实时信息传输系统."未来,5G同DSRC合并已是大势所趋",美国密歇根大学迪尔伯恩分校的向卫东教授提到. 当前几乎所有的自动驾驶 ...

  6. IOS 联真机签名解决方案

    一.目标 我们之前介绍过 IOS 某电商App签名算法解析 二 Frida RPC调用和 IOS Theos Tweak 之 HelloWorld . 那么他们搭配起来能解决什么问题呢? 在Andro ...

  7. 加拿大各省接受公立教育的初始年龄汇总 — 供携子女赴加的访学、博后参考

    近年来到加拿大从事访问学者和博士后研究的申请者日益增多,有些申请者想带孩子同去上公立学校.因为加拿大各省教育局政策有差异,所以入学(包括学前班)年龄不同,为此知识人网小编整理本文为大家解惑答疑. 加拿 ...

  8. MSDN Webcast所有视频讲座的下载地址

    标题 难度 评分 时间 讲师 构建安全的应用程序 200 3.5 2004-9-7 孙巍 构建可靠的Web应用程序 200 3.5 2004-9-21 高驰 SharePoint Portal Ser ...

  9. 21.2.22 T2 多米诺骨牌 真·详解

    题面 Description 有一个 r∗cr * cr∗c 的矩形,和一些 1∗21*21∗2 的多米诺骨牌.如果想用这些骨牌刚好填满这个矩 形,使得没有位置是空出来的,多米诺骨牌也没有重叠.请问有 ...

最新文章

  1. 公司各个阶段 CTO 需要做什么?(下篇)
  2. 无重复数字的随机数字数组
  3. 最全面的百度地图JavaScript离线版开发
  4. 降低前端业务复杂度新视角:状态机范式
  5. 虚拟化精华问答 | 虚拟化的关键技术有哪些?
  6. java查找网站在百度排名_百度网站快排系统 - 网站排名如何优化?
  7. 若想学 HTML,应从何入手?
  8. vue标准时间改为时间戳_2021考研网上确认照片采集新标准公布 网上确认时间表...
  9. 第3章 快速开始:HelloWorld 《Kotin 编程思想·实战》
  10. 直播首屏耗时400ms以下的优化实践
  11. 等级保护2.0的变化
  12. UVA11584PartitioningByPalindromes
  13. 现在的BAT,就是曾经的外企
  14. Python基础之什么是字典?
  15. 网易2018校园招聘:游历魔法王国 [python]
  16. 2022.05面试总结
  17. 高版本android怎么玩低版本游戏,手机玩安卓系统安装变态版手游常见问题解决方法_android游戏安装教程详解...
  18. 【AI视野·今日Robot 机器人论文速览 第七期】Tue, 15 Jun 2021
  19. 如何用python批量下载这些视频?只需 15 行代码,即可轻松实现
  20. DynDNS 遭到 DDoS 攻击,半个美国互联网瘫痪

热门文章

  1. 计算机科学导论大一,(计算机科学导论期末复习资料.doc
  2. java判断数据库是否存在_java判断数据库是否存在的方法
  3. 数据库系统基础教程第三版 部分实验命令
  4. Java常用类(六):FilenameUtils类
  5. ABAQUS的错误提示(The desired vendor daemon is down)解决措施
  6. matlab 线性误差分析,基于MATLAB的直线度误差评定的程序设计
  7. 阿里云要分拆上市,腾讯云、百度云跟不跟?
  8. 解读:什么是Java的递归算法?
  9. 安装sogou输入法
  10. 计算机考研A区211大学,三本学生调剂A区211大学,自己的一些调剂经验供大学参考...