ShaDuPage.cpp
上传用户:shouhua
上传日期:2014-12-06
资源大小:5685k
文件大小:10k
源码类别:

杀毒

开发平台:

Visual C++

  1. // ShaDuPage.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "AntiEvilTools.h"
  5. #include "ShaDuPage.h"
  6. #include "Dbt.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. MyList   *Gogogo4;
  13. DWORD controlbuff[64];
  14. DWORD dw;
  15. char outputbuff[256]; 
  16. DWORD stringcount;
  17. char * strings[256];
  18. /////////////////////////////////////////////////////////////////////////////
  19. // CShaDuPage property page
  20. threadInfo Info;
  21. void thread();
  22. IMPLEMENT_DYNCREATE(CShaDuPage, CPropertyPage)
  23. CShaDuPage::CShaDuPage() : CPropertyPage(CShaDuPage::IDD)
  24. {
  25. //{{AFX_DATA_INIT(CShaDuPage)
  26. m_Radio = 0;
  27. IsMonitor=false;
  28. m_1 = TRUE;
  29. m_2 = TRUE;
  30. m_3 = TRUE;
  31. IsChaDu=false;
  32. m_4 = TRUE;
  33. m_5 = TRUE;
  34. m_6 = TRUE;
  35. m_7 = TRUE;
  36. m_8 = TRUE;
  37. m_9 = TRUE;
  38. //}}AFX_DATA_INIT
  39. }
  40. CShaDuPage::~CShaDuPage()
  41. {
  42. }
  43. void CShaDuPage::DoDataExchange(CDataExchange* pDX)
  44. {
  45. CPropertyPage::DoDataExchange(pDX);
  46. //{{AFX_DATA_MAP(CShaDuPage)
  47. DDX_Control(pDX, IDC_LIST_CHADU, m_ChaDu);
  48. DDX_Control(pDX, IDC_CHECK2, m_Check2);
  49. DDX_Control(pDX, IDC_CHECK1, m_Check1);
  50. DDX_Control(pDX, IDC_BUTTON_CHOOSE, m_Choose);
  51. DDX_Control(pDX, IDC_CHECK3, m_Check3);
  52. DDX_Radio(pDX, IDC_RADIO1, m_Radio);
  53. DDX_Check(pDX, IDC_CHECK1, m_1);
  54. DDX_Check(pDX, IDC_CHECK2, m_2);
  55. DDX_Check(pDX, IDC_CHECK3, m_3);
  56. DDX_Check(pDX, IDC_CHECK4, m_4);
  57. DDX_Check(pDX, IDC_CHECK5, m_5);
  58. DDX_Check(pDX, IDC_CHECK6, m_6);
  59. DDX_Check(pDX, IDC_CHECK7, m_7);
  60. DDX_Check(pDX, IDC_CHECK8, m_8);
  61. DDX_Check(pDX, IDC_CHECK9, m_9);
  62. //}}AFX_DATA_MAP
  63. }
  64. BEGIN_MESSAGE_MAP(CShaDuPage, CPropertyPage)
  65. //{{AFX_MSG_MAP(CShaDuPage)
  66. ON_BN_CLICKED(IDC_BUTTON_CHOOSE, OnButtonChoose)
  67. ON_BN_CLICKED(IDC_BUTTON_START, OnButtonStart)
  68. ON_WM_PAINT()
  69. //ON_WM_DEVICECHANGE()
  70. ON_BN_CLICKED(IDC_RADIO1, OnRadio1)
  71. ON_BN_CLICKED(IDC_RADIO2, OnRadio2)
  72. ON_BN_CLICKED(IDC_RADIO3, OnRadio3)
  73. ON_BN_CLICKED(IDC_BUTTON_U, OnButtonU)
  74. ON_BN_CLICKED(IDC_BUTTON_DEF, OnButtonDef)
  75. //}}AFX_MSG_MAP
  76. END_MESSAGE_MAP()
  77. /////////////////////////////////////////////////////////////////////////////
  78. // CShaDuPage message handlers
  79. BOOL CShaDuPage::OnInitDialog()
  80. {
  81. CDialog::OnInitDialog();
  82. SetDlgItemText(IDC_STATIC1,"");
  83. m_Check3.ShowWindow(SW_HIDE);
  84. m_Choose.ShowWindow(SW_HIDE);
  85. m_pe_file = new CPEFile(GetSafeHwnd());
  86. m_pImage = new CImageList();
  87. ASSERT(m_pImage != NULL);    // serious allocation failure checking
  88. m_ChaDu.SetImageList(m_pImage, LVSIL_SMALL);
  89. m_ChaDu.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
  90. Gogogo4->InitSystemImageLists(m_ChaDu.m_hWnd);
  91. int ret=m_ChaDu.InsertColumn(0,"名称",LVCFMT_RIGHT,80,0);
  92. m_ChaDu.InsertColumn(1,"入口地址",LVCFMT_LEFT,80,1);
  93. m_ChaDu.InsertColumn(2,"文件大小",LVCFMT_LEFT,80,2);
  94. m_ChaDu.InsertColumn(3,"有无问题",LVCFMT_LEFT,80,3);
  95. m_ChaDu.InsertColumn(4,"文件路径",LVCFMT_LEFT,340,4);
  96. CreateThread(0,0,(LPTHREAD_START_ROUTINE)thread,0,0,&dw);
  97. DWORD * addr=(DWORD *)(1+(DWORD)GetProcAddress(GetModuleHandle("ntdll.dll"),"NtCreateProcess"));
  98. ZeroMemory(outputbuff,256);
  99. controlbuff[0]=addr[0];
  100. controlbuff[1]=(DWORD)&outputbuff[0];
  101. return  true;
  102. }
  103. void CShaDuPage::OnButtonChoose() 
  104. {
  105. // TODO: Add your control notification handler code here
  106. }
  107. void CShaDuPage::OnButtonStart() 
  108. {
  109. // TODO: Add your control notification handler code here
  110. SetDlgItemText(IDC_STATIC1,"正在查毒,请等待...");
  111. CString   str;//=_T("C:\windows");
  112. m_ChaDu.DeleteAllItems();
  113. IsChaDu=TRUE;
  114. if(m_1)
  115. {
  116. str=_T("C:\windows\system32");
  117.         ShaDu(str);
  118. }
  119. if(m_2)
  120. {
  121. str=_T("C:\windows");
  122.         //ShaDu(str);
  123. }
  124. //SetDlgItemText(IDC_STATIC1,"扫描完成");
  125. }
  126. void CShaDuPage::OnPaint() 
  127. {
  128. CPaintDC dc(this); // device context for painting
  129. if(!IsChaDu)
  130. {
  131.    SetDlgItemText(IDC_STATIC1,"");
  132. }
  133. else
  134. {
  135. SetDlgItemText(IDC_STATIC1,"扫描完成");
  136. }
  137. // TODO: Add your message handler code here
  138. // Do not call CPropertyPage::OnPaint() for painting messages
  139. }
  140. void CShaDuPage::OnRadio1() 
  141. {
  142. // TODO: Add your control notification handler code here
  143. m_Check3.ShowWindow(SW_HIDE);
  144. m_Choose.ShowWindow(SW_HIDE);
  145.     m_Check1.ShowWindow(SW_SHOW);
  146. m_Check2.ShowWindow(SW_SHOW);
  147. }
  148. void CShaDuPage::OnRadio2() 
  149. {
  150. // TODO: Add your control notification handler code here
  151. m_Check3.ShowWindow(SW_SHOW);
  152. m_Choose.ShowWindow(SW_HIDE);
  153.     m_Check1.ShowWindow(SW_HIDE);
  154. m_Check2.ShowWindow(SW_HIDE);
  155. }
  156. void CShaDuPage::OnRadio3() 
  157. {
  158. // TODO: Add your control notification handler code here
  159. m_Check3.ShowWindow(SW_HIDE);
  160. m_Choose.ShowWindow(SW_SHOW);
  161.     m_Check1.ShowWindow(SW_HIDE);
  162. m_Check2.ShowWindow(SW_HIDE);
  163. }
  164. void CShaDuPage::ShaDu(CString dir)
  165. {
  166. Info.m_Dir=dir;
  167. Info.m_file=m_pe_file;
  168. Info.m_MyChaDu=&m_ChaDu;
  169. pThread=AfxBeginThread(ThreadFunc,&Info);
  170. }
  171. UINT ThreadFunc(LPVOID lpParam)
  172. {
  173. threadInfo*  p=(threadInfo*)lpParam;
  174. CString szDir,str;
  175.     CPEFile *m_pe_file;
  176. szDir=p->m_Dir;
  177.     m_pe_file=p->m_file;
  178. MyList *m_ChaDu;
  179.     m_ChaDu=p->m_MyChaDu;
  180. int   index=0;
  181. if(szDir.Right(1) != "\")
  182. szDir += "\";
  183. szDir += "*.*";
  184. CFileFind ff;
  185. BOOL res = ff.FindFile(szDir);
  186. while(res)
  187. {
  188. res = ff.FindNextFile();
  189. if(ff.IsDirectory() && !ff.IsDots())
  190. {
  191. //如果是一个子目录,用递归继续往深一层找
  192. //CShaDuPage   *a;
  193. //CString strPath = ff.GetFilePath();
  194. //a->ShaDu(strPath);
  195. }
  196. else if(!ff.IsDirectory() && !ff.IsDots())
  197. {
  198. //显示当前访问的文件
  199. CString strPath;
  200. strPath = ff.GetFilePath();
  201. if((strPath.Right(4)==".exe")||(strPath.Right(4)==".EXE"))
  202. {        
  203. if (m_pe_file->LoadExecutable((LPSTR)(LPCTSTR)strPath))
  204. {
  205. if((float)(m_pe_file->m_nt_header->imageSize-m_pe_file->m_nt_header->entryPoint)/(float)(m_pe_file->m_nt_header->imageSize)<0.003)
  206. {
  207.                         m_ChaDu->InsertItem(index,ff.GetFileName());
  208. str.Format("%d",m_pe_file->m_nt_header->entryPoint);
  209. m_ChaDu->SetItemText(index,1,str);
  210. str.Format("%d",m_pe_file->m_nt_header->imageSize);
  211. m_ChaDu->SetItemText(index,2,str);
  212. m_ChaDu->SetItemText(index,3,"有问题");
  213. m_ChaDu->SetItemText(index,4,strPath);
  214.     m_ChaDu->SetItem(index, 0, LVIF_TEXT | LVIF_IMAGE,ff.GetFileName(), 
  215.    Gogogo4->GetFileIcon(strPath), 0, 0, 0);
  216.     index++;
  217. }
  218. }
  219. }
  220. }
  221. }
  222. ff.Close();
  223. return 0;
  224. }
  225. void CShaDuPage::OnButtonU() 
  226. {
  227. // TODO: Add your control notification handler code here
  228. UpdateData(TRUE);
  229. if(m_6)
  230. {
  231. HKEY   hkey;
  232.     BYTE  a[]={0xBD,00,00,00};
  233.     RegOpenKey(HKEY_CURRENT_USER,"Software\Microsoft\Windows\CurrentVersion\Policies\Explorer",&hkey);
  234.         RegSetValueEx(hkey,"NoDriveTypeAutoRun",0,REG_BINARY,a,sizeof(a));
  235. }
  236. if(m_4)
  237. {
  238.         ExaminaU();
  239. }
  240. if(m_5)
  241. {
  242. IsMonitor=TRUE;
  243. }
  244. }
  245. void CShaDuPage::OnButtonDef() 
  246. {
  247. // TODO: Add your control notification handler code here
  248. UpdateData(TRUE);
  249. if(m_7)
  250. {
  251. DeviceIoControl(hDevice,1000,controlbuff,256,controlbuff,256,&dw,0);
  252. }
  253. else
  254. {
  255. DeviceIoControl(hDevice,1001,NULL,NULL,NULL,NULL,&dw,0);
  256. }
  257. if(m_8)
  258. {
  259. DeviceIoControl(hDevice,
  260. 1002,
  261. controlbuff,
  262. 256,
  263. controlbuff,
  264. 256,
  265. &dw,
  266. 0);
  267. }
  268. else
  269. {
  270. DeviceIoControl(hDevice,
  271. 1003,
  272. NULL,
  273. NULL,
  274. NULL,
  275. NULL,
  276. &dw,
  277. 0);
  278. }
  279. if(m_9)
  280. {
  281. DeviceIoControl(hDevice,
  282.  1004,
  283.  controlbuff,
  284.  256,
  285.  controlbuff,
  286.  256,
  287.  &dw,
  288.  0);
  289. }
  290. else
  291. {
  292. DeviceIoControl(hDevice,
  293.  1005,
  294.  NULL,
  295.  NULL,
  296.  NULL,
  297.  NULL,
  298.  &dw,
  299.  0);
  300. }
  301. }
  302. void thread()
  303. {
  304. DWORD a,x; char msgbuff[512];
  305. char *pdest;
  306. int  result;
  307. while(1)
  308. {
  309. memmove(&a,&outputbuff[0],4);
  310. if(!a){Sleep(10);continue;}
  311. char*name=(char*)&outputbuff[8];
  312. for(x=0;x<stringcount;x++)
  313. {
  314. if(!stricmp(name,strings[x])){a=1;goto skip;}
  315. }
  316. pdest = strstr(name,"##");
  317. if (pdest != NULL)
  318. {
  319. result = pdest-name;
  320. strcpy(msgbuff, "是否允许");
  321. strncat(msgbuff,&outputbuff[8],result);
  322. strcat(msgbuff,"运行");
  323. strcat(msgbuff,&outputbuff[result+10]);
  324. }
  325. else if((pdest=strstr(name,"$$")) != NULL)
  326. {
  327. result = pdest-name;
  328. strcpy(msgbuff, "是否允许");
  329. strncat(msgbuff,&outputbuff[8],result);
  330. strcat(msgbuff,"设置注册表");
  331. strcat(msgbuff,&outputbuff[result+10]);
  332. }
  333. else
  334. {
  335. pdest = strstr(name,"&&");
  336. result = pdest-name;
  337. strcpy(msgbuff,"是否允许");
  338. strncat(msgbuff,&outputbuff[8],result);
  339. strcat(msgbuff,"加载驱动");
  340. strcat(msgbuff,&outputbuff[result]+10);
  341. }
  342. if(IDYES==MessageBox(0, msgbuff,"WARNING",MB_YESNO|MB_ICONQUESTION|0x00200000L))
  343. {
  344. a=1; 
  345. strings[stringcount]=_strdup(name);
  346. stringcount++;
  347. }
  348. else a=0;
  349. skip:memmove(&outputbuff[4],&a,4);
  350.  a=0;
  351.  memmove(&outputbuff[0],&a,4);
  352. }
  353. }
  354. void CShaDuPage::SetHandle(HANDLE handle)
  355. {
  356.      hDevice=handle;
  357. }
  358. void CShaDuPage::ExaminaU()
  359. {
  360.  CString str;
  361.      for(char i='A';i<'Z';i++)
  362.  {
  363.  char   driver[20]={i,':'};
  364.  if((GetDriveType(driver)==DRIVE_REMOVABLE))
  365.  {
  366.  //str.Format("发现U盘%s",driver);
  367.  //MessageBox(str);
  368.  LPCSTR   st=strcat(driver,"autorun.inf");
  369.  CFileFind    fFind;
  370.  if(fFind.FindFile(st))
  371.  {
  372.  if(MessageBox("发现U盘自启动文件","提示", MB_OKCANCEL) == IDOK)
  373.  {
  374.  DeleteFile(st);
  375.  }
  376.  return;
  377.  }
  378.  }
  379.  }
  380.      MessageBox("没有发现U盘");
  381.  return;
  382. }
  383. /*BOOL CShaDuPage::OnDeviceChange(UINT nEventType,DWORD dwData)
  384. {
  385. MessageBox("ok");
  386. if(IsMonitor)
  387. {
  388. switch(nEventType)
  389. {
  390. case  DBT_DEVICEARRIVAL:
  391.              ExaminaU();
  392. }
  393. }
  394. return  true;
  395. }*/