首页
社区
课程
招聘
[求助]易语言驱动 转 C 驱动。。。
发表于: 2010-8-6 22:30 7940

[求助]易语言驱动 转 C 驱动。。。

2010-8-6 22:30
7940
易语言部分。。

.数据类型 IRP, , 32 结构只写了一部分
    .成员 Type, 短整数型
    .成员 Size, 短整数型
    .成员 MdlAddress, 整数型
    .成员 Flags, 整数型
    .成员 AssociatedIrp, 整数型
    .成员 ThreadListEntry, LIST_ENTRY
    .成员 IoStatus, IO_STATUS_BLOCK


.版本 2

_Read_IRP (Irp, pIRP, 32)
_Read_Int (pIrpStack, pIRP + 96, 4)
_Read_Int (uIoControlCode, pIrpStack + 12, 4)
pIoBuffer = Irp.AssociatedIrp
_Read_Int (uInSize, pIrpStack + 8, 4)
_Read_Int (uOutSize, pIrpStack + 4, 4)
.如果 (uIoControlCode = 1024 或 uIoControlCode = 2048)
    _Read_内存结构 (参数, pIoBuffer, 12)
    .如果真 (uIoControlCode = 1024)
        DbgPrint (“[内存读写]收到写内存指令”)
        DbgPrintInt (“[内存读写]PID 0x%08X”, 参数.PID)
        DbgPrintInt (“[内存读写]目标地址 0x%08X”, 参数.读写地址)
        .如果 (PsLookupProcessByProcessId (参数.PID, EProcess) < 0)  ' 取EProcess的地址
            DbgPrint (“无法取得进程EProcess地址”)
            status = #STATUS_UNSUCCESSFUL
        .否则
            KeStackAttachProcess (EProcess, APC)  ' 把进程附加到内存里
            memcpy (参数.读写地址, pIoBuffer + 12, 参数.读写长度)  ' 1024 写入数据
            KeUnstackDetachProcess (APC)


转的  C   。。
#pragma pack(1)
typedef struct _DEVICE_PARAS
{
        ULONG PID;
        PVOID Address;
        ULONG Length;
        BYTE Buffer[];
}DEVICE_PARAS,*PDEVICE_PARAS;
#pragma pack()
	NTSTATUS status = STATUS_SUCCESS;	
	PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(pIrp);//得到当前堆栈
	//ULONG cbin = stack->Parameters.DeviceIoControl.InputBufferLength;//得到输入缓冲区大小
	//ULONG cbout = stack->Parameters.DeviceIoControl.OutputBufferLength;//得到输出缓冲区大小
	ULONG code = stack->Parameters.DeviceIoControl.IoControlCode;//得到IOCTL码

	//局部变量
	PVOID * buff;
	DEVICE_PARAS para;
	PEPROCESS EProcess;
	KAPC_STATE apc;
	if(code == 1024 || code ==2048)
	{
		buff = pIrp->AssociatedIrp.SystemBuffer;
		memcpy(¶, buff, 12);
		if (PsLookupProcessByProcessId (para.PID, &EProcess) < 0)
		{
			KdPrint(("无法取得进程EProcess地址! \n"));
		}
		else
		{

			KeStackAttachProcess( EProcess, &apc);
			if( code == 1024)
			{
				memcpy ( para.Address , buff +12 , para.Length); //写
			}





总是不行。。。。写入的时候   总是写入的不是想要的内容

比如我写入   02000000    可是写入地址那里显示的   XXXXXXXX   这样的一个地址。

可是我到那个地址那里看。。数据显示空

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 1
支持
分享
最新回复 (4)
雪    币: 178
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
E语言转C。。由C转E语言再转回C,只能膜拜
2010-8-7 11:04
0
雪    币: 563
活跃值: (95)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
02000000  改成16进制看看
2010-8-8 08:17
0
雪    币: 227
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4


02000000 改成16进制看看


我写入的是  INT  2

我在CE里面看。。。应该就是  2 呢。

我测试过用  E  写的驱动可以,,,,我改成  C  的就不行呢。

我主要想在重新编译 一个  64位的驱动   另外在加些功能

继续求助。
2010-8-8 16:14
0
雪    币: 773
活跃值: (442)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
5
论坛上有 驱动读写内存,忘了那篇,网上也是一大堆,一般情况下都是由C转E的,你由E转C, 太XXX了
2010-8-9 20:28
0
游客
登录 | 注册 方可回帖
返回
//