找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 18451|回复: 19

半成品之----AtapiStartIo

 火... [复制链接]

47

主题

265

回帖

8

精华

核心会员

积分
10349
发表于 2011-4-7 19:09:52 | 显示全部楼层 |阅读模式
采用了点硬编码,只是实验性质的,目前正在弄,半成品
别的没什么,防止底层的,特定扇区的读写~
要防删除文件什么的,还要再把MFT保护起来
  1. #include <wdm.h>
  2. #include <srb.h>
  3. #include <windef.h>

  4. NTSTATUS
  5. DriverEntry(        PDRIVER_OBJECT        DriverObject,
  6.         PUNICODE_STRING        RegisterPath);
  7.        
  8. #pragma alloc_text(INIT, DriverEntry)

  9. ////////////////////////////////////////
  10. //global
  11. ///////////////////////////////////////
  12. char jmpcode[5] = { 0xE9, 0x00, 0x00 , 0x00, 0x00};
  13. char origcode[5] = { 0};
  14. ULONG g_orig_addr = 0xf97a197e;
  15. ///////////////////////////////////////
  16. //function
  17. ///////////////////////////////////////

  18. VOID WPON()
  19. {
  20.      __asm{
  21.           mov eax,cr0
  22.           or eax,0x10000
  23.           mov cr0,eax
  24.           STI
  25.   }

  26. }

  27. VOID WPOFF()
  28. {
  29.   __asm{
  30.           cli  
  31.       mov eax, cr0
  32.           and eax,not 0x10000
  33.       mov cr0,eax
  34.       }
  35.   
  36. }

  37. VOID
  38. DriverUnload(        PDRIVER_OBJECT DriverObject )
  39. {
  40.         KIRQL oldIrql;
  41.        
  42.         WPOFF();
  43.         oldIrql = KeRaiseIrqlToDpcLevel();

  44.         RtlCopyMemory( (BYTE*)g_orig_addr, origcode, 5 );
  45.                
  46.         KeLowerIrql(oldIrql);
  47.         WPON();               
  48. }

  49. __declspec(naked)
  50. NTSTATUS
  51. orig_AtapiStartIo( PVOID devext_addr_ach,
  52.                 struct _SCSI_REQUEST_BLOCK* srb
  53.                 )
  54. {
  55.                 __asm
  56.         {
  57.                 _emit 0x90
  58.                 _emit 0x90
  59.                 _emit 0x90
  60.                 _emit 0x90
  61.                 _emit 0x90
  62.                 _emit 0x90
  63.                 _emit 0x90
  64.                 _emit 0x90
  65.                 _emit 0x90
  66.                 _emit 0x90
  67.                 _emit 0x90
  68.                 _emit 0x90
  69.                 _emit 0x90
  70.                 _emit 0x90
  71.         }
  72. }
  73.                

  74. BOOLEAN
  75. fake_AtapiStartIo(   PVOID        devext_add_ach,
  76.                 struct _SCSI_REQUEST_BLOCK* srb
  77.                 )
  78. {
  79.         ULONG        max,min;
  80.        
  81.         max = 4868496+57;
  82.         min = 4868496;
  83.        
  84.         if( srb->QueueSortKey <= max &&
  85.                 srb->QueueSortKey >= min)
  86.         {
  87.                 KdBreakPoint();
  88.         }
  89.        
  90.         return orig_AtapiStartIo(devext_add_ach, srb);
  91. }

  92. VOID
  93. InlineHook( ULONG        orig_addr,
  94.         ULONG        fake_addr)
  95. {       
  96.         ULONG        distance;
  97.         KIRQL        oldIrql;
  98.         char        jmp_orig_code[7] = {  0xEA, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00 };
  99.        
  100.         distance = fake_addr-orig_addr-5;
  101.         RtlCopyMemory( origcode, (BYTE*)orig_addr, 5);
  102.         RtlCopyMemory( jmpcode+1, (BYTE*)&distance, 4);
  103.        
  104.         WPOFF();
  105.         oldIrql = KeRaiseIrqlToDpcLevel();
  106.        
  107.         RtlCopyMemory( (BYTE*)orig_AtapiStartIo, (BYTE*)origcode, 5);
  108.         *( (ULONG*)(jmp_orig_code + 1) ) = (ULONG)((BYTE*)orig_addr + 5);
  109.         RtlCopyMemory( (BYTE*)orig_AtapiStartIo+5, jmp_orig_code, 7);
  110.         RtlCopyMemory( (BYTE*)orig_addr, jmpcode, 5);
  111.        
  112.         KeLowerIrql(oldIrql);
  113.         WPON();
  114.        
  115.         KdPrint(("\nthe inline hook has done!\n"));
  116.         KdBreakPoint();
  117.        
  118.         return;
  119. }

  120. NTSTATUS
  121. DriverEntry(        PDRIVER_OBJECT        DriverObject,
  122.         PUNICODE_STRING        RegisterPath)
  123. {
  124.         NTSTATUS        status;
  125.                
  126.         DriverObject->DriverUnload = DriverUnload;
  127.        
  128.         InlineHook( g_orig_addr, (ULONG)fake_AtapiStartIo);
  129.        
  130.         status = STATUS_SUCCESS;
  131.         return status;
  132. }
复制代码

47

主题

265

回帖

8

精华

核心会员

积分
10349
 楼主| 发表于 2011-4-7 22:05:15 | 显示全部楼层
找不到一个快速的方法来得到AtapiStartIo的地址。

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2011-4-8 08:45:39 | 显示全部楼层
WPON/WPOFF

WP=weapon...??;P
我就是嗷嗷叫的老马了......

47

主题

265

回帖

8

精华

核心会员

积分
10349
 楼主| 发表于 2011-4-8 09:29:29 | 显示全部楼层
回复 马大哈 的帖子


找不到好方法啊~

280

主题

203

回帖

0

精华

版主

积分
1808
发表于 2011-4-8 09:42:06 | 显示全部楼层
回复 ywledoc 的帖子

您能解释一下这玩意有什么用吗?

47

主题

265

回帖

8

精华

核心会员

积分
10349
 楼主| 发表于 2011-4-8 10:09:00 | 显示全部楼层
回复 乔丹二世 的帖子
别的没什么,防止底层的,特定扇区的读写~

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2011-4-8 10:34:33 | 显示全部楼层
文件保护?
我就是嗷嗷叫的老马了......

47

主题

265

回帖

8

精华

核心会员

积分
10349
 楼主| 发表于 2011-4-8 11:45:23 | 显示全部楼层
本帖最后由 ywledoc 于 2011-4-8 11:51 编辑

回复 马大哈 的帖子

比文件系统更底层的文件保护~文件的读写,迟早要换成磁盘的读写,在磁盘(atapi.sys)的扇区层面上~做保护~
360用这个来防mbr读写,以前的穿还原也是在这层做手层。

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2011-4-8 14:53:30 | 显示全部楼层
我K,越做越底层了......到最后不会直接拦到硬盘指令级别去吧......

干脆做个硬件插在硬盘上,这下彻底过滤了,哈哈.
我就是嗷嗷叫的老马了......

47

主题

265

回帖

8

精华

核心会员

积分
10349
 楼主| 发表于 2011-4-8 15:02:32 | 显示全部楼层
回复 马大哈 的帖子

小哨兵还原卡好像曾经也被人穿过~

47

主题

265

回帖

8

精华

核心会员

积分
10349
 楼主| 发表于 2011-4-10 00:56:29 | 显示全部楼层
回复 naylon 的帖子

drvExt?
大牛~你想说什么呢?

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2011-4-11 12:15:59 | 显示全部楼层
回复 ywledoc 的帖子

naylon不是大牛,是神童哦,人家还木有成年呢。。。
还有一个核心会员叫xiaoly99,那个人更神了,小学还没有毕业就写了一大堆驱动了!!!
每逢我想到这里,都感到压力很大。。。

47

主题

265

回帖

8

精华

核心会员

积分
10349
 楼主| 发表于 2011-4-11 12:18:27 | 显示全部楼层
回复 Tesla.Angela 的帖子

naylon是神童我知道~
但是xiaoly99,小学还没毕业?!!!我去啊!!!!
他那边小学都是读20年的吧!

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2011-4-11 12:19:29 | 显示全部楼层
回复 ywledoc 的帖子

xiaoly真的小学没有毕业,12岁。。。

47

主题

265

回帖

8

精华

核心会员

积分
10349
 楼主| 发表于 2011-4-11 12:25:37 | 显示全部楼层
本帖最后由 ywledoc 于 2011-4-11 12:25 编辑

回复 Tesla.Angela 的帖子

你也让我的压力也大起来了~我小学电脑还不知道~

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2011-4-11 17:00:29 | 显示全部楼层
回复 ywledoc 的帖子

我小学时会用VBS。。。

47

主题

265

回帖

8

精华

核心会员

积分
10349
 楼主| 发表于 2011-4-11 19:23:38 | 显示全部楼层
回复 Tesla.Angela 的帖子

小学电脑都没摸过~家人对我玩电脑严防死打,就怕上瘾~

47

主题

265

回帖

8

精华

核心会员

积分
10349
 楼主| 发表于 2011-4-14 18:52:36 | 显示全部楼层
回复 naylon 的帖子

生病三天了,终于好点了~不是跟DrvExt里的StartIo不一样~

29

主题

134

回帖

4

精华

论坛元老

积分
5970
QQ
发表于 2011-5-18 13:57:35 | 显示全部楼层
这大家都什么人呢 我小学不知道电脑为何物
花落时想你
花开时你在哪里

7

主题

414

回帖

1

精华

铂金会员

积分
2173
发表于 2013-4-10 21:18:21 | 显示全部楼层
真的要好好研究一下。
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表