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

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

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 知识
PHP.net
PHP中文网
格式化代码

推荐工具

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

加密特征

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

调试过程
小技巧
微擎的方法多数以 global $_W, $_GPC; 开始。
(初始化两个全局变量)
微擎小程序的结尾多数是 $this->result( );
等理顺所有 goto 的时候,你会发现正好和最后一个 goto 标记相对
微擎还对条件判断语句做了加密。可以通过特征识别
只有一个 if( ){ } 的条件判断语句会取反。
if( ) { }else{ } 因为条件判断语句不能取反,所以按正常解析即可
if( ){ }elseif( ){ }elseif( ){ }… // 注意是没有 else{ }结尾的, 其中的最后一个 elseif( ) { }可能会取反
if( ){ } | elseif( ){ }… 开始特征 & 结束特征
else{ } 特征
特征在代码注释找吧,注释在 ----> // 去掉goto思路
我太困了.马上两点了。我要睡了zzz
格式化代码之后,清爽了很多。也更有耐心看下去啦。

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:}
}
// 使用工具解析混淆 + 理顺 gotodefined("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思路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 KEerh; (goto标签)* 这种格式:*      goto 标签1;*      标记1: goto 标签2;* 这种代表条件判断语句的 结束* 条件结束有两种 *      一种是 if(){} | elseif(){} 结束*      另一种就是 else{} 结束* 那么上面的这段是 if | elseif 结束 还是 else 结束呢?* 下面有例子会更好理解* * */goto OdbV7;OdbV7: Yn0N_: goto dMffH;/*** goto 标签1;* 标记1: 花括号内标记Yn0N_: goto 标签2;* 这种格式*      goto 标签1;*      标记1: 花括号内标记x: goto 标签2;* 这种格式,表示 标签2 指向的 这段代码会是嵌套的代码* 也可以理解成* 从 花括号内标记x: goto标签2*      // 代码段;*      直到遇到结束特征。之间的内容, 都属于花括号内标记x* */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;* 上面知道了这种格式 代表结束* 分析这段代码*      goto OdbV7;*      OdbV7: Yn0N_:(花括号内的标记) goto dMffH; *      dMffH:*          // 代码段;*      goto x3KQl;*      x3KQl: goto KEerh;  *  //* 其中的 `OdbV7: Yn0N_:(花括号内的标记) goto dMffH;`  代表了 if( ){ } 或者 elseif( ) { } 的起始特征* 并且这种结构像是代码结构中的嵌套,这种嵌套特征也适用于用在 foreach( ) { } 等循环的嵌套中*  //*  最后的 `x3KQl: goto KEerh;` 代表了上面嵌套内容的结束特征*  *  //* 再来看最早见到的,那一段带有结束特征的代码结构* goto UDLmI;* UDLmI: $coupon[$key]["shop"]["name"] = "通用";* goto aaTT8;* aaTT8: goto KEerh;* 他的结构上没有类似上面起始特征。只看到结束特征:*      goto 标签1;*      标记1: 花括号内标记: goto 标签2;* 所以由此判断这段 goto 代表 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:}
}
// 最终成品
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");}
}

抄自于吾爱破解大佬,原文地址:https://www.52pojie.cn/thread-1177103-1-1.html

微擎 goto + 混淆加密, 反向解密思路相关推荐

  1. 微擎模块php文件下载加密,微擎 goto + 混淆加密, 反向解密思路.

    本帖最后由 丨一灬一丨 于 2020-5-27 10:29 编辑 微擎 goto + 混淆加密, 反向解密思路 写在前面(一堆废话着急请略过) 首先我是个菜鸡.这段时间学习微擎遇到一个模块.关键文件都 ...

  2. PC版微信加密图片解密思路与代码实现_Python

    PC版微信加密图片解密思路与代码实现_Python 前言 PC版的微信会加密存储用户接受到的所有图片信息. 存储路径为 C:\Users\用户名\Documents\WeChat Files\微信号\ ...

  3. 微擎上传图片失败——加密版本不能使用__DIR__或者__FILE__

    微擎上传图片失败--加密版本不能使用__DIR__或者__FILE__ // $imgpath=__DIR__.'/public/image/'; //加密版本使用__DIR__和__FILE__都会 ...

  4. PHP goto语句加密的解密全过程(实战)

    PHP goto语句加密的解密全过程(实战) PHP goto语句加密的解密全过程 代码格式化 总结 PHP goto语句加密的解密全过程 网上发现一款相对简单功能全面的PHP源码,发货100自动发货 ...

  5. base64随机字符混淆加密、解密-美拍视频地址解密(兼容ie、中文)

    用火车头测试采集美拍的数据时无意中发现美拍的视频地址是一段加了混淆字符串的base64代码.如下图: 于是好奇之下研究下解密算法.具体过程省略800字.发现美拍的视频解密是通过js完成,于是找到了具体 ...

  6. base64随机字符混淆加密、解密-美拍视频地址解密,反推加密算法

    用火车头测试采集美拍的数据时无意中发现美拍的视频地址是一段加了混淆字符串的base64代码.如下图 于是好奇之下研究了下解密算法.具体过程省略800字.发现美拍的视频解密是通过js完成,于是找到了具体 ...

  7. 简单混淆密码加密和解密

    最近项目比较多,就很少写文章.随着项目的收尾.时间也开始比较充裕起来了. 我们在编程过程当中.经常遇见到算法,那到底什么是算法呢. 比方:如果我把密码加密存到数据库,读取的时候再解密还原. 这个过程就 ...

  8. 【Unity3D日常开发】Unity3D项目的加密、激活思路分享

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有 ...

  9. 微擎在线goto解密系统

    介绍: 微擎在线goto解密系统 直接上传到根目录,把需要解密的goto文件放到decodeFile目录下,访问域名即可解密. 5438独家升级 网盘下载地址: http://kekewangLuo. ...

最新文章

  1. CVPR2018论文看点:基于度量学习分类与少镜头目标检测
  2. 安装python步骤-小白入门:Python安装的10个步骤,极其细致!!
  3. C/C++中传值和传地址(引用)
  4. 你真的以为你了解Java的序列化了吗
  5. JBoss Fuse:使用JEXL的动态蓝图文件
  6. Redis-与SpringBoot的集成
  7. python如何定义类_Python class定义类,Python类的定义(入门必读)
  8. T-SQL Enhancement in SQL Server 2005[下篇]
  9. matlab2010 simulink,张德丰 (2010) MATLAB/Simulink建模与仿真实例精讲. 机械工业出版社, 北京....
  10. 永洪bi logo更换
  11. 使用TestNG-abbot测试GUI
  12. web前端程序员真的值这么多钱吗?
  13. Python中利用正则表达式做数据清洗(re)
  14. 局域网内通过ip获取主机名
  15. 如何注册域名,获取个人网站网址
  16. 泰坦尼克号生存预测(超详细)
  17. C#获取企业微信打卡数据
  18. 【GameMaker 极速入门】#1环境配置
  19. 编程思想总结 - 堆排序,少做无用功
  20. java 输出素数_java 素数(按要求输出)

热门文章

  1. OCR识别之engraved_cnn.hdev
  2. cuda环境变量设置
  3. 无穷小微积分落地生根在中国的现实意义
  4. java转换中文日期(二零一七年四月二十日、○九年四月三十日)
  5. 开源的 .NET 工作流引擎 Elsa 开源
  6. 论文阅读笔记8——Track to Detect and Segment:An Online Multi-Object Tracker(TraDeS)
  7. SLR分析算法c语言实现,实验五 SLR语法分析器.doc
  8. 电商API接口商品详情获取示例
  9. 如何保护你的账户和财产不被Cookie劫持和HTML注入攻击?
  10. 喝水也要喝出高逼格!这款智能保温杯,用它再也没烫过嘴~