首页
社区
课程
招聘
[求助]各位帮帮忙!!谢谢!!
发表于: 2008-11-16 19:43 3711

[求助]各位帮帮忙!!谢谢!!

2008-11-16 19:43
3711
各位帮帮忙!!谢谢!!
#include <windows.h>
#include <stdio.h>

typedef struct _UNICODE_STRING
{
    USHORT Length;
    USHORT MaximumLength;
    PWSTR Buffer;
} UNICODE_STRING, *PUNICODE_STRING;

typedef struct _PEB_LDR_DATA
{
  ULONG Length;
  BOOLEAN Initialized;
  PVOID SsHandle;
  LIST_ENTRY InLoadOrderModuleList;
  LIST_ENTRY InMemoryOrderModuleList;
  LIST_ENTRY InInitializationOrderModuleList;
} PEB_LDR_DATA,*PPEB_LDR_DATA;

typedef struct _LDR_MODULE
{
  LIST_ENTRY          InLoadOrderModuleList;
  LIST_ENTRY          InMemoryOrderModuleList;  
  LIST_ENTRY          InInitializationOrderModuleList;
  void*               BaseAddress;  
  void*               EntryPoint;   
  ULONG               SizeOfImage;
  UNICODE_STRING    FullDllName;
  UNICODE_STRING      BaseDllName;
  ULONG               Flags;
  SHORT               LoadCount;
  SHORT               TlsIndex;
  HANDLE              SectionHandle;
  ULONG               CheckSum;
  ULONG               TimeDateStamp;
} LDR_MODULE, *PLDR_MODULE;

int main(int argc, char* argv[])
{
  PEB_LDR_DATA *pPEBLDR;
  LDR_MODULE *pLdrMod;
  LIST_ENTRY *pListEntry,*pStart;
  DWORD dwKernelBase;
  PWSTR fakemodulename=L"假名字啊";
  PWSTR fakemodulepath=L"这是假路径,看能骗到谁";
///////////////////////////////////////////////////
  _asm
  {
      mov eax,fs:[0x30] //TEB->PEB
      mov eax,[eax+0xC] //PEB->Ldr    问题1: 请具体讲一讲他的实现与作用!!!!!
      mov pPEBLDR,eax
  }
////////////////////////////////////////////////////
  printf("准备改名字了...\n");
  dwKernelBase=(DWORD)GetModuleHandle("kernel32.dll");
  printf("Base of kernel32.dll is 0x%08x\n",dwKernelBase);
  pStart=pListEntry=(LIST_ENTRY*)(PUCHAR)&(pPEBLDR->InLoadOrderModuleList);问题2:为什么要做与运算呢???作用是什么???

  do
  {
    pListEntry=pListEntry->Flink;
    pLdrMod=(LDR_MODULE*)(pListEntry);
问题3.pListEntry是LIST_ENTRY *结构,怎么看出他又是LDR_MODULE*结构????
通过WinDbg我们可以看看nt!_PEB的结构
0: kd> dt nt!_PEB
   +0x000 InheritedAddressSpace : UChar
   +0x001 ReadImageFileExecOptions : UChar
   +0x002 BeingDebugged    : UChar
   +0x003 SpareBool        : UChar
   +0x004 Mutant           : Ptr32 Void
   +0x008 ImageBaseAddress : Ptr32 Void
   +0x00c Ldr              : Ptr32 _PEB_LDR_DATA
   +0x010 ProcessParameters : Ptr32 _RTL_USER_PROCESS_PARAMETERS
……
+0C处是一个_PEB_LDR_DATA结构指针,里面包含了和LDR相关的一些数据,进程的模块链表就保存在Ldr中。下面是_PEB_LDR_DATA的结构:
0: kd> dt nt!_PEB_LDR_DATA
   +0x000 Length           : Uint4B
   +0x004 Initialized      : UChar
   +0x008 SsHandle         : Ptr32 Void
   +0x00c InLoadOrderModuleList : _LIST_ENTRY
   +0x014 InMemoryOrderModuleList : _LIST_ENTRY
   +0x01c InInitializationOrderModuleList : _LIST_ENTRY
   +0x024 EntryInProgress  : Ptr32 Void

    if ((DWORD)pLdrMod->BaseAddress==dwKernelBase)
    {
      printf("Found kernel32.dll...");
      lstrcpyW(pLdrMod->BaseDllName.Buffer,fakemodulename);
      lstrcpyW(pLdrMod->FullDllName.Buffer,fakemodulepath);
      printf("Change OK.\n");
      break;
    }
   
  } while(pListEntry!=pStart);
  printf("现在你可以用工具来看看本进程的模块列表\n");
  while (1)
  {
    Sleep(1000);
  }
  return 0;
}

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 225
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
mov eax,fs:[0x30]获取的是
当前线程TEB
2008-11-16 20:19
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
3
1. 2楼的回答貌似是错误的, 在用户态 fs:[0x00]指向TEB ,偏移0x30得到PEB,
2. & 在这里不能理解为 and运算, 这里是对地址的引用.
3. 因为它又是LDR_MODULE偏移 +0x000处的第一个结构成员
2008-11-16 20:31
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
4
我说这代码怎么这么看着眼熟呢?原来是我写的,哈哈,比较挫,希望没影响楼主学习~还有,以后写代码我还是多加点注释
2008-11-16 20:58
0
雪    币: 225
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
[QUOTE=sudami;536332]1. 2楼的回答貌似是错误的, 在用户态 fs:[0x00]指向TEB ,偏移0x30得到PEB,
2. & 在这里不能理解为 and运算, 这里是对地址的引用.
3. 因为它又是LDR_MODULE偏移 +0x000处的第一个结构成员[/QUOTE]
厄,刚看了下,好像是理解错了
2008-11-16 21:08
0
雪    币: 182
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
[QUOTE=sudami;536332]1. 2楼的回答貌似是错误的, 在用户态 fs:[0x00]指向TEB ,偏移0x30得到PEB,
2. & 在这里不能理解为 and运算, 这里是对地址的引用.
3. 因为它又是LDR_MODULE偏移 +0x000处的第一个结构成员[/QUOTE]

谢谢!回答的太棒了!!
2008-11-17 18:06
0
游客
登录 | 注册 方可回帖
返回
//