API钩取注意点
API钩取注意点
在原API的地址上用memcpy函数将JMP XXXXXXXX5个字节的内容写入。
JMP XXXXXXXX对应的机器码是E9 XXXXXXXX,后面4个字节的X就是要跳转的地址,也就是你写的函数的地址。
这里需要注意:JMP XXXXXXXX和E9 XXXXXXXX这两个的XXXXXXXX是不一样的,JMP后面的X就是你要跳转的绝对虚拟地址(VA),但是机器码E9后面的X并不是,需要转换一下:E9后面的地址X=你要跳转的地址-JMP命令的地址-5。
所以需要先得到E9后面的地址,比如是dwaddress,然后memcpy(pBuf[1],dwaddress,4),就可以将E9 XXXXXXXX存入pBuf中,这里pBuf为:PBYTE pBuf[5]={0xE9,0},存入之后则为完整的E9 XXXXXXXX。
浙公网安备 33010602011771号