首页
社区
课程
招聘
[求助]GetProcAddress比较有意思的现象
发表于: 2010-11-26 14:35 5551

[求助]GetProcAddress比较有意思的现象

2010-11-26 14:35
5551
今天想实现劫持explore的CreateProcess,然后修改被创建进程的entrypoint。首先解决的问题是远程线程dll注入explore,结果遇到个有趣的显现。很是迷惘,希望大牛解惑!
我简单写了个模拟现象的代码:
#include "stdafx.h"
#include <iostream.h>
#include <windows.h>

int main(int argc, char* argv[])
{
	printf("Hello World!\n");
	DWORD dwProcAddr = 0;
	dwProcAddr = (DWORD)GetProcAddress( GetModuleHandle( "kernel32.dll" ), "CreateProcessA" );
	cout<<hex<<dwProcAddr<<endl;
	cin.get();
	
	return 0;
}

下面看看单步调试的输出结果:

直接运行的结果:

直接运行的结果是对的。

为什么单步会出现那个的结果。。很是迷惑

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 656
活跃值: (448)
能力值: ( LV12,RANK:360 )
在线值:
发帖
回帖
粉丝
2
劫持explore? 太邪恶了..先感染程序,不改入口点,杀毒就不报了,然后用explore改感染程序的入口点?太邪恶了...
2010-11-26 14:44
0
雪    币: 410
活跃值: (214)
能力值: ( LV13,RANK:220 )
在线值:
发帖
回帖
粉丝
3
这种方法网上早有流传,我只是想自己实现下,别无它意。只是技术追求。哪位大牛能帮我解惑?为什么单步跟直接运行,取得的函数地址不同
2010-11-26 14:46
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我试着没问题啊 !!!
2010-11-26 15:00
0
雪    币: 293
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
试了一下,发现我这里没有这个现象。用的VS2005,貌似不能直接编译成功啊

还要把

#include <iostream.h>


改成

#include <iostream>

using namespace std;
2010-11-26 15:03
0
雪    币: 5221
活跃值: (3001)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
#include <iostream>
#include <windows.h>

int main(int argc, char* argv[])
{
  printf("Hello World!\n");
  DWORD dwProcAddr = 0;
  dwProcAddr = (DWORD)GetProcAddress( GetModuleHandleA( "kernel32.dll" ), "CreateProcessA" );
  printf("%x",dwProcAddr);
 // cout<<hex<<dwProcAddr<<endl;
 // cin.get();
  system("pause");
  return 0;
}


vs2010 没发现楼主的问题
2010-11-27 09:57
0
雪    币: 401
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
VS2005+WinXP SP3没有出现问题。
2010-11-27 10:57
0
雪    币: 410
活跃值: (214)
能力值: ( LV13,RANK:220 )
在线值:
发帖
回帖
粉丝
8
可能跟机器上装了什么软件有关系,我自己的本子上也没问题
2010-11-27 11:10
0
游客
登录 | 注册 方可回帖
返回
// // 统计代码