图灵练习平台 码上爬 1-19题加密点
js逆向图灵靶场 码上爬 1-19题加密点分析
本文 主要是写算法入口 篇幅有限不能写跟栈细节
要知道细节 评论就可以 或者加v (记得备注)
目录
第一题
略
第二题
略
第三题
F12检测 -> 手动点开发者工具
第四题
MD5 算法
第五题
AES 加密
第六题
请求
请求头 headers 中的 s 值 和 tt
响应
响应为密文 在下面进行解密
响应为 16进制 在转字节时 需要注意
第七题
请求
TS值
时间戳
M值
md5算法
X值
sha256算法
在 m 值 生成后不远
响应
AES 解密
第八题
M值
加密明文为 -> 盐 + 时间戳 + 时间戳转base64 + 盐
下方 ‘\x6d' 即是 加密点
第九题
请求
M值
HmacSHA1 加密
TT值
时间戳 编了个base64码
第十题
扣代码实现 魔改算法 T值
控制台输出的是 加密函数 与明文
第十一题
请求
M值
下方就是入口
加密函数
python实现
def encrypt(var0, var1):
result = var0 + (var1 // 3)
result = result + 16358
return result
encrypt(page,_ts)
_ts值
这个还是时间戳 和那个wasm加密用的一个时间戳 长度为10
第十二题
请求
T值
13位时间戳
M值
手动分析到了 20位长度的字节数组 找到他生成方式
即可通过下面代码 生成密文
const obj = {
"0": 223,
"1": 189,
"2": 8,
"3": 151,
"4": 184,
"5": 62,
"6": 4,
"7": 61,
"8": 177,
"9": 200,
"10": 17,
"11": 118,
"12": 160,
"13": 118,
"14": 211,
"15": 221,
"16": 97,
"17": 123,
"18": 184,
"19": 64
};
var lin = []
const values = Object.values(obj);
values.forEach(val => {
var OOO00OO = [
"/api/problem-detail/12/data/?page=1&m=",
"",
"",
16,
val,
"toString"
]
var O00000O = 1305
OQOQQ0Q = 1,
Q0OQO0O = OOO00OO['pop'](),
QQQ0OQQ = OOO00OO['pop'](),
QQO0OQ0 = [''];
for (Q0OQO0Q = 0x0; (Q0OQO0Q < OQOQQ0Q); Q0OQO0Q++)
QQO0OQ0['unshift'](OOO00OO['pop']());
QQQ0OQO = QQQ0OQQ["toString"]['apply'](QQQ0OQQ, QQO0OQ0);
if (QQQ0OQO.length == 1){
lin['push']('0'+QQQ0OQO)
}else {
lin['push'](QQQ0OQO)
}
});
console.log(lin['join']["apply"](lin, ['']))
补环境方案
参考 这个大佬的视频
https://www.bilibili.com/video/BV1rjd5Y9ELG/
第十三题
请求
R值
下方是入口 本人扣代码还原的
S值
控制台输出的是 S值加密明文
然后 把明文进行 MD5加密 得到S值密文
T值
13位时间戳
第十四题
请求
M值
是个自运行函数 扣出来即可
当前自运行函数传参时有个p值 这个p值是上方函数 生成出来的 没几行代码
第十五题
请求
Hexin-v值
下方就是入口补环境就出来了
D方法改成这样 补完环境 直接调用出值
Cookie中 V值
v值 和 hexin-v 值同一个
第十六题
请求
H5值 与 T值
下方是生成点
通过补环境实现 补完后 直接调用出值
第十七题
响应
响应为密文
下方就是解密处
解密代码
function decryptFontNumber(c) {
if (typeof c !== 'string')
return c;
const e = c['split']('')['map'](f => {
const g = {
"ꙮ": "0",
"ઊ": "1",
"સ": "2",
"ત": "3",
"ধ": "4",
"ન": "5",
"પ": "6",
"ફ": "7",
"બ": "8",
"ભ": "9"
}[f];
if (!g && (f !== '\x20')) {}
return (g || f);
}
)['join']('');
return e;
}
function updateCounter(c) {
let e;
let f = [];
e = c['current_array'];
for (var h = 0; h< e['length']; h++) {
font = decryptFontNumber(e[h]),
f['push'](font);
}
return f
}
第十八题
请求
M值前段生成 和 时间戳生成点
是个webpack 本人采取补环境 补的也不多
M值后段生成点
其实就是 base64编码 拼上了 生成的M值前段
第十九题
响应
响应为密文
下方是入口 3DES解密
iv生成代码
from datetime import datetime
def date_format(v, format_str="yyyyMMdd"):
d = v
format_mapping = {
"yyyy": d.year,
"MM": str(d.month).zfill(2),
"dd": str(d.day).zfill(2),
"h+": str(d.hour).zfill(2),
"m+": str(d.minute).zfill(2),
"s+": str(d.second).zfill(2),
"q+": (d.month + 2) // 3,
"S": d.microsecond // 1000
}
for pattern, value in format_mapping.items():
if pattern in format_str:
format_str = format_str.replace(pattern, str(value))
return format_str
print(str(date_format(datetime.now())).encode())
<------感谢观看------>
更多推荐
所有评论(0)