紫水晶编程技术论坛 - 努力打造成全国最好的编程论坛

 找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
楼主: Tesla.Angela

[新年礼物]最简的HIPS模型(RING0主动向RING3交互)(兼容WIN32/WIN64)

  [复制链接]

0

主题

26

帖子

0

精华

初来乍到

Rank: 1

积分
17
发表于 2022-4-6 14:54:22 | 显示全部楼层
学习学习。

6

主题

129

帖子

0

精华

论坛元老

Rank: 7Rank: 7Rank: 7

积分
5392
发表于 2022-4-20 11:33:07 | 显示全部楼层
其实我一直好奇,从R0传字符串给R3 ,用指针还是数组
struct SEND{
int number;
PCHAR Processname
}


struct SEND{
int number;
CHAR Processname[270];
}

用数组的话,可能会浪费或者不够,
用指针的话,等下R3接受的结构体里面,Processname是个内核地址,无法读取存在里面的 字符串

851

主题

3477

帖子

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

Rank: 125Rank: 125Rank: 125Rank: 125Rank: 125

积分
37093
 楼主| 发表于 2022-4-20 17:10:08 | 显示全部楼层
YOUBADBAD 发表于 2022-4-20 11:33
其实我一直好奇,从R0传字符串给R3 ,用指针还是数组
struct SEND{
int number;


如果真的是ProcessName或ProcessPath,那么用16/260字节的char数组即可。

如果要频繁传输海量不定长数据,那就用socket。

6

主题

129

帖子

0

精华

论坛元老

Rank: 7Rank: 7Rank: 7

积分
5392
发表于 2022-4-20 18:51:58 | 显示全部楼层
Tesla.Angela 发表于 2022-4-20 17:10
如果真的是ProcessName或ProcessPath,那么用16/260字节的char数组即可。

如果要频繁传输海量不定长数据 ...

是的,我有这样的打算,如果ioctrl解决不了,就直接readfile和writefile   或者socket等等

0

主题

39

帖子

0

精华

金牌会员

Rank: 4Rank: 4Rank: 4Rank: 4

积分
867
发表于 2022-8-30 19:56:42 | 显示全部楼层
谢谢分享 最近在写一个 刚好看看

0

主题

2

帖子

0

精华

初来乍到

Rank: 1

积分
12
发表于 2022-9-11 01:02:24 | 显示全部楼层
谢谢楼主分享

0

主题

9

帖子

0

精华

初来乍到

Rank: 1

积分
19
发表于 2022-11-24 14:59:31 | 显示全部楼层
查看如何主动

2

主题

63

帖子

0

精华

铜牌会员

Rank: 2Rank: 2

积分
58
发表于 2023-2-26 15:17:05 | 显示全部楼层

BOOLEAN BypassCheckSign(PDRIVER_OBJECT pDriverObject)
{
# ifdef _WIN64
        typedef struct _KLDR_DATA_TABLE_ENTRY
        {
                LIST_ENTRY listEntry;
                ULONG64 __Undefined1;
                ULONG64 __Undefined2;
                ULONG64 __Undefined3;
                ULONG64 NonPagedDebugInfo;
                ULONG64 DllBase;
                ULONG64 EntryPoint;
                ULONG SizeOfImage;
                UNICODE_STRING path;
                UNICODE_STRING name;
                ULONG   Flags;
                USHORT  LoadCount;
                USHORT  __Undefined5;
                ULONG64 __Undefined6;
                ULONG   CheckSum;
                ULONG   __padding1;
                ULONG   TimeDateStamp;
                ULONG   __padding2;
        } KLDR_DATA_TABLE_ENTRY, * PKLDR_DATA_TABLE_ENTRY;
# else
        typedef struct _KLDR_DATA_TABLE_ENTRY
        {
                LIST_ENTRY listEntry;
                ULONG unknown1;
                ULONG unknown2;
                ULONG unknown3;
                ULONG unknown4;
                ULONG unknown5;
                ULONG unknown6;
                ULONG unknown7;
                UNICODE_STRING path;
                UNICODE_STRING name;
                ULONG   Flags;
        } KLDR_DATA_TABLE_ENTRY, * PKLDR_DATA_TABLE_ENTRY;
# endif

        PKLDR_DATA_TABLE_ENTRY pLdrData = (PKLDR_DATA_TABLE_ENTRY)pDriverObject->DriverSection;
        pLdrData->Flags = pLdrData->Flags | 0x20;

        return TRUE;
}

不然无法调试 加载失败等

0

主题

52

帖子

0

精华

钻石会员

Rank: 6Rank: 6

积分
3863
发表于 2023-3-5 22:35:05 | 显示全部楼层
学习学习

0

主题

7

帖子

0

精华

初来乍到

Rank: 1

积分
7
发表于 2023-3-19 20:00:45 | 显示全部楼层
感谢分享
学习下
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

手机版|Archiver|紫水晶工作室 ( 粤ICP备05020336号 )

GMT+8, 2024-3-28 16:56 , Processed in 0.028064 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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