吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5674|回复: 19
收起左侧

[其他原创] 【内核编程】电焊工自学内核;

[复制链接]
555hrc 发表于 2017-6-20 08:44
本帖最后由 wushaominkk 于 2018-5-7 11:05 编辑

学了很长世间内核,由于基础差  一开始 看的脑袋大  在内核级 混了一年依然啥也不会   但明白了该怎么写 但是由于基础差C语言都忘得差不多了 写出来的代码总是有错误,
下面贴一个 自己写的 inline 代码  有问题  我也找不出是哪里错了   MDL   inline hook  和一般的那种 设置CR0 的有点区别
[C++] 纯文本查看 复制代码
#include<ntddk.h>
PULONG VA = { 0 };
ULONG VB;
typedef  struct ServiceDescriptorEntry {
        unsigned int *ServiceTableBase;
        unsigned int *ServiceCounterTableBase;
        unsigned int NumberOfServices;
        unsigned char *ParamTableBase;
}SSDT;

_declspec(dllimport) SSDT KeServiceDescriptorTable;

VOID Unload(PDRIVER_OBJECT driver)
{
}

VOID MY_CODE()
{
        KdPrint(("%s",(CHAR*) PsGetCurrentProcess() + 0x16c));
}
__declspec(naked)
VOID MY_JMP_fuction()
{

        _asm {
                
                
                pushad
                call MY_CODE
                popad
                mov    ecx, dword ptr[ebp + 14]
                mov    edx, dword ptr[ebp + 10]
                jmp VB

        }
}

NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING STRING)
{
#if DBG
        _asm int 3;
#endif

        
        CHAR source_copy[6];
        PULONG Table_Base = { 0 };
        CHAR MY_jmp[6];
        PMDL P_mdl;
        ULONG length = 1024;
        ULONG jmp_length;
        PULONG VA_address;
        ULONG VC;

        Table_Base =(PULONG) KeServiceDescriptorTable.ServiceTableBase[190];
        P_mdl =IoAllocateMdl((PVOID)Table_Base, length, FALSE, FALSE, NULL);
        MmBuildMdlForNonPagedPool(P_mdl);
        MmMapLockedPagesSpecifyCache(P_mdl, KernelMode, MmCached, NULL, FALSE, HighPagePriority);
        P_mdl->MdlFlags |= MDL_MAPPED_TO_SYSTEM_VA;
        VA_address=MmGetSystemAddressForMdlSafe(P_mdl, HighPagePriority);
        //VA = (PULONG)(((ULONG)VA_address) + 0x13);
        VA = (PULONG)((ULONG)VA_address + 0x13);

        VB = (ULONG)(((ULONG)VA )+ 0x6);
        VC = VB;
        jmp_length = (ULONG)MY_JMP_fuction - ((ULONG)VA) - 0x6;
        MY_jmp[0] = 0x90;
        MY_jmp[1] = 0xE9;
        *(PULONG)&MY_jmp[2] = (ULONG)jmp_length;
        RtlCopyMemory((VOID*)(source_copy), (VOID*)VA, 6); //拷贝源 地址处的代码
        RtlCopyMemory((VOID*)VA, MY_jmp, 6);//写入跳转代码 
        

        driver->DriverUnload = Unload;
        return STATUS_SUCCESS;

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 555hrc 发表于 2017-6-21 21:13
本帖最后由 555hrc 于 2017-6-21 21:26 编辑
s3233431 发表于 2017-6-20 10:43
VOID MY_JMP_fuction()
{

由于 inline hook 要做的 就是在原 内核函数的 反汇编内  加入跳转到自己的代码  也就是要加入一句 jmp 我们的函数地址  这句话 占用5个字节   那 我们就要把原来内核函数的代码改为  这个 jmp  函数地址  但是这样破坏了原来函数的 栈  和 运算  所以 必须 要 在我们自己内的函数 实现 一下 在调回到   内核 被我们修改的下一句代码
  这段代码 是有问题的 代码   问题我已经找到 下面放出   完整的代码 不过  测试   在打开xuetr的时候不知道为什么不兼容 还是怎么得  反正就是无法打开xuetr 一旦打开就会   计算机 就会进入   假死状态  其他的 程序 还是没有问题的  我已经做好 详细注释  

新建文本文档 (2).txt

2.16 KB, 下载次数: 1, 下载积分: 吾爱币 -1 CB

s3233431 发表于 2017-6-20 10:43
VOID MY_JMP_fuction()
{

        _asm {
               
               
                pushad
                call MY_CODE
                popad
                mov    ecx, dword ptr[ebp + 14]
                mov    edx, dword ptr[ebp + 10]

                jmp VB

        }
}

这段我没看懂
shaddwwalker 发表于 2017-6-20 09:03
圣城至尊 发表于 2017-6-20 09:08
写的太好了,妈呀,就是俺看不懂啊
While_Shark 发表于 2017-6-20 09:14
厉害厉害呀
waweiggfnh 发表于 2017-6-20 09:29
这个是用VB写的
伤or悲 发表于 2017-6-20 09:38
我就只能看看
弩哥一怒为红颜 发表于 2017-6-20 09:59
小工干三天,不如焊工点一点,焊工赚得多
sonnenschein 发表于 2017-6-20 10:36
厉害厉害呀
花生土豆 发表于 2017-6-20 13:33
不明真相的围观群众路过……&#645;(&#180;&#9684;&#3178;&#9684;)&#643;
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 22:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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