mydll.cpp
上传用户:nbcables
上传日期:2007-01-11
资源大小:1243k
文件大小:2k
源码类别:

钩子与API截获

开发平台:

Visual C++

  1. // ------------------------------------- //
  2. // 您如果要使用本文件,请不要删除本说明  //
  3. // ------------------------------------- //
  4. //             HOOKAPI 开发例子          //
  5. //   Copyright 2002 编程沙龙 Paladin     //
  6. //       www.ProgramSalon.com            //
  7. // ------------------------------------- //
  8. #include "stdafx.h"
  9. #include <stdio.h>
  10. #include "mydll.h"
  11. #include "util.h"
  12. #include "psapi.h"
  13. #include "tlhelp32.h"
  14. #include "ps.h"
  15. HINSTANCE g_hInstance =NULL;
  16. BOOL APIENTRY DllMain( HANDLE hModule, 
  17.                        DWORD  ul_reason_for_call, 
  18.                        LPVOID lpReserved
  19.  )
  20. {
  21. g_hInstance =(HINSTANCE)hModule;
  22.     return TRUE;
  23. }
  24. // 截获执行notepad.exe文件的例子,在explorer中点击winntnotepad.exe,然后
  25. // 使用任务管理器查看进程,就发现有个notepad2.exe进程
  26. DWORD WINAPI myCreateProcessW(
  27. LPCWSTR lpApplicationName,
  28. LPWSTR lpCommandLine, 
  29. LPSECURITY_ATTRIBUTES lpProcessAttributes,
  30. LPSECURITY_ATTRIBUTES lpThreadAttributes,
  31. BOOL bInheritHandles,
  32. DWORD dwCreationFlags,
  33. LPVOID lpEnvironment,
  34. LPCWSTR lpCurrentDirectory,
  35. LPSTARTUPINFOW lpStartupInfo,
  36. LPPROCESS_INFORMATION lpProcessInformation
  37. )
  38. {
  39. char cmd[600];
  40. int len =WideCharToMultiByte( CP_ACP, 0, lpCommandLine, -1, cmd, sizeof(cmd),NULL,NULL); 
  41. cmd[len] =0;
  42. WriteLog("CreateProcessW :cmd=%s", cmd);
  43. strtok(cmd, " ");  //去掉空格
  44. strupr(cmd);
  45. if(cmd[0] =='"')  // 去掉引号
  46. {
  47. memmove(cmd, &cmd[1], strlen(cmd)-1);
  48. cmd[strlen(cmd)-2] =0;
  49. }
  50. if(strstr(cmd, "NOTEPAD.EXE"))  // 复制文件并将命令定位到c:notepad2.exe
  51. {
  52. WriteLog("found ok, cmd=%s", cmd);
  53. CopyFile(cmd, "c:\notepad2.exe", 0);  //可以在此处解密notepad.exe为notepad2.exe
  54. strcpy(cmd, "c:\notepad2.exe");
  55. }
  56. WCHAR wcmd[600];
  57. len =MultiByteToWideChar( CP_ACP, 0, cmd, strlen(cmd), wcmd, sizeof(wcmd)); 
  58. wcmd[len] =0;
  59. BOOL ifsuccess = CreateProcessW(NULL/*lpApplicationName*/,
  60. wcmd, lpProcessAttributes,
  61. lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment,
  62. lpCurrentDirectory, lpStartupInfo, lpProcessInformation);
  63. DWORD err =GetLastError();
  64. SetLastError(err);
  65. return (DWORD)ifsuccess;
  66. }
  67. MYAPIINFO myapi_info[] =
  68. {
  69. {"KERNEL32.DLL", "CreateProcessW(1,2,3,4,5,6,7,8,9,10)", "myCreateProcessW"},
  70. {NULL,NULL,NULL}
  71. };
  72. MYAPIINFO *GetMyAPIInfo()
  73. {
  74. return &myapi_info[0];
  75. }