首页
社区
课程
招聘
[求助]请教关于修改内存,动态的汇编代码如何修改?
发表于: 2008-7-30 22:43 7369

[求助]请教关于修改内存,动态的汇编代码如何修改?

2008-7-30 22:43
7369
我要修改下面的地址
1001212C      83C4 0C       ADD ESP,0C
修改成  
E9 C0 D7 FF FF 90 90 90 90 90 // 1001212C    ^\E9 C0D7FFFF   JMP 1000F8F1

char JMP_Code[]  = {0xE9,0xC0,0xD7,0xFF,0xFF,0x90,0x90,0x90,0x90,0x90};

就是跳到1000F8F1这个地址,这个地址修改内容,然后再跳回来。

现在的问题是,修改的不是Exe文件,是dll文件,每次加载后载入地址都会变化。

比如我算出了加入内存后的Jmp目标地址 0xEBF8F1,如何修改这个动态的内容呢?

JMP 1000F8F1 改成 JMP 0xEBF8F1 ,或者JMP到别的地方,我如何修改机器码的这个指令?

具体就是我JMP_Code 如何修改?

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

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
相对地址 = 目标地址 - 跳转指令地址 - 5
2008-7-31 00:54
0
雪    币: 184
活跃值: (65)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
相对地址 = 目标地址 - (跳转指令地址 + 5)
这样更好理解。
2008-7-31 01:06
0
雪    币: 1946
活跃值: (263)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
4
相对地址 = 目标地址 - (跳转指令地址 + 跳转指令长度)
这样更好理解。
2008-7-31 01:22
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
5
其实就是自己计算跳转指令的问题.
膜拜楼上三位大牛牛~
2008-7-31 01:35
0
雪    币: 949
活跃值: (18)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
6
其实我发现,jmp 到某一个地址,实际上是jmp + 字节数。

这个字节数就是目标地址和跳转地址的差,但是我没发现加5这个问题。


010073F0 . /EB 0E JMP SHORT notepada.01007400
010073F2 > |8379 74 0E CMP DWORD PTR DS:[ECX+74],0E
010073F6 .^|76 E2 JBE SHORT notepada.010073DA
010073F8 . |33C0 XOR EAX,EAX
010073FA . |3999 E8000000 CMP DWORD PTR DS:[ECX+E8],EBX
01007400 > \0F95C0 SETNE AL


看上面的jmp 7400  - 73f2 刚好等于 E 就是他们之间的字节数。
2008-7-31 14:58
0
雪    币: 949
活跃值: (18)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
7
根据这个原理,我知道了,不管内存里载入地址怎么变化,根本不影响 jmp 因为他后面的是字节数。
目的地址,和jmp指令之间的字节数是不会变的。
2008-7-31 15:00
0
雪    币: 226
活跃值: (15)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
8
可惜你根据这个原理理解错了
2008-7-31 15:08
0
雪    币: 949
活跃值: (18)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
9
我理解错了么?请楼上的兄弟指正下。
2008-7-31 16:24
0
雪    币: 245
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
如果在同一个文件里面是没错的,但是如果跳转到你创建的模块,或者载入的其他文件,可能需要自己计算jmp的数据

其实也可以使用 jmp dword ptr[XXXXXx]
   或者         call dword ptr[XXXXXX]
这种方式,这样就不需要计算了,只需要修改,嘿嘿
2008-7-31 16:50
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
=基址+偏移吧? 固定到指针中,就是寄存器,这样就可以读到地址,也可以读到地址里面的内容
2008-7-31 21:46
0
游客
登录 | 注册 方可回帖
返回
//