个人总结 - JS逆向解析

article/2025/9/19 0:53:05

目前加密的方式总结有下面几点:

  1. 对称加密(加密解密密钥相同):DES、DES3、AES

  2. 非对称加密(分公钥私钥):RSA

  3. 信息摘要算法/签名算法:MD5、HMAC、SHA

  4. 前端实际使用中MD5、AES、RSA,自定义加密函数使用频率是最高的

  5. 几种加密方式配合次序:采用非对称加密算法管理对称算法的密钥,然后用对称加密算法加密数据,用签名算法生成非对称加密的摘要

  6. DES、DES3、AES、RSA、MD5、SHA、HMAC传入的消息或者密钥都是bytes数据类型,不是bytes数据类型的需要先转换;密钥一般是8的倍数

  7. Python实现RSA中,在rsa库中带有生成签名和校对签名的方法

  8. 安全性:DES<DES3=AES<RSA,至于MD5、SHA、HMAC不好说了

搜其他关键词如RSA、encrypt,尤其是encrypt

其中this.exponent是RSA加密偏移量 ,数值一般在HTML文件里面,全局搜索,其value值就是

密钥的值一般在网页源码的一个元素值。全局搜索,其value值就是,或者是js中找到


AES:案例ewt360.com 

AES是典型的对称加密,密钥就在前端源码里,相对于非对称的RSA安全性很低

var com_str = {_KEY: "20171109124536982017110912453698",//32位_IV: "2017110912453698",//16位*str:需要加密的字符串Encrypt: function (str) {var key = CryptoJS.enc.Utf8.parse(this._KEY);var iv = CryptoJS.enc.Utf8.parse(this._IV);var encrypted = '';var srcs = CryptoJS.enc.Utf8.parse(str);encrypted = CryptoJS.AES.encrypt(srcs, key, {iv: iv,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7});return encrypted.ciphertext.toString();},}

此处还调用了CryptoJS,它是加密的核心类,但发现没有,其实是藏在另外一个js文件中,找到并复制出来,将两个js合并即可


自定义加密:空中网

这个网站是以get方式登陆的,由一个eval加密的js

function encrypt ()
this.encrypt(pwd, this.j_data["dc"])加密原理:在打开网站的时候服务器会返回一串字符串,用于加密,加密的js是通过eval方式处理的

js混淆:就是把其中的变量、方法位置顺序打乱,但是又用一些无关的变量或者方法来保证执行顺序

解决方法:复制完整的混淆代码去js混淆还原网站还原。

注意:很多时候,js代码的生成函数都进行了伪装,核心的东西只有一句,但有一堆混淆视听的js,只需要找到核心代码,进行解析就行


eval加密:

eval()方法:js中的eval()方法就是一个js语言的执行器,它能把其中的参数按照JavaScript语法进行解析并执行,简单来说就是把原本的js代码变成了eval的参数,变成参数后代码就成了字符串,其中的一些字符就会被按照特定格式“编码” 。

例如下:

eval(function(p,a,c,k,e,d){e=function(c)
{return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?
String.fromCharCode(c+29):c.toString(36))};
if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return 
d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new 
RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('5 4="粘贴要加密/解密的3代码到这里";2(0==0){  
1(4);}',62,6,'1|alert|if|javascript|showmsg|var'.split('|'),0,{}))

解决方法:将代码字符串放入javascript Eval官网解密

再看eval解密后的js文件尾部,有下面一个函数

function encryptString(str, e, m) {var key = RSAUtils.getKeyPair(e, '', m);return RSAUtils.encryptedString(key, str)
}

发现是RSA加密方式,那现在从RSA加密逆向搜索encryptString关键词 ,找到下面

var timesign = (new Date).getTime() + timespan;$("#p1User").val(encryptString(timesign + encodeURIComponent($("#passwordUser").val()), $("#rsaExponent").val(), $("#rsaModulus").val()));$("#password_value").val($("#passwordUser").val());$("#btnSubmitUser").val("登录中...");$("#usernameUser").addClass("fontcolor_cccUser").attr("readonly", "readonly");$("#passwordUser").val("").addClass("fontcolor_cccUser").attr("readonly", "readonly");

筛选核心代码

encryptString(timesign + encodeURIComponent($("#passwordUser").val()),$("#rsaExponent").val(), $("#rsaModulus").val());

("#passwordUser").val(),rsaExponent").val(), $("#rsaModulus").val()

这三个参数分别是从页面获取id,去html搜索这三个关键词

rsaExponent 看到value为01001,故此RSA加密偏移量为01001

rsaModulus 也是看到value为一群乱码,它是RSA密钥


用户认证的话会涉及到cookie

解决方法:查看cookie数据,找到经过例如:fingerprint进行URL解码,对比请求参数fingerprint修改


那么,逆向解密解决思路呢?

逆向解密解决思路:

(1)是根据加密参数,如“x-uab”关键字在所有关键中查找

  1. 打开chrome浏览器 按F12

  2. 找到点击source中 按ctrl + shift + F快捷键 ,输入x-uab找到js代码

  3. 接下来,打个断点调试一下:在数字那里点一下,数字位置出现蓝点,表示添加断点成功

  4. 然后刷新获取店铺列表的页面,程序会在断点处停下,在控制台调试o.getUA()函数,看一下输出

  5. 继续向下查看这个关键词参数 js 生成函数的引用,一步步往回推,找到最原始的 js 生成方法

  6. 找到以后,把这个function 方法全部代码取出来,另存为一个js文件。

(2)怎么用python执行js脚本?

方法一:

​ 自己搞懂生成的过程,是md5还是AES加密,找到key值,时间戳其余参数啥的也可以生成,做过后台开发的会比较清楚其生成原理,因为需要对接前后端接口

方法二:execjs

因为在上面复制出来的脚本中,只单单定义了一个方法,并没有调用这个方法,所以,要在js文件的末尾添加一些代码来调用

function getParam() {var a;var param = e(2,a);return param
};

然后,开始撸Python代码吧

原理:将execjs的引擎换成PhantomJS这个无头浏览器,换句话说就是用PhantomJS来执行js脚本,PhantomJS是一个浏览器,自然就会创建window对象。

import execjsimport os
os.environ["EXECJS_RUNTIME"] = "PhantomJS"
node = execjs.get()
file = 'eleme.js'
ctx = node.compile(open(file).read())
js_encode = 'getParam()'
params = ctx.eval(js_encode)
print(params)

不用PhantomJS方法

import execjsnode = execjs.get()
file = 'eleme.js'
ctx = node.compile(open(file).read())
js_encode = 'getParam()'
params = ctx.eval(js_encode)
print(params)可能会报错:execjs._exceptions.ProgramError: TypeError: 'window' 未定义
原因:window对象估计是浏览器打开是创建的,蕴含浏览器的信息,所以用Python来执行这段代码时,没有这个对象

方法三:

思路和方案二类似,不过更加粗暴一些。因为没在浏览器执行,那就模拟浏览器来执行。

在执行之前,同样要修改js脚本,在js文件末尾调用e方法,添加如下代码,例:

var a;
var param = e(2,a);
return param;

注意:调用方法不要放在任何函数里面,我之前就是因为将这段代码放在函数里头强制执行,导致的结果就是在浏览器里可以获取加密字符串,但是在Python中获取到的却是None

模拟浏览器用的selenium和chrome的webDriver,代码如下:

from selenium import webdriverbrowser = webdriver.Chrome(executable_path='chromedriver.exe')
with open('eleme.js', 'r') as f:js = f.read()
print(browser.execute_script(js))

最终获得加密之后的字符串

最后,有必要说一下,如果需要获取大量的x-uab,采用方案三效率会高一下,因为采用方案二的话,可以自打开一个浏览器(都调用一个webdriver对象),然后快速执行js,返回加密字符串。

               


文章有点乱,是之前自己做过的一些笔记,主要用来记录自己的一些理解


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

相关文章

【JavaScript 逆向】抖店滑块逆向分析

声明 本文章中所有内容仅供学习交流&#xff0c;相关链接做了脱敏处理&#xff0c;若有侵权&#xff0c;请联系我立即删除&#xff01; 案例目标 接口&#xff1a; aHR0cHM6Ly93d3cuZG91eWluLmNvbS9hd2VtZS92MS93ZWIvdXNlci9wcm9maWxlL290aGVyLw 以上均做了脱敏处理&#…

MAC 逆向APK

准备逆向工具 apkTool 、apkTool.jar 、dex2Jar稳定版 &#xff08;不要下载最新的2.0或者2.1 最新的dex2jar 运行会报错&#xff09;、JUI 查看代码结构 &#xff08;1&#xff09; apkTool 、apkTool.jar&#xff1a;Apktool - How to Install 上面这段话是&#xff1…

java逆向_Java逆向入门(一)

Java是一门"半编译半解释"型语言.通过使用jdk提供的javac编译器可以将Java源码编译为Java虚拟机(Java Virtual Machine, JVM)可读的字节码(bytecode),即*.class文件. 学习字节码可以使你更好的理解Java虚拟机的行为,甚至对学习其它基于Java虚拟机的语言(如:Scala,Clo…

Android逆向基础——APK的格式

Android 安装包常以apk&#xff08;android Package&#xff09;、xapk为后缀&#xff0c;本质是一个压缩包&#xff0c;包内存存放运行着应用程序安装必要的所有资源、代码。可直接修改后缀为zip解包。 解包后目录大致如下&#xff1a; assets 资源文件&#xff0c;通过cont…

JS逆向笔记-记录某测试论坛的js逆向练习

这个网站应该是专门练习的&#xff0c;因为有个地方说不太通&#xff0c;在此只能算是练习&#xff0c;记录下&#xff0c;方便以后进行查阅。 首先访问主页&#xff1a; 他会设置一个cookie值&#xff0c;并且会把加密的salt 带出来。还有个叫lt的东西也会用html的形式传出来。…

Matlab逆向归纳法,逆向归纳法

逆向归纳法(backward induction)是求解动态博弈均衡的方法 [编辑] 什么是逆向归纳法 逆向归纳法(backward induction)是求解动态博弈均衡的方法。所谓动态博弈是指博弈参与人的行动存在着先后次序&#xff0c;并且后行动的参与人能够观察到前面的行动。逆向归纳法在逻辑上是严密…

逆向工程

逆向工程 数据库部分逆向工程说明导入文件 reverseProject添加相应jar包修改这个工程三个 .xml 文件都要修改的地方修改generatorConfig.xml文件 工程终点-运行GeneratorSqlMap.java文件 在使用mybatis时需要根据数据表创建实体类&#xff0c;pojo类的映射文件以及sql语句和Dao…

逆向 实战

逆向实操 汇编 《汇编语言》,王爽 《天书夜读》邵坚磊等 《Intel汇编指令集手册》 基础 学习汇编的原则 不推荐写纯汇编程序,一般都是通过_asm{}方式嵌入部分汇编代码学习汇编的目的是:解底层&#xff0c;调试&#xff0c;逆向分.c-编译->.s-汇编→.o(linux平台)/.obj(wi…

微信逆向分析(一)——逆向分析的原理

逆向的简单理解 正向开发&#xff0c;是先写代码&#xff0c;再编译成软件。而逆向分析&#xff0c;到手的只有软件。从软件入手&#xff0c;推测对应的代码&#xff0c;需要了解一下编译之后的软件是怎么跑起来的。 软件运行过程 1、软件加载到内存。 2、CPU读取内存的指令…

【JavaScript 逆向】网易易盾滑块逆向分析

声明 本文章中所有内容仅供学习交流&#xff0c;相关链接做了脱敏处理&#xff0c;若有侵权&#xff0c;请联系我立即删除&#xff01; 案例目标 验证码&#xff1a;aHR0cHM6Ly9kdW4uMTYzLmNvbS90cmlhbC9qaWdzYXc 以上均做了脱敏处理&#xff0c;Base64 编码及解码方式&#xf…

【JavaScript 逆向】今日头条 jsvmp,_signature 参数分析

前言 现在一些网站对 JavaScript 代码采取了一定的保护措施&#xff0c;比如变量名混淆、执行逻辑混淆、反调试、核心逻辑加密等&#xff0c;有的还对数据接口进行了加密&#xff0c;这次案例是通过补环境过 jsvmp。 声明 本文章中所有内容仅供学习交流&#xff0c;相关链接…

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

前言 现在一些网站对 JavaScript 代码采取了一定的保护措施&#xff0c;比如变量名混淆、执行逻辑混淆、反调试、核心逻辑加密等&#xff0c;有的还对数据接口进行了加密&#xff0c;这次案例是通过补环境过加密。 声明 本文章中所有内容仅供学习交流&#xff0c;相关链接做…

CTF逆向基础

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

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

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

逆向--基础知识篇

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

逆向入门到入土

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

BNU1064:人品问题

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

开发者的人品问题

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

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: - “人品既不能被创生&#xff0c;也不能被消灭。只能从一个人转移到另一个人&#xff0c;从…

BNU 1082 人品问题

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