猿人学2023年第二届JS逆向比赛第一题!
魔改的MD5和AES加密!!!
前言
网站地址:第二届Web端猿人学攻防大赛【官方网站】 (yuanrenxue.cn)
猿人学第二届JS逆向比赛难度相较于第一节比赛的赛题那真的是难上加难了,打得许多小伙伴道心都快破碎了。接下来我将进行第一题的题解,主要是抠代码,这道题主要使用了MD5和AES算法,这两个算法都魔改了!!!(真的算简单到离谱吗?)
首先,我们打下断点 找到加密函数入口,这一步很简单,找到加密入口后,我们可以看到明文写的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 抠代码结果
成功!