欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]发现最近好多在说T*启动时清空CR3 如何去恢复。方法很简单。我把代码今天贴出来。

[原创]发现最近好多在说T*启动时清空CR3 如何去恢复。方法很简单。我把代码今天贴出来。

DXF可以直接恢复CR3 无检测。CF就不行。CF有检测。

CF只能出PTML4入手。就算你恢复了CR3.你们会发现 部分地址你们还是读不到?

为啥呢。这个问题问的好。看看 0E 就明白了。核心数据全部清空 当有进程去访问

这些地址 地址不存在触发异常 进入 0E 。T*判断触发 进程是不是自己的进程 是自己的进程

就给他一个抹掉的地址。不是真的 直接返回0.

这个在DXF影响不大。在CF上影响比较严重。

我之前想过HOOK MmMapIoSpace 来判断。意义不大。

如果是你直接返回NULL.直接升天

如何解决这个问题呢?

嵌套 TP HOOK 进行HOOK 按照某位网友给我的思路就是。

具体代码我也没有实现。有兴趣的自己去实现一下吧

PULONGLONG Mapped_Memory_Addr(ULONGLONG Addr, int Mapped_len, int Catch)

{

PHYSICAL_ADDRESS Physical_address;

RtlZeroMemory(&Physical_address, sizeof(PHYSICAL_ADDRESS));

if (Addr <= 0)

{

return NULL;

}

Physical_address.QuadPart = Addr;

PULONGLONG Tmp_Buffer = (PULONGLONG)MmMapIoSpace(Physical_address, Mapped_len, Catch);

return Tmp_Buffer;

}


BOOLEAN InsertProcess(ULONGLONG FakeCr3, HANDLE Pid, ULONGLONG TrueCr3)
{
 if (g_Cr3Conut < 0x4096)
 {
  for (ULONG i = 0; i < g_Cr3Conut; i++)
  {
   if (g_Cr3[i].Pid == Pid)
   {
    g_Cr3[i].Cr3 = TrueCr3;
    g_Cr3[i].Fake_Cr3 = FakeCr3;
    return TRUE;
   }
  }
        g_Cr3Conut++;
  g_Cr3[g_Cr3Conut].Pid = Pid;
  g_Cr3[g_Cr3Conut].Cr3 = TrueCr3;
  g_Cr3[g_Cr3Conut].Fake_Cr3 = FakeCr3;
  
 }
 return FALSE;
}

OB_PREOP_CALLBACK_STATUS
preCall(PVOID RegistrationContext, POB_PRE_OPERATION_INFORMATION pOperationInformation)
{

     UNREFERENCED_PARAMETER(RegistrationContext);
  PEPROCESS pe = IoGetCurrentProcess();
  if (MmIsAddressValid((PVOID)((ULONG64)pe + 0x28)))
  {
   if (__readcr3() != *(PULONG64)((ULONG64)pe + 0x28))
   {
    InsertProcess(*(PULONG64)((ULONG64)pe + 0x28), PsGetCurrentProcessId(), __readcr3());
    if (g_API)
    {
     PULONG64 Fake_PTML4 = Mapped_Memory_Addr(*(PULONG64)((ULONG64)pe + 0x28), 0x1000, 0);
     PULONG64 True_PTML4 = Mapped_Memory_Addr(__readcr3(), 0x1000, 0);
     if (Fake_PTML4[0] != True_PTML4[0])
     {
      _disable();
      if (Fake_PTML4 != NULL && True_PTML4 != NULL)
      {
       RtlCopyMemory(Fake_PTML4, True_PTML4, 0x1000);
      }
      MmUnmapIoSpace(Fake_PTML4, 0x1000);
      MmUnmapIoSpace(True_PTML4, 0x1000);
      _enable();
     }
    }
   }
  }
  
  if (g_API)
  {
   pOperationInformation->Parameters->CreateHandleInformation.DesiredAccess = PROCESS_ALL_ACCESS_THREAD;
   pOperationInformation->Parameters->CreateHandleInformation.OriginalDesiredAccess = PROCESS_ALL_ACCESS_THREAD;
  }


 return OB_PREOP_SUCCESS;
}
BOOLEAN SetObType()
{
 if (ObFlage == FALSE)
 {
  NTSTATUS status;
  OB_CALLBACK_REGISTRATION obReg;
  OB_OPERATION_REGISTRATION opReg;
  memset(&obReg, 0, sizeof(obReg));
  obReg.Version = ObGetFilterVersion();
  obReg.OperationRegistrationCount = 1;
  obReg.RegistrationContext = NULL;
  RtlInitUnicodeString(&obReg.Altitude, L"25444");
  memset(&opReg, 0, sizeof(opReg));
  opReg.ObjectType = PsProcessType;
  opReg.Operations = OB_OPERATION_HANDLE_CREATE | OB_OPERATION_HANDLE_DUPLICATE;
  opReg.PreOperation = (POB_PRE_OPERATION_CALLBACK)preCall;
  obReg.OperationRegistration = &opReg;
  status = ObRegisterCallbacks(&obReg, &obHandle);
  if (status == STATUS_SUCCESS) ObFlage = TRUE;
 
  return ObFlage;
 }
  return FALSE;
}


这些东西 压根不值钱 我竟然看到 有人 天价在卖这些东西  

任何替换 CR3的东西 在ObjectCallVakc_Type 里不敢是假的。

是假的就是想死

QQ群:61895068

欢迎进群讨论。


上传的附件 7.png
10.jpg

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功