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。

posted @ 2020-12-09 22:40  bloglife-yz  阅读(46)  评论(0)    收藏  举报