首页
社区
课程
招聘
[分享]必杀技公布——用特征码定位关键代码,秒杀MFC程序
发表于: 2009-2-23 21:20 84209

[分享]必杀技公布——用特征码定位关键代码,秒杀MFC程序

2009-2-23 21:20
84209

不可说不可说。
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2009年02月23日 21:02:58


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 7
支持
分享
最新回复 (132)
雪    币: 239
活跃值: (59)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
呵呵  好方法现在才知道了
2009-2-23 21:45
0
雪    币: 264
活跃值: (145)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这个太强了,比脚本方便~~~
2009-2-23 21:47
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
哈哈!谢谢!
2009-2-23 21:51
0
雪    币: 479
活跃值: (25)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
5
谢谢分享~~~~~
2009-2-23 22:01
0
雪    币: 232
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
果然是必杀技啊,多谢了

好像不一定是搜到的第一个CALL,
2009-2-23 22:22
0
雪    币: 268
活跃值: (95)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
7
学习收藏了,谢谢楼主分享!
2009-2-23 22:35
0
雪    币: 423
活跃值: (11)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
8
书呆不呆.

好一招"一阳指"

谢谢.
回去研究研究原理.
2009-2-23 22:37
0
雪    币: 474
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
随便找一个MFC42的CM,用OD载入,有壳,不用管,直接F9,然后ALT+E,双击MFC42.DLL,CTRL+F,输入CALL [EBP+14],在第一个找到的地址处F2下断点。


真够简洁明了的
2009-2-23 22:42
0
雪    币: 205
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
试过了,确实必杀,高人呢
2009-2-24 00:10
0
雪    币: 485
活跃值: (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
11
本来就是看好这MFC有点花指令的作用才学MFC的.
刚用几天就被必杀了,我不用MFC了还不行吗?
2009-2-24 00:47
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
12
为什么你都说MFC有点花指令的作用?
2009-2-24 00:59
0
雪    币: 231
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qdk
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] 
2009-2-24 01:19
0
雪    币: 98803
活跃值: (201054)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
14
你的贴违规了.
2009-2-24 02:58
0
雪    币: 231
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qdk
15
太好了,多谢书呆彭
2009-2-24 04:07
0
雪    币: 44
活跃值: (24)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
16
很牛.很牛.很牛.
2009-2-24 04:38
0
雪    币: 423
活跃值: (11)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
17
理论胜于结论。

学到了研究的一些小技巧,以前只是在其他方面,用在这方面没有概念。

开拓了研究的视野。

呵呵,今天真是好日子。
2009-2-24 09:06
0
雪    币: 362
活跃值: (25)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
18
感谢楼主分享
2009-2-24 09:20
0
雪    币: 411
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
简洁明了,不错。谢谢哦。
2009-2-24 09:51
0
雪    币: 485
活跃值: (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
20
确切的说是垃圾指令.你写一行他也能整出一眼望不到边的代码.
恩,似乎VB这方面更强大,看来得转行了.
2009-2-24 10:15
0
雪    币: 251
活跃值: (25)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
21
今天又学习了(*^__^*) 嘻嘻……
2009-2-24 11:07
0
雪    币: 196
活跃值: (135)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
22
还是别学VB了, 要不然它也被必杀了. :)
2009-2-24 11:44
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
mark一下, 再学习。
2009-2-24 12:31
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
函数执行完后就返回到楼主说的地方了
2009-2-24 13:04
0
雪    币: 666
活跃值: (201)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
25
标记一下,正捉摸写一个高度源代码的函数。好像有所启发。
2009-2-24 17:23
0
游客
登录 | 注册 方可回帖
返回
//