首页
社区
课程
招聘
[求助]一个内核地址访问的问题,求助大牛,大牛们快来看看
发表于: 2013-4-15 01:49 8760

[求助]一个内核地址访问的问题,求助大牛,大牛们快来看看

2013-4-15 01:49
8760
看了虚拟机和实体机貌似一般来说内核文件的基地址都是0x804d8000,测试就都写死。
for ( int i = 0x804d8000; i < 0x806E5000(这个值是基地址+ 大小的和); i++ )
    {
       // DbgPrint("地址 = %x",i);
        if ( *(DWORD*)i == c1_PsCrPr )
        {
            DbgPrint("找到了 地址 %x",i);
            continue;
        }
    }
这样的一段代码虚拟机不会有问题,而在实体机中这一段代码却是蓝屏了,i的地址貌似我有一次随手用windebug随便查看了几处地址后发现,在0x804d8000 和0x806E5000 的区间内,有一些地址是无法访问的,正是这样的地址导致了蓝屏。 ,虚拟机和实体机系统都是一样的xp sp3,
我一开始怀疑的是PAE选项是否开启的问题,可是貌似好像也不是..

不知道是不是还跟其他的一些选项会有关系。

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (24)
雪    币: 10
活跃值: (231)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
呼叫大牛阿, 这问题郁闷了小弟好久了阿。  感觉来说应该是什么选项的问题, 因为虚拟机里没事,实体机有问题,那应该就是选项哪里不同了, 可问题是什么选项 搞了老半天了也不知道。惆怅啊---
2013-4-15 02:06
0
雪    币: 1392
活跃值: (4872)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
3
我曾经测试是在虚拟机内有问题。在实体机没问题。好像问题是 我要搜索的特征码内存中不存在,假设是内核中的函数a,WIN32对应函数是b.我先搜a的特征码,居然在内核中不存在,但是我R3调用一次函数b,然后就可以找到了。不知道是不是这个问题。
2013-4-15 09:01
0
雪    币: 371
活跃值: (72)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
自己用 MmIsAddressValid扫描一下不就行了???
或者用A盾的MmIsAddressValidEx强力扫描一下,就明白是不是内存不存在的原因了~~~
2013-4-15 09:09
0
雪    币: 371
活跃值: (72)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
这种代码绝对不能用于商品中
2013-4-15 09:15
0
雪    币: 264
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
还在努力学习中,期待有天能解答类似问题
2013-4-15 09:26
0
雪    币: 608
活跃值: (643)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
为什么要硬编码呢,内核加载地址不同语言的都不一样的
放着ZwQuerySystemInformation函数不用,非用硬编码
2013-4-15 09:46
0
雪    币: 10
活跃值: (231)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
并不是这样的, 我的感觉是并非是特征码不存在的原因, 而是说内核模块映射的基地址 和 映射 的大小 这一段区间的 地址, 有的是不能访问的, 按理说这一段区间是应该可以访问的 ,因为访问的大小在内核文件的镜像大小的那个区间内。。
  使用硬编码这些都不用在意,只是为了用于测试方便阿。重点的是这个问题 , 我很怀疑的是是不是跟某个选项是否开启有关系。
2013-4-15 11:54
0
雪    币: 10
活跃值: (231)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
就算特征码不存在, 那也应该在for循环到头就会退出了 ,而并没有到头,就退出是 蓝屏了 。
  那么就说明并不是特征码不存在的原因导致的。 而是这段区间中有的地址并不能访问。
     而这样的一段区间 我在虚拟机里是都可以访问的,而实体机却不行,
所以我怀疑的是什么选项没有开启的问题。
2013-4-15 11:57
0
雪    币: 10
活跃值: (231)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
这样好像挺神奇的样子,没试过. 按理说不应该这样阿, 因为虚拟机内我也没有任何这样的调用的,但还就是找到了,
我那段写的代码 应该是如果即使是特征码不存在, 那也不应该会蓝屏阿, 应该是在for循环到头就退出了才是。
   问题就是出现在 这一段区间中有地址是不能访问的,而这一段区间是内核文件映射的基地址 + 大小的那一段区间, 这样的一段区间为什么会这样呢,想不通了
2013-4-15 12:02
0
雪    币: 1392
活跃值: (4872)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
11
那一段是不是属于同一个文件哦。如果不是同一个文件很可能中间会有断开的地方
2013-4-15 12:07
0
雪    币: 10
活跃值: (231)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
这个回答挺好,我试试看.
2013-4-15 12:09
0
雪    币: 115
活跃值: (46)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
13
貌似不是每个物理地址都能读到,在KD里反汇编了下,虽然地址在范围内,但却是没显示
猜测内核之所以有重定位与这个也有关
2013-4-15 12:53
0
雪    币: 10
活跃值: (231)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
MmIsAddressValidEx
MmIsAddressValid

这两个函数都试了,貌似还是不行, 函数确实对???这类的内存会返回一个0值,但是返回1值内的一些内存貌似还是有些不能访问的问题,汗,真心蛋疼

     for ( int i = 0x804d8000; i < 0x806E5000; i++ )
     {
         BOOL is = MmIsAddressValidEx((DWORD*)i);
         if ( is == 1 )
         {
             if ( MmIsAddressValid((DWORD*)i) )
             {
                 //能访问
                 DbgPrint("能访问 地址 %x",i);
                 if ( *(DWORD*)i == c1_PsCrPr )
                 {
                     DbgPrint("找到了 地址 %x",i);
                 }
             }
         }
         else
         {
            
             DbgPrint("不能访问");
             i += 4;
         }
2013-4-15 13:08
0
雪    币: 10
活跃值: (231)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
15
按理说那段内存应该是属于同一个文件的映射后的内存才对,因为基地址是内核文件映射的基地址 而大小也是映像大小。
2013-4-15 13:10
0
雪    币: 10
活跃值: (231)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
16
访问的都是本机实体机的, 理应不应该会存在重定位问题阿,我只是想要取那地址的值做个判断而已的
2013-4-15 13:15
0
雪    币: 115
活跃值: (46)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
17
先尝试能不能读出字节吧
同样也测测VM是否有不可访问的内存吧

不好意思,这里多按了下发帖
2013-4-15 19:49
0
雪    币: 115
活跃值: (46)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
18
个人觉得要不就是没使用的内存,要不就是不能Read
暂时先使用枚举内存NT函数好些

蓝屏代码会给你帮助
2013-4-15 19:50
0
雪    币: 3836
活跃值: (4142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
扯弟。。。你这代码实在是太蛋疼了。。。。话说MmIsAddressValid和MmIsAddressValidEx在某些时候也不准确,本来可以访问的内存他居然返回false。。。还是用mj的物理内存对比法比较实用。。。。
2013-4-15 23:23
0
雪    币: 3836
活跃值: (4142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
分页啊。。。。。。。。。。。。。。。。。
2013-4-15 23:26
0
雪    币: 228
活跃值: (115)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
21
内存被换出了啊 ...不安全访问啊.,.各种叉叉..
2013-4-15 23:36
0
雪    币: 10
活跃值: (231)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
22
分页是很可能的,也有想过这问题,可就是不是很确定。
MmIsAddressValidEx 这个函数话说检测的真心不准确阿, A盾里A出来的代码..
2013-4-15 23:52
0
雪    币: 266
活跃值: (33)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
硬编码的话,需要注意,debug模式下的内核和正常的不一样。
2013-4-18 16:36
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
24
[QUOTE=诶一;1165613]for ( int i = 0x804d8000; i < 0x806E5000; i++ )
     {
         BOOL is = MmIsAddressValidEx((DWORD*)i);
         if ( is == 1 )
         {
             if ( MmIsAddressValid((DWORD*)i) )
             {
                 //能访问
                 DbgPrint("能访问 地址 %x",i);
                 if ( *(DWORD*)i == c1_PsCrPr )
                 {
                     DbgPrint("找到了 地址 %x",i);
                 }
             }
         }
         else
         {
            
             DbgPrint("不能访问");
             i += 4;
         } [/QUOTE]

红色部分是什么情况?看着很别扭,为啥不是  MmIsAddressValidEx((PVOID)i)

自己编译吧:

#include <ntddk.h>

//卸载函数
VOID Unload (IN PDRIVER_OBJECT DriverObject)
{
	DbgPrint("卸载完成!\n");
}
//入口函数
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath)
{
	PUCHAR i;
	BOOLEAN retOK;
	DriverObject->DriverUnload = Unload;


	for ((ULONG_PTR)i = 0x804d8000; (ULONG_PTR)i < 0x806E5000; i++ )
	{
		__try{
			retOK = MmIsAddressValid((PVOID)i);
			if (retOK == TRUE)
			{
				if (MmIsAddressValid((PVOID)i))
				{
					//能访问
					DbgPrint("能访问 地址 %x\r\n",i);

					if (*i == 0xe9 )
					{
						DbgPrint("找到了 地址 %x\r\n",i);
					}
				}
			}
			else{
				DbgPrint("不能访问\r\n");
				(ULONG_PTR)i += 4;
			}
		}__except(EXCEPTION_EXECUTE_HANDLER){
			DbgPrint("Exception:%08x\n",GetExceptionCode());
			break;
		}
	}
	return STATUS_SUCCESS;
}
2013-4-18 16:54
0
雪    币: 10
活跃值: (231)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
25
红色我也不知道,咋回事, 貌似打上去后就成这样了。
  已经有个朋友告诉了我解决方法,是锁定分页或者MmDbgCopyMemory用这个函数,不过还没弄过..ddk里的说明说的就是MmIsAddressValidEx即时返回true,也不一定这个内存是可以访问的。
2013-4-18 17:34
0
游客
登录 | 注册 方可回帖
返回
//