写点什么

JS 逆向笔记

作者:渔戈
  • 2022-10-23
    广东
  • 本文字数:1663 字

    阅读完需:约 5 分钟

下断点,按 F11 可进去函数内部,或者点击右上角的下标点进去函数内部


md5 加密长度固定 32 位;


一、单向散列函数 消息摘要算法


加密后的密文定长


明文不一样,散列后结果一定不一样


不可逆


一般用于签名


MD5 32 位


SHA1 40 位


SHA256 64 位


SHA512 218 位


HmacMD5、HmacSHA1、HmacSHA256


(注:Hmac 配合其他加密算法,传入两值,一加密参数,二公钥)


二、加密


加密和解密的过程是可逆的


对称加密算法


加密/解密使用相同的密钥


DES 数据加密标准 3DES


AES 高级加密标准


AES 共有 ECB,CBC,OFE,CTR 五种模式


非对称加密算法RSA使用公钥加密,使用私钥解密公钥是公开的,私钥保密加密处理安全,但是性能极差,单词加密长度有限制。
复制代码


三、CryptoJS 加密库的使用(注意区分大小写)


注:CryptoJS 加密的结果为“对象”类型


alert 输出时会自动转换为文本


console控制太输出的时候是对象,可+''变成字符串文本,或者.toString()转换文本
复制代码


搜索加密参数关键点:


一、搜索指定参数


二、搜索附近参数


三、搜索部分链接


四、搜索某些加密值


1、过掉定时器无限 debugger:


1、鼠标移到 debugger 所在行断点数字处


2、右键点击“Never pause here”


2、AES 加密(不属于哈希加密):


1、首先确定 mode 类型;


2、padding 填充格式(注意 Pkcs5 格式也是属于 Pkcs7 格式);


3、Key 值和 iv 值的 Enc 编码类型(注意 key 值和 iv 的值会存在函数附近上下方)


例子:CryptoJS 加密库的 AES 加密方式:


var pwd = CryptoJS.enc.Utf8.parse(‘cjs122374’); // 解析明文


var key = CryptoJS.enc.Utf8.parse(‘asdqwwqwdqddq’); // 解析密钥


var iv = CryptoJS.enc.Utf8.parse(‘asdqwwqwdqddq’); // 解析偏移向量


mode: CryptoJS.mode.CBC // 加密模式


padding: CryptoJS.pad.Pkcs7 // 填充方式


iv: iv // 偏移向量


}).toString(); // 加密后的结果是对象,要转换为文本


console.log(ciphertext);


3、HMAC 加密:


一般传入两个值,明文以及 key 值;


4、RSA 加密:


公钥:用于加密;私钥:用于解密的,但是一般找不到


一般代码比较长,最好不去扣代码,使用软件生成 js 脚本代码即可


RSA 加密注意点:一般会加密长度很长,以==双等号结尾,类似于 base64,会出现两个数据包,一是带有一些 key 值的 json 数据,二是登录错误的密码等加密参数数据包。(套路:输入"10001"(加密字数)、‘’(空字符串为解密字数)以及密钥参与加密)


5、搜索加密关键参数出现众多文件或者无文件,则可以搜索 url 链接的一些特定后缀


6、出现 windows 未定义的:但是 windows 参与计算的,不可以直接设置为空,应该 windows = this;出现 navigator 未定义:可以直接设置为空,var navigator = “”。


7、遇到(function(g){})的包裹类型的函数封装,需要在全局构建 window = this,然后在函数末尾添加(window)即可。(注:在调试工具中能运行,在创建的 js 文件中不能运行,此问题还没解决。)


8、遇到特殊字符(例:字体图标显示的小框框)无法编译加载的情况,一、点击 utf-8 编码,或者使用发条 js 调试工具将此 js 文件 copy 到上方的搜索框,点击读取 js 代码,点击编码即可。


9、Base64/btoa/atob


alert(btoa(‘122374’));结果弹出:MTIyMzc0,即 btoa 是 base64 加密


alert(atob(‘MTIyMzc0’));结果弹出:122374,即 btoa 是 base64 解码


10、大文件加密方式:


var hasher = CryptoJS.algo.SHA256.create();


hasher.update(‘222’); # 分次添加加密内容


hasher.reset(); # 将之前添加加密内容重置为 0


hasher.update(‘222’);


hasher.update(‘222’);


hasher.update(‘222’);


var hash = hasher.finaline(‘22’);


console.log(hash.toString());


11、不同加密解析方式(返回的是一个数组,可继续使用算法加密返回对象)


var = wordArray = CryptoJS.enc.Utf8.parse(‘cjs’);


// var = wordArray = CryptoJS.enc.Latin1.parse(latin1String);


// var = wordArray = CryptoJS.enc.Hex.parse(hexString);


// var = wordArray = CryptoJS.enc.Base64.parse(base64String);


var res = CryptoJS.SHA256(wordArray ) // 加密返回一个对象


console.log(res.toString()); // 将对象转换为字符串文本


12、DES 加密的 ECB 模式中可以不要 iv 偏移向量值,反之 CBC 需要加粗样式

发布于: 刚刚阅读数: 5
用户头像

渔戈

关注

还未添加个人签名 2022-10-14 加入

还未添加个人简介

评论

发布
暂无评论
JS逆向笔记_JavaScript_渔戈_InfoQ写作社区