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

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

2008-7-30 22:43
6891
我要修改下面的地址
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 如何修改?

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞0
打赏
分享
最新回复 (10)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
DazzleJ 2008-7-31 00:54
2
0
相对地址 = 目标地址 - 跳转指令地址 - 5
雪    币: 182
活跃值: (50)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
pathletboy 2 2008-7-31 01:06
3
0
相对地址 = 目标地址 - (跳转指令地址 + 5)
这样更好理解。
雪    币: 1946
活跃值: (238)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
Bughoho 8 2008-7-31 01:22
4
0
相对地址 = 目标地址 - (跳转指令地址 + 跳转指令长度)
这样更好理解。
雪    币: 7651
活跃值: (493)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
achillis 15 2008-7-31 01:35
5
0
其实就是自己计算跳转指令的问题.
膜拜楼上三位大牛牛~
雪    币: 949
活跃值: (18)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
jasonnbfan 8 2008-7-31 14:58
6
0
其实我发现,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 就是他们之间的字节数。
雪    币: 949
活跃值: (18)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
jasonnbfan 8 2008-7-31 15:00
7
0
根据这个原理,我知道了,不管内存里载入地址怎么变化,根本不影响 jmp 因为他后面的是字节数。
目的地址,和jmp指令之间的字节数是不会变的。
雪    币: 226
活跃值: (15)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
十三少 2 2008-7-31 15:08
8
0
可惜你根据这个原理理解错了
雪    币: 949
活跃值: (18)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
jasonnbfan 8 2008-7-31 16:24
9
0
我理解错了么?请楼上的兄弟指正下。
雪    币: 245
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
binglan212 2008-7-31 16:50
10
0
如果在同一个文件里面是没错的,但是如果跳转到你创建的模块,或者载入的其他文件,可能需要自己计算jmp的数据

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