• 2032阅读
  • 1回复

1.3.3 用工具过驱动保护(确定学习方向)(11课) [复制链接]

上一主题 下一主题
在线啊冲
 

只看楼主 倒序阅读 使用道具 楼主  发表于: 2014-07-11

1.3.3 用工具过驱动保护(确定学习方向)(11课)
      A、用户层至内核的隐秘通道
      B、浅谈过保护原理
      C、实战过XX游戏驱动保护,让OD正常附加调试
      D、小结
课时32:29

====================教案内容====================
WIN32子系统:
   Win32Windows的一个子系统,还有另外的子系统如OS/2POSIXWOW等。
不同的子系统系统提供了不同的编程接口,即API,一般说的API指的就是Win32 API
Win32子系统是最纯正的Windows子系统,提供了大量的API函数,程序员只需要熟练的使用这些API就可以写出Windows应用程序,当然程序员也可以考虑第三方库,如VC提供的MFC,但这些库不过是在应用程序和Win32子系统中间加了一层封装而以,没有本质的区别。
Windows API 分为三类 分别是USER函数,GDI函数,和KERNEL函数
USER函数(user32.dll):这类函数管理窗口,菜单,对话框和控件
GDI函数(gdi32.dll):这类函数在物理设备上执行绘图操作-Shadow SSDT-Dwin32k.sys
KERNEL函数(kernel32.dll):这类函数管理非GUI资源,例如,进程,线程,文件,和同步服务等.
ntkrnlpa.exe+ntkrnlpa.lib
NativeAPI(Ntdll.dll)
NT native API 是可由用户模式和核心模式程序调用的NT系统服务集接口,它们直
接由NT操作系统实现。
SSDT
SSDT的全称是SystemServices Descriptor Table,系统服务描述符表。这个表就是一个把ring3Win32 APIring0的内核API联系起来。SSDT并不仅仅只包含一个庞大的地址索引表,它还包含着一些其它有用的信息,诸如地址索引的基地址、服务函数个数等。

A、应用层到内核隐秘通道

OpenProcess为例
XX.dll----kernel32.OpenProcess---ntdll.NtOpenProcess=======ntdll.ZwOpenProcess
7C92D5E0>  B8 7A000000     MOV EAX,7A
7C92D5E5    BA 0003FE7F     MOV EDX,7FFE0300
7C92D5EA    FF12            CALL DWORD PTR DS:[EDX]
7C92D5EC    C2 1000         RETN 10
7FFE0300  7C92E4F0 ntdll.KiFastSystemCall  //EAX参数
7C92E4F0>  8BD4            MOV EDX,ESP
7C92E4F2    0F34            SYSENTER    //切换内核
0xA53A41AA   0x805CC40A
jmpntkrnlpa.NtOpenProcess
内核 ntkrnlpa.ZwOpenProcess---SSDT--ntkrnlpa.NtOpenProcess--


B、浅谈过保护原理

  调试必经过程-获取进程ID-OpenProcess打开调试进程
WriteProcessMemory()
C、实战过XX游戏驱动保护,让OD正常附加调试

D、小结


====================教案内容====================


本节课教案也很详细,首先讲了一下理论内容,我们所说的API都是WINDOWS系统的,USER/GDI/KERNEL都是用户层的API函数库,NTKRNLPA就是驱动层的API,SSDT就是从用户层到内核层的桥梁.

现在来以OpenProcess来举例说明,我们打开OD,来到OpenProcess函数(G转到),看到下面的命令CALL中有一个NtOpenProcess函数的调用,它还有另外一个函数名ZwOpenProcess,但是Nt这个我们直接转不过去,ZwOpenProcess就可以转到,再往深层的子CALL进一下,这里是[EDX]的指针CALL ntdll.KiFastSystemCall但是这个不止是OpenProcess函数在调用,它是一个公用函数,很多API都在调用,而在调用之前的压栈mov eax 7a/7B/7C等等的是与SSDT连接起来.继续向深入跟, SYSENTER   ,通过这个软中断就切换到内核,它会查寻系统服务表,然后通过SSDT进入到内核,再继续用OD就跟踪不到了,因为OD不是内核调试器.

因为转到内核是ntkrnlpa.exe文件,所以用IDA来进行了逆向,因为驱动也没加壳,我们找到ZwOpenProcess函数和NtOpenProcess.以上讲的每一步,我们可以用内联HOOK,不管在哪一层的函数我们只要做inline hook都可以来进行保护.

现在就以SXFT游戏来进行一下例子,游戏进入后就不允许OD打开了,XueTr工具来查看一下,发现了很多钩子,其中NtOpenProcessNtWriteVirtualMemoryHOOK,而且后面还有发送消息和屏幕取色API函数也被HOOK.

如果我们要打开游戏的话必须要恢复这些HOOK,XueTr工具恢复之后一刷新又被HOOK,看来游戏的保护也不是那么简单的.我们用OD可以看到游戏进程,但是无法附加.下面我们用另一款工具Kernel Detective,我们看到被修改函数的当前地址和起源地址,将地址记下,然后转到当前地址,输入汇编命令”jmp 起源地址这样就跳回到正常的函数地址.这里注意不要写错地址,否则直接蓝屏.

哇塞,OD可以打开了,这样就过了驱动保护.当然F2下断还是不好使,因为游戏还有其它方面的保护,但是he硬件断点是删除不掉的,这个可以下断.

其实用工具能过保护也不错啊,在郁金香老师的指导下,看来驱动也并不是很难过.此课让人信心大增,令人兴奋!
善者 慈悲心常在 无怨无恨 以苦为乐
默认压缩密码www.hifyl.com
文件分享密码问题:http://www.hifyl.com/read-htm-tid-4444.html
离线shuayu

只看该作者 沙发  发表于: 2014-09-30
快速回复
限100 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
上一个 下一个