声明
本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!
逆向目标
目标:社会主义核心价值观加密原理分析
主页:aHR0cHM6Ly93d3cuYXBwbWl1LmNvbS9rZXkv
逆向分析
K哥的同事今天发来一个比较有趣的加密,不管你输入什么字符串,加密后的结果都是由24个字的社会主义核心价值观随机组合而成,如下图所示:
首先我们尝试抓包,看看是否有网络上的发包操作,实际上是没有的,这说明加密解密的逻辑都在已加载完毕的JavaScript代码里,这里有两个方法去定位加密入口:
1、我们注意到加密结果始终由社会主义核心价值观组成,肯定是在原24字的基础上做了一些操作,也就是说在某个地方肯定定义了这24个字,我们任意全局搜索其中一个词即可,如下图所示:
2、加密解密的结果都是点击了按钮才生成的,那么这个按钮肯定绑定了某些事件,比如鼠标点击事件,我们可以通过DOM事件断点的方式定位加密入口,如下图所示:
3、我们注意到加密解密的button都有一个id,那么有可能JavaScript里会获取到这个id后,使用addEventListener()方法向这个元素添加鼠标点击事件句柄,所以也可以全局搜索其id,即encode-btn和decode-btn,也可以搜索getElementById("encode-btn")或者getElementById("decode-btn"),当然也可以搜索方法关键字addEventListener。如下图所示:
定位到加密位置后,埋下断点进行调试,我们来看看加密的逻辑:
加密过程:变量v通过元素id(decoded-area)拿到明文文本区域(textarea),点击加密按钮(encode-btn)会触发事件,进入后面的函数,v.value就是明文值,经过l()函数加密后赋值给n,然后再把n赋值给p.value,也就是显示在密文的文本区域(encoded-area)。
解密过程:变量p通过元素id(encoded-area)拿到密文文本区域(textarea),点击解密按钮(decode-btn)会触发事件,进入后面的函数,p.value就是密文值,经过s()函数解密后赋值给n,然后再把n赋值给v.value,也就是显示在明文的文本区域(decoded-area)。
整个代码逻辑比较简单,用到的这些函数也都在一起,直接全部copy下来即可。
完整代码
GitHub