【问题标题】:New to Javascript Obfuscation.. Why is it not executing?Javascript混淆的新手..为什么它没有执行?
【发布时间】:2016-03-18 15:12:44
【问题描述】:

我正在尝试运行一些已被混淆的 Java 脚本,但由于某种原因没有发生任何事情...我的文件名为 test2.js,其中包含以下代码:

eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('L 6;6=\'p\';r c A(){1.2("3").0=""q(6<B){1.2("h").0+="C. s I o n k? I u l m 5 p <4>"}y q(6>w){1.2("h").0+="x D!. s I o n k? I u l m 5 6 <4>"}1.2("3").0+="<a 9=\'#\' 7=\'g();\'>e i, j d 5 f</a><4>"1.2("3").0+="<a 9=\'#\' 7=\'g();\'>e i, j d 5 f</a><4>"8 b}c g(){1.2("3").0=""1.2("h").0+="e i, j d 5 f<4>";1.2("3").0+="<a 9=\'#\' 7=\'v();\'>z H</a><4>"8 b}c v(){1.2("3").0=""1.2("3").0+="<a 9=\'#\' 7=\'t();\'>E M K J, F G?</a><4>"8 b}c t(){1.2("3").0=""8 b}',49,49,'innerHTML|document|getElementById|NPCResponseWindow|br|is|GetCharHP|onclick|return|href||false|function|name|Hi|Player|nicetomeetyou|NPCTalkWindow|NPC|my|today|your|HP|you|help|399|if||Can|END|see|Beginnings2|450|Go|else|Same|Beginnings|400|Hello|away|Lets|shall|we|here||again|this|var|do'.split('|')))

我的 HTML 文件有这个:

<script src="test2.js"></script>

<HTML>
<BODY>
<table>
    <tr>
        <td><div id="NPCTalkWindow"></div></td></tr>
    <tr>
        <td> <div id="NPCResponseWindow"> <a href='#' onclick='Beginnings();'>Begin Conversation</a></div>
        </td>
    </tr>
</table>
</body>
</html>

但是除了开始对话之外什么都没有出现。有什么帮助吗?我做错了什么?

【问题讨论】:

  • 只是猜测:将脚本标签移动到文件末尾。可能代码使用的元素在执行时并不存在
  • 真的是混淆了代码吗?你在混淆它之前调试过它吗?
  • 混淆脚本容易出错——检查浏览器的控制台日志。如果您只想最小化文件大小,只需将其丑化并启用 gzip 压缩即可。混淆很少能证明最初的意图是正确的——如果您想保密任何事情,不要将其发送给客户端
  • 我不是想隐藏它,只是让新手更难找到代码。此时,客户端执行对我不起作用。我确实在混淆之前尝试了代码,它就像一个魅力。我还将脚本移到了最后。还是一无所有。感谢到目前为止的建议/cmets。
  • “我不是想隐藏它,只是让新手更难找到代码”——这毫无意义。

标签: javascript html obfuscation deobfuscation


【解决方案1】:

正如预期的那样,它们是未混淆代码上的错误:

var GetCharHP;
GetCharHP = '399';
r    // there is an error here, add the ;
function Beginnings() {
    document.getElementById("NPCResponseWindow").innerHTML = ""
    if (GetCharHP < 400) {
        document.getElementById("NPCTalkWindow").innerHTML += "Hello. Can I help you today? I see your HP is 399 <br>"
    } else if (GetCharHP > 450) {
        document.getElementById("NPCTalkWindow").innerHTML += "Go away!. Can I help you today? I see your HP is GetCharHP <br>"
    }
    document.getElementById("NPCResponseWindow").innerHTML += "<a href='#' onclick='nicetomeetyou();'>Hi NPC, my name is Player</a><br>"
    document.getElementById("NPCResponseWindow").innerHTML += "<a href='#' onclick='nicetomeetyou();'>Hi NPC, my name is Player</a><br>"
    return false
}

function nicetomeetyou() {
    document.getElementById("NPCResponseWindow").innerHTML = ""
    document.getElementById("NPCTalkWindow").innerHTML += "Hi NPC, my name is Player<br>";
    document.getElementById("NPCResponseWindow").innerHTML += "<a href='#' onclick='Beginnings2();'>Same here</a><br>"
    return false
}

function Beginnings2() {
    document.getElementById("NPCResponseWindow").innerHTML = ""
    document.getElementById("NPCResponseWindow").innerHTML += "<a href='#' onclick='END();'>Lets do this again, shall we?</a><br>"
    return false
}

function END() {
    document.getElementById("NPCResponseWindow").innerHTML = ""
    return false
}

并在您的 HTML 中添加一个文档类型 并将脚本移动到文件末尾(juste before) 您无法隐藏 javascript 代码,这很容易与在线服务混淆

【讨论】:

  • r // there is an error here, add the ;
  • Doctype、分号和移动到文件末尾是它的作用。谢谢大家!
  • @zerkms,用户混淆了代码,我认为混淆器可能会将所有代码强制为一行并且忘记在混淆之前添加自动分号。
  • @ArnaudGueras 那么r;r 好多少?这是完全一样的说法。 ; 确实没有任何改变。
  • 我知道,这只是他的混淆器可能导致错误的假设。但我知道同样的事情,只有当你使用错误的缩小器最小化你的代码时,它不会以 ; 结束所有行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多