找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 20086|回复: 20

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

 火... [复制链接]

4

主题

43

回帖

0

精华

铜牌会员

积分
85
发表于 2011-7-26 13:53:33 | 显示全部楼层 |阅读模式

我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);

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

4

主题

43

回帖

0

精华

铜牌会员

积分
85
 楼主| 发表于 2011-7-26 14:10:10 | 显示全部楼层
我参考了别位前辈的以C++方式声明:
  1. extern"C" void _stdcall ProbeForWriteHandle(PVOID);
  2. extern"C" void ProbeForReadSmallStructure(PVOID,ULONG,ULONG);
  3. extern"C" NTSTATUS SeCreateAccessState(PVOID,PVOID,ULONG,PVOID);

复制代码
而我用的是C语言:
  1. VOID ProbeForReadSmallStructure (IN PVOID Address,IN SIZE_T Size,IN ULONG Alignment);


  2. NTSTATUS
  3. SeCreateAccessState(
  4.                                         __out PACCESS_STATE AccessState,
  5.                                         __out PAUX_ACCESS_DATA AuxData,
  6.                                         __in ACCESS_MASK DesiredAccess,
  7.                                         __in PGENERIC_MAPPING GenericMapping
  8.                                         );
  9. ULONG
  10. ObSanitizeHandleAttributes (
  11.                                                         IN ULONG HandleAttributes,
  12.                                                         IN KPROCESSOR_MODE Mode
  13.                                                         );
复制代码
:'( 怎么错在哪里了啊 晕

857

主题

2632

回帖

2

精华

管理员

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

积分
36130
发表于 2011-7-26 14:26:54 | 显示全部楼层
没试过直接复制WRK的代码来编译。
不过楼主为了打开进程,直接pslookup+obopen就行了,何必这么麻烦呢?

4

主题

43

回帖

0

精华

铜牌会员

积分
85
 楼主| 发表于 2011-7-26 14:29:16 | 显示全部楼层
不稳定啊
安全性不高

857

主题

2632

回帖

2

精华

管理员

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

积分
36130
发表于 2011-7-26 14:30:50 | 显示全部楼层
565710420 发表于 2011-7-26 14:29
不稳定啊
安全性不高


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

4

主题

43

回帖

0

精华

铜牌会员

积分
85
 楼主| 发表于 2011-7-26 14:34:06 | 显示全部楼层
呵呵 不觉吗 如果我打开的PID或者指针什么的无效 那不蓝屏了吗
当然要做些判断嘛
这位前辈用C++可以编译
http://www.m5home.com/bbs/thread-5504-1-2.html
不过我用C怎么就不可以了 晕

857

主题

2632

回帖

2

精华

管理员

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

积分
36130
发表于 2011-7-26 14:38:12 | 显示全部楼层

4

主题

43

回帖

0

精华

铜牌会员

积分
85
 楼主| 发表于 2011-7-26 14:47:26 | 显示全部楼层
Tesla.Angela 发表于 2011-7-26 14:38
自己琢磨一下LNK2019错误:http://msdn.microsoft.com/zh-cn/library/799kze2z(VS.80).aspx

杯具 居然在里面找不到

857

主题

2632

回帖

2

精华

管理员

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

积分
36130
发表于 2011-7-26 14:58:13 | 显示全部楼层
565710420 发表于 2011-7-26 14:47
杯具 居然在里面找不到

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

47

主题

265

回帖

8

精华

核心会员

积分
10349
发表于 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文件是如何影响的,希望有人解答下。

4

主题

43

回帖

0

精华

铜牌会员

积分
85
 楼主| 发表于 2011-7-26 15:52:59 | 显示全部楼层
ywledoc 发表于 2011-7-26 15:50
link error。跟编译器对函数名的处理有关系。
当c++与c文件混用易出现问题,extern "C"就是用来解决这种情 ...

extern 不起作用。。。

4

主题

43

回帖

0

精华

铜牌会员

积分
85
 楼主| 发表于 2011-7-26 15:53:53 | 显示全部楼层
Tesla.Angela 发表于 2011-7-26 14:58
楼主你太死心眼了。。。
干嘛非要抓住一个方法不放呢。。。

呵呵 情况所逼

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

所以想用其他方法啦

857

主题

2632

回帖

2

精华

管理员

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

积分
36130
发表于 2011-7-26 16:15:11 | 显示全部楼层
ywledoc 发表于 2011-7-26 15:50
link error。跟编译器对函数名的处理有关系。
当c++与c文件混用易出现问题,extern "C"就是用来解决这种情 ...

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

4

主题

43

回帖

0

精华

铜牌会员

积分
85
 楼主| 发表于 2011-7-26 16:34:10 | 显示全部楼层
Tesla.Angela 发表于 2011-7-26 16:15
最讨厌C/C++的这些烦人细节了。

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

857

主题

2632

回帖

2

精华

管理员

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

积分
36130
发表于 2011-7-26 17:11:40 | 显示全部楼层
那你就先用C++编译吧

47

主题

265

回帖

8

精华

核心会员

积分
10349
发表于 2011-7-26 20:14:04 | 显示全部楼层
565710420 发表于 2011-7-26 15:52
extern 不起作用。。。

不起作用是怎么个意思?

47

主题

265

回帖

8

精华

核心会员

积分
10349
发表于 2011-7-26 20:15:02 | 显示全部楼层
Tesla.Angela 发表于 2011-7-26 16:15
最讨厌C/C++的这些烦人细节了。

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

4

主题

43

回帖

0

精华

铜牌会员

积分
85
 楼主| 发表于 2011-7-26 21:04:09 | 显示全部楼层
ywledoc 发表于 2011-7-26 20:14
不起作用是怎么个意思?

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

4

主题

43

回帖

0

精华

铜牌会员

积分
85
 楼主| 发表于 2011-7-26 21:06:29 | 显示全部楼层
两位前辈可以告诉我这段代码是什么意思吗
  1. void Func()
  2. {
  3.     BYTE *pReadAddress = NULL;
  4.     ULONG lReadSize = 0;
  5.    

  6.     if ( !NT_SUCCESS(GetReadAddress(&pReadAddress, &lReadSize)) )
  7.     {
  8.         
  9.         return;
  10.     }



  11. }
  12. //GetReadAddress函数
  13. NTSTATUS GetReadAddress(BYTE **ppAddress, ULONG *pSize)
  14. {
  15.     NTSTATUS status = STATUS_UNSUCCESSFUL;
  16.     if ( g_pReadAddress == NULL )
  17.     {
  18.         status = MyEnumKernelModule(
  19.                 "\\??\\c:\\windows\\system32\\Read.sys",
  20.                 (ULONG*)g_pReadAddress,
  21.                  &g_ReadSize);
  22.         if (!NT_SUCCESS(status))
  23.         {
  24.             DbgPrint("Read is not loaded yet\n");
  25.             return status;
  26.         }
  27.     }
  28.     else
  29.     {
  30.         *ppAddress = g_pReadAddress;
  31.         *pSize = g_ReadSize;
  32.     }

  33.     return STATUS_SUCCESS;
  34. }
  35. //MyEnumKernelModule函数

  36. NTSTATUS MyEnumKernelModule(IN CHAR* str,OUT ULONG *moduleadd,OUT ULONG *modulesie)
  37. {
  38.     NTSTATUS status = STATUS_SUCCESS;
  39.     ULONG   n       = 0;
  40.     ULONG   i       = 0;
  41.     PSYSTEM_MODULE_INFORMATION_ENTRY   module = NULL;
  42.     PVOID   pbuftmp = NULL;
  43.     ANSI_STRING    ModuleName1,ModuleName2;
  44.     BOOLEAN  tlgstst= FALSE;  

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

  46.     pbuftmp = ExAllocatePool(NonPagedPool, n);

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

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

  49.     RtlInitAnsiString(&ModuleName1,str);
  50.     //
  51.     n       = *((PULONG)pbuftmp );
  52.     for ( i = 0; i < n; i++ )
  53.     {
  54.         RtlInitAnsiString(&ModuleName2,(PCSZ)&module->ImageName);
  55.         if (RtlCompareString(&ModuleName1,&ModuleName2,TRUE) == 0)
  56.         {
  57. //            DbgPrint("MyEnumKernelModule:%s:%0X \n",ModuleName2.Buffer,module.Base);
  58.             *moduleadd  = (ULONG)module->Base;
  59.             *modulesie  = module->Size;
  60.             tlgstst = TRUE;
  61.             break;
  62.         }
  63.     }
  64.     ExFreePool(pbuftmp);
  65.     if (tlgstst == FALSE)
  66.     {
  67.         return  FAILED_TO_OBTAIN_FUNCTION_ADDRESSES;
  68.     }
  69.     return status;
  70. }
复制代码
如果是枚举指定内核模块地址的话 怎么我加载了驱动 and Read.sys 在System32下还总是输出这句呢

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

47

主题

265

回帖

8

精华

核心会员

积分
10349
发表于 2011-7-26 21:09:55 | 显示全部楼层
565710420 发表于 2011-7-26 21:06
两位前辈可以告诉我这段代码是什么意思吗如果是枚举指定内核模块地址的话 怎么我加载了驱动 and Read.sys 在 ...

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

4

主题

43

回帖

0

精华

铜牌会员

积分
85
 楼主| 发表于 2011-7-26 22:27:30 | 显示全部楼层
ywledoc 发表于 2011-7-26 21:09
可能是ZwQuerySystemInformation调用出错了吧。具体要调试了。

噢 很多函数我都不懂
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

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