本文最后更新于 2024-07-06,文章内容可能已经过时。

随着脚本的横行,京东慢慢的对接口做了一系列的校验,其中常见的有h5st、sign和log校验。

其中log校验作为目前活动升级或者新活动的主要校验手段,例如今年电商节的活动:双十一的热爱穿行以及双十二的炸年兽活动。log校验由前端的JoyyToken和埋点数据以及通过JSBridge调用APP的Blog和客户端获取的客户端数据四部分共同完成。

这次逆向获取JoyyToken请求中jdkey参数,该参数会在前端的活动页面通过JSBridge获取,同样在Blog生成的过程中同样会被使用一次(实测在blog中可以直接忽略该参数,说明阿东的程序员也偷懒了吗,哈哈)。

本次逆向以双十二活动炸年兽为基础。

需要软件:Fiddler、Jadx、frida

前置工作:

  1. 首先还是需要将活动的JS文件全部拷贝下来简单的格式化和解密一下JS的,京东还是不会那么蠢直接把.map文件放出来让我们直接还原代码的,这一步需要花费一点时间。

  2. 然后通过Fiddler的Auto Response功能自动截包,将线上的JS替换成我们本地处理好的JS,更容易断点调试。

1. 分析活动JavaScript

追到获取log参数的方法中,发现getAppFingerprint()方法,该方法为获取jdkey参数。

获取jdkey方法调用

关于jdkey参数,前端没有做什么事情,主要都在京东App中,直接使用Jadx分析京东App。

2. 分析京东App

打开Jadx拖入安卓端的京东App,找到JDAppUnite类查看一下方法。

image-20230115220917241

哦豁,反编译不出来,根据提示去首选项中打开显示不一致的代码

image-20230115221902434

这一下可以反编译出来,但是根据参数还是没有找到对应的方法,怀疑实际上是调用了其他地方的代码。直接上全局搜索把。

com.jingdong.common.web.javainterface.impl.WebJavaScript中找到对应的代码。那应该就是在这里调用的了。

image-20230115222203916

成功找到,那么接下来直接追一下这里面的实现就可以了。

image-20230115224332263

随便从网上找一下每个安卓版本对应的SDK值:

image-20230115224726052

3. 代码实现

拷走代码随便改一下,跑起来看看。

image-20230115225121392