最近做一个项目:
某第三方软件,包含一个DLL1文件,用来生成类表格界面的。在工作时候,类表格界面里的数据是实时刷新的,我要获取最新数据,应该怎么做?
目前思路:
1、把DLL2远程注入第三方进程,调用DLL1,使用其中的函数获取实时刷新值。困难:远程注入成功后,不知道在DLL2中如何调用DLL1,而且即使调用成功后,我不知道怎么调用DLL1中的函数;即使能调用DLL中的函数,我也不知道函数求取的是不是类表格数据的数值。
2、远程注入DLL2后,检索第三方软件进程的地址空间读取其中的刷新值。困难:我不知道怎么检索,及我不知道哪个地址是我需要的?而且在刷新以后,我也不知道新的地址是否是递增还是递减或者线性或者非线性?
3、直接使用第三方软件带有的DLL1,使用其中的函数,但是没有头绪。
希望各位集思广益,不吝指点,谢谢大家~
某第三方软件,包含一个DLL1文件,用来生成类表格界面的。在工作时候,类表格界面里的数据是实时刷新的,我要获取最新数据,应该怎么做?
目前思路:
1、把DLL2远程注入第三方进程,调用DLL1,使用其中的函数获取实时刷新值。困难:远程注入成功后,不知道在DLL2中如何调用DLL1,而且即使调用成功后,我不知道怎么调用DLL1中的函数;即使能调用DLL中的函数,我也不知道函数求取的是不是类表格数据的数值。
2、远程注入DLL2后,检索第三方软件进程的地址空间读取其中的刷新值。困难:我不知道怎么检索,及我不知道哪个地址是我需要的?而且在刷新以后,我也不知道新的地址是否是递增还是递减或者线性或者非线性?
3、直接使用第三方软件带有的DLL1,使用其中的函数,但是没有头绪。
希望各位集思广益,不吝指点,谢谢大家~
解决方案 »
- 调用外部控制台程序的问题
- CSerialPort类实现的串口通信关于LONG CMainFrame::OnComm(WPARAM ch,LPARAM port)处理问题
- 求助:怎样使用自定义控件?
- 紧急求助!在线等
- 急!!!!!!怎样检测客户端是否是连接的
- 请教:对话框问题!
- 如何用vc获得硬盘的序列号
- TinyXML报错:error C3861: '_snprintf_s': identifier not found?
- VC高手注意啦!!!难度一再提高!!!
- 分析mfc源码有用吗?
- 用什么办法实现类型CMap<int,int,CStringArray,CStringArray&>的功能
- 哪有CButton的列表类呢
用W32Dasm,WinDbg,OllyDbg等工具多分析一下,如果能找到说明文件那就更好
2.注入,内嵌汇编,调用CALL。答题步骤就这样,做起来蛮复杂
DLL1中函数是可以得到说明的,有资料。因为DLL1中包含有获取刷新后最新数据的函数:BOOL SSGetLastValidCell(HWND hWnd, LPSS_COORD lpCol, LPSS_COORD lpRow);
你看我的思路对不对:
1、远程注入DLL1
2、内嵌汇编条用SSGetLastValidCell函数,但是HWND hwnd函数调用第三方软件的窗口句柄从而获取lpcol和lprow的数值
我不知道这样第三方有个DLL1了,我再注入一个DLL1,可以不?
我如果无DLL远程注入,可以调用第三方软件中DLL1中的SSGetLastValidCell函数不???
谢谢
1、如果本地进程调用DLL1,此时DLL1的地址是否与第三方软件中调用的DLL1地址空间相同
2、如果相同的话,直接无DLL远程注入第三方软件,然后调用DLL1中的SSSGetLastValidCell函数
是否可以?
采用DLL2注入你的那个第三方程序进程,或者创建远程线程注入,这里推荐DLL注入,因为远程线程没编写好容易把被注入对象弄崩溃。
DLL2里面内嵌汇编 DWORD addr = 0x12345678;
lpRow = XXXX;
lpCol = XXXX;
hWnd = XXXX;
__asm{
push lpRow
push lpCol
push hWnd
call addr
popad
} 怎么得到SSSGetLastValidCell的实际地址,也就是上面举例中的0x12345678,不是一两句可以说清楚的
你可以看看看雪的加密解密。
__asm{
push lpRow
push lpCol
push hWnd
call addr
popad //这句多写了,去掉。
}
我现在的思路看下可以不:
DLL2远程注入第三方进程,在DLL2的DLL_PROCESS_ATTACH中load DLL1,调用DLL1中的SSgetLastValidCell(HWN,...)函数
其中参数HWN=GetWindowsEX(...),我选取第三方软件中的farpoint sheet窗口句柄,这是可以做的到的。
下面看我的理解是不是正确了:
因为DLL2是注入第三方进程了,所以DLL2的DLL_PROCESS_ATTACH中的内容都是在第三方进程的地址空间中,所以我再load 的DLL1,也是被load到第三方进程地址空间中,包括其中的SSgetLastValidCell函数。所以我可以调用这个函数,而不会存在跨界读取的问题。
你说的没有导出是指没有定义DLLEXPORT int CALLBACK吧?
然后,找到相关头文件,加入
再在cpp文件中引入DLL,学习,关注~~~
MSDN中:The spelling and case of a function name pointed to by lpProcName must be identical to that in the EXPORTS statement of the source DLL's module-definition (.def) file. 唉,到此为止了,你仔细把整个细节想想吧。