Quantcast
Channel: 看雪安全论坛
Viewing all articles
Browse latest Browse all 9556

【原创】浅谈系列之-Add New SSDT 长夜漫漫-看流星

$
0
0
:D:浅谈系列之OBJECT_HOOK
1.首先说一下这个无数大牛玩烂的SSDT
在以前对抗当中无非就是 inline hook
我就SSDT 跳到新地址,判断白话名
:D:你 inline hook 下面 我就Hook 你上面 构建原函数,组件新 规则
——————————————————————————————————————————
不过呢? 如果一个游戏检测SSDT表 未知SSDT hook就爆非法怎么办~ 这不是肿了吗?
:cool:思路构建新SSDT表 增加新函数~
正题开始~
我们如何来构建新表呢?
2.首先:我们要保持原来函数表的样子
因为SSDT中的 Index 地址是从0号开始
代码:

memcpy(NewSSDTServiceTableBase,KeServiceDescriptorTable->ServiceTableBase,(MyID-1)*4);
在XP 系列中 SSDT一个有2840-283
所以我们要插入比 284大的序列
PS:简单看一下SSDT

代码:

typedef struct ServiceDescriptorTable {
    PVOID  ServiceTableBase; //真正的系统服务地址表
    PULONG  ServiceCounterTable;//系统调用的记录,调用了多少次,在Check版本才有效
    ULONG  TableSize;//表的大小,Windows总共提供了多少个系统调用
    PUCHAR  ArgumentTable;//参数大小表
} ServiceDescriptorTable, *ServiceDescriptorTable;

接着写下面的代码:看上面就知道怎么做了不知道 拿windbg搞搞

代码:

memcpy(NewSSDTServiceTableBase,KeServiceDescriptorTable->ServiceTableBase,(MyID-1)*4); //Index Address=baseaddress+Index Number*4
        memcpy(NewSSDTParamTableBase,KeServiceDescriptorTable->ParamTableBase,MyID-1); 1你要不要无所谓
        NewSSDTServiceTableBase[MyID-1]=(ULONG)New_Funtion;
        NewSSDTParamTableBase[MyID-1]=ParametersNumber;
        KeServiceDescriptorTable->ServiceTableBase=NewSSDTServiceTableBase;
        KeServiceDescriptorTable->ParamTableBase=NewSSDTParamTableBase;
        KeServiceDescriptorTable->NumberOfServices=MyID;

:o:
对了还要去掉保护和开启保护
这里有一个问题
对于单核CPU来说 直接提升IRQL是没问题的
对于多核CPU 推荐采用 自旋锁

:D:如果你上面看明白了话一切都好办了~;):
见证努力的结果
附件 81658
:D:题目来了
临时会员只要写出KeServiceDescriptorTableShadow 新增几个函数就算完成作业就可以得到邀请码

:):参数分别为1,2,3,4
打印出 “看雪你好”:o:
附上源代码:

上传的图像
文件类型: jpg 12.jpg (105.6 KB)
上传的附件
文件类型: zip dd.zip (942 字节)

Viewing all articles
Browse latest Browse all 9556

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>