首页
社区
课程
招聘
[讨论]内存隐藏学习总结
发表于: 2014-7-28 18:14 18874

[讨论]内存隐藏学习总结

2014-7-28 18:14
18874

  看雪有很多讲war3全图的例子,还有很多大神讲了思路。比如写os的大神(bitt,还写过2个汉化教程,很赞)最早说的VEH + 硬件断点,现在还能用,问题的关键在于内存隐藏。而关于这一点v校讲过,不过大神的思路(那张图已经很清楚了)需要仔细体会才有收获的。这篇算是这段时间学习笔记吧,还有很多忘了说的和没完成的,就不想弄了。注意看完了基本也不一定能写全图,需要自己调试一下,你懂的
  1, Achillis(似乎叫黑月教主)说过“对付API就用抹链,对付抹链就用暴搜,对付暴搜就把PE头抹了,对付抹PE头就ZwQueryVirtualMemory,对付QueryMemory 就自己做Loader或ReloadandRun然后再抹一抹就只有a piece of code了,但是还是占了一块内存。我在想怎么改VAD把内存 占用也隐藏掉~~”,还说过Load的时候不用CreateFileMapping,二用ReadFile,就不会被PsLoadImageNotifyRoutine发现了。不过似乎还是比较难写的。隐藏的前面几步有个非常好的Jboy的贴子,想不通为什么不加精,,可是是delphi的,可能看的不习惯我改成c了,原理就是Load ,保存一份,Free,把备份的粘贴回来,就断链了,这样做的好处是方便。断链也是可以的。

VOID LockAllModules()
{
  HANDLE hSnapshot = CreateToolhelp32Snapshot(  
    TH32CS_SNAPMODULE, GetCurrentProcessId()); 

  if (hSnapshot != INVALID_HANDLE_VALUE) { 

    MODULEENTRY32 me = {sizeof(me)};  
    BOOL fOk = Module32First(hSnapshot, &me);  
    for (fOk = Module32Next(hSnapshot, &me); fOk; fOk = Module32Next(hSnapshot, &me)){ //跳过第一个;
      LoadLibrary(me.szModule);
    }
  }
}

BOOL CopycatAndHide(HMODULE hDll)
{
  IMAGE_DOS_HEADER * pDosHeader;
  IMAGE_NT_HEADERS * pNtHeader;
  IMAGE_OPTIONAL_HEADER * pOptionalHeader;
  LPVOID lpBackMem = 0;
  DWORD dwOldProtect;
  DWORD dwCount = 30;


  pDosHeader = (IMAGE_DOS_HEADER *)hDll;
  pNtHeader = (IMAGE_NT_HEADERS *)(pDosHeader->e_lfanew + (DWORD)hDll);
  pOptionalHeader = (IMAGE_OPTIONAL_HEADER *)&pNtHeader->OptionalHeader;

  LockAllModules();

  lpBackMem = VirtualAlloc(0 ,pOptionalHeader->SizeOfImage ,MEM_COMMIT|MEM_RESERVE ,PAGE_EXECUTE_READWRITE);
  if(!lpBackMem)
    return FALSE;
  if(!VirtualProtect((LPVOID)hDll ,pOptionalHeader->SizeOfImage ,PAGE_EXECUTE_READWRITE ,&dwOldProtect))
    return FALSE;

  g_dwImageSize = pOptionalHeader->SizeOfImage;
  memcpy(lpBackMem ,(LPVOID)hDll ,g_dwImageSize );
  memset(lpBackMem , 0 ,0x200);
  *((PBYTE)hDll + pOptionalHeader->AddressOfEntryPoint) = (BYTE)0xc3;

  //  DWORD dwRet =0;
  do{
    dwCount --;
  }while(FreeLibrary(hDll) && dwCount);

  g_lpNewImage = VirtualAlloc((LPVOID)hDll ,g_dwImageSize ,MEM_COMMIT|MEM_RESERVE ,PAGE_EXECUTE_READWRITE);
  if(g_lpNewImage != (LPVOID)hDll)
    return FALSE;

  memcpy(g_lpNewImage , lpBackMem , g_dwImageSize);
  VirtualFree(lpBackMem , 0, MEM_RELEASE);

  return TRUE  ;
}
typedef ULONG WIN32_PROTECTION_MASK ;
NTSTATUS
  MyNtProtectVirtualMemory(
  __in HANDLE ProcessHandle,
  __inout PVOID *BaseAddress,
  __inout PSIZE_T RegionSize,
  __in WIN32_PROTECTION_MASK NewProtectWin32,
  __out PULONG OldProtect
  )
{
  typedef NTSTATUS
    (* PtrNtProtectVirtualMemory)(
    __in HANDLE ProcessHandle,
    __inout PVOID *BaseAddress,
    __inout PSIZE_T RegionSize,
    __in WIN32_PROTECTION_MASK NewProtectWin32,
    __out PULONG OldProtect
    );

  NTSTATUS NtStatus = STATUS_SUCCESS;
  PCHAR ProcessName ;


  ProcessName = (PCHAR)PsGetProcessImageFileName(PsGetCurrentProcess());
    if(GameModule &&
      (ULONG)GameModule <= (ULONG)BaseAddress &&
      (ULONG)GameModule + GameModuleSize > (ULONG)BaseAddress)
    {  
      if(NewProtectWin32 != PAGE_READONLY)
        return STATUS_SUCCESS;
    }

    if(MhDllModule &&
      (ULONG)MhDllModule <= (ULONG)BaseAddress &&
       (ULONG)MhDllModule + MhDllModuleSize > (ULONG)BaseAddress)
    {
  //    return ERROR_INVALID_ADDRESS;
      return 487L;
    }
    if(FakeModule &&
      (ULONG)FakeModule <= (ULONG)BaseAddress &&
      (ULONG)FakeModule + FakeModuleSize > (ULONG)BaseAddress)
    {
       return 487L;
    }

  }
  
  if(OldServiceAddressTable[0x0D7])
    NtStatus = ((PtrNtProtectVirtualMemory)OldServiceAddressTable[0x0D7])(ProcessHandle ,BaseAddress ,RegionSize ,NewProtectWin32 ,OldProtect);
  
  return NtStatus;
}

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 3
支持
分享
最新回复 (23)
雪    币: 13201
活跃值: (4261)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这绝对是个广告位。。。。mark
2014-7-28 18:29
0
雪    币: 6538
活跃值: (4496)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
3
好像很厉害的样子,先回复再细看
2014-7-28 18:54
0
雪    币: 100
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
前排占位,mark
2014-7-28 19:07
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
前排        支持
2014-7-28 19:16
0
雪    币: 3366
活跃值: (1338)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
6
前排站队~ 不明觉厉
2014-7-28 19:27
0
雪    币: 712
活跃值: (3767)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
顶下,对本人来说还是有点技术含量的
2014-7-28 20:40
0
雪    币: 43
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
看看,支持
2014-7-28 21:04
0
雪    币: 53
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
mark
2014-7-28 21:50
0
雪    币: 297
活跃值: (265)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
10
请问v校的截图是啥。。有木有链接
2014-7-29 09:08
0
雪    币: 135
活跃值: (63)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
11
搜索一下就有了,搜不到再说吧,很好搜的...
2014-7-29 09:13
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
mark 学习
2014-10-12 10:11
0
雪    币: 294
活跃值: (119)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
13
mark一下~
2014-10-12 17:47
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
mark一下~
2014-10-14 12:39
0
雪    币: 60
活跃值: (439)
能力值: ( LV5,RANK:65 )
在线值:
发帖
回帖
粉丝
15
不明觉厉
2014-12-1 12:59
0
雪    币: 54
活跃值: (75)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
mark一下~
2014-12-8 23:56
0
雪    币: 54
活跃值: (75)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
mark一下~
2014-12-14 17:27
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
BWM
18
我也找不到V校
2014-12-15 22:54
0
雪    币: 188
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
很厉害的说。
2014-12-17 16:05
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
学习下,好长哦
2014-12-17 17:35
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
mark 一下
2014-12-19 11:33
0
雪    币: 188
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
楼主很厉害,赞一个。
2014-12-19 12:08
0
雪    币: 9
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
看了半天真是一篇**贴
2014-12-23 10:16
0
雪    币: 54
活跃值: (75)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
mark
2015-2-3 01:18
0
游客
登录 | 注册 方可回帖
返回
//