【JavaScript 逆向】拼多多 anti_content 参数逆向解析

article/2025/9/19 1:54:25

前言 

现在一些网站对 JavaScript 代码采取了一定的保护措施,比如变量名混淆、执行逻辑混淆、反调试、核心逻辑加密等,有的还对数据接口进行了加密,这次案例是通过补环境过加密。

声明

本文章中所有内容仅供学习交流,相关链接做了脱敏处理,若有侵权,请联系我立即删除!

案例分析

目标网址:

aHR0cHM6Ly9tb2JpbGUueWFuZ2tlZHVvLmNvbS8=

数据接口:

aHR0cHM6Ly9tb2JpbGUueWFuZ2tlZHVvLmNvbS9wcm94eS9hcGkvc2VhcmNoX3N1Z2dlc3Q=

以上均做了脱敏处理,Base64 编码及解码方式:

import base64
# 编码
# result = base64.b64encode('待编码字符串'.encode('utf-8'))
# 解码
result = base64.b64decode('待解码字符串'.encode('utf-8'))
print(result)

常规 JavaScript 逆向思路

一般情况下,JavaScript 逆向分为三步:

  • 寻找入口:逆向在大部分情况下就是找一些加密参数到底是怎么来的,关键逻辑可能写在某个关键的方法或者隐藏在某个关键的变量里,一个网站可能加载了很多 JavaScript 文件,如何从这么多的 JavaScript 文件的代码行中找到关键的位置,很重要;
  • 调试分析:找到入口后,我们定位到某个参数可能是在某个方法中执行的了,那么里面的逻辑是怎么样的,调用了多少加密算法,经过了多少赋值变换,需要把整体思路整理清楚,以便于断点或反混淆工具等进行调试分析;
  • 模拟执行:经过调试分析后,差不多弄清了逻辑,就需要对加密过程进行逻辑复现,以拿到最后我们想要的数据

接下来开始正式进行案例分析:

寻找入口

打开开发者人员工具,进行抓包,从响应预览中可以看到搜索内容的下拉列表的接口为 search_suggest?pdduid=XXX&query=XXX:

负载中可以看到一些接口 url 的参数,query 就是搜索栏中输入的内容,很明显,anti_content 参数经过加密,接下来就需要对这个参数进行逆向分析:

逆向分析

anti_content 是接口 url 中的参数,且下拉数据是通过 ajax 加载的,所以通过 Hook 或者 XHR 断点的方式都能成功定位,不过大道至简,这里直接全局搜索 anti_content,因为只有一个 js 文件中包含这个关键字:

点击 SearchViewUI.js 文件跟进去,然后通过左下角的 { } 对其进行格式化操作,ctrl + f 局部搜索 anti_content 关键字,只有一个结果,在第1949 行,在 第1939 行打下断点调试:

可以看到 f 即 anti_content 参数的值,f 定义在第 1938 行,f = e.sent,此时加密后的参数已经生成了,所以需要向上跟栈,看看是哪加密的:

跟到 vendors_xxx 文件的第 19158 行,这里就是个异步 Promise,在 19619 行打下断点会发现此时的 e 还是 undefined,没生成加密参数:

XMLHttpRequest 这种异步的都很麻烦跳来跳去,类似如下几个地方,跟栈需要耐心:

var l = p(e, t, n);
return this._invoke(t, e)
return e.apply(this, arguments)
getAntiContent
initRiskCntroller
messagePackSync

跟到后面会跳转到一个叫 react_anti_XXX 的文件,这个文件还记录了鼠标移动轨迹:

在该文件的第 1791 行是 anti_content 参数的关键加密位置,这部分经过混淆,不过也没必要解混淆:

控制台打印看看,Lt() 即返回这个值的函数: 

滑到开头,会发现这是个通过 webpack 打包了的 js 文件,框出来的部分就是模块加载器,有个 webpack 很明显的标志:

return t[e].call(o.exports, o, o.exports, r)

webpack 相关推荐看看这篇文章:JavaScript 之 webpack 加密代码扣取

这里为文件本身的加载器调用,删掉,后面调用加载器的时候再传值进去就行了:

现在只需要把加载器导出为全局变量,然后将该函数改为自执行调用即可:

!(function (t) {var n = {};function r(e) {if (n[e])return n[e].exports;var o = n[e] = {i: e,l: !1,exports: {}};return t[e].call(o.exports, o, o.exports, r),o.l = !0,o.exports};window.rose = r;
})
...
...
...
let anti_content = window.rose(4);
result = new anti_content();

将此时的 js 代码放到浏览器环境中运行,在 result 处打断点,断住后跟进到第 1830 行:

会跳转到如下代码处:

var Vt = new Bt;
t[a(831, "C0uu")] = function() {var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, n = a;return t[w] && X && Vt[n(548, "YD8i")](t[w]),Vt
}

Vt 继承了 Bt 的方法,返回值部分 t[w] 是一个时间戳,w 为 serverTime:

跟到 Vt[n(548, "YD8i")] 中看看,这里是通过 now() 方法生成的时间戳:

 所以可以写成如下样式:

let anti_content = window.rose(4);
result = new anti_content({ serverTime: new Date().getTime() });

Vt 原型下的 messagePack 函数调用了刚刚的加密函数 Lt():

所以来试试 result 调用 messagePack 函数能否得到加密值:

在控制台中成功打印出了加密结果,证明加密方法就是这样的,接下补环境即可,整理后的 js 文件如下:

!(function (t) {var n = {};function r(e) {if (n[e])return n[e].exports;var o = n[e] = {i: e,l: !1,exports: {}};return t[e].call(o.exports, o, o.exports, r),o.l = !0,o.exports};window.rose = r;})([function (t, n, r) {// 此部分与原 js 文件一样, 在此省略])let anti_content = window.rose(4);
result = new anti_content({ serverTime: new Date().getTime() });

 补完环境后即可在 node 环境下成功得到加密结果:

python 调用:

欢迎提供更多需要 anti_content 参数的接口 ~ 


http://chatgpt.dhexx.cn/article/vyI0ftmw.shtml

相关文章

CTF逆向基础

更多资源请进入:https://github.com/SycloverTeam/SycRevLearn 查看。 1 IDA定位main函数 运行T1.exe。 将可执行程序放入IDA中,并查找字符。 双击。 按F5,进入代码。 可以对函数进行重新命名,此时也已经得到了flag。 2 …

[系统安全] 一.什么是逆向分析、逆向分析基础及经典扫雷游戏逆向

您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶…

逆向--基础知识篇

基础知识 可执行文件 计算机中可以被直接执行的程序被称之为可执行文件,可执行文件中是由指定操作系统的可执行文件格式规范与当前CPU机器指令码组成。不同的操作系统、不同的CPU之间的可执行文件都可能存在或多或少的差异。本篇主要以Windows操作系统、x86架构的…

逆向入门到入土

第一章 概述 学了几个月的逆向,记得10月份国庆节刚开始学的时候 感觉找flag蛮有意思,看着一个up主的视频,那时候c语言也没怎么学,所以就单纯他怎么做,我自己怎么做,后面去一些ctf靶场做了几道题&#xff0…

BNU1064:人品问题

“人品既不能被创生,也不能被消灭。只能从一个人转移到另一个人,从一个层面转化到另一个层面,而在转移和转化的过程当中,人品的总和保持不变。” 至此引出人品学(Characterics)三定律: 第一定律:即人品守恒…

开发者的人品问题

程序员都知道:绝大多数编程中的问题,最终都是自己的人品问题。当遇到奇怪的问题时,我们总是喜欢怀疑系统、怀疑编译器、怀疑网络、怀疑硬件……就是不愿意怀疑自己的人品。熬过几个不眠之夜后,最终还是发现自己的代码存在人品问题…

A. 人品问题

A. 人品问题 Time Limit: 1000ms Case Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld Java class name: Main Submit Status PID: 1064 Font Size: - “人品既不能被创生,也不能被消灭。只能从一个人转移到另一个人,从…

BNU 1082 人品问题

这个题我是1A 突然觉得自己好叼 #include<bits/stdc.h> int main() {printf("25\n");return 0; }

人品问题

Description 网上出现了一种高科技产品——人品测试器。只要你把你的真实姓名输入进去&#xff0c;系统将自动输出你的人品指数。yzx不相信自己的人品为0。经过了许多研究后&#xff0c;yzx得出了一个更为科学的人品计算方法。这种方法的理论依据是一个非常重要的结论&#xff…

人品差的人,开口闭口都是这些话,一定不要深交!

说话之道&#xff0c;也是为人之道。 言语是思想的发声&#xff0c;从一个人的话里&#xff0c;往往可以听出其内心的声音。 从而初步判断出一个人的人品如何&#xff0c;是否值得交往。 那些人品差的人&#xff0c;开口闭口都离不开以下三种话&#xff0c;身边若有此类人&a…

adb logcat 命令行用法

本文为转载。 作者 :万境绝尘 转载请著名出处 eclipse 自带的 LogCat 工具太垃圾了, 开始用 adb logcat 在终端查看日志; 1. 解析 adb logcat 的帮助信息 在命令行中输入 adb logcat --help 命令, 就可以显示该命令的帮助信息; [plain] view plain copy octopusoctopus:~$ ad…

java logcat_logcat -- 基本用法

1.Log类是一个日志类&#xff0c;我们可以在代码中使用logcat打印出消息 常见的日志记录方法有&#xff1a; v(String,String) --verbose 显示全部信息 d(String,String) -- debug 显示调试信息 i(String,String) -- information 显示一般信息 w(String,String) -- warning 显…

Logcat使用

目录 一、Logcat窗口 二、过滤 logcat 消息 三、Logcat的日志级别 四、设置日志信息颜色 一、Logcat窗口 Logcat在哪里&#xff1f;我都是直接点击工具栏中的Logcat图标。 Logcat窗口是用来查看应用日志的啦&#xff0c;我把每个部分标注了一下。 二、过滤 logcat 消息 一…

[Android]Logcat调试

Android采用Log(android.util.log)工具打印日志&#xff0c;它将各类日志划分为五个等级。 Log.e 打印错误信息 Log.w 打印警告信息 Log.i 打印一般信息 Log.d 打印调试信息 Log.v 打印冗余信息 不同等级的日志信息&#xff0c;在日志栏中会以不同颜色和等级(E、W、…

java logcat_使用 Logcat 写入和查看日志

Android Studio 中的 Logcat 窗口会显示系统消息,例如在进行垃圾回收时显示的消息,以及使用 Log 类添加到应用的消息。此窗口可以实时显示消息,也可以保留历史记录,因此您可以查看较早的消息。 要仅显示感兴趣的信息,您可以创建过滤器、修改消息中显示的信息量、设置优先级…

adb 抓取logcat 日志

&#xff08;1&#xff09;确保计算机里面有以下三个文件&#xff0c;才能抓取logcat日志&#xff08;只需要这三个文件就可以了&#xff09;。如果你的计算机有android sdk&#xff0c;以下三个文件会在你的sdk下的platform-tools文件夹里面。如果需要打印logcat日志的计算机没…

新版logcat最全使用指南

前言&#xff1a; 俗话说&#xff0c;工欲善其事&#xff0c;必先利其器。logcat是我们通过日志排查bug的重要武器之一。从某个版本开始&#xff0c;logcat改版了&#xff0c;改版之后&#xff0c;也许某些人觉得不太习惯&#xff0c;但是如果稍微学习下之后&#xff0c;就发现…

logcat命令介绍

1.android log系统 2.logcat介绍 logcat是android中的一个命令行工具&#xff0c;可以用于得到程序的log信息 log类是一个日志类&#xff0c;可以在代码中使用logcat打印出消息 常见的日志纪录方法包括&#xff1a; 方法 描述 v(String,String) (vervbose)显示全部信息d(Stri…

logcat命令总结

一、logcat命令介绍 1.android log系统 2.logcat介绍 logcat是android中的一个命令行工具&#xff0c;可以用于得到程序的log信息 log类是一个日志类&#xff0c;可以在代码中使用logcat打印出消息 常见的日志纪录方法包括&#xff1a; 方法 描述 v(String,String) (verv…

Android Studio 使用 Logcat 写入和查看日志

使用 Logcat Logcat是日常开发的重要组成部分。如果您看到其中一个“强制关闭”或“已停止”对话框&#xff0c;您要做的第一件事就是检查与此崩溃相关的 Java 堆栈跟踪。这些被记录到一个名为 Logcat 的工具中&#xff0c;其目的是显示来自您设备的所有日志。它显示来自模拟器…