首页
社区
课程
招聘
[求助]关于分析未公开函数的问题
发表于: 2005-1-4 11:02 6811

[求助]关于分析未公开函数的问题

2005-1-4 11:02
6811
最近想忙着反汇编一下系统的一个接口函数,已经一个月下来了,还是没有成功,我已经用IDA反汇编出来了这个函数的四个参数的地址,可是对于是什么样的数据类型却无法分析出来,实在搞不定,请教这里的各位老大,有谁有过这方面的经验的啊?
   我要反汇编的那个函数是WZCSAPI.DLL里的WZCQueryInterface(*,*,*,*),是在WIN XP下的.

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
INTF_ENTRY ie;
ZeroMemory(&ie, sizeof(ie));
ie.wszGuid=deviceGuid;    //from WZCEnumInterfaces()
DWORD dwOutFlags;
DWORD dwStatus=pfnWZCQueryInterface(NULL, INTF_ALL, &ie, &dwOutFlags);
Bedrich Svoboda

有人这么用过  我也不知道啊! 只是尽量给你也信息!
2005-1-4 11:11
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我也在网上查过这个贴子,可是这个贴子不全,他又用到了另一个未公开函数,就是WZCEnumInterfaces(*,*,*,*)得出的一个返回值,所以我还是无法成功搞定,我写信给他,也没有回.并且奇怪的是,我通过反汇编发现WZCQueryInterface的参数的第二个是指针,而这个贴子给的第二个却不是地址,我非常不明白.
   我还把WINCE下的这个参数的原形拿来试了一下,也还是不行.
  所以才来发贴子,请教各位的.
2005-1-4 11:20
0
雪    币: 390
活跃值: (707)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
4
你确认是stdcall?
stdcall和pascal的参数次序是反的。
2005-1-4 12:31
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
是Stdcall,我是用IDA,这是我COPY来的
__declspec(dllimport) __stdcall WZCQueryInterface(x,x,x,x)
.idata:58971144         extrn __imp__WZCQueryInterface@16:dword
.idata:58971144           
   ; DATA XREF: WZCQueryInterface(x,x,x,x)r
2005-1-4 13:00
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
再请教一个相关的问题,我发现有一个函数在push了两个参数后,进入被调用函数后,却意外发现三个参数,请各位指教啊.
               lea     edi, [esi+0B8h]
.text:58973B2F                 and     dword ptr [edi], 0
.text:58973B32                 push    edi
.text:58973B33                 mov     ebx, 404FFFFh
.text:58973B38                 push    ebx
.text:58973B39                 mov     ecx, esi
.text:58973B3B                 call    ?GetOIDs@CWZCQuickCfg@@QAEKKPAK@Z ; CWZCQuickCfg::GetOIDs(ulong,ulong *)
进入函数后的函数堆栈是这样的
-00000004 var_4           dd ?
+00000000  s              db 4 dup(?)
+00000004  r              db 4 dup(?)
+00000008                 db ? ; undefined
+00000009                 db ? ; undefined
+0000000A arg_2           db ?
+0000000B arg_3           db ?
+0000000C arg_4           dd ?
+00000010
+00000010 ; end of stack variables
这是怎么回事啊?
2005-1-4 13:25
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
第二个参数的确不是地址,我发现我弄错了,不过还是现在还是不行,我试过调用了一下,还是出错,出错码是57H,参数错误
        HMODULE hDll = LoadLibrary(_T("Wzcsapi.dll"));
        typedef BOOL (WINAPI* fun)(UINT dwflag2,ULONG Byte,ULONG * pStr,PDWORD dwflag);
        fun pFun;
        pFun   =    (fun)  GetProcAddress(hDll,"WZCQueryInterface");
        ULONG buffer2[19]={0};
        ULONG dwflag= 0x404ffff ;
        DWORD dwOutFlag = 0 ;
        BOOL   IsSUCCESS =   pFun(NULL,dwflag,&buffer2[0],&dwOutFlag);

哪位兄弟有这方面的经验的,可否说一下经验?
2005-1-4 14:31
0
雪    币: 390
活跃值: (707)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
8
一共有4个arg,按照堆栈顺序:

arg_0和arg_4是数,前2个。
arg_8肯定是地址。第三个。
arg_c是地址,第四个。

其实对于一个函数,只要知道它的大致类型。至于究竟是pascal还是stdcall不重要。注意:只有参数顺序不同的调用类型完全可以混用,只要在声明extern时调换一下参数的顺序即可!
2005-1-4 14:48
0
雪    币: 390
活跃值: (707)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
9
最初由 骑猪到处跑 发布
第二个参数的确不是地址,我发现我弄错了,不过还是现在还是不行,我试过调用了一下,还是出错,出错码是57H,参数错误
HMODULE hDll = LoadLibrary(_T("Wzcsapi.dll"));
typedef BOOL (WINAPI* fun)(UINT dwflag2,ULONG Byte,ULONG * pStr,PDWORD dwflag);
fun pFun;
pFun = (fun) GetProcAddress(hDll,"WZCQueryInterface");
........


跟一下。看看堆栈是不是和函数要求的一样就可以了。
2005-1-4 14:55
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
楼上的兄弟分析的是哪个函数的堆栈?
2005-1-4 14:55
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
哎,楼上的兄弟不明白我的意思,我就是不知道第三个参数指向的数据结构是什么,所以调用 时出错的,这是一个未公开函数,我只知道第三个参数指向的结构变量有19个双字啊.
2005-1-4 14:59
0
雪    币: 390
活跃值: (707)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
12
废话,当然是WZCQueryInterface了。

2楼不是说了吗?你按照他的方法试。
2005-1-4 15:13
0
雪    币: 220
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
57h为“参数不正确”
2005-1-5 08:28
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
嗯,57H为参数不正确,有出现会出现0XC0000005H(访问违规)
2005-1-5 08:51
0
雪    币: 227
活跃值: (164)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
用AutoDebug for Windows
自动对目标程序进行跟踪,记录函数调用的输入输出结果。支持对COM接口函数的跟踪。自动分析目标程序,自动显示DLL的导出函数进行跟踪监视。
可跟踪各种api参数
2005-1-5 13:30
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
非常感谢楼上的建议,
这个软件还可以,能得到每个函数的参数的地址和个数,不过对于参数用的数据结构还是得不到,::
2005-1-5 14:44
0
游客
登录 | 注册 方可回帖
返回
//