首页
社区
课程
招聘
[求助]为什么这段代码调用native api出错?[已解决]
发表于: 2007-3-12 01:23 6374

[求助]为什么这段代码调用native api出错?[已解决]

2007-3-12 01:23
6374
#include<windows.h>

前面通过FindWindowExW调用正常,但是通过native API就得不到正确的结果

typedef struct _MYUNICODE_STRING
{
        USHORT Length;
        USHORT MaxLength;
        LPWSTR String;
} MYUNICODE_STRING;

WCHAR Name[]=L"PopKart Client";

MYUNICODE_STRING WindowName,ClassName;

/*
push    [ebp+arg_10]
push    [ebp+LPUNICODE_WINDOWNAME]
push    [ebp+LPUNICODE_CLASSNAME]
push    [ebp+arg_4]
push    [ebp+arg_0]

; __stdcall NtUserFindWindowEx(x, x, x, x, x)
_NtUserFindWindowEx@20 proc near
mov     eax, 117Ah
mov     edx, 7FFE0300h
call    dword ptr [edx]
retn    14h
_NtUserFindWindowEx@20 endp
*/

int main(int argc, CHAR* argv[])
{
        HWND hClient;

       
        WindowName.Length=0x1c;
        WindowName.MaxLength=0x1E;
        WindowName.String=Name;

        ClassName.Length=0x1c;
        ClassName.MaxLength=0x1E;
        ClassName.String=Name;

        hClient=FindWindowExW(NULL,NULL,Name,Name);
        printf("\n%08x",hClient);
        hClient=0;
        _asm
        {
                pushad
                pushfd
                push 0;
                push offset WindowName
                push offset ClassName
                push 0
                push 0                                 //没有push 返回地址
                mov     eax, 0x117A
                mov     edx, 0x7FFE0300
                call    dword ptr [edx]
                add esp,0x14
                mov hClient,eax
                popfd
                popad
        }
        printf("\n%08x",hClient);
        return 0;
}
似乎是没有push 返回地址

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (16)
雪    币: 222
活跃值: (10)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
2
长度不对吧?LENGTH应该是CHAR数而不是BYTE数
2007-3-12 17:24
0
雪    币: 817
活跃值: (1927)
能力值: ( LV12,RANK:2670 )
在线值:
发帖
回帖
粉丝
3
难道这就是..... 保密先....
2007-3-12 17:28
0
雪    币: 427
活跃值: (412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
PopKart Client
2007-3-12 18:14
0
雪    币: 223
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
5
我这边没问题.你这么调用native api前提还是要先patch 驱动吧?
2007-3-12 18:30
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
6
问题是没有push返回地址。我只是拿跑跑试验一下。不是驱动原因。我是看看np隐藏了进程,能不能用这个办法找回来
2007-3-12 20:19
0
雪    币: 223
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
7
我得意思是:你这样搞好像也搞不出来得.因为驱动的原因,大概这样也找不回来吧
2007-3-12 22:36
0
雪    币: 304
活跃值: (82)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
8
PopKart
不懂,飘过~~~~~~~~~
2007-3-12 23:10
0
雪    币: 255
活跃值: (266)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
9
最初由 Isaiah 发布
问题是没有push返回地址。我只是拿跑跑试验一下。不是驱动原因。我是看看np隐藏了进程,能不能用这个办法找回来

写个testapp跟一下,看堆栈
2007-3-12 23:37
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
10
注意,在搞掉驱动的情况测试的。目的只是试验使用win32.sys的native api.不是NP.
NP并没有阻止FindWindow.虽然有HOOK
下面的代码就正常了。
#include<windows.h>

typedef struct _MYUNICODE_STRING
{
        USHORT Length;
        USHORT MaxLength;
        LPWSTR String;
} MYUNICODE_STRING;

WCHAR Name[]=L"PopKart Client";

MYUNICODE_STRING WindowName,ClassName;

int main(int argc, CHAR* argv[])
{
        HWND hClient;
        DWORD PID=0;
        hClient=FindWindowExW(NULL,NULL,Name,Name);
        printf("\n%08x",hClient);

        WindowName.Length=0x1c;
        WindowName.MaxLength=0x1e;
        WindowName.String=Name;

        ClassName.Length=0x1c;
        ClassName.MaxLength=0x1e;
        ClassName.String=Name;

        __asm
        {
                pushad
                pushfd
                push 0
                push offset WindowName
                push offset ClassName
                push 0
                push 0
                push RetAddr
                mov     eax, 117Ah
                mov     edx, 7FFE0300h
                call    dword ptr [edx]
                retn    14h
RetAddr:
                mov PID,eax
                popfd
                popad
        }
        printf("\n%08x",PID);
        return 0;
}
2007-3-13 09:37
0
雪    币: 217
活跃值: (15)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
是不是驱动里边把啥玩意hook了?
可以在驱动找找看看是不是有PopKart Client或者校验值
2007-3-13 09:56
0
雪    币: 223
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
12
另外一个问题,7FFE0300h是固定得吗?我这里好像也是这个地址.不知道这样好还是只见诶用int来做兼容性更好些
2007-3-13 11:56
0
雪    币: 255
活跃值: (266)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
13
最初由 aki 发布
另外一个问题,7FFE0300h是固定得吗?我这里好像也是这个地址.不知道这样好还是只见诶用int来做兼容性更好些

xp和2k有区别的
2007-3-13 11:56
0
雪    币: 223
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
14
你得意思是这段代码在xp系统通用还是说服务id有区别?
2007-3-13 12:26
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
15
恩,就是那个意思
2007-3-13 14:15
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
问题解决了吗?
2007-3-18 12:00
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
17
解决了,我改了标题的啊?
2007-3-19 03:01
0
游客
登录 | 注册 方可回帖
返回
//