I've successfully reverse a DLL file which uses a COM interface and found the Class ID (CLSID) and Interface ID (IID). In Visual Studio debugging memory, it shows S_OK
with CoCreateInstance()
and all the function pointers of that COM interface. I saw this question but that uses IDA to reverse a DLL.
I've followed an article which shows finding methods definition using Visual Studio debug mode. I've both CLSID and IID from which I get the interface pointer.
So, my question is how can I find the (undocumented) function definitions? Is there any easy general guidelines to follow? It will be easy if someone show an procedure with Visual Studio, reversing with IDA is bit more complex.
Update: According to the answer I reverse the DLL in IDA but the assembly shows the
off_180002230 dq offset off_1800023D0 ; DATA XREF: .rdata:off_180002480↓o
dq offset ILxssUserSession
dq offset IUnknown_QueryInterface_Proxy
dq offset IUnknown_AddRef_Proxy
dq offset IUnknown_Release_Proxy
dq offset ObjectStublessClient3
dq offset ObjectStublessClient4
dq offset ObjectStublessClient5
dq offset ObjectStublessClient6
dq offset ObjectStublessClient7
dq offset ObjectStublessClient8
dq offset ObjectStublessClient9
dq offset ObjectStublessClient10
dq offset ObjectStublessClient11
dq offset ObjectStublessClient12
dq offset ObjectStublessClient13
dq offset ObjectStublessClient14
unk_1800022B8 db 22h ; " ; DATA XREF: .rdata:0000000180002DE0↓o
How can I relate those offset to a real function pointer? The current DLL is a proxy stub DLL and the real function is implemented/defined in another DLL. I've also seen this question which shows to follow function pointers.