首页
社区
课程
招聘
[旧帖] [求助]这段汇编代码谁给详细解释一下,我不会算地址偏移! 0.00雪花
发表于: 2009-4-1 08:19 3069

[旧帖] [求助]这段汇编代码谁给详细解释一下,我不会算地址偏移! 0.00雪花

2009-4-1 08:19
3069
///////////////声明Native API///////////////////////////////////////   
NTSYSAPI NTSTATUS NTAPI ZwQuerySystemInformation(   
        IN ULONG SystemInformationClass,   
        IN PVOID SystemInformation,   
        IN ULONG SystemInformationLength,   
        OUT PULONG ReturnLength);   

typedef NTSTATUS (*ZWQUERYSYSTEMINFORMATION)(   
        IN ULONG SystemInformationClass,   
        IN PVOID SystemInformation,   
        IN ULONG SystemInformationLength,   
        OUT PULONG ReturnLength);   

NTSTATUS MyZwQuerySystemInformation(   
                                                                        IN ULONG SystemInformationClass,   
                                                                        IN PVOID SystemInformation,   
                                                                        IN ULONG SystemInformationLength,   
                                                                        OUT PULONG ReturnLength);   

/////////////////定义ntoskrnl.exe的服务表结构////////////////////////////////////////////////   
typedef struct _ServiceDescriptorEntry {     
        unsigned int *ServiceTableBase;   
        unsigned int *ServiceCounterTableBase;   
        unsigned int NumberOfServices;   
        unsigned char *ParamTableBase;   
}ServiceDescriptorTableEntry, *PServiceDescriptorTableEntry;   

////////////////////定义所用到的全局变量///////////////   
extern PServiceDescriptorTableEntry KeServiceDescriptorTable;   
ZWQUERYSYSTEMINFORMATION OldZwQuerySystemInformation;   
unsigned long OldCr0;   
UNICODE_STRING DeviceNameString;   
UNICODE_STRING LinkDeviceNameString;   

//////////////////////Hook ZwQuerySystemInformation/////////////////////////////////////////////////   

        _asm{   
                cli;   
                mov eax,cr0   
                        mov OldCr0,eax   
                        and eax,0fffeffffh    //cr0位16:WP 写保护(CR0 的第16 位)。置1 则禁止管理级程序写用户级的只读页,置0 则允许管理级程序写用户级的只读页。这个标志是用来在创建(forking)一个新进程时协助实现写时复制(COW——copy on write)
                                              //的,在UNIX 操作系统中就是如此。
                        mov cr0,eax   
        }   
        _asm{   

                mov     ecx, dword ptr [ZwQuerySystemInformation];   
                mov     edx, [ecx+1];   
                mov     eax, dword ptr [KeServiceDescriptorTable];   
                mov     esi, [eax];   
                mov     edx, [esi+edx*4];   
                mov     dword ptr [OldZwQuerySystemInformation], edx   
                mov     ecx, [ecx+1]   
                mov     eax, [eax]   
                mov     dword ptr [eax+ecx*4], offset MyZwQuerySystemInformation;   

        }   
        _asm   
        {   
                mov eax,OldCr0   
                        mov cr0,eax   
                        sti;   
        }

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

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
mov     ecx, dword ptr [ZwQuerySystemInformation];   
    mov     edx, [ecx+1];   获取 index
    mov     eax, dword ptr [KeServiceDescriptorTable];   
    mov     esi, [eax];   
    mov     edx, [esi+edx*4];   获取地址
    mov     dword ptr [OldZwQuerySystemInformation], edx   
    mov     ecx, [ecx+1]   
    mov     eax, [eax]   
    mov     dword ptr [eax+ecx*4], offset MyZwQuerySystemInformation;、、写入hook
2009-4-1 08:22
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不好意思,能不能再详细说一点儿,我还是不太明白,汇编基础太差
2009-4-1 10:51
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
你去下个 www.sysersoft.com

慢慢调试,汇编的东西,只能慢慢对照源码调
2009-4-1 10:54
0
游客
登录 | 注册 方可回帖
返回
//