猿人学第三届js逆向&验证码比赛第一题纯算思路

查看 71|回复 9
作者:dandelion2sunny   
比赛已经结束了,毫无疑问只搞出来了一题,也就是第一题(超简单送分题...)

如果还没有看过这题,建议先自己看一下这题。

以下只是个人的一些拙见,肯定有更优秀的思路,还请大佬们在评论区教教小弟:handshake
只有思路,没有具体代码, 不废话了。
题目地址:https://match2025.yuanrenxue.cn/match2025/topic/1
验证码获取接口:https://match2025.yuanrenxue.cn/match2025/topic/1_captcha_jpg
post请求,需要获取的参数名 a
先用xhr断点断住这个接口 /topic/1_captcha_jpg


Snipaste_2025-06-08_20-41-15.png (11.12 KB, 下载次数: 0)
下载附件
2025-6-8 23:06 上传

刷新页面,所有的加密都在标签的代码里,且对比后面的第二题第三题没有做变量名的处理,所以不用替换文件,直接观察这个混淆文件,经过我几个小时的观察调试,理解都放在下面的图里了,注意观察代码的形式


Snipaste_2025-06-08_20-41-15.png (27.43 KB, 下载次数: 0)
下载附件
2025-6-8 23:35 上传

由于代码混淆的比较严重,这里直接用正则找到所有的带有 return xx = 这种形式的代码打上断点,这里的形式并不是最完整的形式,还是有类似于 xx[yy] = 这种形式的代码,这里给上不完整的正则
return\s+[a-zA-Z]{1,2}\s*=


Snipaste_2025-06-08_20-41-15.png (5.14 KB, 下载次数: 0)
下载附件
2025-6-8 23:05 上传

搜索一下,有89个这种形式的代码,我的做法是把这89个地方都打上了断点。
刷新一下页面


Snipaste_2025-06-08_20-41-15.png (19.72 KB, 下载次数: 0)
下载附件
2025-6-8 23:09 上传

观察一下这两个地方的字符串长度都是16,极有可能是加密的key 和 iv
继续往下走


Snipaste_2025-06-08_20-41-15.png (13.69 KB, 下载次数: 0)
下载附件
2025-6-8 23:05 上传

这里就是待加密的明文的生成地方了
[JavaScript] 纯文本查看 复制代码"7suiimqdbxc00000咦~,可带劲~。"+str(int(time.time() * 1000))+"俺不中嘞~"
需要改变的地方就是时间戳
再往下走到 so 函数,执行这个函数得到加密后的结果,所以这里就是加密函数的入口了,进入这个函数后发现还有一个 So 函数,这个函数的结果在base64编码后得到的结果就是请求参数 a.


Snipaste_2025-06-08_20-41-15.png (1.43 KB, 下载次数: 0)
下载附件
2025-6-8 23:03 上传

重点分析 So 函数。
断点继续往下,进入 po 函数


Snipaste_2025-06-08_20-41-15.png (22.72 KB, 下载次数: 0)
下载附件
2025-6-8 23:02 上传

其实前面调试的时候看scope里的变量,是能发现s盒的,但是没关系,到这里就能确定具体是什么算法了,这里有13个 16位数组的函数,且第一个数组是key,那剩下的12个数组在放进AES的密钥拓展函数后(改成12轮),得到的结果和这里的一致。


Snipaste_2025-06-08_20-41-15.png (50.76 KB, 下载次数: 0)
下载附件
2025-6-8 23:02 上传

剩下的其实就很简单了,找一份标准的AES-CBC算法,对比着上面的断点,每走一步看一看和标准的算法有什么区别,如果结果一致就不用看了
这里提供一下加密部分每一步对应的是什么函数。


Snipaste_2025-06-08_20-41-15.png (33.45 KB, 下载次数: 0)
下载附件
2025-6-8 23:01 上传

加密的部分就是上述部分,解密的函数和上述的分析过程是一样的。接下来的部分建议自己做一下,做出来还是挺有成就感的。


Snipaste_2025-06-08_20-41-15.png (15.51 KB, 下载次数: 0)
下载附件
2025-6-8 23:01 上传

下载次数, 函数

lideshan   

歪日  哥哥太强了
n0rma1playe2   

可以,学习了
流水   

晚点试试这个方法
shuirouyan   

挺好的,能把分析的代码也分享一下吗?
GreetG   

大佬我做到s盒那卡住了,我找到s盒了还有这个数组
[
    0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54, 108, 216, 171, 77, 154, 47, 94, 188, 99, 198, 151, 53, 106, 212, 179, 125, 250, 239, 197, 145
];
里面还有什么魔改的地方嘛,还原一直出问题
oddant   

正则debugger所有的返回值,我去!这手是真的强
LaGi2107   

想看代码
Klock0828   

啥也不说了,帖子就是带劲!
Jiaopipi123   

俺不中嘞
您需要登录后才可以回帖 登录 | 立即注册

返回顶部