首页
社区
课程
招聘
[求助]一段外挂代码,求赐教!!!
发表于: 2015-10-2 13:31 5353

[求助]一段外挂代码,求赐教!!!

2015-10-2 13:31
5353
大家好,我是一个初学者,我遇到一个问题,急切得到大家的帮助!问题如下:
我最近在学习外挂,遇到一段代码,将挂的人一笔带过,可能是我知识不够,带入如下:
void HookAllAttack()
{
	LPVOID adr = (LPVOID)0x0063011F;
	DWORD offset = (DWORD)IsAttack - (DWORD)adr - 5;
	BYTE code[5];
	code[0]=0xe9;//jmp
	*PDWORD(code + 1) = offset;
	DWORD oldprotect;
	if(VirtualProtect(adr,5,PAGE_EXECUTE_READWRITE,&oldprotect))
	{
		memcpy(adr,code,5);
		VirtualProtect(adr,5,oldprotect,&oldprotect);
	}
}


我不懂的是这一句DWORD offset = (DWORD)IsAttack - (DWORD)adr - 5; IsAttack 这个上程序中定义的一个函数,这个懂,adr这个是游戏中一个函数的地址,5是游戏中要修改的一段代码的字节数。
问题: (DWORD)IsAttack - (DWORD)adr这个两个地址相减得到的不是一个偏移量吗,这两个减了之后还减去5,为什么要减去这个字节数,这3个数相减得到的究竟是什么?我都搞不清
小弟愚钝,愿各位大神不吝赐教!在此先谢谢各位!

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

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 117
活跃值: (57)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
首先,打好基础比什么都重要。
E9跳转指令的解释是EIP+jmp后面的偏移=目的地址。
所以得出 E9指令后面的偏移值=目的地址-EIP。可以理解吧?
同样,EIP=E9指令的地址+E9指令的长度(5个字节)。
所以带入公式: E9指令后面的偏移值=目的地址-(E9指令的地址+E9指令的长度(5个字节))。
最后不就得出来:E9所需要的偏移值=目的地址-E9指令的地址-5(5就是E9指令的长度)。
2015-10-2 13:46
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
你讲的非常详细,我懂了,谢谢你!
2015-10-2 15:01
0
雪    币: 26
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
E9这条指令占用5个字节  所以咯~先保存前面的5个字节 然后在写进去
2015-10-2 16:11
0
雪    币: 69
活跃值: (30)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
很久没手动写跳板了,都嘛是用微软的Detours。
2015-10-2 17:34
0
雪    币: 79
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
求交流 也在学习写外挂 加Q 84476063
2015-10-2 18:53
0
雪    币: 5608
活跃值: (1585)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
这是一段典型的inline HOOK程序,
2015-10-2 20:09
0
雪    币: 267
活跃值: (438)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
8
最最普通的 JMP 汇编指令机器码构造不具备神秘性,看到标题我误以为有好码
2015-10-3 08:56
0
游客
登录 | 注册 方可回帖
返回