已迁移平台:segmentfault,搜索 erma0
换平台了,简书发什么都锁定,广告一堆,趁早倒闭吧。
发个库存,以后不玩了

第七天
JavaScript逆向练习7
0x01 目标网址
0x02 定位JS
1. 随便输入账号密码,滑动验证码,点击登录后,查看提交的参数,可以看到,在登录包里有一个jsonKey,是一串加密过的参数。
2. Ctrl+Shift+F调出搜索面板,搜索jsonKey,看到只有一个js结果。
点进第一个结果,点花括号格式化一下,Ctrl+F搜jsonKey,只有两个结果,而且第一个是赋值,所以在上面下断点。
4. 重新输入账号密码验证码,点击登录,JS被断了下来。
控制台输出一下参数看看:

1.png
可以看到加密参数是账号密码相关的一个对象。
跟进Encrypt发现是一个标准的AES。
5. 再跟进去,发现进入了一个超级卡的JS,等半天加载出来之后,发现有8w+行,这个JS将近2M大小,实在没办法调试,所以直接引用外部(调试器自带)的Crypto算了。
严格来说再次不算成功逆向,因为并没有把JS从目标网站上拿下来,算是投机取巧了,因为如果这个网站引用的不是标准加密库(但凡有一点修改),我们就无法模拟出加密算法了。
0x03 改写JS
1. 先把调用函数拿过来。
Encrypt = function (l) {
var n = c.enc.Utf8.parse("t171420100302rsa")
, t = c.enc.Utf8.parse("t171420100302rsa")
, e = c.enc.Utf8.parse(l)
, a = c.AES.encrypt(e, n, {
iv: t,
mode: c.mode.CBC,
padding: c.pad.Pkcs7
});
return c.enc.Base64.stringify(a.ciphertext)
}
function test() {
return Encrypt('{"body":{"loginMethod":"1","name":"15555555555","password":"11111111"},"head":{"userCode":null,"channelCode":"101","transTime":1576301342700,"transToken":"","customerId":null,"transSerialNumber":""}}')
}
2. 再引用下Crypto。
var c = new CryptoJS;
function CryptoJS (root, factory) {
//代码块
}

2.调试结果
0x04 代码
省略