![6a94af6f29cd05379ec4c3e663280080.png](https://img-blog.csdnimg.cn/img_convert/6a94af6f29cd05379ec4c3e663280080.png)
所有文章首发在我的微信公众号“逆向新手”,更多逆向系列请关注公众号,谢谢!
声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢!
引言
eval混淆,其实就是利用了eval()函数的特性,它跟Python里的eval函数差不多,能把字符串解析成代码来执行。如:
eval("var text = 123") // 就是在执行括号里的代码
console.log(text) // 输出 123
它的还原也很简单,只需要把 eval 改成 console.log ,然后在浏览器的控制台(Console标签)输出,即可还原出源代码,如下所示:
![ec5d1e9bd5453666503f444ca27a5c1f.png](https://img-blog.csdnimg.cn/img_convert/ec5d1e9bd5453666503f444ca27a5c1f.png)
不过据有些大佬说,碰到过即使改成console.log,也不会显示出源代码的eval混淆。反正我是没碰到,碰到我也不会╮(╯▽╰)╭
接下来正式开始吧~
某市房产信息平台
目标网站:
aHR0cDovLzYwLjE3My4yNTQuMTI2Lw
访问网站,随意点击一个小区,会跳转到一个随机网址,但是在页面源代码中,却看不到该网址信息,只能看到如下所示:
![fcb5d7357a878468c06685c47f29b572.png](https://img-blog.csdnimg.cn/img_convert/fcb5d7357a878468c06685c47f29b572.png)
看到这里有个 οnclick=“reurl(this)” ,意思就是“在点击时”触发 reurl 函数,那我们就全局搜索(ctrl+shift+F) reurl 这个函数
![675207c1f1957e7042f1956e6b9f0368.png](https://img-blog.csdnimg.cn/img_convert/675207c1f1957e7042f1956e6b9f0368.png)
搜到的第一个文件为页面代码,所以很明显就是第二个文件,进去再搜索(ctrl+F) reurl,看到只有一个结果,是一个eval混淆,那就照着上面说的还原下吧~
![6158e69f339656e8dc690fb110a78b40.png](https://img-blog.csdnimg.cn/img_convert/6158e69f339656e8dc690fb110a78b40.png)
果然出来了一个 reurl 函数。不过这里我采用另一种办法,能够更快的定位,直接在console控制台输入 reurl 回车即可。
![f4b7932b6342e14f18bc224b80a02f3b.png](https://img-blog.csdnimg.cn/img_convert/f4b7932b6342e14f18bc224b80a02f3b.png)
如果代码都在一行,可点击左下角{}进行美化。接下来就是进入下断点调试了,点击前面的行数(即下断点,数字上会出现蓝色标签),然后随便点个小区,程序就会停在断点处(即运行到这一行,但这行还没运行)。这时候把鼠标放在 a.id 上面可知它就是前面图【2】页面上的id值。
![e0e3d806ced1906a757cd850d3264d9d.png](https://img-blog.csdnimg.cn/img_convert/e0e3d806ced1906a757cd850d3264d9d.png)
先把这段代码复制到本地js文件中,修改成本地可以运行的样子,如下:
function reurl(id) {
var a = "/item/" + recode(id)
return a // 这里的a即为我们要的网址链接
};
接着再把鼠标放在 recode 函数上面,点击上方的链接,继续跳转到该函数中。
![725fcadc8637cfaaaad564009af276ab.png](https://img-blog.csdnimg.cn/img_convert/725fcadc8637cfaaaad564009af276ab.png)
又看到两个新的函数出现,nscaler 和 SetObjNum,一样的,复制这段代码到本地并稍作修改,继续下断点,然后按F8,让程序往下运行,进入函数,扣扣扣就行啦。
某变IP
目标网站:
aHR0cHM6Ly93d3cuYmFpYmlhbmlwLmNvbS9ob21lL2ZyZWUuaHRtbA==
打开F12,刷新网页,发现需要的数据都在free.html中,但查看网页源代码,发现IP字段被加密
![c00e561a6d91badf142776b1b5f5222f.png](https://img-blog.csdnimg.cn/img_convert/c00e561a6d91badf142776b1b5f5222f.png)
一样可以在控制台输入或全局搜索FFcontraceptive(这个名称会变,根据网页提供的搜索)。这里采用全局搜索,搜到两个文件,其中一个为free.html,都是源代码加密的地方。那明显在第二个中,打开看下
![2be7ef96c694ba9f706741ac8ce0e8b9.png](https://img-blog.csdnimg.cn/img_convert/2be7ef96c694ba9f706741ac8ce0e8b9.png)
可以看到这里调用了ddip函数,尝试打断点并刷新网页,发现断不上。因此在这文件中搜索ddip看下。
![0a1bae970ffddc5e67ddf800c72d2189.png](https://img-blog.csdnimg.cn/img_convert/0a1bae970ffddc5e67ddf800c72d2189.png)
总共只能搜索到两个结果,但是这里看到有个eval,看来又是被混淆了,一样的套路还原一下。
![2fd8674fe7f767bcc41392991992ad32.png](https://img-blog.csdnimg.cn/img_convert/2fd8674fe7f767bcc41392991992ad32.png)
将还原后的代码保存到本地,同理将这段eval上面一段的eval还原,得到如下代码:
![8e3b54c487ce65106db92a1df5f38a2a.png](https://img-blog.csdnimg.cn/img_convert/8e3b54c487ce65106db92a1df5f38a2a.png)
我们运行一下ddip函数,发现报错$未定义。这里可以看到其实是用了base64的decode函数。还是在原来的js文件中搜索decode,可以找到base64就在这个自执行函数中生成
![fe911f1c163cbfaa5ea2f914c23445de.png](https://img-blog.csdnimg.cn/img_convert/fe911f1c163cbfaa5ea2f914c23445de.png)
将这段匿名函数整个复制下来,把最后的传参jQuery改成
![1a09bfbc81d4efd7e1c14d18d1d4fd42.png](https://img-blog.csdnimg.cn/img_convert/1a09bfbc81d4efd7e1c14d18d1d4fd42.png)
这两个都没什么难度,对于一些不懂的地方,可以多下断点,然后鼠标悬停,或复制它到控制台查看就行了,就是不断调试的过程。
两个网站的详细代码,均已上传本人GitHub,可点击此处跳转。希望各位先自己练习试一下,不明白的再配合代码理解哦~
欢迎关注我的微信公众号“逆向新手”,谢谢!