首页
社区
课程
招聘
[求助]重载win7内核出现问题
发表于: 2013-8-6 01:30 10596

[求助]重载win7内核出现问题

2013-8-6 01:30
10596
现在的大多资料都是以XP SP2为基础,但我却用win7sp1来做实践。
    加载PE镜像就不多说了,重定位暂且全都搞到原内核吧。
    偶尔会蓝屏,发现好像是Safe SEH在作怪,虽然XP SP2就已支持,但未使用。
    这会导致POOL代码在产生异常时即使有SEH也不会捕获异常,从而蓝屏。
    从WRR得知,LDR的结构应该是:
typedef struct _KLDR_DATA_TABLE_ENTRY
{
  LIST_ENTRY InLoadOrderLinks;
  PVOID ExceptionTable;
  ULONG ExceptionTableSize;
  PVOID GpValue;
  PNON_PAGED_DEBUG_INFO NonPagedDebugInfo;
  PVOID DllBase;
  PVOID EntryPoint;
  ULONG SizeOfImage;
  UNICODE_STRING FullDllName;
  UNICODE_STRING BaseDllName;
  ULONG Flags;
  USHORT LoadCount;
  USHORT __Unused5;
  PVOID SectionPointer;
  ULONG CheckSum;
  PVOID LoadedImports;
  PVOID PatchInformation;
}LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY;

    内核异常产生时RtlIsValidHander中检查PsLoadedModuleList,检查EIP属于哪一个模块,再从ExceptionTable里找当前的Exception Hander是否吻合,找不到即不执行此Hander。
    好吧,自己添加一个LDR到PsLoadedModuleList,这里算是解决了一个问题。
    至此,R0下算是稳定一些了,目前我还没发现蓝屏迹象,但R3程序就不稳定了。
    驱动执行后,遨游3浏览器运行即崩溃,代码0xC0000005即内存访问异常,估计是R3下的SEH没有得到正确的处理
    忽然想起A盾,打开后执行内核安全模式,遨游3正常,兴冲冲的跑去问V大,答曰:“自己撸”,又答曰:“据说是因为重定位有问题导致的”
    拜托,来点有意义的提示啊!看A盾的代码没发现什么特别之处,重定位也是全部搞到原模块。
    开着A盾有点事离开一会,回来后发现QQ崩了,莫非A盾在win7的内核重载上也有问题?
    还是自己研究研究吧,既然是R3的内存访问异常,那么CPU首先干什么呢?查资料,应该是走系统中断表,索引0x0D,即General Protection(原先以为是PageFault,但看WRK没发现哪里有异常分发),这里就不走KiFastCallEntry了,所以我也没法执行重定向到新内核
    不过这不碍事,继续看WRK,一堆参数检查,内存检查,如果是R3出错则转移到用户空间的ntdll!KiUserExceptionDispatcher去执行,此时为FirstChance,因为R3上有SEH,KiUserExceptionDispatcher也获取到了Hander,执行之,返回1,即EXCEPTION_EXECUTE_HANDLER,奇怪的是没有执行ZwContinue,又去找SEH,结果在异常处理中又异常了,无解,程序退出。

    在这里我想知道,R0下做到我这样够不够,还是在内核中有东西我没有处理?按道理说R0和R3的辑是代码逻分离的,那么我把内核换了(IDT没换)会不会影响R3的什么东西?再说了,R3内存异常后CPU去找IDT,又没调用sysenter,还是执行的原内核代码,为什么会导致程序崩溃?!

各位小菜、大菜、小鸟、大鸟、小牛、大牛、大犇,知道的帮忙解答一下吧,稍微给点提示也行。

[峰会]看雪.第八届安全开发者峰会10月23日上海龙之梦大酒店举办!

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 160
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
补充一点,遨游3崩溃,IE8正常,就是说有的程序正常,有的程序崩溃(即SEH未处理)
哎,其实通过这一点也能看出来一个程序的代码质量。
2013-8-6 01:36
0
雪    币: 68
活跃值: (104)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
mark 看不懂 以后学习
2013-8-6 08:23
0
雪    币: 8835
活跃值: (2394)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
4
真相就是重定位有问题。呵呵~~
2013-8-6 09:04
0
雪    币: 219
活跃值: (753)
能力值: (RANK:290 )
在线值:
发帖
回帖
粉丝
5
~忽然看到老V~
2013-8-6 09:22
0
雪    币: 160
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
经过折半法过滤SSDT,最后定位到NtCreateSection函数,即不重定位此函数遨游3正常,也不知道对不对,继续研究,实在不行不碰这个函数。
2013-8-6 10:49
0
雪    币: 46
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
忽然看到唐诗诗老V
2013-8-6 12:01
0
雪    币: 263
活跃值: (71)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我在win7 x64位下重载 蛋碎了一地
2013-8-7 00:55
0
雪    币: 160
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
现在回头再看这个帖子,早已解决,说说吧
不是重定位问题,也不是程序问题
是重载内核的问题,内核会对不同的CPU可能做优化,直接重载并重定位是有缺陷的
好了就提示那么多吧。。。
2013-11-15 03:00
0
雪    币: 110
活跃值: (34)
能力值: (RANK:50 )
在线值:
发帖
回帖
粉丝
10
这样多不好~
不同类型的系统确实会对应不同的内核文件,但是首先目前的硬件环境基本都是多处理器+高级电源管理了,其次重载的内核文件本身即为系统所使用的内核。
或许……是Windows NT6.x在SystemInit阶段做了一些奇怪的事情?
2013-11-16 11:22
0
雪    币: 18
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
楼主想请问你你是怎么加这个结构的?异常表指针值怎么设置啊?
另外这个结构怎么跟windows官方结构不一样呢?
2014-7-2 21:25
0
游客
登录 | 注册 方可回帖
返回
//