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

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

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

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

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

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

.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


编译运行后图示如下
2009-6-26 17:28
0
游客
登录 | 注册 方可回帖
返回
//