首页
社区
课程
招聘
[已解决]OD 右键菜单项,如何下断
发表于: 2012-7-23 14:59 9278

[已解决]OD 右键菜单项,如何下断

2012-7-23 14:59
9278
// 获取当前命令行的注释
// uCurEip 需获取行的EIP地址
// uNextEip 下条指令的EIP,通过上条指令的EIP+指令长度获得
// szCmt 输出缓冲
// 返回注释的长度 
int GetCmdComment(ULONG uCurEip, ULONG uNextEip, char * szCmt)
{
	char buf[1024]={0};
	ULONG uDataAddr = uBaseAddr + 0x000CD6A8;        // uBaseAddr OD基址,我用的是全局变量,
	ULONG uGetCmtProc1 = uBaseAddr + 0x00046618;     // 其它位置获取的,结果类似0x400000
	ULONG uGetCmtProc2 = uBaseAddr + 0x00054068;
	char *pAsm = NULL, *pCmt = NULL;

	_asm
	{
		pushad
		pushfd
		push uNextEip
		push uCurEip
		push uDataAddr
		call uGetCmtProc1
		mov ebx, eax
		add esp, 0xC
		test ebx, ebx
		je end
		push ebx
		call uGetCmtProc2
		add esp, 0x4
		mov pAsm, ecx
		end:
		popfd
		popad
	}

	strcpy(szCmt, "\0");

	if (pAsm != NULL)
	{
		strcpy(buf, pAsm);
		pCmt = strchr(buf, '\r');
		if (pCmt != NULL)
			*pCmt = '\0';
		pCmt = strchr(buf, '\n');
		if (pCmt != NULL)
			*pCmt = '\0';
		pCmt = strrchr(buf, ';');
		if (pCmt != NULL)
		{
			while (*pCmt==';' || *pCmt==' ')
				*pCmt ++;
			strcpy(szCmt, pCmt);
		}
	}

	return strlen(szCmt);
}

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

上传的附件:
收藏
免费 6
支持
分享
最新回复 (7)
雪    币: 47147
活跃值: (20485)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
简单看了一下,这段代码可以关注一下:

00422DD4    .  83FB 02       cmp     ebx, 2                           ;  Switch (cases 2..12)
00422DD7    .  75 14         jnz     short 00422DED
00422DD9    .  6A 03         push    3                                ;  Case 2 of switch 00422DD4



你可以用WriteFile设断,然后执行 复制/到文件 ,写一个文件,就会断下,然后一层层地就能返回到上述的消息循环处……
2012-7-23 15:45
0
雪    币: 6528
活跃值: (3449)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
Σ(っ °Д °;)っ 离老大好近
2012-7-23 19:00
0
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
干嘛不直接写个插件?
2012-7-23 20:25
0
雪    币: 203
活跃值: (174)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
是在写一功能插件,插件获取注释前面的部分,没什么难度,就是后面OD动态生成的注释,获取效果不好。
2012-8-4 17:51
0
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
那个注释一般有2种信息,一种是用户注释,第二种是用DecodeAddress,基本可以满足你了。
2012-8-4 21:26
0
雪    币: 203
活跃值: (174)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
DecodeAddress 得到的注释不太理想,OD单步运行时自动添加的函数参数,DecodeAddress只得到参数名,得不到参数值,并且自动在注释前面添加了特殊标记字符,用来区别是第几个参数,有些时候,还会得到一些没有意义的注释。

现在问题已解决了,用的原理和右键复制是一样的,效果很好,谢谢 liuyq 的指点。
2012-8-4 23:31
0
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
参数值就在堆栈里,为什么不自已取?
2012-8-5 09:34
0
游客
登录 | 注册 方可回帖
返回
//