能力值:
( LV15,RANK:500 )
|
-
-
2 楼
JMP和CALL有绝对和相对的, 近距跳转不需要重定位.
OD选中show NEAR jump modifers即可看到.
可以使用自定义代码pop出当前的位置, 然后减去代码和字串之间的偏移,
不过还要注意的是如果你修改的代码中间有包含重定位的被修改成普通代码, PE Loader会把你的代码当作地址给QJ了.
因此编辑重定位表也是好主意, 目前我是用程序倒出后, 文本编辑器来修改/减少定位项, 然后删掉原来的重定位表, 用relox重新生成. 主要是懒, 月末我放一份直接编辑重定位表的程序源码去sourceforge先, 希望感兴趣的兄弟帮助完善.
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
我靠, 没想到这么复杂, 这回死了...
我看了一下, 我的那个jmp没有near modifier啊, 为什么也能重定位?
|
能力值:
( LV15,RANK:500 )
|
-
-
4 楼
你的JMP不是near那就不是"你"的jmp而是"dll"原来的jmp, 包含绝对地址的都在重定位表里面有重定位项
|
能力值:
( LV9,RANK:610 )
|
-
-
5 楼
//简单的给你解答:
12345678 "aaaa"
12345678为地址的话!
要不我给你个简单点的方法吧,拿WINHEX直接把“aaaa”写入程序保存,这样你就知道了物理相对地址,然后再吧它转换成相对虚拟地址,也就是要计算了,或者直接拿OD看一下就知道了,然后你再调用,也就是再每次调用的时候都是相对虚拟地址+基址。这样就没什么错误了!
比如:
00120000 "aaaa" //相对物理地址
程序运行后假设你在,00520000处找到了,并且假定基址是00400000那么相对虚拟地址就是00120000,当然这个地址和相对物理地址是不一样的,我这里是举的例子。然后你就知道相对虚拟地址了,以后加载的时候,先获取基址再加上这个相对虚拟地址就可以了。
|
能力值:
(RANK:330 )
|
-
-
6 楼
我等你,半仙大人
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
我那个jmp是自己改的啊, 原来那里的代码都跟jmp不沾边, 我把整个一块代码nope掉了, 然后自己在里面写的代码
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
不明白, 啥意思?我准备在od里手工写代码啊, 还能怎么改?
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
改法就象下面这样:
10000000: push eax
10000001: call 10000006
10000006: pop eax
10000007: and eax,0ff000000 (将eax的后六位清零)
这时eax里就是重定位后的基址了,剩下的就好办了
.......(自己的代码)
pop eax (对应于10000000处的push eax命令)
这是对于基址是10000000及1c000000等的求重定位基址的方法,如是其他基址,也只要相应修改and
命令或者还加个加法就行了
|
能力值:
( LV4,RANK:50 )
|
-
-
10 楼
pop用过,感觉有点麻烦
我这样处理:
100123: call 100150
100124 add(或sub) eax,(十六进制值)
...
100150 mov eax,[esp]
100151 retn
呵呵,100150这个地址可以重复使用.也就是可以多次call 100150
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
多谢各位的提示, 晚点我试试
|
能力值:
( LV9,RANK:290 )
|
-
-
12 楼
call/pop/sub!
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
用这一招搞定了。再问个问题,jmp和call后面的地址系统会自动重定位?
[QUOTE=wyqzm;374477]pop用过,感觉有点麻烦
我这样处理:
100123: call 100150
100124 add(或sub) eax,(十六进制值)
...
100150 mov eax,[esp]
100151 retn
呵呵,100150这个地址可以重复使用.也就是可以多次c...[/QUOTE]
|
能力值:
( LV13,RANK:410 )
|
-
-
14 楼
call pop是取当前的地址。 不是自动重定位。
直接编辑重定位表就可以了。LordPe可以
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
我的问题是例如上面的代码里的这行:
call 100150
这里的100150怎么处理的. 我编辑的时候肯定是写绝对值100150, 但载入的时候这个地址可能变成101150. 这是pe载入时自动处理的吗?
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
我的问题是例如上面的代码里的这行:
call 100150
这里的100150怎么处理的. 我编辑的时候肯定是写绝对值100150, 但载入的时候这个地址可能变成101150. 这是pe载入时自动处理的吗?
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
请大虾们指点一下啊, 或者告知哪里能查到相关知识, 不胜感谢
|
|
|