看流星社区

 找回密码
 注册账号
查看: 2464|回复: 1

远程卸载DLL代码

[复制链接]

该用户从未签到

发表于 2012-10-17 21:18:58 | 显示全部楼层 |阅读模式
  1. BOOL UnLoadModules( LPCTSTR processname , LPCTSTR modulename)
  2. {
  3. HANDLE hModuleSnap = INVALID_HANDLE_VALUE;
  4. MODULEENTRY32 me32;
  5. HANDLE hpro;
  6. DWORD modulebase;
  7. DWORD pid=GetProcessIdByName(processname);

  8. hpro= OpenProcess
  9.    (
  10.    PROCESS_ALL_ACCESS,
  11.    TRUE,
  12.    pid
  13.        );

  14. hModuleSnap = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, pid );
  15. if( hModuleSnap == INVALID_HANDLE_VALUE )
  16. {
  17.    
  18.     return( FALSE );
  19. }

  20. me32.dwSize = sizeof( MODULEENTRY32 );

  21. if( !Module32First( hModuleSnap, &me32 ) )
  22. {

  23.     CloseHandle( hModuleSnap );
  24.     return( FALSE );
  25. }

  26. do
  27. {
  28. printf( "\n\n     MODULE NAME:     %s",             me32.szModule );
  29.     printf( "\n     executable     = %s",             me32.szExePath );
  30.     printf( "\n     process ID     = 0x%08X",         me32.th32ProcessID );
  31.     printf( "\n     ref count (g) =     0x%04X",     me32.GlblcntUsage );
  32.     printf( "\n     ref count (p) =     0x%04X",     me32.ProccntUsage );
  33.     printf( "\n     base address   = 0x%08X", (DWORD) me32.modBaseAddr );
  34.     printf( "\n     base size      = %d",             me32.modBaseSize );


  35. if(!strcmpi(me32.szModule, modulename))
  36. {
  37. modulebase=(DWORD)me32.modBaseAddr;
  38. printf("module :%s found at :%x\n",modulename,modulebase);
  39. break;

  40. }

  41. } while( Module32Next( hModuleSnap, &me32 ) );

  42. ZwUnmapViewOfSection(hpro,(DWORD)modulebase);
  43. CloseHandle( hModuleSnap );
  44. return( TRUE );
  45. }

  46. DWORD GetProcessIdByName(LPCTSTR name)
  47. {

  48. PROCESSENTRY32 prostruct;
  49.     DWORD id = 0;
  50.     HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  51.     prostruct.dwSize = sizeof(PROCESSENTRY32);

  52. if(!Process32First(hSnapshot,&prostruct))
  53.     return 0;

  54. do

  55. {
  56.    prostruct.dwSize = sizeof(PROCESSENTRY32);
  57.         if(!Process32Next(hSnapshot,&prostruct))
  58.            break;

  59.    if(strcmp(prostruct.szExeFile,name) == 0)

  60.    {
  61.     id = prostruct.th32ProcessID;
  62.     break;
  63.    }

  64. }while(TRUE);

  65. CloseHandle(hSnapshot);
  66. return id;
  67. }

  68. ZwUnmapViewOfSection这个NTDLL中的函数的地址自己用GetProcAddress就可以得到引用了
复制代码

该用户从未签到

发表于 2012-10-18 13:28:10 | 显示全部楼层
不错的教程啊
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-27 16:37

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

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