zoukankan      html  css  js  c++  java
  • PE文件捆绑代码实现一:

    在资源段添加PE文件并释放:

      这两天分析病毒,对PE文件释放很感兴趣。于是便想研究研究一下这种捆绑方式究竟是如何实现的。首先找到了一种在PE资源段添加自定义资源的方式,也就是我们也可以在资源段添加EXE或DLL,然后再将其释放到指定路径。由于自己编码能力实在有限,仅仅把今天在网上学到了这种方式实现了一遍,便以此作为自己在博客园的第一篇博客,并在以后慢慢将PE文件捆绑的各种方式全部实现。

    实现环境:VS2013,SDK WIN32程序。

    第一步:建立一个默认的WIN32程序,为源程序添加EXE资源,在项目上右键,添加资源,选择导入,找到待添加的目的EXE程序。然后资源添加成功。实现效果如图:

    第二步: 在窗口回调函数里添加了一个WM_RBUTTONDOWN消息处理,在右键按下时,释放该exe文件(以添加目的程序小米脱壳为例),代码如下:

     1 case WM_RBUTTONDOWN:
     2     {
     3         //释放出PE文件.
     4         //定位自定义资源,返回值是定位到的资源的句柄(注意第一个参数是包含资源的可执行文件的句柄,不要混淆)
     5         HRSRC hRsrc =FindResource(NULL, //包含所需资源的可执行文件句柄,为NULL代表是程序本身的句柄
     6             MAKEINTRESOURCE(IDR_EXE1),    //资源ID
     7             _T("EXE"));                    //资源类型
     8         if (hRsrc == NULL)
     9         {
    10             break;
    11         }
    12         //加载资源到内存中,返回值是相关资源数据的句柄
    13         HGLOBAL hGlobal = LoadResource(NULL,    //同上,模块句柄
    14             hRsrc);                                //定位资源函数的返回值
    15         if (hGlobal==NULL)
    16         {
    17             break;
    18         }
    19         //锁定资源,返回值是指向该资源的内存指针(重要,之后便可以用该指针来进行操作)
    20         LPVOID pBuffer = LockResource(hGlobal); //LoadResource的返回值
    21         if (pBuffer==NULL)
    22         {
    23             break;
    24         }
    25         //获取资源的大小
    26         DWORD dwSize = SizeofResource(NULL, hRsrc);
    27         if (dwSize == 0)
    28         {
    29             break;
    30         }
    31         //测试写到磁盘
    32         FILE *fp;
    33         fopen_s(&fp, "hello.exe", "wb");
    34         if (fp!=NULL)
    35         {
    36             //fwrite的三个参数(1,待写入的数据;2、(数据块的大小)每次写的长度;3、数据块的数目;4、文件指针)
    37             //返回值是写入的数据块的个数。
    38             if (fwrite(pBuffer, 1, dwSize, fp) == dwSize);
    39             {
    40                 fclose(fp);
    41             }
    42         }

    实现效果:在本cpp目录下,生成一个名字为hello.exe的小米脱壳工具。

    总结:加载自定义资源用到的三个函数(FindResource、LoadResource、LockResource);

  • 相关阅读:
    inotify事件监控
    NFS网络文件共享服务
    Rsync数据同步服务
    SSH连接原理及ssh-key讲解
    C语言I博客作业04
    C语言l博客作业03
    C语言I博客作业02
    定义一个计算字符串高度的方法
    字典转模型
    UIScrollView和UIPageControl
  • 原文地址:https://www.cnblogs.com/wingss/p/5116462.html
Copyright © 2011-2022 走看看