鱼C论坛

 找回密码
 立即注册

拷贝自身到指定位置

已有 981 次阅读2013-7-8 19:29 |个人分类:C\C++

【原名是拷贝自身到系统目录】
在计算机木马病毒什么的,多多少少会出现一些“神奇的事情”,我们知道,如果使用文件操作去拷贝自身的话,有点麻烦。我偷偷的试了一下,使用
FILE *fp;
 fp=fopen("拷贝自身到系统目录.exe","rb");
 if (fp==NULL)
 {
  printf("文件打开失败\n");
 }
这样子去打开居然成功了,也就是说我们执行文件操作的时候可以读自己。但是以写的方式就失败了,不能对它写。也就意味着,它是受到保护的。(不知道这样来分析是否正确,大家也可以检测一下。如果错了请联系我,说实话,我没有认真去测试)。

这里呢是调用到了windows API   copyfile,将自己拷到某目录下。不像文件操作那么麻烦。在XP系统下看见有人成功了。 但是我在win7(我的是64位,32位应该也是一样的,位宽跟这关系应该不大)。C盘下就是不让整进去。不知道为什么。换其他盘立马就把自己给拷贝进去了。我猜测可能是权限的问题。但是到底是怎么回事,还得请大神来指点。

#include <Windows.h>
#include <stdio.h>

int main()
{
 char cSelfPath[MAX_PATH]={0};
 char cSysPath[MAX_PATH]={0};
 //int i;

 GetModuleFileName(NULL,cSelfPath,MAX_PATH);
 GetSystemDirectory(cSysPath,MAX_PATH);
 printf("%s\n",cSelfPath);
 printf("%s\n",cSysPath);
 lstrcat(cSysPath,"\\one.exe");
 if (CopyFile(cSelfPath,cSysPath,TRUE))
 {
  printf("chengong");
 }
 
 getchar();
 return 0;
}

这个程序就是用到了3个函数:
1.GetModuleFileName(NULL,cSelfPath,MAX_PATH);
原型如下:

DWORD GetModuleFileName(

  HMODULE hModule,    // handle to module

  LPTSTR lpFilename,  // file name of module

  DWORD nSize         // size of buffer

);

hModule HMODULE 装载一个程序实例的句柄。如果该参数为NULL,该函数返回该当前应用程序全路径。

lpFileName LPTSTR 是你存放返回的名字的内存块的指针,是一个输出参数

nSize DWORD ,装载到缓冲区lpFileName的最大值


2.GetSystemDirectory(cSysPath,MAX_PATH);
 这个函数能取得Windows系统目录(System目录)的完整路径名。在这个目录中,包含了所有必要的系统文件。根据微软的标准,其他定制控件和一些共享组件也可放到这个目录。通常应避免在这个目录里创建文件。在网络环境中,往往需要管理员权限才可对这个目录进行写操作

这两个参数就不必介绍了吧。。。。。。。
 
3  lstrcat(cSysPath,"\\one.exe");就是字符链接到后面去


4CopyFile(cSelfPath,cSysPath,TRUE)
函数原型
BOOL CopyFile(LPCTSTR lpExistingFileName,LPCTSTR lpNewFileName,BOOL bFailIfExists );
说明
复制文件,与vb的filecopy命令相似
返回值
BOOL,非零表示成功,零表示失败。会设置GetLastError
参数表
参数类型及说明 :
lpExistingFileName String,源文件名
lpNewFileName String,目标文件名
bFailIfExists Long,如果设为TRUE(非零),那么一旦目标文件已经存在,则函数调用会失败。否则目标文件被改写 
【抄百度的】

反正我是怎么考都烤不到系统盘,其他盘都行
4CopyFile(cSelfPath,“xxxx路径”,TRUE);

测试了一下貌似在win7下fopen在C盘下也不能创建文件。
if (fp2=fopen("C:\\fb.exe","wb"))//C:\Windows
 {
  printf("成功创建并打开副本!\n");
 }
 else
 {
  printf("副本打开失败!\n");
 }
失败了。我改D盘就成功了。。。。。。我想可能是windows它不让我们这么做的。


我比较粗心,有什么地方有小错误请谅解哈。
大家多试试哈,好方案可以提供下学习学。  

 

                                                                                             ID:Crazy迷恋

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 07:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部