首页
社区
课程
招聘
[下载] WIN7 64 SP1 下实现自定义系统函数
发表于: 2016-5-27 21:52 6445

[下载] WIN7 64 SP1 下实现自定义系统函数

2016-5-27 21:52
6445
现有的各种保护软件都对程序用到的系统函数进行层层监控和保护。当你的程序调用某些系统函数时,保护软件会先审核你的系统函数的参数。如果它认为你的参数不合法,就不会阻止函数的运行,甚至会关闭计算机。保护软件一般会从ring3层的系统函数库到ring0层的内核函数库都进行监控。
     躲避ring3层的监控有很多中方法,其中最直接的就是创建新库,复制需要的一份系统函数代码在新库中运行。或者复制一份系统函数库,然后进行重命名后动态加载。这种方法虽然可以躲避对kenerl32等系统函数库的监控,但ring3层函数调用ring0层内核驱动时,需要通过的系统调用由于是唯一的,则无法用这种方法跳过。跳过系统调用的方法要么修复被保护软件篡改的系统函数(修复后容易被保护软件检测到),要么建立新的系统调用表。
   
    在XP时代,由于windows的SSDT的4个位置中2个被系统占用,另外2个位置处于空闲状态。利用这2个空闲位置建立自己的系统调用表,是一个很好的躲过监控的方法。win7系统中,SSDT表只有2个位置,且都被系统占用,XP下好用的方法就不可用了。
    系统调用的目的从根本上讲只是将ring3层函数的参数,转换后传递给ring0层的函数,并将ring0层的执行结果转换后传递出来。既然如此,从ring3层向ring0层进行参数传递的方式有很多种,特定的系统函数被监控了,我们可以考虑其他函数。比如:DeviceIoControl。
    这个函数本身的作用就是用来进行设备数据传输的,我们完全可以将需要的参数进行转换后通过该函数传递到ring0层,然后由ring0层的函数还原后,再传递给原定的内核函数。这样我们就绕过了保护软件对系统调用的监控。
    下面的代码实现了SendInput、Keybd_event、Mouse_event、GetPixel、BitBlt、GetWindowThreadProcessId、OpenProcess、ReadProcessMemory、WriteProcessMemory系统函数的自定义处理。该代码在win7 64位SP 1简体中文版下测试通过。编译环境:VS2010 sp1,需要安装WTL、VisualDDK-1.5.7。
特别说明:
  1. 由于64位的编译器无法识别__asm,因此如果需要修改gobalJmp.asm,修改后请用MASM11中的命令行进行重新编译。
  2. 在64位系统中,驱动程序皆为64位,SelfSysFunlib中对32位版本和64位版本的参数定义有所不同。
  3. 分享的代码,仅供学习只用。由此产生的任何问题,本人均不负责。
  4. 附件中一个是代码,一个是驱动签名工具

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 71
活跃值: (58)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
沙发~~~
2016-5-27 21:55
0
雪    币: 4751
活跃值: (1783)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
早就用上了
2016-5-27 21:58
0
雪    币: 211
活跃值: (118)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
ri....,动作这么快。。。
2016-5-27 22:01
0
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
听说64位不能重载内核...
2016-5-27 23:12
0
雪    币: 22
活跃值: (443)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
看看 学习下!
2016-5-28 11:30
0
雪    币: 12502
活跃值: (3053)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
x谢谢。开阔了视野
2016-5-28 11:41
0
雪    币: 245
活跃值: (294)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
学习了!!!!!
2016-5-28 11:42
0
雪    币: 256
活跃值: (48)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
9
不是不能重载,重载作用不大,目前知道的作用应用在VT技术中
2016-5-28 23:23
0
雪    币: 96
活跃值: (36)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
比较厉害
2016-12-26 21:45
0
雪    币: 25
活跃值: (506)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
楼主流弊了!
2016-12-26 22:49
0
雪    币: 286
活跃值: (62)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
xjj
12
但ring3层函数调用ring0层内核驱动时,需要通过的系统调用由于是唯一的,则无法用这种方法跳过。
================
这里就有个梗,64位系统上运行的32位程序,都有这个大梗,,用这个梗可以在R3~R0的道路上设置一个路障,想干点啥就干点啥吧
2016-12-27 08:23
0
雪    币: 1484
活跃值: (1135)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
非常感谢,支持大神
2016-12-27 23:34
0
游客
登录 | 注册 方可回帖
返回
//