那些年之我不会js逆向"

admin 2026-10-20 22:31:35 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

cover_image

那些年之我不会js逆向

原创

cmrex
cmrex

Gamma实验室

2023年12月26日 23:05
福建

在小说阅读器读本章

去阅读

0x01 示例1-bc野站(md5)

(直接搜索关键词法)

在日某个网站的时候,想要爆破账号密码,解密密码加密的时候遇见的问题

这里的password被加密了,尝试找到加密方式

通过抓取js发现了:

/jdb-gamehallv3/pool_247/_nuxt/entry.ee524e21.js

代码

数据很多,搜索关键字,然后搜索了很久,搜索到了crypto关键字,发现这么一段代码:

var nodeWrap = function(method) {  // 使用 require 导入 crypto 和 Buffer 模块  const crypto = eval(\"require('crypto')\");  const Buffer = eval(\"require('buffer').Buffer\");    // 定义封装后的哈希方法  var nodeMethod = function(t) {    if (typeof t == \"string\") {      // 如果输入是字符串,使用 crypto 模块的 createHash 方法生成 SHA-1 哈希值      return crypto.createHash(\"sha1\").update(t, \"utf8\").digest(\"hex\");    }        if (t.constructor === ArrayBuffer) {      // 如果输入是 ArrayBuffer,转换为 Uint8Array,并使用 createHash 方法生成哈希值      t = new Uint8Array(t);    } else if (t.length === void 0) {      // 如果输入是其他类型数据,则使用外部传入的 method 函数处理      return method(t);    }        // 使用 crypto 模块的 createHash 方法生成 SHA-1 哈希值    return crypto.createHash(\"sha1\").update(new Buffer(t)).digest(\"hex\");  };    return nodeMethod;};
  • 如果输入是字符串,使用 crypto.createHash 方法生成输入字符串的 SHA-1 哈希值,并以十六进制格式返回。
  • 如果输入是 ArrayBuffer,将其转换为 Uint8Array,并使用 crypto.createHash 方法生成哈希值。
  • 如果输入是其他类型的数据,则使用外部传入的 method 函数来处理。

其实核心代码就是:

crypto.createHash(\"sha1\").update(t, \"utf8\").digest(\"hex\");

解密

const x = \"test\";const nodeWrap = (method) => {    const crypto = require('crypto');    const nodeMethod = (t) => {        if (typeof t === \"string\") {            return crypto.createHash(\"sha1\").update(t, \"utf8\").digest(\"hex\");        }        return method(t);    };    return nodeMethod;};const myHashFunction = nodeWrap();const result = myHashFunction(x);console.log(result);

而后续当我使用前段输入账号密码后发现结果一致,解密成功

小DLC

后续通过逻辑漏洞到了后台

0x02 示例2-某公众号登录加解密(调试md5)

跟踪分析

这里可以看到加密是md5,但是我们还是按照不知道如何加密的节奏来看如何加密的

这里登录后,查看调用堆栈

然后追踪到了v函数

在这里之前,密码没有加密,然后在此之后,密码进行了加密。

然后这里,我们进入v函数,在控制台也可以看见v的定义

于是下断点,还是admin,那就跟踪D(t)

然后再去追踪这些,太多了,应该这些都是加密的代码了

随着这个不断的循环,加密的内容r从短变长,逐渐加密结束

当退出这个循环的时候,发现就已经加密完成,也就是md5的加密结束了

解密过程

既然已经知道如何加密了,我们这里就需要对其进行解密,我们尝试复制出来他的代码,然后解密尝试

成功解密

0x03 示例3-某企业登录(对称加密)

分析

首先抓包看一下加密了什么:

这里是加密了密码,但是这里不像是常见url或者base64,md5之类的,所以继续进行分析

全局搜索这个密码字段,发现了若干,然后一个个去看,去下断点调试即可

通过分析,我们定位到了desEncrypt函数,然后在函数里发现了:keyObj = SECURITYKEY.get();

首先可以看见传入的值,我们可以看见走入的是aes加密这个逻辑里,下一步就是找到kobj,这里我们就要进入SECURITYKEY.get()

在get函数里,又掉用了\_2函数,在这里可以看见是获取到了一些东西进行了拼接,我们继续跟进

这里就是访问了一个请求,然后通过ajax获取到了页面上的sessionid,这个时候抓包也可以抓到sessionid

走过了获取sessionid和抓到的数据包一样的id,随后返回了key

tostring结束后一并返回,加密结束。

解密

把他的加密函数复制下来,然后分别把下列js也一并复制到本地,然后包含即可。

Com_RegisterFile(\"security.js\");Com_IncludeFile(\"aes.js\");Com_IncludeFile(\"base64.js\");

使用npm引入库

const CryptoJS = require('crypto-js');

然后把获取sessionid的部分抓包或者f12把sessionid复制进去,定义变量,然后即可加密

解密结果:

这里看见本地加密的结果和浏览器端加密的一致,解密完成。


那些年之我不会js逆向" 网络安全文章

那些年之我不会js逆向"

本文通过三个JS逆向实战案例详细解析了密码加密破解方法:示例1通过搜索crypto关键词定位SHA1加密代码并成功复现;示例2通过调用堆栈跟踪找到MD5加密函数并本地解密;示例3分析DES对称加密流程,获取sessionid后成功复现加密。文章提供了具体的调试技巧和代码实现,对WEB安全渗透测试具有实操指导价值。
edr对抗技术1-apiunhookoutput" 网络安全文章

edr对抗技术1-apiunhookoutput"

该文档详细分析了EDR对抗中APIHook绕过技术,包括syscall、ntdll重载、PE文件映射、直接跳转和挂起进程获取干净ntdll等方法。通过实验对比天擎、卡巴斯基和冰盾等安全产品的Hook机制,发现不同产品采用不同监控策略。文档提供了具体实现代码和绕过方案,指出动态导入表、内存操作绕过等有效对抗手段。
一个斜杠,读穿整台服务器:Vite任意文件读取漏洞(CVE-2026-29321)的完全拆解" 网络安全文章

一个斜杠,读穿整台服务器:Vite任意文件读取漏洞(CVE-2026-29321)的完全拆解"

CVE-2026-29321是Vite开发服务器中/@fs/路径的任意文件读取漏洞,攻击者无需认证即可读取服务器敏感文件如/etc/passwd或.env配置文件。漏洞影响Vite2.0至6.2.3版本,CVSS评分9.1,全球数千万前端项目面临风险。修复方案包括升级至Vite6.2.3以上版本、配置访问白名单、避免使用–host0.0.0.0暴露服务。
不在工具,在于逻辑:2026年手工渗透测试的六条新思路" 网络安全文章

不在工具,在于逻辑:2026年手工渗透测试的六条新思路"

本文探讨了2026年手工渗透测试的六条新思路,强调核心竞争力在于逻辑与思路而非工具。核心要点包括:1\\.信息收集时深入挖掘前端JS文件以发现隐藏API;2\\.利用HTTP方法(如GET/POST)校验差异绕过权限控制;3\\.通过篡改Content-Type等协议解析差异实现WAF绕过;4\\.在内核层面运用间接系统调用、合法DLL内存劫持等技术对抗EDR;5\\.采用CryptMove技术,在复用加密信道中实现隐蔽的横向移动;6\\.滥用组策略对象(GPO)进行无需修改SYS
评论:0   参与:  0