网安引领时代,弥天点亮未来
1.以前为了调试代码自学的手工还原混淆代码,太久不用忘记的快差不多了,现在捡起来写个基础经验分享吧,这个是基础。
2.在渗透测试过程中,如果碰到混淆的代码,调试分析很困难,例如下面这些。
3.然后使用在线工具还原的解密还是很鸡肋。
4.这个时候需要手工还原和分析代码了,先格式化一下代码,看起来也舒服一点。
5.先还原一下tipstime这个函数吧
6.代码中大量的使用了__Ox6f8fd,其中__Ox6f8fd定义的是一个数组
7.把这个数组复制到浏览器的控制台运行一下就行
8.__Ox6f8fd[0x1]代表.timemsg,__Ox6f8fd[0x0]代表text
9.然后第一行还原结果是如下
10.然后写成人能看的懂的格式就是这样$(".timemsg").text(_0x81efx2);
11.第二行的if(_0x81efx2 == 20)这个不用管,因为_0x81efx2就是个传参名称而已,别想太多,这个没有混淆。
12.第三行$(__Ox6f8fd[0x3])[__Ox6f8fd[0x2]]();其中__Ox6f8fd[0x3]代表.tips,__Ox6f8fd[0x2]代表hide
13.第三行的还原结果如下
14.写成人能看的懂的就是$(".tips").hide();
15.第四行
(1)__Ox6f8fd[0x5]代表.timeout
(2) __Ox6f8fd[0x4]代表show
16.第四行还原结果如下
17.写成人能看的懂就是这样$(".timeout").show()
18.最后tipstime函数完整的代码就是这样
19.如果看_0x81efx2不顺眼,那我就全部替换成变量名称time,这下舒服了吧
20.接下来就是NXplayer函数了
(1)navigator[__Ox6f8fd[0x7]][__Ox6f8fd[0x6]](/iPad|iPhone|iPod/i)
(2)navigator[__Ox6f8fd[0x7]][__Ox6f8fd[0x6]](/iPad|iPhone|Android|Linux|iPod/i)
21.Navigator 对象是由 JavaScript runtime engine 自动创建的,并不是用户自己创建的
22.__Ox6f8fd[0x7]代表userAgent,__Ox6f8fd[0x6]代表match
23.所以NXplayer函数第一行和第二行还原结果如下
24.写成人能看的懂是
(1)navigator.userAgent.match(/iPad|iPhone|iPod/i) != null;
(2)navigator.userAgent.match(/iPad|iPhone|Android|Linux|iPod/i) != null;
25.把上面这些操作自动化,先遍历数组,提取混淆之前的字符串,然后用混淆之前的字符串去替换代码中混淆之后的字符串,这样自动去除混淆脚本基本完成了
26.为什么说基本完成,因为只是替换了字符,很多语法问题还需要细调,我就不写了。。。。。。。。。主要还是嫌麻烦,路还很长呢。
27.这个已经是很简单的案例了,碰到更复杂的混淆和加密,时间要花的更多的哦。
28.欢迎加入弥天实验室
知识分享完了
喜欢别忘了关注我们哦~
学海浩茫,
弥 天
安全实验室
本文始发于微信公众号(thelostworld):JavaScript逆向基础之手工还原混淆代码
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论