js_reverse/猿人学练习/63js加密传输数据与返回数据二进制-RC4

知识点:返回数据二进制 atob btoa crypto crypto-js

解题思路

查看请求结果,发现是乱码

请求

请求体乱码

请求

打断点找到请求体加密点发现

请求

代码是

code = s(J['lzaCv'](J['qromH'](j, -0xb31 + 0x53 * -0x42 + 0x4b1 * 0x7), y['toString']()))

改写

code = s(j(64) + 1);

进入j函数

请求

发现是 window['crypto']['getRandomValues'] 进行的加密这里需要用到

const crypto = require('crypto').webcrypto;

得到一串加密字段

请求

接下来就是s函数。通过s函数能得到请求体中乱码值

请求

这里用的是 cryptoRC4加密,

但是RC4加密结果不会出现乱码,尝试继续跟进代码看看具体原因

这里跟近我是直接通过 return 关键词一步步断点进入

return 断点1

请求

return 断点2

请求

return 断点3

请求

return 断点4

请求

return 断点5这里就发现atob方法,即Base64的解码过程

请求

控制台输出

请求

返回体乱码

既然已经知道加密用的是atob,那么解码会不会是btoa,继续调试

请求

btoa即Base64的编码过程

在通过调试,发现c函数是crypto-js加密

请求

到这里就基本结束了

请求