首页
社区
课程
招聘
WriteProcessMemory函数使用问题~~~~
发表于: 2008-11-21 19:46 5592

WriteProcessMemory函数使用问题~~~~

2008-11-21 19:46
5592
#include <iostream>
#include <windows.h>
using namespace std;
typedef void(*pF)();
void test()
{
        cout<<"this is a pF test!"<<endl;
}
void fun()
{
        cout<<endl;
}
void Hook(pF pf1,pF pf2)
{
        int data=*(int*)((unsigned char*)pf2+1)+(int)pf2-(int)pf1;
        SIZE_T result=0;
        WriteProcessMemory(GetCurrentProcess(), (int*)((unsigned char*)pf1+1),&data, 4, &result);
}
int main()
{
        Hook(fun,test);
        fun();
        system("pause");
}
上述代码vs2005 debug通过~~~debug下函数指针的值,第一个字节一般是jmp指令,代码修改了jmp后的地址值,修改了fun()函数的调用。
不明白的是int data=*(int*)((unsigned char*)pf2+1)+(int)pf2-(int)pf1;这句话(int)pf2-(int)pf1是用来干什么的*(int*)((unsigned char*)pf2是test的地址,为什么直接写到fun的jmp指令后面不行,高手指教~~~~~·

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 962
活跃值: (1686)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
还存在缓冲区安全检查~
2008-11-21 21:40
0
雪    币: 44
活跃值: (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
两个函数之间的偏移量
2008-11-21 22:27
0
雪    币: 131
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
可否详细讲下~~~
2008-11-22 22:49
0
雪    币: 231
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qdk
5
因为你这个例子里面是jmp的label,这时候jmp的地址以立即数的方式出现。

所以是跳转到相对的地址,即将jmp(E9)指令后跟着的立即数加到EIP寄存器里面去。

修改前
printf("%.8x\n",pf1);
printf("%.8x\n",pf2);
printf("%.8x\n",*((int*)pf1));
printf("%.8x\n",*((int*)pf2));

00411186
00411096
0003d5e9
000445e9

修改后
printf("%.8x\n",pf1);
printf("%.8x\n",pf2);
printf("%.8x\n",*((int*)pf1));
printf("%.8x\n",*((int*)pf2));

00411186
00411096
000355e9
000445e9

看清楚了吧,起跳的位置不一样,一个是从00411186,一个是从00411096

如果都改成e9 45 04,显然就不对了
2008-11-22 23:55
0
雪    币: 131
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
谢谢回复,还想请教您 (int)pf2-(int)pf1;是什么意思?
2008-11-23 19:00
0
雪    币: 220
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
pf_fun=*(int*)((unsigned char*)pf2+1)+(int)pf2+5   ->pf2函数体地址
从pf1跳到pf2(函数体)的偏移为pf_fun-((int)pf1+5)=*(int*)((unsigned char*)pf2+1)+(int)pf2-(int)pf1;
2008-11-24 08:54
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
(int)pf2-(int)pf1 是pf2到pf1之间的偏移
2008-11-24 09:58
0
游客
登录 | 注册 方可回帖
返回
//