设为首页 加入收藏

TOP

VC++实现枚举进程与模块(三)
2013-05-03 18:10:24 来源: 作者: 【 】 浏览:111
Tags:实现 枚举 进程 模块

 

  BaseAddress = *( ( void ** )( ( unsigned char * )p + 0x18 ) );

  FullDllName = *( ( void ** )( ( unsigned char * )p + 0x28 ) );

  printf( "p     = 0x%08X 0x%08X ", p, BaseAddress );

  wprintf( L"%s\n", FullDllName );

  p = *( ( void ** )p );

  }

  while ( Flink != p );

  return;

  }

  #define PAGE_SIZE 0x1000

  void  Search();

  bool IsValidModule(ULONG i);

  bool PrintModule();

  void main();

  bool IsValidModule(byte* i)

  {   if(IsBadReadPtr((void*)i,sizeof(IMAGE_DOS_HEADER)))

  return false;

  IMAGE_DOS_HEADER *BasePoint=(IMAGE_DOS_HEADER *)i;

  PIMAGE_NT_HEADERS32 NtHead=(PIMAGE_NT_HEADERS32)(i+BasePoint->e_lfanew);

  if(IsBadReadPtr((void*)NtHead,PAGE_SIZE))

  return false;

  if((NtHead->FileHeader.Characteristics&IMAGE_FILE_DLL)==0)//过滤掉。exe文件

  return false;

  if(NtHead->OptionalHeader.Subsystem==0x2)

  return true;

  if(NtHead->OptionalHeader.Subsystem==0x3)

  return true;

  return false;

  }

  void Search()

  {   printf("暴力搜索列举模块!\n");

  UCHAR* i=(PUCHAR)0x10000000;

  int Num=0;

  for(;i<(PUCHAR)0x7ffeffff;i+=PAGE_SIZE)

  {

  if(IsValidModule(i))

  {

  printf("\t\t find a module at %08x\n",i);

  Num++;

  }

  }

  printf("\t\t total find module :%03d\n",Num);

  }

  void main()

  {

  EnableDebugPrivilege(true);

  EnumModlueAll(4228);

  ForceLookUpModule(4228);

  getchar();

  GetProcessModule(4228);

  EnumModuleEx(4228);

  getchar();

  EnumSelfModule();

  getchar();

  Search();

  printf("按任意键退出........");

  getchar();

  }

        

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇VC++实现注册表监控 下一篇VC++实现恢复SSDT

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: