猿人学2023年第二届JS逆向比赛第一题!

文章介绍了猿人学第二届JS逆向比赛中第一题的解题过程,主要涉及到了被魔改的MD5和AES加密算法。作者通过断点调试,识别出加密函数入口,并逐步解析出魔改的MD5算法,提醒读者注意某些特定模块的版本问题。同时,文章详细说明了AES-ECB加密的处理,指出其明文加密和固定的IV值。整个解题过程包括了代码的分析和提取,适合有一定JavaScript和加密知识的读者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

猿人学2023年第二届JS逆向比赛第一题!

魔改的MD5和AES加密!!!


前言

网站地址:第二届Web端猿人学攻防大赛【官方网站】 (yuanrenxue.cn)

猿人学第二届JS逆向比赛难度相较于第一节比赛的赛题那真的是难上加难了,打得许多小伙伴道心都快破碎了。接下来我将进行第一题的题解,主要是抠代码,这道题主要使用了MD5AES算法,这两个算法都魔改了!!!(真的算简单到离谱吗?)

首先,我们打下断点 找到加密函数入口,这一步很简单,找到加密入口后,我们可以看到明文写的md5和aes,用工具还原了一下,对不上,很明显,这是遇见魔改算法了,在这里我先扣的md5,再去扣的aes,因此这里也延续我的思路,先做md5,在做aes


1. 魔改的md5算法

加密函数入口非常简单,直接搜索 token 就能找到,下图就是加密函数入口的位置:

很明显,可以看到 token 就是 aes 加密生成 h 值再进行一次 md5 加密生成的,但是这里的加密结果和标准加密库的加密结果是不一样的(大家可以自行验证一下),那么我们就应该开始怀疑是不是算法被魔改了。MD5有四个初始32位变量: 

this['_hash'] = new h['init']([0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476])

我们跟进去,然后搜索0x67452301,可以发现这里是有所不同的,那么就确定了,这就是一个魔改的MD5。

MD5魔改的点还有几个,剩下的几个魔改点我就不带大家去找了,直接开扣吧。

抠前提示:大家在扣代码时,只需要把function里面的内容抠出来就行了,即红色方框部分:


1.1 打断点

有经验的同学都知道这是一个webpack,所以我们可以在这里打一个日志断点,让他把调用的模块顺序吐出来,然后跟着把代码抠出来。


1.2 扣代码需要注意的坑

模块5注意点:如果nodejs版本低于16,这里引入crypto库后可能会报错

模块6有环境监测点

扣到模块14就可以停止了,对比一下加密结果,可以看见和浏览器的一样,MD5成功抠出来!


2. 魔改的aes-ecb算法

aes加密就在md5加密的上方,aes加密生成的h值,会提供给md5加密生成最终值。

aes加密这里是明文的,甚至连混淆都没有用(来自大佬的怜悯)。可以看到这里使用了aes加密,密文是当前时间的时间戳加上当前页数,iv是固定值 666yuanrenxue66,mode是ecb。

流程和MD5差不多,我就直接给出aes所需要用到的模块吧(和md5共用的部分模块我没给出来

9,4,18,10,3


2.1 扣代码需要注意的坑

aes需要注意的坑我认为只有一个(基础好的同学可以忽略)

浏览器的window是不能删除和重新赋值的,而nodejs就不一样了


2.2 抠代码结果

成功!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值