我的目的是修改一个函数入口JMP 到另一个函数上去
需要修改的地址是
F250A451
函数入口如下
lkd> U F77D8451
f77d8451 83ec04 sub esp,0x4
f77d8454 55 push ebp
f77d8455 8bec mov ebp,esp
f77d8457 fa cli
要跳转到的地址是
0x8687B9B4
我的做法是
unsigned long addr;
UCHAR JmpCode[] = {0xEA, 0xB4, 0xB9, 0x87,0x86}; //JMP 0x8687B9B4
addr=0xF250A451;
__asm{//去内存保护
cli
mov eax,cr0
and eax,not 10000h
mov cr0,eax
}
memcpy((PVOID)(addr),JmpCode,5); //写跳转代码
__asm{//恢复内存保护
mov eax,cr0
or eax,10000h
mov cr0,eax
sti
}
代码执行后 我用WINDBG 看被修改的地址 F250A451
发现如下
lkd> U F77D8451
f77d8451 eab4b98786796c jmp 6c79:8687b9b4
不明白前面的6c79: 是怎么来的 而且一单触发这个跳转马上蓝屏
请高手指正,应该怎么写?
如果我想把跳转代码写成
UCHAR JmpCode[] = {0xE9, 0, 0, 0,0};
后面的地址应该怎么计算?
这个问题郁闷了好几天 新手上路 希望得到大侠指点!
顺祝大家劳动节快乐!
[注意]看雪招聘,专注安全领域的专业人才平台!