首页
社区
课程
招聘
[旧帖] [下载][下载]新手初学过保护之TP学习总结视频教程 0.00雪花
发表于: 2012-2-8 13:39 2524

[旧帖] [下载][下载]新手初学过保护之TP学习总结视频教程 0.00雪花

2012-2-8 13:39
2524
初学过保护之TP学习总结.txt、

驱动保护大法超级群:208668455

本群学习交流建议:不要怕丢人,不要怕说错,用于提问并互相交流问题!

我是糖衫大胸 = 唐山大兄; QQ:43880574 , 教程有疑问或者错误,欢迎交流并指出!谢谢!

借此同时感谢 爱在路上  萝卜 等朋友

初学一个月整理的最有用的相关文章:
http://bbs.pediy.com/showthread.php?t=126802&highlight=tp

http://bbs.pediy.com/showthread.php?t=145968

http://bbs.pediy.com/showthread.php?t=127246&highlight=DebugPort

尽信书不如无书!也不能完全信这些资料,主要是思路,否则无论怎么学都是错的!
//////////////////////////////////////////////////////////////////////////
Ntdll.dll 是可由用户模式和核心模式程序调用的NT系统服务集接口,它们直
接由NT操作系统实现。
SSDT的全称是System Services Descriptor Table,系统服务描述符表。这个表就是一个把ring3的Win32 API和ring0的内核API联系起来。SSDT并不仅仅只包含一个庞大的地址索引表,它还包含着一些其它有用的信息,诸如地址索引的基地址、服务函数个数等。
///////////////////////////////////////////////////////////////////////////
                              OpenProcess应用层到内核隐秘通道

用户程序>>kernel32.OpenProcess>>ntdll.NtOpenProcess>>ntdll.ZwOpenProcess>>内核 ntkrnlpa.ZwOpenProcess>>SSDT-ntkrnlpa.NtOpenProcess

7469DE8E    FF15 E8106874   call    dword ptr [<&KERNEL32.OpenProcess>]      ; kernel32.OpenProcess
7C830A2C    FF15 1C11807C   call    dword ptr [<&ntdll.NtOpenProcess>]       ; ntdll.ZwOpenProcess
0007FB64   7C830A32  返回到 kernel32.7C830A32 来自 ntdll.ZwOpenProcess
7FFE0300  7C92E510  ntdll.KiFastSystemCall
/////////////////////////////////////////////////////////////////////////////
128 NtOpenThread    //防止调试器在它体内创建线程
122 NtOpenProcess   //防止OD等在进程列表看到它
KiAttachProcess   //防止其他软件附加它 通过计算得到
186 NtReadVirtualMemory  //防止别人读取它的内存
277 NtWriteVirtualMemory  //防止别人在它的内存里面乱写乱画
/////////////////////////////////////////////////////////////////////////////
下面这2个可以先不用管,网上也有KdDisableDebugger的方式,那就要自己另外搞了!
KDCOM.dll:KdReceivePacket  //这两个是COM串口的接受和发送数据
KDCOM.dll:KdSendPacket      //主要用来方式别人双机调试
/////////////////////////////////////////////////////////////////////////////
NtOpenProcess   //防止OD等在进程列表看到它
KiAttachProcess   //防止其他软件附加它
这2个跟游戏有通讯,要做判断!if  
///////////////////////////////////////////////////////////////////////////////
关于清0:
网上有很多改变eprocess下访问结构已经失效!所以现在好用的办法是杀掉清0线程
!process 0 0
dt _eprocess
dt nt!_eprocess //附加进程
ba w4 nt!_eprocess+0xdc   //我这里的0xdc是DebugPort的偏移 0x174 程序进程地址
解决办法:
利用syser对EPROCESS+BC处设置断点。找到清0的地方! 90 C3 NOP RETN
定位内核模块T?????.sys的首地址
MyEnumKernelModule("\\??\\c:\\windows\\system32\\tessafe.sys",&ModuleAddress,&ModuleSize);
然后根据特征码遍历整个模块找到我们需要的地方进行处理。
//////////////////////////////////////////////////////////////////////////////
关于监控线程:
去年的老文章上说 处理不当 会重启电脑,也就是向64端口写入FE导.text:01001665   mov     al, 0FEh
所以也要杀掉
//////////////////////////////////////////////////////////////////////////////
接下来是DPC,系统回调,SYSTEM内线程,用XT解决!
/////////////////////////////////结果////////////////////////////////////////
最后当我把以上问题处理完毕之后,用OD附加,发现游戏卡住了,不知道是不是在虚拟机内的原因,暂时没时间弄!
//////////////////////////////////////////////////////////////////////////////
关于恢复硬件断点:
SSDT 表中索引为 0xD5和0x55的函数
//处理硬件断点时
ULONG    uNtSetContextThreadAddress;
ULONG    uNtGetContextThreadAddress;
ULONG    TenNtSetContextThread,
      TenNtGetContextThread;
//////////////////////////////////////////////////////////////////////
//  名称:  _MyNtGetThreadContext
//  功能:  两个SSDT HOOK伪造函数的中继函数
//  参数:  
//  返回:  
//////////////////////////////////////////////////////////////////////
static NAKED NTSTATUS Nakd_NtGetThreadContext(HANDLE hThread, PCONTEXT pContext)
{
  __asm
  {
    jmp    dword ptr[TenNtGetContextThread]
  }
}

static NAKED NTSTATUS Nakd_NtSetThreadContext(HANDLE hThread, PCONTEXT pContext)
{
  __asm
  {
    jmp    dword ptr[TenNtSetContextThread]
  }
}
//////////////////////////////////////////////////////////////////////
//  名称:  MyNtGetThreadContext && MyNtSetThreadContext
//  功能:  NtGetThreadContext与NtSetThreadContext函数被SSDT HOOK的伪造函数
//  参数:  
//  返回:  
//////////////////////////////////////////////////////////////////////
NTSTATUS MyNtGetThreadContext(HANDLE hThread, PCONTEXT pContext)
{
  if ( _stricmp((const char*)PsGetProcessImageFileName(PsGetCurrentProcess()),DNF_EXE) )
  {
    return Nakd_NtGetThreadContext(hThread, pContext);
  }
  return STATUS_UNSUCCESSFUL;
}

NTSTATUS MyNtSetThreadContext(HANDLE hThread, PCONTEXT pContext)
{
  if ( _stricmp((const char*)PsGetProcessImageFileName(PsGetCurrentProcess()),DNF_EXE) )
  {
    return Nakd_NtSetThreadContext(hThread, pContext);
  }
  //DbgPrint("Dr7:%08X\n", pContext->Dr7);
  if ( pContext->Dr7 == 0x101 )
  {
    return Nakd_NtSetThreadContext(hThread, pContext);
  }
  return STATUS_UNSUCCESSFUL;
}

//////////////////////////////////////////////////////////////////////
//  名称:  My_Recovery_HardwareBreakpoint
//  功能:  通过对set与get进行SSDT HOOK来恢复硬件断点
//  参数:  
//  返回:  
//////////////////////////////////////////////////////////////////////
NTSTATUS My_Recovery_HardwareBreakpoint()
{
  KIRQL    Irql;
  //获取地址
  uNtSetContextThreadAddress = (ULONG)KeServiceDescriptorTable->ServiceTableBase+0xD5 * 4;
  uNtGetContextThreadAddress = (ULONG)KeServiceDescriptorTable->ServiceTableBase+0x55 * 4;

  TenNtSetContextThread = *(ULONG*)uNtSetContextThreadAddress;
  TenNtGetContextThread = *(ULONG*)uNtGetContextThreadAddress;

  KdPrint(("Set地址:%0X\n",TenNtSetContextThread));
  KdPrint(("Get地址:%0X\n",TenNtGetContextThread));

  KdPrint(("Process:%0X \n",(ULONG)p_MyHookAddress));
  KdPrint(("Thread:%0X \n",(ULONG)t_MyHookAddress));

  WPOFF();  //清除CR0
  //提升IRQL中断级
  Irql=KeRaiseIrqlToDpcLevel();

  //完成SSDT HOOK
  *(ULONG*)uNtGetContextThreadAddress = (ULONG)MyNtGetThreadContext;
  *(ULONG*)uNtSetContextThreadAddress = (ULONG)MyNtSetThreadContext;

  //恢复Irql
  KeLowerIrql(Irql);
  WPON();    //恢复CR0

  return STATUS_UNSUCCESSFUL;
}

下载地址:http://115.com/file/c2msx8h0#

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 107
活跃值: (424)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
哟...挺强大嘿...
2012-2-8 15:47
0
雪    币: 1644
活跃值: (53)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢分享。。
2012-2-8 22:08
0
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不错,喜欢你这样的视频,
继续努力
2012-2-8 22:22
0
雪    币: 65
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
第二课的密码是多少啊?
2012-2-10 23:14
0
游客
登录 | 注册 方可回帖
返回
// // 统计代码