565710420 发表于 2011-7-26 13:53:33

大家有没有研究过WRK?不知你们是怎么编译的呢


我COPY了NtOpenProcess

其他应该都没错了 就剩下这函数了

error LNK2019: unresolved external symbol _ProbeForReadSmallStructure@12 referenced in function _HxNtOpenProcess@16


这函数有什么不妥吗

函数原型:

FORCEINLINE VOID ProbeForReadSmallStructure (IN PVOID Address,IN SIZE_T Size,IN ULONG Alignment);

如果你知道 麻烦你帮我解答下 感谢!

565710420 发表于 2011-7-26 14:10:10

我参考了别位前辈的以C++方式声明:extern"C" void _stdcall ProbeForWriteHandle(PVOID);
extern"C" void ProbeForReadSmallStructure(PVOID,ULONG,ULONG);
extern"C" NTSTATUS SeCreateAccessState(PVOID,PVOID,ULONG,PVOID);

而我用的是C语言:VOID ProbeForReadSmallStructure (IN PVOID Address,IN SIZE_T Size,IN ULONG Alignment);


NTSTATUS
SeCreateAccessState(
                                        __out PACCESS_STATE AccessState,
                                        __out PAUX_ACCESS_DATA AuxData,
                                        __in ACCESS_MASK DesiredAccess,
                                        __in PGENERIC_MAPPING GenericMapping
                                        );
ULONG
ObSanitizeHandleAttributes (
                                                        IN ULONG HandleAttributes,
                                                        IN KPROCESSOR_MODE Mode
                                                        );:'( 怎么错在哪里了啊 晕

Tesla.Angela 发表于 2011-7-26 14:26:54

没试过直接复制WRK的代码来编译。
不过楼主为了打开进程,直接pslookup+obopen就行了,何必这么麻烦呢?

565710420 发表于 2011-7-26 14:29:16

不稳定啊
安全性不高

Tesla.Angela 发表于 2011-7-26 14:30:50

565710420 发表于 2011-7-26 14:29 static/image/common/back.gif
不稳定啊
安全性不高

你以为复制ntopenprocess的安全性就高吗?
要安全性高不如直接搞镜像内核。。。

565710420 发表于 2011-7-26 14:34:06

呵呵 不觉吗 如果我打开的PID或者指针什么的无效 那不蓝屏了吗
当然要做些判断嘛
这位前辈用C++可以编译
http://www.m5home.com/bbs/thread-5504-1-2.html
不过我用C怎么就不可以了 晕

Tesla.Angela 发表于 2011-7-26 14:38:12

自己琢磨一下LNK2019错误:http://msdn.microsoft.com/zh-cn/library/799kze2z(VS.80).aspx

565710420 发表于 2011-7-26 14:47:26

Tesla.Angela 发表于 2011-7-26 14:38 static/image/common/back.gif
自己琢磨一下LNK2019错误:http://msdn.microsoft.com/zh-cn/library/799kze2z(VS.80).aspx

杯具 居然在里面找不到

Tesla.Angela 发表于 2011-7-26 14:58:13

565710420 发表于 2011-7-26 14:47 static/image/common/back.gif
杯具 居然在里面找不到

楼主你太死心眼了。。。
干嘛非要抓住一个方法不放呢。。。

ywledoc 发表于 2011-7-26 15:50:12

link error。跟编译器对函数名的处理有关系。
当c++与c文件混用易出现问题,extern "C"就是用来解决这种情况的。
当然函数名打错了,也是有问题的。
LZ可参见:http://baike.baidu.com/view/2814224.htm
c文件中只用extern,c++文件中才要extern "C"
最后,extern "C"到底对OBJ文件是如何影响的,希望有人解答下。

565710420 发表于 2011-7-26 15:52:59

ywledoc 发表于 2011-7-26 15:50 static/image/common/back.gif
link error。跟编译器对函数名的处理有关系。
当c++与c文件混用易出现问题,extern "C"就是用来解决这种情 ...

extern 不起作用。。。

565710420 发表于 2011-7-26 15:53:53

Tesla.Angela 发表于 2011-7-26 14:58 static/image/common/back.gif
楼主你太死心眼了。。。
干嘛非要抓住一个方法不放呢。。。

呵呵 情况所逼

我早已经有方法实现功能了 但是感觉很猥琐

所以想用其他方法啦

Tesla.Angela 发表于 2011-7-26 16:15:11

ywledoc 发表于 2011-7-26 15:50 static/image/common/back.gif
link error。跟编译器对函数名的处理有关系。
当c++与c文件混用易出现问题,extern "C"就是用来解决这种情 ...

最讨厌C/C++的这些烦人细节了。

565710420 发表于 2011-7-26 16:34:10

Tesla.Angela 发表于 2011-7-26 16:15 static/image/common/back.gif
最讨厌C/C++的这些烦人细节了。

哇 知己 我也是啊 很讨厌这些细节 总是分不清

Tesla.Angela 发表于 2011-7-26 17:11:40

那你就先用C++编译吧

ywledoc 发表于 2011-7-26 20:14:04

565710420 发表于 2011-7-26 15:52 static/image/common/back.gif
extern 不起作用。。。

不起作用是怎么个意思?

ywledoc 发表于 2011-7-26 20:15:02

Tesla.Angela 发表于 2011-7-26 16:15 static/image/common/back.gif
最讨厌C/C++的这些烦人细节了。

细节是烦人,但是不掌握好,有时候,很悲剧。特别是C++!

565710420 发表于 2011-7-26 21:04:09

ywledoc 发表于 2011-7-26 20:14 static/image/common/back.gif
不起作用是怎么个意思?

不起作用就是加上了还是老样子

565710420 发表于 2011-7-26 21:06:29

两位前辈可以告诉我这段代码是什么意思吗void Func()
{
    BYTE *pReadAddress = NULL;
    ULONG lReadSize = 0;
   

    if ( !NT_SUCCESS(GetReadAddress(&pReadAddress, &lReadSize)) )
    {
      
      return;
    }



}
//GetReadAddress函数
NTSTATUS GetReadAddress(BYTE **ppAddress, ULONG *pSize)
{
    NTSTATUS status = STATUS_UNSUCCESSFUL;
    if ( g_pReadAddress == NULL )
    {
      status = MyEnumKernelModule(
                "\\??\\c:\\windows\\system32\\Read.sys",
                (ULONG*)g_pReadAddress,
               &g_ReadSize);
      if (!NT_SUCCESS(status))
      {
            DbgPrint("Read is not loaded yet\n");
            return status;
      }
    }
    else
    {
      *ppAddress = g_pReadAddress;
      *pSize = g_ReadSize;
    }

    return STATUS_SUCCESS;
}
//MyEnumKernelModule函数

NTSTATUS MyEnumKernelModule(IN CHAR* str,OUT ULONG *moduleadd,OUT ULONG *modulesie)
{
    NTSTATUS status = STATUS_SUCCESS;
    ULONG   n       = 0;
    ULONG   i       = 0;
    PSYSTEM_MODULE_INFORMATION_ENTRY   module = NULL;
    PVOID   pbuftmp = NULL;
    ANSI_STRING    ModuleName1,ModuleName2;
    BOOLEANtlgstst= FALSE;

    status = ZwQuerySystemInformation(11, &n, 0, &n);

    pbuftmp = ExAllocatePool(NonPagedPool, n);

    status = ZwQuerySystemInformation(11, pbuftmp, n, NULL);

    module = (PSYSTEM_MODULE_INFORMATION_ENTRY)((PULONG )pbuftmp + 1 );

    RtlInitAnsiString(&ModuleName1,str);
    //
    n       = *((PULONG)pbuftmp );
    for ( i = 0; i < n; i++ )
    {
      RtlInitAnsiString(&ModuleName2,(PCSZ)&module->ImageName);
      if (RtlCompareString(&ModuleName1,&ModuleName2,TRUE) == 0)
      {
//            DbgPrint("MyEnumKernelModule:%s:%0X \n",ModuleName2.Buffer,module.Base);
            *moduleadd= (ULONG)module->Base;
            *modulesie= module->Size;
            tlgstst = TRUE;
            break;
      }
    }
    ExFreePool(pbuftmp);
    if (tlgstst == FALSE)
    {
      returnFAILED_TO_OBTAIN_FUNCTION_ADDRESSES;
    }
    return status;
}如果是枚举指定内核模块地址的话 怎么我加载了驱动 and Read.sys 在System32下还总是输出这句呢

DbgPrint("Read is not loaded yet\n");

ywledoc 发表于 2011-7-26 21:09:55

565710420 发表于 2011-7-26 21:06 static/image/common/back.gif
两位前辈可以告诉我这段代码是什么意思吗如果是枚举指定内核模块地址的话 怎么我加载了驱动 and Read.sys 在 ...

可能是ZwQuerySystemInformation调用出错了吧。具体要调试了。

565710420 发表于 2011-7-26 22:27:30

ywledoc 发表于 2011-7-26 21:09 static/image/common/back.gif
可能是ZwQuerySystemInformation调用出错了吧。具体要调试了。

噢 很多函数我都不懂
页: [1]
查看完整版本: 大家有没有研究过WRK?不知你们是怎么编译的呢