首页
社区
课程
招聘
汇编怎么调用COM,有没有这方面的资料可以提供一点。
发表于: 2008-9-26 11:41 9060

汇编怎么调用COM,有没有这方面的资料可以提供一点。

2008-9-26 11:41
9060
Win32汇编怎么调用COM,有没有这方面的资料可以提供一点,据说这个好像和直接调用DLL的导出函数不一样,不知道是个什么原理,有没有朋友可以提供点这方面的资料。

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 207
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
没有人回,自已顶下,有知道的朋友进来看下啊。
2008-10-3 09:32
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
3
mov ecx, [this]
mov eax, [ecx]
call [eax+XXX]
2008-10-3 10:19
0
雪    币: 367
活跃值: (20)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
4
下 断点DllGetClassObject 也
2008-10-3 13:24
0
雪    币: 206
活跃值: (186)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
以新建快捷方式为例,贴段代码:

comethod1Proto typedef proto :DWORD
comethod2Proto typedef proto :DWORD,:DWORD
comethod3Proto typedef proto :DWORD,:DWORD,:DWORD
comethod4Proto typedef proto :DWORD,:DWORD,:DWORD,:DWORD
comethod5Proto typedef proto :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
comethod6Proto typedef proto :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
comethod7Proto typedef proto :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
comethod8Proto typedef proto :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
comethod9Proto typedef proto :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD

comethod1 typedef ptr comethod1Proto
comethod2 typedef ptr comethod2Proto
comethod3 typedef ptr comethod3Proto
comethod4 typedef ptr comethod4Proto
comethod5 typedef ptr comethod5Proto
comethod6 typedef ptr comethod6Proto
comethod7 typedef ptr comethod7Proto
comethod8 typedef ptr comethod8Proto
comethod9 typedef ptr comethod9Proto

_vtIShellLink MACRO CastName:REQ
&CastName&_QueryInterface comethod3 ?
&CastName&_AddRef comethod1 ?
&CastName&_Release comethod1 ?
&CastName&_GetPath comethod5 ?
&CastName&_GetIDList comethod2 ?
&CastName&_SetIDList comethod2 ?
&CastName&_GetDescription comethod3 ?
&CastName&_SetDescription comethod2 ?
&CastName&_GetWorkingDirectory comethod3 ?
&CastName&_SetWorkingDirectory comethod2 ?
&CastName&_GetArguments comethod3 ?
&CastName&_SetArguments comethod2 ?
&CastName&_GetHotkey comethod2 ?
&CastName&_SetHotkey comethod2 ?
&CastName&_GetShowCmd comethod2 ?
&CastName&_SetShowCmd comethod2 ?
&CastName&_GetIconLocation comethod4 ?
&CastName&_SetIconLocation comethod3 ?
&CastName&_SetRelativePath comethod3 ?
&CastName&_Resolve comethod3 ?
&CastName&_SetPath comethod2 ?
ENDM

IShellLink STRUCT
_vtIShellLink IShellLink
IShellLink ENDS

_vtIPersistFile MACRO CastName:REQ
&CastName&_QueryInterface comethod3 ?
&CastName&_AddRef comethod1 ?
&CastName&_Release comethod1 ?
&CastName&_GetClassID comethod2 ?
&CastName&_IsDirty comethod1 ?
&CastName&_Load comethod3 ?
&CastName&_Save comethod3 ?
&CastName&_SaveCompleted comethod2 ?
&CastName&_GetCurFile comethod2 ?
ENDM

IPersistFile STRUCT
_vtIPersistFile IPersistFile
IPersistFile ENDS

coinvoke MACRO pInterface:REQ, Interface:REQ, Function:REQ, args:VARARG
    LOCAL istatement, arg
    FOR arg, <args>
        IFIDNI <&arg>, <edx>
            .ERR <edx is not allowed as a coinvoke parameter>
        ENDIF
    ENDM
    IFIDNI <&pInterface>, <edx>
        .ERR <edx is not allowed as a coinvoke parameter>
    ENDIF
    istatement CATSTR <invoke (Interface PTR[edx]).&Interface>,<_>,<&Function, pInterface>
    IFNB <args>
        istatement CATSTR istatement, <, >, <&args>
    ENDIF
    mov edx, pInterface
    mov edx, [edx]
    istatement
ENDM

.data
IID_IShellLinkA GUID {0000214EEH,00000H,00000H,{0C0H,000H,000H,000H,000H,000H,000H,046H}}
CLSID_ShellLink GUID {000021401H,00000H,00000H,{0C0H,000H,000H,000H,000H,000H,000H,046H}}
IID_IPersistFile GUID {00000010BH,00000H,00000H,{0C0H,000H,000H,000H,000H,000H,000H,046H}}
.code
上面是宏定义等数据,下面是程序代码:
CreateShortcut proc lpszFile:DWORD,lpszLink:DWORD
LOCAL pShortcut:DWORD,pIPersist:DWORD
LOCAL szLinkBuff[MAX_PATH+MAX_PATH]:BYTE
mov pShortcut,0
invoke CoCreateInstance,addr CLSID_ShellLink,0,CLSCTX_INPROC_SERVER,addr IID_IShellLinkA,addr pShortcut
.if eax == S_OK
coinvoke pShortcut,IShellLink,SetPath,lpszFile
coinvoke pShortcut,IShellLink,SetIconLocation,lpszFile,0
mov pIPersist,0
coinvoke pShortcut,IShellLink,QueryInterface,addr IID_IPersistFile,addr pIPersist
.if eax == S_OK
  invoke MultiByteToWideChar,CP_ACP,0,lpszLink,-1,addr szLinkBuff,sizeof szLinkBuff
  coinvoke pIPersist,IPersistFile,Save,addr szLinkBuff,TRUE
  coinvoke pIPersist,IPersistFile,Release
.endif
coinvoke pShortcut,IShellLink,Release
.endif
ret
CreateShortcut endp
调用:
invoke CreateShortcut,STEXT("C:\WINDOWS\NOTEPAD.EXE"),STEXT("C:\A.LNK")

IShellLink和IPersistFile是自己查SDK,然后填写的,汇编没有现成的,用到哪一个接口就去查到相应的,然后填写好,再进行调用。具体每个不同接口的使用说明,就需要查阅MSDN了。

说的比较浅显,也没用什么注释,希望你能看得懂。
2008-10-3 19:14
0
雪    币: 209
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
还是用VC编好DLL,汇编调用吧
2008-10-5 00:15
0
雪    币: 207
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
谢谢forgot版主和楼上各位热心朋友,弄来弄去,总算有点了头绪。
2008-10-5 09:53
0
雪    币: 237
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
比较通用的好办法,呵呵~
2008-10-5 11:44
0
雪    币: 207
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
这个帖子我想顶起来下,看了一些资料,对com有了基本的了解。希望大家进来讨论,也想问问这里的高人,如果是OD里面要找到对某个com接口的成员函数的调用话,用什么办法比较好了,第一虽然有com接口的开发文档可以参考,但是毕竟不像DLL那样有明显输入表,第二如果是从程序一开头就开始看逆向代码的话,是不是工作量也太大了点。

上面有位朋友说到对DllGetClassObject下断,这个方法应可以吧,不过如果创建对象如果太多,并且代码量太大的话,好像不太直接吧。有没有可以直接根据一些调用者的代码特征来找的。
2008-11-6 18:15
0
雪    币: 213
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
请问有什么方法可以得到这些GUID?
IID_IShellLinkA GUID {0000214EEH,00000H,00000H,{0C0H,000H,000H,000H,000H,000H,000H,046H}}
CLSID_ShellLink GUID {000021401H,00000H,00000H,{0C0H,000H,000H,000H,000H,000H,000H,046H}}
IID_IPersistFile GUID {00000010BH,00000H,00000H,{0C0H,000H,000H,000H,000H,000H,000H,046H}}
当然是别的函数对应的啦!
2009-3-14 20:14
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
win32汇编语言程序设计  这本书里对汇编调用com讲得比较详细。一般而言,汇编对com组件的使用,不一定非要看汇编,先看一些高级语言对它的应用,再看汇编,这样会有一个总体的把握,更容易懂,win32汇编不过是语法不同,且没有对一些细微繁琐的步骤进行封装而已。
2009-3-22 10:09
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
"win32汇编语言程序设计"哪本书?
2009-5-9 10:47
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
汇编和C调用差不多吧
将 TLB 文件导出,可以看到COM组件接口定义
2009-5-9 18:30
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
用eXeScope加载你所需的DLL(COM)好像能得到,里面的 Type Library就有GUID
2009-5-9 19:02
0
雪    币: 367
活跃值: (20)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
15
#import xx.dll 自动生成头文件,呵呵
2009-5-13 21:08
0
雪    币: 104
活跃值: (68)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
VC自动生成COM封装的头文件,然后转成汇编
2009-5-14 00:33
0
游客
登录 | 注册 方可回帖
返回
//