Yanky
驱动牛犊
驱动牛犊
  • 注册日期2004-08-24
  • 最后登录2021-09-08
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望95点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:5796回复:33

(100分)各位大虾:我调用NtCreateProcess为什么提示“找不到过程地址”呢?

楼主#
更多 发布于:2004-12-17 18:56
我在内核态想启动一个Win32进程,然后吊用了NtCreateSection,和NtCreateProcess。

当加载驱动时候,提示“找不到过程地址”。

我把NtCreateProcess注释了,就能加载了。

NtCreateSection 和 NtCreateProcess 都是 UnDoc的函数啊。
为什么NtCreateSection 能行,而NtCreateProcess 就找不到呢。

注:我连接了ntdll.lib,也声明了函数原型了。

代码如下:

NTSYSAPI
NTSTATUS
NTAPI
NtCreateSection(

OUT PHANDLE             SectionHandle,
IN ULONG                DesiredAccess,
IN POBJECT_ATTRIBUTES   ObjectAttributes OPTIONAL,
IN PLARGE_INTEGER       MaximumSize OPTIONAL,
IN ULONG                PageAttributess,
IN ULONG                SectionAttributes,
IN HANDLE               FileHandle OPTIONAL );



NTSYSAPI
NTSTATUS
NTAPI
NtCreateProcess(

OUT PHANDLE           ProcessHandle,
IN ACCESS_MASK        DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
IN HANDLE             ParentProcess,
IN BOOLEAN            InheritObjectTable,
IN HANDLE             SectionHandle OPTIONAL,
IN HANDLE             DebugPort OPTIONAL,
IN HANDLE             ExceptionPort OPTIONAL );


int TestCreateProcess()
{
NTSTATUS rc;
HANDLE hProcessCreated, hProcessOpened, hFile, hSection;
OBJECT_ATTRIBUTES ObjectAttr;
UNICODE_STRING ProcessName;
UNICODE_STRING SectionName;
UNICODE_STRING FileName;
LARGE_INTEGER MaxSize;
ULONG SectionSize=8192;


IO_STATUS_BLOCK ioStatusBlock;
LARGE_INTEGER  allocsize ;

DbgPrint(("Yanky starting TestLaunchProcess\n"));

RtlInitUnicodeString(&FileName, L"\\??\\d:\\winnt\\system32\\calc.exe");
InitializeObjectAttributes( &ObjectAttr,
&FileName,
OBJ_CASE_INSENSITIVE,
NULL,
NULL);




rc = ZwCreateFile(
&hFile,
GENERIC_READ | GENERIC_EXECUTE,
&ObjectAttr,
&ioStatusBlock,
NULL,
FILE_ATTRIBUTE_NORMAL,
FILE_SHARE_READ,
FILE_OPEN,
0,
NULL,
0);
if (!NT_SUCCESS(rc)) {
DbgPrint(("Yanky -->Unable to open file, rc=%x\n", rc));
return 0;
}

/* then use NtCreateSection to map file */

MaxSize.HighPart=0;
MaxSize.LowPart=SectionSize;

rc=NtCreateSection(
&hSection,
SECTION_ALL_ACCESS,
NULL,
&MaxSize,
PAGE_READWRITE,
SEC_IMAGE,
hFile);
if (rc!=STATUS_SUCCESS) {
DbgPrint(("Unable to create section, rc=%x\n", rc));
return 0;
}
DbgPrint(("hSectionCreated=%x\n", hSection));


rc= NtCreateProcess (
                        &hProcessCreated,
                        PROCESS_ALL_ACCESS,
                        &ObjectAttr,
                        0xFFFFFFFF,
                        TRUE,
                        hSection,
                        NULL,
                        NULL);

        

if (rc!=STATUS_SUCCESS) {
DbgPrint(("Unable to create process, rc=%x\n", rc));
return 0;
}
DbgPrint(("hProcessCreated=%x\n", hProcessCreated));

NtClose(hProcessCreated);
return 1;

}

各位大虾帮帮忙!

最新喜欢:

aasa2aasa2
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-02-07 09:39
[quote]这个函数地址需要动态获取,你反编译一下NtOsKrnl.exe就明白了。

等于没说,你反哪个函数可以获得他的地址??
HOOK只能通过SERVICEID来做,硬编码或着我看到有老外把NTDLL影射到驱动空间,然后再获得SERVICEID的. [/quote]
我看到有老外把NTDLL影射到驱动空间,然后再获得SERVICEID的????
未输出,NTDLL影射到驱动空间,又如何得到入口地址,更别说SERVICEID
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-02-07 09:35
驱动里边连接ntdll?NtCreateProcess/ZwCreateProcess都没有在ntdll.dll中被export!不要白费力气了。如果需要的话,你可以自己加载ntdll到内存中,然后再查找地址。

函数没有输出,就是自己加载到内存中,也找不到地址,其实ntdll.dll本身就在内存中,只不过在应用层。把它加载到核心空间,它也只能是死的,所有地址需要重定位才能活,至于搞那么复杂吗?
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
iamwuge
驱动牛犊
驱动牛犊
  • 注册日期2002-01-07
  • 最后登录2005-05-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-02-06 13:55
驱动里边连接ntdll?NtCreateProcess/ZwCreateProcess都没有在ntdll.dll中被export!不要白费力气了。如果需要的话,你可以自己加载ntdll到内存中,然后再查找地址。
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-02-05 11:02
还有,据我跟踪发现,在XP中系统很少调用ntcreateprocess,改为调用
ntcreateprocessEx,如果在XP下将0xffffffff改为0x00000000(NULL),将不出现第4个参数出错的情况,但出现1>Linking Executable - objchk_wxp_x86i386test.sys for i386
1>runwin32proc.obj : error LNK2019: unresolved external symbol __imp__NtCreateP
ocess@32 referenced in function _TestCreateProcess@0
1>objchk_wxp_x86i386test.sys : error LNK1120: 1 unresolved externals
这说明你找到的函数说明是ntdll.dll中的,与__imp__NtCreatePocess@32不符,即函数名称没问题相同,参数个数不同

修正,参数个数据后来看,是对的,8个,主要是未引出的问题,不行就硬编码吧,在我的XP sp2系统上,它是系统服务分发表中排行0x2F,只不过要注意使EDX指向你的参数表。
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-02-05 10:54
还有,据我跟踪发现,在XP中系统很少调用ntcreateprocess,改为调用
ntcreateprocessEx,如果在XP下将0xffffffff改为0x00000000(NULL),将不出现第4个参数出错的情况,但出现1>Linking Executable - objchk_wxp_x86\i386\test.sys for i386
1>runwin32proc.obj : error LNK2019: unresolved external symbol __imp__NtCreateP
ocess@32 referenced in function _TestCreateProcess@0
1>objchk_wxp_x86\i386\test.sys : error LNK1120: 1 unresolved externals
这说明你找到的函数说明是ntdll.dll中的,与__imp__NtCreatePocess@32不符,即函数名称没问题相同,参数个数不同
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-02-05 10:40
首先,我必须澄清的一点是,你的LIB绝对不能是ntdll.lib,而必须是ntoskrnl.lib。ntdll.lib中引出了ntcreateprocess(暂时不管大小写了),ntoskrnl.lib引出了ntcreateprocess,ntcreatesession.ntdll.lib提供Win32下用的,地址在用户区,这就是你出现地址找不到的原因。至于第4个参数错误的原因,大家由于环境不相同,我这里只在XP下试了一下,就是这个错误。其实是因为我以前说过的,在Win2k下ProcessId会有问题,0xffffffff也被认为是一个合法的进程ID,而在XP下ProcessId没问题,0xffffffff便被认为是一个非法的进程ID了。
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
7楼#
发布于:2005-02-04 14:07
这个函数地址需要动态获取,你反编译一下NtOsKrnl.exe就明白了。

等于没说,你反哪个函数可以获得他的地址??
HOOK只能通过SERVICEID来做,硬编码或着我看到有老外把NTDLL影射到驱动空间,然后再获得SERVICEID的.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
paladinii
驱动中牛
驱动中牛
  • 注册日期2003-10-28
  • 最后登录2012-03-09
  • 粉丝0
  • 关注0
  • 积分282分
  • 威望74点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-02-04 14:02
这个函数地址需要动态获取,你反编译一下NtOsKrnl.exe就明白了。
Ideas for life!
yyy_qazwsxedc
驱动牛犊
驱动牛犊
  • 注册日期2004-12-29
  • 最后登录2004-12-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-12-29 10:12

驱动中好像不能引用ntdll.dll中的函数,没看到有sys引用了ntdll.dll
因为NtCreateSection在ntoskrnl.exe中,而NtCreateProcess在
ntoskrnl.exe中没有导出所以不行。
关于怎么使用NtCreateProcess或ZwCreateProcess《NtCreateProcess和ZwCreateProcess,原来的贴太挤,开新帖 》
有讲的
Yanky
驱动牛犊
驱动牛犊
  • 注册日期2004-08-24
  • 最后登录2021-09-08
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望95点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
  • 社区居民
10楼#
发布于:2004-12-27 17:42
顶!
顶!
顶!
Yanky
驱动牛犊
驱动牛犊
  • 注册日期2004-08-24
  • 最后登录2021-09-08
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望95点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
  • 社区居民
11楼#
发布于:2004-12-27 14:36
[quote][quote]发现问题了

NtCreateProcess' : pointer mismatch for actual parameter 4
第4个参数类型不对,改一改吧

你在哪里找到的NtCreateProcess的定义

NtCreateProcess(

OUT PHANDLE ProcessHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
IN HANDLE ParentProcess,
IN BOOLEAN InheritObjectTable,
IN HANDLE SectionHandle OPTIONAL,
IN HANDLE DebugPort OPTIONAL,
IN HANDLE ExceptionPort OPTIONAL );

 



大虾啊,我的定义和你的一样的,参数没错,没有问题啊。

还有就是我直接利用这个函数的地址也有问题,提示第七个参数错误。 [/quote]

上面函数定义的是引用你的定义,

你的代码编译后,出现NtCreateProcess' : pointer mismatch for actual parameter 4警告错误(环境2k+xp4+ddk 2k)

我想问题可能就在这里
 [/quote]


NtCreateProcess这个函数原型我是在UnDoc文档中找到的。

请问该如何改呢?
我的环境也是:advance Server + Sp4   + 2kddk

你的可以?

那个参数该是什么呢?

snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-12-27 12:53
[quote]发现问题了

NtCreateProcess' : pointer mismatch for actual parameter 4
第4个参数类型不对,改一改吧

你在哪里找到的NtCreateProcess的定义

NtCreateProcess(

OUT PHANDLE ProcessHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
IN HANDLE ParentProcess,
IN BOOLEAN InheritObjectTable,
IN HANDLE SectionHandle OPTIONAL,
IN HANDLE DebugPort OPTIONAL,
IN HANDLE ExceptionPort OPTIONAL );

 



大虾啊,我的定义和你的一样的,参数没错,没有问题啊。

还有就是我直接利用这个函数的地址也有问题,提示第七个参数错误。 [/quote]

上面函数定义的是引用你的定义,

你的代码编译后,出现NtCreateProcess' : pointer mismatch for actual parameter 4警告错误(环境2k+xp4+ddk 2k)

我想问题可能就在这里
学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
Yanky
驱动牛犊
驱动牛犊
  • 注册日期2004-08-24
  • 最后登录2021-09-08
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望95点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
  • 社区居民
13楼#
发布于:2004-12-27 12:29
发现问题了

NtCreateProcess' : pointer mismatch for actual parameter 4
第4个参数类型不对,改一改吧

你在哪里找到的NtCreateProcess的定义

NtCreateProcess(

OUT PHANDLE ProcessHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
IN HANDLE ParentProcess,
IN BOOLEAN InheritObjectTable,
IN HANDLE SectionHandle OPTIONAL,
IN HANDLE DebugPort OPTIONAL,
IN HANDLE ExceptionPort OPTIONAL );

 



大虾啊,我的定义和你的一样的,参数没错,没有问题啊。

还有就是我直接利用这个函数的地址也有问题,提示第七个参数错误。
snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-12-24 13:01
发现问题了

NtCreateProcess' : pointer mismatch for actual parameter 4
第4个参数类型不对,改一改吧

你在哪里找到的NtCreateProcess的定义

NtCreateProcess(

OUT PHANDLE ProcessHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
IN HANDLE ParentProcess,
IN BOOLEAN InheritObjectTable,
IN HANDLE SectionHandle OPTIONAL,
IN HANDLE DebugPort OPTIONAL,
IN HANDLE ExceptionPort OPTIONAL );

学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-12-24 12:55
使用monitor加载时出现error =127
学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-12-24 12:50
我的advance Server + Sp4
在Ntdll.dll里面都导出了
NtCreateProcess
ZwCreateProcess

可能你的系统版本不过高
学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-12-22 21:04
我试了一下,还是不行。

我觉得和这个没有太大的关系,因为我在Sources文件里已经指定了连接的文件路径了。

TARGETLIBS=$(BASEDIR)libchki386ntdll.lib


奇怪的问题是:

NtCreateSection和NtCreateProcess都是undoc得函数,NtCreateSection没有问题,光NtCreateProcess有问题。

大虾帮忙分析一下吧!

那个只是连接,不管Load
你可以测试看直接使用这个函数的地址看是否可以
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
Yanky
驱动牛犊
驱动牛犊
  • 注册日期2004-08-24
  • 最后登录2021-09-08
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望95点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
  • 社区居民
18楼#
发布于:2004-12-22 17:02
系统根本没导出这个函数,你如何能调用???



NtCreateProcess这个函数导出了,在Ntdll.dll里面有。

ZwCreateProcess没有导出。

大虾帮忙!

Yanky
驱动牛犊
驱动牛犊
  • 注册日期2004-08-24
  • 最后登录2021-09-08
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望95点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
  • 社区居民
19楼#
发布于:2004-12-22 16:59
不好意思,前几天怎么都上不来论坛,不知道怎么回事。
上一页
游客

返回顶部