首页
社区
课程
招聘
[求助]代码注入中的函数地址和函数长度
发表于: 2011-1-7 11:42 4046

[求助]代码注入中的函数地址和函数长度

2011-1-7 11:42
4046
在代码注入中,通常使用以下方法得出函数长度
void FUNC()
{
  XXXXX
}
void FUNC_END()
{
}

则FUNC()的长度为
DWORD dwLen = (char*)FUNC - (char*)FUNC_END;
通过
WriteProcessMemory()将FUNC()的代码写到目标进程中。
我现在的问题是,
FUNC_END()函数被编译器生成后,不在FUNC()的紧接着的后面
而是跑到FUNC()前面去了。
我使用的编译器是VS2010。
已经禁止代码优化
结果还是这样
使用Debug版会有这个问题,Release版没有这个问题。

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 64
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
那就别用DEBUG版。
2011-1-7 12:39
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
3
那是因为DEBUG版的通常使用跳转表,就像这样:

00401004      CC                         int3
00401005   $  E9 86000000       jmp testXXX.FUN
0040100A   $  E9 11000000       jmp testXXX.main
0040100F      CC                         int3
00401010      CC                         int3

要注入的代码如果比较复杂,还是用shellcode式的代码吧
2011-1-7 19:32
0
游客
登录 | 注册 方可回帖
返回
//