首页
社区
课程
招聘
[Anti Virus专题]1.2 - 1.病毒的重定位技术
2009-4-9 21:22 33418

[Anti Virus专题]1.2 - 1.病毒的重定位技术

2009-4-9 21:22
33418
收藏
点赞7
打赏
分享
最新回复 (54)
雪    币: 227
活跃值: (383)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
hatling 3 2009-4-16 15:34
26
0
我觉得应该改为
......
sub ebx,Dels
lea edx,[ebx+szData]
.......
雪    币: 193
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cham 2009-4-16 17:35
27
0
[QUOTE=hatling;607581]我觉得应该改为
......
sub ebx,Dels
lea edx,[ebx+szData]
.......
[/QUOTE]
这两个不是一样的么!
雪    币: 315
活跃值: (23)
能力值: ( LV9,RANK:220 )
在线值:
发帖
回帖
粉丝
xfish 5 2009-4-16 21:09
28
0
to recnad:
to hatling:
你们的一个是sub ebx, dels 一个是lea  ebx, [ebx - Dels] 。
多此一举。
本身求出来dels的偏移,直接+相对偏移就是重定位地址了。。
雪    币: 136
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yangras 2009-4-18 15:32
29
0
明白了 ...
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gybison 2009-4-19 02:29
30
0
弱弱的问一下,pop ebx之后,程序ret时又返回到哪里去了?不解
雪    币: 204
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
StarWing 2009-4-19 03:34
31
0
貌似还有一种方法,是《Windows核心编程》里面的。说是在需要字符串入栈的地方,直接call,如下:
call arg2
db "text2",0
arg2:
call arg1
db "text1",0
arg1:
...

但是照你这么说的话,call就应该是相对地址了。那么怎么让call把绝对地址入栈呢?我的想法是call far arg1,不知道对不对……希望楼主解释一下,谢谢~~~
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
recnad 2009-4-19 11:10
32
0
[QUOTE=xfish;607729]to recnad:
to hatling:
你们的一个是sub ebx, dels 一个是lea  ebx, [ebx - Dels] 。
多此一举。
本身求出来dels的偏移,直接+相对偏移就是重定位地址了。。[/QUOTE]
直接+相对偏移就是重定位地址了, 但是这个相对偏移每次还要用变量的地址减去offset dels来算出, 这样写代码时也比较麻烦阿。
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
starhust 2009-4-22 09:35
33
0
学习了,希望楼主讲的在详细点 让我们这些小菜也能听懂啊
雪    币: 104
活跃值: (68)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
刘国华 2009-4-26 19:39
34
0
返回地址是call的返回地址,也就是dels
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
一转身 2009-4-27 14:11
35
0
好文章,确实很好
雪    币: 150
活跃值: (36)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Anuonuo 2009-4-28 19:49
36
0
  光问问题没啥用,自己实践一下就会全明白楼主说的意思了~~~
雪    币: 59
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
圣新冰心 2009-5-6 15:22
37
0
哎,还是老掉牙的法方重定位,杀软早就盯上了,其实还有其他方法,比如seh等
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
huzg胡 2009-5-13 15:41
38
0
call  Dels2
    Dels:
    int  3
    int  3
    Dels2:
     pop  ebx
     lea  edx, [ebx + szText - Dels] ; edx = szText
    ret
先顶下,再问!
请问楼主?
pop ebx ;这里出栈了,
后面就直接ret,不会导致堆栈不平衡吗?
雪    币: 186
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hackerlx 2009-5-22 22:08
39
0
楼主是不是一不小心打错了哦,,,,,
我也觉得不能ret啊,,,断点地址已经弹出来了,,,再ret的话就是一个未知地址了,,, 我觉得程序肯定会出错,,,
lea  edx, [ebx + szText - Dels] ; edx = szText
后面应该直接执行到程序退出吧
雪    币: 156
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
felixzxh 2009-5-24 16:41
40
0
[QUOTE=hackerlx;629276]楼主是不是一不小心打错了哦,,,,,
我也觉得不能ret啊,,,断点地址已经弹出来了,,,再ret的话就是一个未知地址了,,, 我觉得程序肯定会出错,,,
lea  edx, [ebx + szText - Dels] ; edx = szText
后面应该直接执行到程序退出吧[/QUOTE]

有道理,是不是应该在pop后加个push呢
雪    币: 19
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
fancily 2009-5-24 21:28
41
0
lea  edx, [ebx + szText - Dels] ; edx = szText
ret 不用加的.
加了程序就退出了.
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
feiyucq 2009-5-25 01:34
42
0
好文,mark一下
雪    币: 1270
活跃值: (104)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
AsmDebuger 1 2009-5-25 16:11
43
0
[QUOTE=huzg胡;623300]call  Dels2
    Dels:
    int  3
    int  3
    Dels2:
     pop  ebx
     lea  edx, [ebx + szText - Dels] ; edx = szText
    ret
先顶下,再问!
请问楼主...[/QUOTE]

这个ret是和“__Entry”配对用的,和重定位无关。
楼主的意思这是个完整的子程序。
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zcjzch 2009-5-31 22:47
44
0
好文,终于明白了!
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jordanpz 2009-6-11 22:52
45
0
您的代码 是看懂了但您说的还是看不懂,call Dels2, call Dels ?
雪    币: 16
活跃值: (330)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ZSYL 2009-6-17 19:45
46
0
好文章,顶了
雪    币: 372
活跃值: (36)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
netknight 1 2009-6-19 02:21
47
0
看了很久才明白
雪    币: 172
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wangshen 2009-6-19 02:26
48
0
学习了..比较清晰..感谢LZ
雪    币: 654
活跃值: (448)
能力值: ( LV12,RANK:360 )
在线值:
发帖
回帖
粉丝
Mx¢Xgt 7 2009-6-19 22:10
49
0
感染后,Dels2 的地址和Dels1的地址不会变吗?
雪    币: 47
活跃值: (37)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
pillcor 1 2009-6-26 17:28
50
0
其实下面的两段代码是比较常见的。
第一段:将数据写入代码段

.386
.model flat,stdcall
option casemap:none

include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib

.code

start:
push 0h
call _text
db 'title',0
_text:
call _function
db 'Maybe we can write something here!',0
_function:
push 0h
call MessageBox
invoke ExitProcess,NULL
end start


第二段:将数据写入堆栈。

.386
.model flat,stdcall
option casemap:none

include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib

.code

start:
mov ebx,00000065h
push ebx
mov ebx,6c746974h
push ebx
mov eax,esp
mov ebx,00002165h
push ebx
mov ebx,72656820h
push ebx
mov ebx,676e6968h
push ebx
mov ebx,74656d6fh
push ebx
mov ebx,73206574h
push ebx
mov ebx,69727720h
push ebx
mov ebx,6e616320h
push ebx
mov ebx,65772065h
push ebx
mov ebx,6279614dh
push ebx
mov ebx,esp
push 0
push eax
push ebx
push 0
call MessageBox
pop eax
pop eax
pop eax
pop eax
pop eax
pop eax
pop eax
pop eax
pop eax
pop eax
pop eax
invoke ExitProcess,NULL
end start


编译运行后图示如下
游客
登录 | 注册 方可回帖
返回