能力值:
( LV3,RANK:30 )
能力值:
( LV3,RANK:30 )
[求助]已知窗口句柄,但窗口被完全遮挡,能对它抓图吗
谢谢你多次指点,在下不才,只会用也用惯了MFC,WPF只下载过只个例程,没深入过
要知道我做的是OllyDbg的插件,若在OllyDbg当前断点或当前eip前后的几行代码中获取到窗口句柄,还要回溯到最顶层窗口,才能对之正常截图,然后对按钮等子控件进行红框闪烁以指示该窗口句柄对应在的控件,但被调试程序被断点断下时,这很容易引起插件不响应
能力值:
( LV3,RANK:30 )
能力值:
( LV3,RANK:30 )
能力值:
( LV3,RANK:30 )
[求助]已知窗口句柄,但窗口被完全遮挡,能对它抓图吗
但该函数的调用有点麻烦,我现在把它包装一下,方便大家使用:
#define PW_CLIENTONLY 0x00000001
//WINUSERAPI BOOL WINAPI PrintWindow(IN HWND hwnd, IN HDC hdcBlt, IN UINT nFlags);
typedef BOOL(FAR WINAPI *PWFUNC)(HWND, HDC, UINT);
BOOL PrintWindow(IN HWND hwnd, IN HDC hdcBlt, IN UINT nFlags)
{
HMODULE hmod = LoadLibrary("user32.dll");
PWFUNC PrintWindow = (PWFUNC)GetProcAddress(hmod, "PrintWindow");
BOOL bReturn = PrintWindow(hwnd, hdcBlt, nFlags);
FreeLibrary(hmod);
return bReturn;
}
能力值:
( LV3,RANK:30 )
能力值:
( LV3,RANK:30 )
能力值:
( LV3,RANK:30 )
能力值:
( LV3,RANK:30 )
[求助]求一段快速搜索内存的代码
该函数的调用片断:
if(memory)
{
memset(memory, 0, mem_len);
//MM_RESTORE: 删除INT3断点
int ret = Readmemory(memory, mem_address_start, mem_len, MM_RESTORE);
if(ret = 0)
{
return;
}
int iFind = 0, iStart = 0, nCount = 0;
CDWordArray AddressArraay;
DWORD dwAdrressGoto = 0;
do
{
iFind = ODH.MemFind(iStart, memory, mem_len, a, strSig.GetLength() / 2);
if(iFind != -1)
{
iStart = iFind + 1;
char sss[256] = {0};
sprintf(sss, "iFind: %d", iFind);
OutputDebugString(sss);
AddressArraay.Add(iFind + mem_address_start);
nCount++;
if(nCount > 30)
{
break;
}
}
}
while(iFind != -1);
能力值:
( LV3,RANK:30 )
[求助]求一段快速搜索内存的代码
给你一个函数,是我正在写的OD插件中的(VC6),也是网上来的,感谢原作者,但记不清他的名字了,搜索飞快,5M的缓冲,我搜索一个特征码时,鼠标一点就出来了,感觉不出来迟滞:
//////////////////////////////////////////////////////////////////////////
//搜索内存函数
int CODPluginHelper::MemFind(int iStartPosition, LPBYTE pDestBuffer, int iDestBufferLength, LPBYTE pPatternBuffer, int iPatternBufferLength)
{
signed int iFoundPosition = -1, i = 0;
if(iStartPosition > iDestBufferLength) return -1;
for(i = iStartPosition; i < (iDestBufferLength + 1); i++)
{
if(memcmp(&pDestBuffer[i], pPatternBuffer, iPatternBufferLength) == 0)
{
iFoundPosition = i;
break;
}
}
return iFoundPosition;
}
能力值:
( LV3,RANK:30 )
[求助]VC中如何将自己编写的DLL集成到自己的exe文件中
给你一个函数,我以前的工程里面的(VC6):
//自释放函数
bool CDirDlg::g_MakeResourceFromExe(CString szExPathName, CString szResName, int nResID)
{
HRSRC hSrc = FindResource(NULL,MAKEINTRESOURCE(nResID),szResName);
if(hSrc == NULL) return false;
HGLOBAL hGlobal = LoadResource(NULL,hSrc);
if(hGlobal == NULL) return false;
LPVOID lp = LockResource(hGlobal);
DWORD dwSize = SizeofResource(NULL,hSrc);
CFile file;
if(file.Open(szExPathName,CFile::modeCreate|CFile::modeWrite))
{
file.Write(lp,dwSize);
file.Close();
}
FreeResource(hGlobal);
return true;
}
上面函数的调用:
void CDirDlg::ReleaseExe()
{//从资源中自释放imagedir.exe,自定义资源类型,导入imagedir.exe,ID=IDR_IMAGEDIREXE
CString szexe = g_szimagedir + "imagedir.exe";
CFileFind find;
if(!find.FindFile(szexe))
g_MakeResourceFromExe(szexe,"exe",IDR_IMAGEDIREXE);
find.Close();
//改变imagedir.exe的属性:只读,隐藏,归档
DWORD dwAttributes = FILE_ATTRIBUTE_HIDDEN |
FILE_ATTRIBUTE_ARCHIVE |
FILE_ATTRIBUTE_READONLY;
SetFileAttributes(szexe,dwAttributes);
}
以上我是把某个看图软件导入资源了,释放后,双击我软件里的列表控件中的某张图的全称,就能调用该看图全屏显示这张图片了,再在这张图片上双击时,就退出该看图软件
当时是由于编程匆忙,来不及写全屏看图软件了,用EXE自释放,双击全屏再双击就退出,只是欺骗一下用户的眼睛而已
能力值:
( LV3,RANK:30 )
能力值:
( LV3,RANK:30 )
能力值:
( LV3,RANK:30 )
能力值:
( LV3,RANK:30 )
[求助]已知窗口句柄,但窗口被完全遮挡,能对它抓图吗
Windows NT: Pointer to a null-terminated character string that specifies either "DISPLAY" for a display driver, or the name of a printer driver, which is usually "WINSPOOL".
"WINSPOOL" :是这个吗?
能力值:
( LV3,RANK:30 )
[原创]PE资源字符串ID计算方法
在OllyDbg的插件中遍历PE的资源字符串的ID及对应的文本内容功能完全实现
插件现在已实现提取特征码及定位,定位资源字符串的调用地址等功能
想多实现几个功能,功能多了再公布插件代码
在此想请教各位前辈:
已知窗口句柄,但窗口被完全遮挡,能对它抓图吗
没有他意,只是想让插件多一个功能
能力值:
( LV3,RANK:30 )
能力值:
( LV3,RANK:30 )
[原创]PE资源字符串ID计算方法
唉,无人关注,其实......
这是我开发OllyDbg插件时碰到的一个问题:
在反汇编代码窗口中所有引用到的字符串ID,插件都自动都会把对应字符串内容添加到注释中去,并用自动计算该字符串ID有几处交叉引用
还有一个就是:
做到了OllyDbg特征码定位,比如双击列表控件中的静态链接MFC程序"AfxDispatchCmdMsg"的特征码,能马上定位到该函数中去,并且能知道该函数有多少交叉引用,当然你自己的特征码能用插件轻易获取,用在某软件升级时,对比代码时很有用