动态调试JS代码

本文详细解读了在CTF竞赛中如何处理JavaScript编码,并利用eval函数进行解码。通过实例展示了如何将混淆的JS代码转换为可读形式,包括日期转换、表达式求值和条件判断等关键步骤。

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

前言

在一些CTF竞赛中,常常有些题目是给出一段编码过的JavaScript代码,最后会有eval()这样的函数。
eval()函数
eval 函数对作为数字表达式的一个字符串进行求值,其语法为:

eval(expr)

此处 expr 是一个被求值的字符串参数。

如果该字符串是一个表达式,eval 求该表达式的值;

如果该参数代表一个或多个 JavaScript 语句,那么 eval 执行这些语句。

eval 函数可以用来把一个日期从一种格式(总是字符串)转换为数值表达式或数字。


如下是合天CTF里面的例子,给出一段很乱的JS代码,但是在执行JavaScript代码的过程中,可以对eval函数下断,查看解码后的JS代码。
首先,将js代码编入html网页,例如
<html>
<head>
<title>js代码调试</title>
<script>_='function $(){e=getEleById("c").value;length==16^be0f23233ace98aa$c7be9){tfls_aie}na_h0lnrg{e_0iit\'_ns=[t,n,r,i];for(o=0;o<13;++o){	[0]);.splice(0,1)}}}	\'<input id="c">< onclick=$()>Ok</>\');delete _var ","docu.)match(/"];/)!=null=["	write(s[o%4]buttonif(e.ment';for(Y in $='	')with(_.split($[Y]))_=join(pop());
eval(_)</script>
</head>
<body>
</body>
</html>
在Chrome浏览器中执行此网页,然后打开firebug



<script>_='function $(){e=getEleById("c").value;length==16^be0f23233ace98aa$c7be9){tfls_aie}na_h0lnrg{e_0iit\'_ns=[t,n,r,i];for(o=0;o<13;++o){	[0]);.splice(0,1)}}}	\'<input id="c">< onclick=$()>Ok</>\');delete _var ","docu.)match(/"];/)!=null=["	write(s[o%4]buttonif(e.ment';for(Y in $='	')with(_.split($[Y]))_=join(pop());eval(_)</script>
在eval函数出下断点后,重新加载此网页,就可以在VM231中看到解码后的js代码,如下

function $()
{var e=document.getElementById("c").value;
if(e.length==16)
if(e.match(/^be0f23/)!=null)
if(e.match(/233ac/)!=null)
if(e.match(/e98aa$/)!=null)
if(e.match(/c7be9/)!=null)
{var t=["fl","s_a","i","e}"];
var n=["a","_h0l","n"];
var r=["g{","e","_0"];
var i=["it'","_","n"];
var s=[t,n,r,i];
for(var o=0;o<13;++o){
document.write(s[o%4][0]);s[o%4].splice(0,1)}
}}document.write('<input id="c"><button onclick=$()>Ok</button>');delete _

flag{it's_a_h0le_in_0ne}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值