最新微擎 goto + 混淆加密, 反向解密思路

本资源来自韩剧源码网,本站不提供下载,但是您可以在本站搜索同名资源,如果找不到请联系站长。

微擎 goto + 混淆加密, 反向解密思路

2020年5月12日 下午12:15
CMS技术

微擎 goto + 混淆加密, 反向解密思路

写在前面(一堆废话着急请略过)

首先我是个菜鸡。这段时间学习微擎遇到一个模块。关键文件都加密了。类似这种:

<?php
 defined("\x49\116\137\111\101") or exit("\x41\143\143\145\163\163\x20\x44\145\156\x69\x65\144"); class yzxcpt_sunModuleWxapp extends WeModuleWxapp {public function doPageactivitylist() { goto ZBpAU; Yykb9: foreach ($res as $key => $value) { goto B8RTV; TUI2i: $allzan = pdo_fetchcolumn("\163\145\154\x65\143\x74\x20\x63\157\x75\x6e\164\50\x69\144\x29\40\x61\163\x20\143\157\165\156\164\x20\x66\x72\157\155" . tablename("\x79\x7a\x78\x63\x70\164\137\163\165\156\x5f\x61\x63\164\x69\x76\151\164\x79\172\141\156") . "\40\x77\x68\x65\162\145\x20\x75\x6e\x69\x61\143\x69\144\40\75\40" . $_W["\x75\x6e\x69\x61\143\x69\144"] . "\x20\141\156\x64\x20\x61\x69\x64\x20\75\x20" . $value["\151\144"]); goto XEsex; gjDMe: goto ubQkx; goto Aq3KL; FRAU3: DRIM_: goto BXJiV; u0xtV: ubQkx: goto TUI2i; XEsex: $res[$key]["\172\x61\x6e"] = $value["\170\x6e\172\x61\x6e"] + $allzan["\143\x6f\165\x6e\x74"]; goto FRAU3; riKrf: $res[$key]["\151\163\172\141\x6e"] = 1; goto u0xtV; w07AK: $zan = pdo_get("\x79\x7a\x78\x63\x70\164\137\x73\x75\x6e\x5f\141\143\x74\151\166\151\x74\171\x7a\141\156", array("\x75\x6e\151\141\143\x69\x64" => $_W["\x75\x6e\151\x61\x63\151\x64"], "\165\151\x64" => $uid, "\141\151\144" => $value["\151\x64"])); goto V5M1X; V5M1X: if ($zan) { goto BB6x7; } goto k8F2e; k8F2e: $res[$key]["\x69\163\x7a\x61\156"] = 0; goto gjDMe; B8RTV: $res[$key]["\164\x69\x6d\145"] = date("\x59\x2d\x6d\55\144", $value["\x74\151\155\x65"]); goto w07AK; Aq3KL: BB6x7: goto riKrf; BXJiV: } goto V7iyu; e8HwJ: $where .= "\x20\141\156\x64\x20\x74\x79\160\x65\x20\x3d\x20" . $type; goto hDwoK; c9NgR: $this->return_msg(1, $res, "\x73\x75\143\x63\x65\x73\x73"); goto wztqM; sMfnF: $type = $_GPC["\164\x79\x70\145"]; goto Vl90R; pggxy: $where = "\40\167\x68\145\162\x65\x20\165\x6e\x69\x61\143\151\144\x20\75\40" . $_W["\x75\156\x69\141\143\151\144"] . "\40\x61\156\144\x20\163\x74\141\164\165\x73\x20\x3d\x20\x32"; goto UmOHV; c2hzE: $res = pdo_fetchall("\x73\x65\x6c\145\143\x74\40\52\40\x66\x72\x6f\x6d\40" . tablename("\x79\x7a\x78\143\x70\164\x5f\163\165\x6e\137\141\x63\164\x69\x76\x69\164\x79") . $where . "\x20\x6f\x72\144\145\162\x20\x62\171\40\x73\157\162\x74\40\x61\163\143\40" . $limit); goto Yykb9; Vl90R: $uid = $_GPC["\165\x69\144"]; goto j3k3y; bjheH: $limit = "\40\x6c\x69\x6d\x69\164\40" . $start . "\x2c" . $length; goto pggxy; j3k3y: $page = $_GPC["\160\x61\147\x65"] ? $_GPC["\160\x61\x67\145"] : 1; goto kY_oM; Z4LTa: $start = ($page - 1) * $length; goto bjheH; hDwoK: lMF7r: goto c2hzE; UmOHV: if (!$type) { goto lMF7r; } goto e8HwJ; V7iyu: Gtn_w: goto c9NgR; ZBpAU: global $_GPC, $_W; goto sMfnF; kY_oM: $length = $_GPC["\154\145\x6e\147\164\150"] ? $_GPC["\154\x65\x6e\147\x74\150"] : 10; goto Z4LTa; wztqM: }
  • 这样就很难受,google 了一下有很多微擎 解密 的网站,都是按 kb 收费的,emmm,犹豫了一下没有剁手。
  • 想着自己学着玩也没人给报销,并且这次掏钱包解决了,下次遇到还是不会。。。
  • 索性研究研究吧。找了挺多相关帖子,奈何水平有限,那些文章提到的工具之类都不会用。只好用笨方法。
  • 搜索论坛关键词,还没有人发过类似帖子。倒有不少求助解密的。授人以鱼不如授人以渔。
  • 我这算是抛砖引玉吧,希望能有大佬写出脚本自动执行。节省人工。

准备工作

 

  • PHP goto 知识
    1. PHP.net
    2. PHP中文网
  • 格式化代码
    • 看到无序乱码就烦,我也是。
    • 可以用编辑器自带的代码格式化来优化
    • 我用的是 vscode 快捷键 alt + shift +f
    • 需要插件,叫啥我忘了。不过如果没装过按下快捷键的时候会提示你安装

 

推荐工具

  • online PHP and Javascript Decoder
    • 这个站点对变量值的混淆解析有用
    • 缺点是不能解析goto

 

加密特征

  • 目前发现微擎的加密主要是两种
    1. 变量值混淆
    2. 用 goto 语法 打乱正常代码顺序

+ 根据上面的特征,就方便做出反向解密
1. 变量值混淆
+ 上面的工具可以解决,你可能好奇是怎么解析出来的
+ 其实用 echo | var_dump() | peint 同样可以达到一样的效果
+ 注意要用 “双括号” php 才会解析
+ 具体是什么编码混淆的,因为本人能力有限。就不得而知了。有知道的大佬可以帮忙解惑。先谢谢啦。
2. goto 打乱正常代码顺序
+ 目前我用的笨方法,就是一句一句找
+ 按照 goto 顺序 重新剪切还原
+ 缺点就是太浪费时间,目前还没有好的思路。想用正则可是不知道怎么写。。。。
+ 希望大佬能有高效解决方案[/md]

调试过程

小技巧

  • 微擎的方法多数以 global $_W, $_GPC; 开始。
    • (初始化两个全局变量)
  • 微擎小程序的结尾多数是 $this->result( );
  • 等理顺所有 goto 的时候,你会发现正好和最后一个 goto 标记相对
  • 微擎还对条件判断语句做了加密。可以通过特征识别
    1. if 单个条件判断语句会取反。if…elseif…else 按正常解析
    2. if…elseif….特征
    3. else 特征
  • 特征在代码注释找吧 —-> // 去掉goto思路
  • 我太困了.马上两点了。我要睡了zzz
  • 格式化代码之后,清爽了很多。也更有耐心看下去啦
<?php
// 格式化完毕
defined("IN_IA") or exit("Access Denied");
class yzxcpt_sunModuleWxapp extends WeModuleWxapp
{
public function doPagecoupontlist()
{
    goto RJq8z;
    RJq8z: global $_GPC, $_W;
    goto Fd00u;
    Fd00u: $sid = $_GPC["\x73\x69\144"];
    goto zEa5k;
    zEa5k: $page = max(1, intval($_GPC["\160\x61\x67\145"]));
    goto h9fAf;
    h9fAf: $size = intval($_GPC["\x6c\x65\156\x67\164\x68"]) ? intval($_GPC["\x6c\145\x6e\147\x74\x68"]) : 10;
    goto pZcKj;
    pZcKj: $coupon = pdo_fetchall("\163\x65\x6c\x65\x63\x74\40\141\x2e\x2a\40\x66\x72\x6f\x6d\40" . tablename("\x79\x7a\x78\143\x70\164\x5f\163\x75\x6e\137\143\157\x75\x70\x6f\x6e") . "\x61\x20\x6c\x65\x66\164\x20\x6a\157\x69\x6e\40" . tablename("\171\172\170\143\160\x74\137\x73\165\156\137\x73\x68\157\x70\x5f\x63\x6f\x75\160\x6f\x6e") . "\142\x20\x6f\x6e\x20\142\x2e\143\x69\x64\x20\x3d\x20\141\x2e\151\x64\40\167\150\x65\x72\x65\40\142\x2e\163\151\144\x20\75\40{$sid}\x20\141\156\x64\40\141\56\x73\x74\x61\x74\165\x73\x3d\61\40\141\x6e\x64\40\x61\56\x63\x68\145\143\153\x73\x20\x3d\x20\61\x20\141\x6e\144\x20\141\x2e\163\x74\141\164\x65\41\75\61\x20\141\156\144\x20\141\56\x75\x6e\x69\141\143\151\x64\40\75\40" . $_W["\x75\x6e\x69\141\x63\x69\x64"] . "\40\141\156\x64\40\142\56\x75\x6e\x69\x61\x63\x69\144\x20\x3d\40" . $_W["\x75\156\151\141\143\151\144"] . "\x20\154\151\x6d\151\164\40" . ($page - 1) * $size . "\x2c" . $size);
    goto vffZo;
    vffZo: foreach ($coupon as $key => $value) {
        goto H8EAI;
        H8EAI: if ($value["\163\164\141\164\x65"] == 1) {
            goto Yn0N_;
        }
        goto sCZQr;
        sCZQr: if ($value["\x73\x74\141\x74\x65"] == 2) {
            goto h23aY;
        }
        goto UDLmI;
        UDLmI: $coupon[$key]["\x73\150\x6f\160"]["\x6e\x61\155\145"] = "\xe9\200\x9a\347\x94\250";
        goto aaTT8;
        aaTT8: goto KEerh;
        goto OdbV7;
        OdbV7: Yn0N_: goto dMffH;
        dMffH: $coupon[$key]["\x73\150\157\x70"] = pdo_get("\x79\x7a\x78\143\160\164\137\x73\165\156\137\163\150\157\160", array("\165\x6e\151\x61\x63\x69\144" => $_W["\x75\x6e\151\x61\x63\151\x64"], "\x69\x64" => $value["\163\x69\x64"]), array("\x6e\141\155\x65", "\151\163\143\157\x75\x70\x6f\156"));
        goto x3KQl;
        x3KQl: goto KEerh;
        goto weAfu;
        weAfu: h23aY: goto s8Iqg;
        s8Iqg: $coupon[$key]["\x73\x68\157\x70"]["\x6e\x61\x6d\x65"] = "\xe9\x99\x90\351\203\250\xe5\210\x86\345\225\206\345\xae\xb6\344\275\xbf\347\224\xa8";
        goto PQvO4;
        PQvO4: KEerh: goto oyZDv;
        oyZDv: IyHnC: goto Gzoio;
        Gzoio:
    }
    goto Fcg6E;
    Fcg6E: I1y9r: goto GoLNC;
    GoLNC: $info["\x63\157\x75\160\x6f\x6e"] = $coupon;
    goto k3btY;
    k3btY: $info["\x73\x65\164"] = pdo_get("\x79\172\170\143\x70\164\x5f\163\165\x6e\x5f\x76\x69\160\x63\x61\x72\144\x5f\x73\x65\x74", array("\165\x6e\x69\141\143\x69\144" => $_W["\165\156\x69\141\143\x69\144"]));
    goto vGEBd;
    vGEBd: $info["\165\163\x65\162"] = pdo_get("\171\x7a\170\143\160\x74\x5f\163\x75\x6e\137\x75\x73\145\162", array("\151\x64" => $_GPC["\x75\x69\x64"], "\165\156\151\141\143\x69\144" => $_W["\x75\156\151\x61\x63\151\144"]));
    goto UkXDm;
    UkXDm: $this->return_msg(1, $info, "\163\x75\x63\143\x65\163\x73");
    goto GF5Hz;
    GF5Hz:
}
}
```php
<?php
// 使用工具解析混淆
defined("IN_IA") or exit("Access Denied");
class yzxcpt_sunModuleWxapp extends WeModuleWxapp
{
    public function doPagecoupontlist()
    {
        goto RJq8z;
        RJq8z: global $_GPC, $_W;
        goto Fd00u;
        Fd00u: $sid = $_GPC["sid"];
        goto zEa5k;
        zEa5k: $page = max(1, intval($_GPC["page"]));
        goto h9fAf;
        h9fAf: $size = intval($_GPC["length"]) ? intval($_GPC["length"]) : 10;
        goto pZcKj;
        pZcKj: $coupon = pdo_fetchall("select a.* from " . tablename("yzxcpt_sun_coupon") . "a left join " . tablename("yzxcpt_sun_shop_coupon") . "b on b.cid = a.id where b.sid = {$sid} and a.status=1 and a.checks = 1 and a.state!=1 and a.uniacid = " . $_W["uniacid"] . " and b.uniacid = " . $_W["uniacid"] . " limit " . ($page - 1) * $size . "," . $size);
        goto vffZo;
        vffZo: foreach ($coupon as $key => $value) {
            goto H8EAI;
            H8EAI: if ($value["state"] == 1) {
                goto Yn0N_;
            }
            goto sCZQr;
            sCZQr: if ($value["state"] == 2) {
                goto h23aY;
            }
            goto UDLmI;
            UDLmI: $coupon[$key]["shop"]["name"] = "通用";
            goto aaTT8;
            aaTT8: goto KEerh;
            goto OdbV7;
            OdbV7: Yn0N_: goto dMffH;
            dMffH: $coupon[$key]["shop"] = pdo_get("yzxcpt_sun_shop", array("uniacid" => $_W["uniacid"], "id" => $value["sid"]), array("name", "iscoupon"));
            goto x3KQl;
            x3KQl: goto KEerh;
            goto weAfu;
            weAfu: h23aY: goto s8Iqg;
            s8Iqg: $coupon[$key]["shop"]["name"] = "限部分商家使用";
            goto PQvO4;
            PQvO4: KEerh: goto oyZDv;
            oyZDv: IyHnC: goto Gzoio;
            Gzoio:
        }
        goto Fcg6E;
        Fcg6E: I1y9r: goto GoLNC;
        GoLNC: $info["coupon"] = $coupon;
        goto k3btY;
        k3btY: $info["set"] = pdo_get("yzxcpt_sun_vipcard_set", array("uniacid" => $_W["uniacid"]));
        goto vGEBd;
        vGEBd: $info["user"] = pdo_get("yzxcpt_sun_user", array("id" => $_GPC["uid"], "uniacid" => $_W["uniacid"]));
        goto UkXDm;
        UkXDm: $this->return_msg(1, $info, "success");
        goto GF5Hz;
        GF5Hz:
    }
}
<?php
// 理顺 goto
defined("IN_IA") or exit("Access Denied");
class yzxcpt_sunModuleWxapp extends WeModuleWxapp
{
    public function doPagecoupontlist()
    {
        goto RJq8z;
        RJq8z: global $_GPC, $_W;
        goto Fd00u;
        Fd00u: $sid = $_GPC["sid"];
        goto zEa5k;
        zEa5k: $page = max(1, intval($_GPC["page"]));
        goto h9fAf;
        h9fAf: $size = intval($_GPC["length"]) ? intval($_GPC["length"]) : 10;
        goto pZcKj;
        pZcKj: $coupon = pdo_fetchall("select a.* from " . tablename("yzxcpt_sun_coupon") . "a left join " . tablename("yzxcpt_sun_shop_coupon") . "b on b.cid = a.id where b.sid = {$sid} and a.status=1 and a.checks = 1 and a.state!=1 and a.uniacid = " . $_W["uniacid"] . " and b.uniacid = " . $_W["uniacid"] . " limit " . ($page - 1) * $size . "," . $size);
        goto vffZo;
        vffZo: foreach ($coupon as $key => $value) {
            goto H8EAI;
            H8EAI: if ($value["state"] == 1) {
                goto Yn0N_;
            }
            goto sCZQr;
            sCZQr: if ($value["state"] == 2) {
                goto h23aY;
            }
            goto UDLmI;
            UDLmI: $coupon[$key]["shop"]["name"] = "通用";
            goto aaTT8;
            aaTT8: goto KEerh;
            goto OdbV7;
            OdbV7: Yn0N_: goto dMffH;
            dMffH: $coupon[$key]["shop"] = pdo_get("yzxcpt_sun_shop", array("uniacid" => $_W["uniacid"], "id" => $value["sid"]), array("name", "iscoupon"));
            goto x3KQl;
            x3KQl: goto KEerh;
            goto weAfu;
            weAfu: h23aY: goto s8Iqg;
            s8Iqg: $coupon[$key]["shop"]["name"] = "限部分商家使用";
            goto PQvO4;
            PQvO4: KEerh: goto oyZDv;
            oyZDv: IyHnC: goto Gzoio;
            Gzoio:
        }
        goto Fcg6E;
        Fcg6E: I1y9r: goto GoLNC;
        GoLNC: $info["coupon"] = $coupon;
        goto k3btY;
        k3btY: $info["set"] = pdo_get("yzxcpt_sun_vipcard_set", array("uniacid" => $_W["uniacid"]));
        goto vGEBd;
        vGEBd: $info["user"] = pdo_get("yzxcpt_sun_user", array("id" => $_GPC["uid"], "uniacid" => $_W["uniacid"]));
        goto UkXDm;
        UkXDm: $this->return_msg(1, $info, "success");
        goto GF5Hz;
        GF5Hz:
    }
}
// 去掉goto思路
<?php
defined("IN_IA") or exit("Access Denied");
class yzxcpt_sunModuleWxapp extends WeModuleWxapp
{
    public function doPagecoupontlist()
    {
        global $_GPC, $_W;
        $sid = $_GPC["sid"];
        $page = max(1, intval($_GPC["page"]));
        $size = intval($_GPC["length"]) ? intval($_GPC["length"]) : 10;
        $coupon = pdo_fetchall("select a.* from " . tablename("yzxcpt_sun_coupon") . "a left join " . tablename("yzxcpt_sun_shop_coupon") . "b on b.cid = a.id where b.sid = {$sid} and a.status=1 and a.checks = 1 and a.state!=1 and a.uniacid = " . $_W["uniacid"] . " and b.uniacid = " . $_W["uniacid"] . " limit " . ($page - 1) * $size . "," . $size);
        foreach ($coupon as $key => $value) {
            goto H8EAI;
            H8EAI: if ($value["state"] == 1) {
                goto Yn0N_;
            }
            goto sCZQr;
            sCZQr: if ($value["state"] == 2) {
                goto h23aY;
            }
            /**
             * 上面的 H8EAI 紧跟 if代码块
             * 代码块结束后的 goto sCZQr;
             * sCZQr 又是 if 代码块 
             * 并且 条件变量 $value["state"] 是一样的
             * 通过 代码结构 和 上下文语境 可以肯定 sCZQr 是 elseif
             */
            goto UDLmI;
            UDLmI: $coupon[$key]["shop"]["name"] = "通用";
            goto aaTT8;
            aaTT8: goto KEerh;

            //
            /**
             * goto aaTT8;
             * aaTT8: 紧跟 goto标签 goto KEerh;
             * goto 标签;
             * 标记: goto 标签;
             * 这种代表 else 结束
             * 
             */
            goto OdbV7;
            OdbV7: Yn0N_: goto dMffH;
            /**
             * goto 标签1;
             * 标记1: 括号内标记: goto 标签2;
             * 代表标记1 结束 和 括号内标记开始
             */
            dMffH: $coupon[$key]["shop"] = pdo_get("yzxcpt_sun_shop", array("uniacid" => $_W["uniacid"], "id" => $value["sid"]), array("name", "iscoupon"));
            goto x3KQl;
            x3KQl: goto KEerh;
            /**
             * goto 标签1;
             * 标记1: goto 标记2;
             * 这种都代表结束
             * 跟 else 的区别在于上下句
             * if 的开头带有  
             * goto 标签1;
             * 标记1: 括号内标记: goto 标签2;
             * else 没有这个开头
             *
             */
            goto weAfu;
            weAfu: h23aY: goto s8Iqg;
            s8Iqg: $coupon[$key]["shop"]["name"] = "限部分商家使用";
            goto PQvO4;
            PQvO4: KEerh: goto oyZDv;
            oyZDv: IyHnC: goto Gzoio;
            Gzoio:
        }
        goto Fcg6E;
        Fcg6E: I1y9r: goto GoLNC;
        GoLNC: $info["coupon"] = $coupon;
        goto k3btY;
        k3btY: $info["set"] = pdo_get("yzxcpt_sun_vipcard_set", array("uniacid" => $_W["uniacid"]));
        goto vGEBd;
        vGEBd: $info["user"] = pdo_get("yzxcpt_sun_user", array("id" => $_GPC["uid"], "uniacid" => $_W["uniacid"]));
        goto UkXDm;
        UkXDm: $this->return_msg(1, $info, "success");
        goto GF5Hz;
        GF5Hz:
    }
}
<?php
// 最终成品
defined("IN_IA") or exit("Access Denied");
class yzxcpt_sunModuleWxapp extends WeModuleWxapp
{
    public function doPagecoupontlist()
    {
        global $_GPC, $_W;
        $sid = $_GPC["sid"];
        $page = max(1, intval($_GPC["page"]));
        $size = intval($_GPC["length"]) ? intval($_GPC["length"]) : 10;
        $coupon = pdo_fetchall("select a.* from " . tablename("yzxcpt_sun_coupon") . "a left join " . tablename("yzxcpt_sun_shop_coupon") . "b on b.cid = a.id where b.sid = {$sid} and a.status=1 and a.checks = 1 and a.state!=1 and a.uniacid = " . $_W["uniacid"] . " and b.uniacid = " . $_W["uniacid"] . " limit " . ($page - 1) * $size . "," . $size);
        foreach ($coupon as $key => $value) {
            if ($value["state"] == 1) {
                $coupon[$key]["shop"] = pdo_get("yzxcpt_sun_shop", array("uniacid" => $_W["uniacid"], "id" => $value["sid"]), array("name", "iscoupon"));
            }elseif ($value["state"] == 2) {
                $coupon[$key]["shop"]["name"] = "限部分商家使用";
            }else {
                $coupon[$key]["shop"]["name"] = "通用";
            }
        }
        $info["coupon"] = $coupon;
        $info["set"] = pdo_get("yzxcpt_sun_vipcard_set", array("uniacid" => $_W["uniacid"]));
        $info["user"] = pdo_get("yzxcpt_sun_user", array("id" => $_GPC["uid"], "uniacid" => $_W["uniacid"]));
        $this->return_msg(1, $info, "success");
    }
}

 

 

【小程序源码网资源版权风险说明】:
本站为避免不必要的纷争,分享的所有资源中一切可能有版权风险的资源将全部转载自第三方网站或平台,站长只为大家提供相关资源的介绍和跳转引导。 因可能有疏忽大意,所以如有遗漏资源侵犯了您的合法权利,请联系站长删除。
【小程序源码网资源下载使用说明】:
本站所分享的一切QQ小程序源码,thinkphp整站源码,微信小程序源码,图文教程等资源仅供用户学习参考使用,任何人不得作其他用途,违者自行承担所有责任。
【小程序源码网毫无人看的介绍】:
本站又称Z站,原名贼娘网,开站于2018年,换过三任站长,目前站长是第四任站长,本站是一个主要分享免费开源小程序源码/网站源码/免费素材/教程资源的网站,主要小程序资源有用于学习的小程序源码,也有正版原创可商用的小程序源码,是一个公益博客型网站。
【小程序源码网原创源码版权申明】:
未经小程序源码网许可,任何人不得擅自使用本站原创首发源码进行商业行为(除本站VIP用户在期限内,版权无使用限制),否则将依法承担相应赔偿责任。
【小程序源码网转载文章版权申明】:
本站所转载的QQ小程序或微信小程序源码与其他资源仅供学习,任何人不得作其他用途,违者自行承担所有责任。
【小程序源码网站长最后的屁话】:
如有您认为本站有任何侵犯您合法权益的文章,或者您有什么疑问需求,欢迎联系站长QQ,站长24小时在线,备注公司名称和源码版权问题或者需要小程序定制开发等站长业务类型可急速处理,如果您只是交流小程序的一些开发问题或源码问题可以加入QQ群讨论,就不用加站长啦,对于白嫖党,QQ群才是处理问题的天堂,当然站长也欢迎大家骚扰~
小程序源码网 » 最新微擎 goto + 混淆加密, 反向解密思路
嘿,投喂下嘛!