查看: 1283|回复: 5
收起左侧

[分析报告] 原创文件有问题吗,代码

[复制链接]
sentews2
发表于 2020-8-5 03:47:54 | 显示全部楼层 |阅读模式
  1. #include<cstring>
  2. #include <iostream>  
  3. #include <io.h>  
  4. #include <string>  
  5. #include <vector>
  6. #include <sys/types.h>
  7. #include <sys/stat.h>
  8. #include<cstdio>  
  9. #include<windows.h>
  10. #ifndef WIN32
  11. #include <unistd.h>
  12. #endif

  13. #ifdef WIN32
  14. #define stat _stat
  15. #endif
  16. using namespace std;
  17. char *filename;
  18. vector<std::string> filenames;
  19. char *filedata;
  20. char *filedate;
  21. FILE* tm;
  22. bool ttt;
  23. char* tmp;int siz=0;
  24. int filenamelen,filedatalen;
  25. int date[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
  26. long long stime,ttime;
  27. bool gtime=0,gdata=0,gname=0;
  28. char filename0[444]={};
  29. long long gettime0(char a[])
  30. {
  31.          long long res=0;
  32.          for(int i=0;i<8;i++)
  33.                  if(a[i]>'9'||a[i]<'0')
  34.                          return -1;
  35.          long long tmp=0;
  36.          for(int i=0;i<4;i++)
  37.                  tmp=tmp*10+a[i]-'0';
  38.          for(int i=1970;i<tmp;i++)
  39.                  if(i&3)
  40.                          res+=365;
  41.                  else res+=366;
  42.         if(tmp&3)
  43.                 date[2]=28;
  44.         else date[2]=29;
  45.         res*=86400;
  46.         tmp=0;
  47.         for(int i=4;i<6;i++)
  48.                 tmp=tmp+a[i]-'0';
  49.         for(int i=1;i<tmp;i++)
  50.                 res+=date[i]*86400;
  51.         tmp=0;
  52.         for(int i=6;i<8;i++)
  53.                 tmp=tmp*10+a[i]-'0';
  54.         res+=(tmp-1)*86400;
  55.         //res-=86400*117;
  56.         return res;
  57. }
  58. int gettime()
  59. {
  60.          gtime=1;
  61.          int siz=strlen(filedate);
  62.          if(siz!=17)
  63.                  return -1;
  64.          stime=gettime0(filedate);
  65.          ttime=gettime0(filedate+9);
  66.          ttime+=86400;
  67.          if(stime<0||ttime<0)
  68.                  return -1;
  69.          return 0;
  70. }
  71. bool check(string file0)
  72. {
  73.         int size0;
  74.         if(gtime|gname|gdata)
  75.         {
  76.         size0=file0.size();
  77.         for(int i=0;i<size0;i++)
  78.                 filename0[i]=file0[i];
  79.         filename0[size0]=0;
  80.        
  81.        
  82.         }
  83.         if(gtime)
  84.         {
  85.                 struct stat result;
  86.                 long long mod_time;
  87.                 if(stat(filename0, &result)==0)
  88.          mod_time = result.st_mtime;
  89.                 if(mod_time>ttime||mod_time<stime)
  90.                         return 0;
  91.         }

  92.         if(gname)
  93.         {
  94.                 int pos=0;
  95.                 for(int i=size0-1;i>0;i--)
  96.                         if(filename0[i]=='\\')
  97.                         {pos=i+1;break;}
  98.                 bool flag=0;
  99.                 for(int i=pos;i<size0;i++)
  100.                         if(filename0[i]<='Z'&&filename0[i]>='A')
  101.                                 filename0[i]+=32;
  102.                
  103.                 for(int i=pos;i+filenamelen<=size0;i++)
  104.                 {
  105.                         bool flag2=1;
  106.                         for(int j=0,k=i;j<filenamelen;j++,k++)
  107.                                 if(filename[j]!=filename0[k])
  108.                                 {flag2=0;break;}
  109.                         if(flag2)
  110.                         {flag=1;break;}
  111.                 }               
  112.                        
  113.                 if(!flag)
  114.                         return 0;
  115.         }
  116.         if(gdata)
  117.         {
  118.                 tm=fopen(filename0,"rb");
  119.                 char buf[66666]={};
  120.                 fseek(tm,0,SEEK_END);
  121.                 int filelen=ftell(tm);
  122.                 fseek(tm,0,SEEK_SET);
  123.                 for(int i=0;i<filelen;i=i+65536)
  124.                 {
  125.                         for(int i=0;i<1000;i++)
  126.                                 buf[i]=buf[i+65536];
  127.                         fseek(tm,i,SEEK_SET);//65636
  128.                         if(i+65536>filelen)
  129.                                 fread(buf+1000,i+65536-filelen,1,tm);
  130.                         else
  131.                         fread(buf+1000,65536,1,tm);
  132.                         int uu=65536;
  133.                         if(i+65536>filelen)
  134.                                 uu=i+65536-filelen;
  135.                         for(int i=0;i+filedatalen<=uu+1000;i++)
  136.                         {
  137.                                 bool flag=1;
  138.                                 for(int j=i,k=0;k<filedatalen;j++,k++)
  139.                                         if(buf[j]!=filedata[k])
  140.                                         {flag=0;break;}
  141.                                 if(flag)
  142.                                 {fclose(tm);return 1;}
  143.                         }
  144.                 }
  145.                 fclose(tm);
  146.                 return 0;
  147.         }
  148.         return 1;
  149. }
  150. void getFiles(const std::string & path, std::vector<std::string> & files)
  151. {
  152.                   //文件句柄  
  153.                   intptr_t hFile = 0;
  154.                   //文件信息,_finddata_t需要io.h头文件  
  155.                   struct _finddata_t fileinfo;
  156.                   std::string p;
  157.                   if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1)
  158.                   {
  159.                                         do
  160.                                         {
  161.                                                           //如果是目录,迭代之  
  162.                                                           //如果不是,加入列表  
  163.                                                           if ((fileinfo.attrib & _A_SUBDIR))
  164.                                                           {
  165.                                                                                 if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
  166.                                                                                 {
  167.                                                                                         if(check(p.assign(path).append("\").append(fileinfo.name))^ttt)
  168.                                                                                                 files.push_back(p.assign(path).append("\").append(fileinfo.name));
  169.                                                                                                   getFiles(p.assign(path).append("\").append(fileinfo.name), files);
  170.                                                                                 }
  171.                                                           }
  172.                                                           else
  173.                                                           {
  174.                                                                   if(check(p.assign(path).append("\").append(fileinfo.name))^ttt)
  175.                                                                                 files.push_back(p.assign(path).append("\").append(fileinfo.name));
  176.                                                           }
  177.                                         } while (_findnext(hFile, &fileinfo) == 0);
  178.                                         _findclose(hFile);
  179.                   }
  180. }
  181. void error(char a[])
  182. {
  183.          printf("%s\n",a);
  184.          exit(-1);
  185. }
  186. void update(char a[])
  187. {
  188.          if(a[0]=='"')
  189.          {
  190.                  int siz=strlen(a);
  191.                  a[siz-1]=0;
  192.                  a=a+1;
  193.          }
  194.          return;
  195. }
  196. int main(int argc ,char **argv)
  197. {
  198.         bool arg=0,uou=0;
  199.         if(argc<2)
  200.         {
  201.                 printf("no args\n");return 0;
  202.         }
  203.         int i;
  204.         for(i=1;i<argc;i++)
  205.         {
  206.                 switch(argv[i][1])
  207.                 {
  208.                         default:
  209.                         //error("Error args");
  210.                         //goto endf;
  211.                         break;
  212.                         case 'n':
  213.                         gname=1;
  214.                         i++;
  215.                         update(argv[i]),
  216.                         filename=argv[i];
  217.                         break;
  218.                        
  219.                         case 'd':
  220.                         i++;
  221.                         gdata=1;
  222.                         update(argv[i]);
  223.                         filedata=argv[i];
  224.                         if(arg==0)
  225.                                 arg=1;
  226.                         else
  227.                                 error("Error args");
  228.                         break;
  229.                        
  230.                         case 'i':
  231.                         i++;
  232.                         gdata=1;
  233.                                 if(arg==0)
  234.                                         arg=1;
  235.                                 else error("Error args");
  236.                                 tm=fopen(argv[i],"rb");
  237.                                 fseek(tm,0,SEEK_END);
  238.                                 siz=ftell(tm);
  239.                                 fseek(tm,0,SEEK_SET);
  240.                                 fread(filedata,siz,1,tm);
  241.                                 break;
  242.                         case 'a':
  243.                         i++;
  244.                         filedate=argv[i];
  245.                         if(gettime()==-1){
  246.                         printf("Invaild time\n");return 0;}
  247.                                 break;
  248.                         case 'e':
  249.                         ttt=1;
  250.                         break;
  251.                 }
  252.                
  253.         }
  254.         string path=argv[i];
  255.         if(filename!=NULL)
  256.         filenamelen=strlen(filename);
  257.         if(filedata!=NULL)
  258.         filedatalen=strlen(filedata);
  259.         if(i+1<argc)
  260.         {
  261.                 freopen(argv[i+1],"wb",stdout);
  262.         }
  263.         for(int i=0;i<filenamelen;i++)
  264.                 if(filename[i]<='Z'&&filename[i]>='A')
  265.                                 filename[i]+=32;
  266.                   //用来存储文件名
  267.                   //string path ;
  268.                             freopen("3.txt","w",stdout);
  269.                   //cin>>path;
  270.                   getFiles(path, filenames);
  271.                   for (auto file : filenames)
  272.                   {
  273.                           //FILE* foo=fopen(file,"rb");
  274.                           //fseek(foo,0,SEEK_END);
  275.                          // unsigned int siz=ftell(foo);
  276.                                         cout << file << std::endl;
  277.                   }
  278.                   return 0;
  279.                  
  280. }
复制代码


QVM360
发表于 2020-8-5 16:52:58 | 显示全部楼层
这个发在茶舍
ZNKZZ.
发表于 2020-8-6 10:14:48 | 显示全部楼层
\没转义
改完之后:没动作,可以认为无毒

本帖子中包含更多资源

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

x
αdmin
头像被屏蔽
发表于 2020-8-6 10:24:39 | 显示全部楼层
大佬不说,小白不懂
sentews2
 楼主| 发表于 2020-8-7 08:36:52 | 显示全部楼层
这是我自己写的代码,搜索文件用的,为什么很多杀毒很报毒
Ack麦子
发表于 2020-8-22 20:04:54 | 显示全部楼层
sentews2 发表于 2020-8-7 08:36
这是我自己写的代码,搜索文件用的,为什么很多杀毒很报毒

那就给代码做个混淆啊
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

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

Copyright © KaFan  KaFan.cn All Rights Reserved.

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

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

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