| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1623 人关注过本帖
标题:看来还是发个帖子求教吧-重定位
只看楼主 加入收藏
zongzhitao
Rank: 2
等 级:论坛游民
帖 子:16
专家分:10
注 册:2010-10-1
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:22 
看来还是发个帖子求教吧-重定位
重定位
call @F
@@:
pop ebx
sub ebx,offset@B

这段代码问题之前有人问过了,我有几个地方还是有一点困惑
1    call @f    换成push @f或者push offset @f 对不对
2    sub ebx,offset@B    换成    sub ebx,@B    对不对
我在RADASM中试了试第二个好像是一样的。
谢谢大家了,顺便祝大家国庆快乐
搜索更多相关主题的帖子: 帖子 
2010-10-01 09:46
zongzhitao
Rank: 2
等 级:论坛游民
帖 子:16
专家分:10
注 册:2010-10-1
收藏
得分:0 
疑惑ing,如果call将正确的返回地址进栈,那么push能不能呢,push @f和push offset @f,我觉得前面一个可以,后面一个不对。
2010-10-01 09:50
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
试试行不行啊

可以编译运行那就是行啦
2010-10-01 10:24
zongzhitao
Rank: 2
等 级:论坛游民
帖 子:16
专家分:10
注 册:2010-10-1
收藏
得分:0 
刚和丫头去了超市,人真TMD多。用的RADASM不好编译啊
2010-10-01 10:49
zongzhitao
Rank: 2
等 级:论坛游民
帖 子:16
专家分:10
注 册:2010-10-1
收藏
得分:0 
版主,我还给你发了短信呢
2010-10-01 10:50
zongzhitao
Rank: 2
等 级:论坛游民
帖 子:16
专家分:10
注 册:2010-10-1
收藏
得分:0 
好吧,我试过了cal 改成 push 加了一个offset也一样
XXXXXXXX指令引用的XXXXXXXXXXX内存。该内存不能为writen
2010-10-01 12:01
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
这个重定位的原理是什么呢?
2010-10-01 13:47
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
别发那个站内信 不好用 呵呵 有事发帖说。。

不明白原理 当然随便试不出来了

1 这个应用不是很多了 了解下就好了 如果不是特别感兴趣 建议您背下来 会用就好了

2 你想知道 容我慢慢道来
2010-10-01 13:49
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
1 为嘛需要重定位 简单的来讲 病毒需要将自身插入其他程序 其他进程 于是 需要执行重定位

2 重定位的原理?

这个要用机器码来理解 看编译出来的版本

00401000 >  E8 00000000     CALL GUI.00401005    ;压401005
00401005    5B              POP EBX    ;弹出401005
00401006    81EB 05104000   SUB EBX,GUI.00401005    ;一减 是0

也就说 偏移量为0 为啥啊 因为这里是直接写在程序里的

我要把这段代码挪个地方 比如402000处 则

00402000 >  E8 00000000     CALL GUI.00402005    ;压402005
00402005    5B              POP EBX    ;弹出402005
00402006    81EB 05104000   SUB EBX,GUI.00401005    ;一减 是1000

偏移量是1000 也就做到了重定位。。

大概就这样了


[ 本帖最后由 zklhp 于 2010-10-1 14:33 编辑 ]
2010-10-01 14:02
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:20 
这段代码问题之前有人问过了,我有几个地方还是有一点困惑
1    call @f    换成push @f或者push offset @f 对不对
2    sub ebx,offset@B    换成    sub ebx,@B    对不对

按说 这里 加offset 和不加是一样的 因为@F是标号 编译器对标号的默认是取偏移量(我也不确定 貌似是)


 
对于2 等价 对于1 两个写法等效

那对不对呢?

貌似不对诶

为嘛还是看机器码

我把这几种都贴出来

    push offset @F
    @@:
    pop ebx
    sub ebx,offset @B

00401000 >  68 05104000     PUSH GUI.00401005
00401005    5B              POP EBX
00401006    81EB 05104000   SUB EBX,GUI.00401005


    push @F
    @@:
    pop ebx
    sub ebx,offset @B

00401000 >  68 05104000     PUSH GUI.00401005
00401005    5B              POP EBX
00401006    81EB 05104000   SUB EBX,GUI.00401005


    push @F
    @@:
    pop ebx
    sub ebx,@B

00401000 >  68 05104000     PUSH GUI.00401005
00401005    5B              POP EBX
00401006    81EB 05104000   SUB EBX,GUI.00401005

自己看啦

为嘛不行啊 因为机器码中已经包含了地址了 也就是 05104000 你把它复制到其他地方 指令的内容 不会变 于是 这个偏移量不会变~

故而 不行

2010-10-01 14:16
快速回复:看来还是发个帖子求教吧-重定位
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.080628 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved