能力值:
( LV2,RANK:10 )
|
-
-
2 楼
呵呵 好方法现在才知道了
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
这个太强了,比脚本方便~~~
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
哈哈!谢谢!
|
能力值:
( LV8,RANK:130 )
|
-
-
5 楼
谢谢分享~~~~~
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
果然是必杀技啊,多谢了
好像不一定是搜到的第一个CALL,
|
能力值:
( LV8,RANK:130 )
|
-
-
7 楼
学习收藏了,谢谢楼主分享!
|
能力值:
( LV9,RANK:230 )
|
-
-
8 楼
书呆不呆.
好一招"一阳指"
谢谢.
回去研究研究原理.
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
随便找一个MFC42的CM,用OD载入,有壳,不用管,直接F9,然后ALT+E,双击MFC42.DLL,CTRL+F,输入CALL [EBP+14],在第一个找到的地址处F2下断点。
真够简洁明了的
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
试过了,确实必杀,高人呢
|
能力值:
( LV9,RANK:490 )
|
-
-
11 楼
本来就是看好这MFC有点花指令的作用才学MFC的.
刚用几天就被必杀了,我不用MFC了还不行吗?
|
能力值:
( LV9,RANK:180 )
|
-
-
12 楼
为什么你都说MFC有点花指令的作用?
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
理解错了,
MFC90UD.dll所说的特征码是 call [esp-8]
原理应该很简单,看下面的源码就知道了。
实际上在IDE中在按钮响应函数里下个断点,断下来之后看一看call stack,很快就能找到这里。
然后查看Byte code,就能看到"特征码"了
至于为什么是第一个,这点不大明白
比reversing mfc application里说的方法更彻底一些,
AFX_STATIC BOOL AFXAPI _AfxDispatchCmdMsg(CCmdTarget* pTarget, UINT nID, int nCode,
AFX_PMSG pfn, void* pExtra, UINT_PTR nSig, AFX_CMDHANDLERINFO* pHandlerInfo)
// return TRUE to stop routing
{
ENSURE_VALID(pTarget);
UNUSED(nCode); // unused in release builds
union MessageMapFunctions mmf;
mmf.pfn = pfn;
BOOL bResult = TRUE; // default is ok
if (pHandlerInfo != NULL)
{
// just fill in the information, don't do it
pHandlerInfo->pTarget = pTarget;
pHandlerInfo->pmf = mmf.pfn;
return TRUE;
}
switch (nSig)
{
default: // illegal
ASSERT(FALSE);
return 0;
break;
case AfxSigCmd_v:
// normal command or control notification
ASSERT(CN_COMMAND == 0); // CN_COMMAND same as BN_CLICKED
ASSERT(pExtra == NULL);
(pTarget->*mmf.pfnCmd_v_v)(); //VS2008此处按F11进入按钮
//处理函数
break;
部分反汇编
case AfxSigCmd_v:
// normal command or control notification
ASSERT(CN_COMMAND == 0); // CN_COMMAND same as BN_CLICKED
ASSERT(pExtra == NULL);
78AAD5E5 cmp dword ptr [pExtra],0
78AAD5E9 je $LN36+17h (78AAD5FCh)
78AAD5EB push 50h
78AAD5ED push offset string "f:\\dd\\vctools\\vc7libs\\ship\\atlmf"... (789F1398h)
78AAD5F2 call AfxAssertFailedLine (78A26460h)
78AAD5F7 test eax,eax
78AAD5F9 je $LN36+17h (78AAD5FCh)
78AAD5FB int 3
(pTarget->*mmf.pfnCmd_v_v)();
78AAD5FC mov ecx,dword ptr [pTarget]
78AAD5FF call dword ptr [mmf]
|
能力值:
(RANK:10 )
|
-
-
14 楼
你的贴违规了.
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
太好了,多谢书呆彭
|
能力值:
( LV4,RANK:50 )
|
-
-
16 楼
很牛.很牛.很牛.
|
能力值:
( LV9,RANK:230 )
|
-
-
17 楼
理论胜于结论。
学到了研究的一些小技巧,以前只是在其他方面,用在这方面没有概念。
开拓了研究的视野。
呵呵,今天真是好日子。
|
能力值:
( LV7,RANK:100 )
|
-
-
18 楼
感谢楼主分享
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
简洁明了,不错。谢谢哦。
|
能力值:
( LV9,RANK:490 )
|
-
-
20 楼
确切的说是垃圾指令.你写一行他也能整出一眼望不到边的代码.
恩,似乎VB这方面更强大,看来得转行了.
|
能力值:
( LV9,RANK:290 )
|
-
-
21 楼
今天又学习了(*^__^*) 嘻嘻……
|
能力值:
( LV10,RANK:170 )
|
-
-
22 楼
还是别学VB了, 要不然它也被必杀了. :)
|
能力值:
( LV2,RANK:10 )
|
-
-
23 楼
mark一下, 再学习。
|
能力值:
( LV2,RANK:10 )
|
-
-
24 楼
函数执行完后就返回到楼主说的地方了
|
能力值:
( LV9,RANK:190 )
|
-
-
25 楼
标记一下,正捉摸写一个高度源代码的函数。好像有所启发。
|
|
|