JS 逆向笔记
下断点,按 F11 可进去函数内部,或者点击右上角的下标点进去函数内部
md5 加密长度固定 32 位;
一、单向散列函数 消息摘要算法
加密后的密文定长
明文不一样,散列后结果一定不一样
不可逆
一般用于签名
MD5 32 位
SHA1 40 位
SHA256 64 位
SHA512 218 位
HmacMD5、HmacSHA1、HmacSHA256
(注:Hmac 配合其他加密算法,传入两值,一加密参数,二公钥)
二、加密
加密和解密的过程是可逆的
对称加密算法
加密/解密使用相同的密钥
DES 数据加密标准 3DES
AES 高级加密标准
AES 共有 ECB,CBC,OFE,CTR 五种模式
三、CryptoJS 加密库的使用(注意区分大小写)
注:CryptoJS 加密的结果为“对象”类型
alert 输出时会自动转换为文本
搜索加密参数关键点:
一、搜索指定参数
二、搜索附近参数
三、搜索部分链接
四、搜索某些加密值
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 需要加粗样式
版权声明: 本文为 InfoQ 作者【渔戈】的原创文章。
原文链接:【http://xie.infoq.cn/article/52d8d1a75625f144cdfb42840】。文章转载请联系作者。
评论