首页
社区
课程
招聘
NE365病毒杂志第一期修正!!
发表于: 2005-6-7 15:51 16668

NE365病毒杂志第一期修正!!

nbw 活跃值
24
2005-6-7 15:51
16668
在毒界密界各位朋友的关心支持下,NE365病毒杂志第一期制作完成。

本电子书内容基本由NE365成员及VIP提供,供搜集了将近60篇原创作品。里面既有毒界大虾的慷慨奉献,也有新人新秀的独创作品。

NE365简介

    NE365全称为:Not Exclusive in 365 days

    由jamesjoo于2004年5月创建。

    初建立时,是一个纯粹的病毒研究组织,随着组织不断壮大,研究方向也随之扩展。事实证明这是非常正确的。
  目前研究方向:病毒、系统内核、逆向破解、.net技术等

    虽然现在我们的水平和国外的一些组织相比还有一点距离,但是我们相信有一天我们一定会超过他们,因为我们正在努力,我们一直在努力!

  现有成员10人:
    jamesjoo
    tankaiha(hmx)
    shadow3(风间水月)
    ificanfly(恋人之秋雨)
    turbowang
    lkjop
    海风月影
    tsukihime
    nbw
    EA(据说是NE365最帅的…)

    在此期间,我们也有幸得到了一些业内高手的帮助和支持,他们有:
    Luocong Vxk pker linhanshi 菩提 hexpe laoqian 等朋友

关于本电子书:NE365 magazine V0.1

    本电子书由NE365成员以及以上VIP朋友提供,绝大部分为原创。内容涉及病毒原理、病毒代码、病毒逆向分析、脱壳、破解,以及我们的一些作品。

    本书主要目的是介绍病毒技术以及我们自己的作品。
    需要注意的是本书不是教程,或许不能助初手迅速入门,因为此类技术的学习决非朝夕可就;或许也不能助大侠更上一层楼,因为我们自己也有待提高。

    但是,我们给大家展示的是我们自己的心血以及我们的道路,因为这是我们坚持的也是为之奋斗的!

    在此声明严禁利用本书内容进行非法活动,如若出现,我等概不负责

    本书中绝对不含有病毒或者样本,只提供下载链接,书中的有些病毒代码或许被杀毒软件误报,请大家留意!

  除注明外,版权归文章个人,如须转载请注明出处。

                      www.vxer.net/bbs

下面节选了一些文章,非灌说,请谅!大家可以看看是否合自己的口味,取决是否下载。

经一些朋友提醒,电子书里面有一些问题需要修正,主要有:

1、以前忘记添加 Blumshub 写的 “病毒的多进程”,这里补充上;

2、“尝试挂接file system” 一文作者为 shadow3,这里补充上;

3、修改了其他一些问题。

希望大家删除以前的电子书,重新下载。

感谢老罗提供下载空间:

点此下载


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (49)
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
2
加密算法浅谈

© 2005 Copyright reserved

by JamesJoo[NE365][CVC.GB]

以下的文章基于我读书的时候做REPORT和PRESENTATION的,本来打算全部不加改动的发布,但考虑到版面语言的统一,大部分我用中文重写了一下,但仍有部分是英文的。

Chapter 1(第一章)

The art of war teaches us to rely not on the likelihood of the enemy’s not coming, but on our own readiness to receive him; not on the chance of his not attacking, but rather on the fact that we have made our position unassailable.

---The Art of War, Sun Tzu

这篇文章并非讲解加密原理和机制的文章,有很多书会讲这些的,但我还是假设你有密码学的基本知识,分的清楚symmetric和asymmetric等基本概念,但如果你是密码学高手,建议略过本章。另,我有专门讨论加密算法设计和机制的文章会以后慢慢给出,我这里只讲一些算法,有些算法我会给出实现它们的原代码。

Part I.经典加密算法谈

(一)Substitution Techniques(替换)

1. Caeser Cipher

所谓的恺撒加密,是一种基于26个英文字母表的加密方式,很简单,可靠性在今天的计算性能面前几乎没有。Caeser的机理是C=E(P)=(P+K)MOD(26)

密文字母是明文字母在字母表的位置上循环后移K个位置得到的。如果key=3的时候,plaintext是m,ciphertext就是p。当然,如你所知它无法处理现代英语语言出现了各种标点符号和其他符号,甚至连大小写都无法区分,但我们把字母表扩充到128 ASCII或256 extension ASCII, 我们就可以用此方法处理各种计算机文件,当然纯正的caeser加密的key 只有25个(或者26个,如果K=0时也算一种)。

破解方法:brute force。就是暴力穷举破解,鉴于加密方式简单,在知道该算法被使用后暴力破解显得忧为合适。

2.Monoalphabetic Cipher(单字母表加密)

当我们把caeser的C=E(P)=(P+K)MOD(26)规则打破后,每个字母都使用任意的字母代替,这样,在同样使用26个字母表的同时,KEY的个数就比CAESER的25(或26)个,多出许多,有26!个可能的KEY了。举个例子,明文e可能被加密为p,明文d可能被加密为a,从中就找不出任何的共性了。这样,盲目的brute force就显得笨拙了。

破解方法:一味得brute force,不如来点常用的probability analysis,我们知道英语中英文字母e的出现频率最高为12.7%, t的出现频率为9.05%。这样,如果我们分析密文发现P的出现频率最高,那P的明文很有可能就是t。概率分析+语言词法分析就可以比较快地搞定此加密方法。

3.Playfair Cipher

说道playfair,怕是大家会想到鲁迅先生的费厄泼赖FAIR PLAY。其实Playfair是一个人名,这其中有些小误会,给出一段此算法的小历史:this cipher was actually invented by British scientist Sir Charles Wheatstone in 1854, but it bears the name of his friend Baron Playfair of St. Andrews, who championed the cipher at the British foreign office. 此算法基本就是构造一个5x5的字母矩阵。矩阵的构造方法是关键字(去掉重复字母)+剩余字母(I和J看成一个),从左到右,从上到下依次添入5X5的矩阵,这样5X5=25个位置就涵盖了26个字母。举个例子:假设关键字是jamesjoo,去掉重复的J和一个O成为jameso,然后按顺序把字母添入矩阵(I和J添入一个位置):
2005-6-7 16:02
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
3
一种在BIOS中嵌入应用程序的方法及实现

by VXK

介绍
本文针对Award公司开发的计算机系统BIOS提出了一种嵌入应用程序的方法,其基本原理对别的品牌的BIOS也一样适用,仅需稍加修改。文中作者给出并讨论一个完整的例子程序,该程序已经通过实验验证。

一. BIOS简述
这里所讲的BIOS是指计算机主板上的BIOS,是整个计算机的关键和灵魂,计算机一启动就是执行BIOS程序,它负责加电自检,初始化计算系统,响应用户对系统配置的修改,记录数据到CMOS中,将常驻程序库(Runtime Program)常驻于内存中,提供给系统和应用程序调用,经过一系列复杂操作后,最后将控制权转移给操作系统。
一开始BIOS容量仅有8K,随着计算机复杂程度的提高,以及即插即用、高级电源管理等方面的需要,再加上个别主板厂商添加的辅助功能,BIOS容量迅速增大,目前通常主板上BIOS容量为256Kb,有些已经达到512Kb,这些BIOS中常常还会有几十Kb的剩余空间,而且由于BIOS多采用FlashRom作为存储芯片,便于修改,这就为我们在BIOS中嵌入自己的程序提供了便利。
在BIOS中嵌入程序具有多方面的应用,有些主板厂商在BIOS中嵌入杀毒程序,硬盘恢复精灵,超频工具等,提高了产品的竞争力;台湾威胜公司和Elegent公司联合开发出了嵌入在BIOS中的小型浏览器操作系统,整个BIOS大小仅有512Kb,计算机无需硬盘即可上网冲浪;有些监控系统由于功能简单,完全可以把程序做到BIOS中,一开机就自动运行,既提高了可靠性,又降低了成本。另一方面,将病毒嵌入到BIOS中,一开机就常驻内存也完全可以做到。
BIOS代码虽短,但技术含量相当高,全世界仅有AWARD、PHOENIX、AMI、ACER等几家公司有研发BIOS系统的能力(AWARD 已被PHOENIX收购),其他主板厂商有的是直接购买,有的也会在以上几家公司提供的平台上进行少量功能扩展。作为个别应用的场合,就要完全靠自己对BIOS进行改造。

二. 嵌入程序的基础知识
在进行工作前需要几个必备的工具,一个是AWARD公司的BIOS刷新工具AwdFlash;另一个Award BIOS 察看修改工具Cbrom;还有一个是MicroSoft 的汇编工具Masm6.11;最后是作者推荐的二进制文本编辑器HexWorkshop,这些工具都可以从网上下载,下面假定读者已经熟练使用这些工具,具体操作步骤不再祥述。
前面提到BIOS程序是存放在FlashROM芯片中的,实际上它是经过压缩后再存放进去的,仅留下少量启动代码和解压缩程序保持原样,BIOS的执行过程其实相当复杂,好在我们无需去了解其中的详细流程,但有一点应当清楚,BIOS程序实际上也是采用的模块化设计思想,用Cbrom可以察看到BIOS中各个子模块的名称,性质,压缩率等信息,BIOS在执行过程中会将这些模块解压缩到内存中,验证模块的合法性和正确性,如果满足条件,就会转到模块的入口处执行。这里面的详细机制和由来需要参考PNPBIOS协议、PNPISA协议、PCI总线协议和EISA总线协议,内容繁多,本文不拟做深入探讨。
BIOS中有一种模块是ISA模块,来源于ISA协议,由于ISA协议属于早期的协议,内容相对简单,BIOS对ISA模块的验证也较为简单,容易满足,我们可以将自己的程序做成ISA模块挂到BIOS中,这样机器一启动,我们的程序就会启动,而且我们程序的运行是先于操作系统的。
三. 程序设计详细步骤
1. 设计准备
由于系统固有的限制,BIOS中每个模块的大小不能超过64Kb,这里是指没有压缩前的大小,这和DOS下COM程序的限制很相似,实际上我们在用MASM6.11进行编程时的确采用是COM程序的模板,由编译器生成COM文件。然而它又和一般的COM文件具有以下几点不同:
1. 首先它有自己的堆栈段,堆栈大小默认为1K,而COM文件的堆栈是在64K之内的,默认是从段内偏移量0FFFEh处开始。
2. COM文件一开始就是执行代码,而模块一开始是模块头,储存有与模块相关的信息。模块执行代码的入口点在模块中的某一处。
3. COM文件执行完后返回到操作系统,通常通过子功能号4ch的中断INT21h返回到DOS,而模块是远程调用返回,也就是说必须用RETF返回。
4. ISA模块最后一个字节是校验码,所有的字节相加必须为0,BIOS利用这点来验证一个ISA模块的正确性。COM文件没有这点要求。
5. COM文件执行时是先被完整地复制到段内偏移量100h处,然后再执行,而模块的段内偏移量不能确定,有的模块会是0。所以涉及到段内偏移量的汇编指令,如LEA、OFFSET要谨慎适用。
下表是ISA模块头的格式,其中仅列出了几个最基本的相关字段,这是协议中的内容,我们在编写模块头时,需要严格遵循下表的格式:

偏 移 长 度 值 说 明
0h 1 55h 模块标签字节1
1h 1 AAh 模块标签字节2
2h 1 * 模块长度(以512字节为单位)
3h 3 * 入口点,BIOS对此位置做远调用,这里往往放一条跳转指令
6h~19h 20 * 保留

表一 模块头格式
通常一个BIOS嵌入程序设计的基本流程如下,每一步都很关键,有必要给出详细说明:
1. 首先用汇编编写DOS下的COM程序,必须注意到程序是先于操作系统执行的,所以程序中不能调用任何DOS的中断服务。为了程序转化方便,也不要用.code,.startup等汇编伪指令,尽量采用早期的汇编编写方式,争取对整个程序结构的完全控制。
2. 调试通过后,在COM文件前加上文件头,改变返回指令为RETF,控制文件大小为512字节的整数倍,重新编译生成COM文件。
3. 在HexWorkshop中调入刚生成的COM文件,利用其中的checksum工具生成文件的校验码,用100h减去该8位校验码后填入文件最后一个字节。再次生成文件的校验码,确认为零。
4. 用Cbrom将文件作为ISA模块嵌入到BIOS中,在本文中的操作为 “Cbrom save.bin/isa hello.com”,其中save.bin是事先用AwdFlash备份的BIOS文件。注意反复操作时,要先将前一个给释放掉,操作为“Cbrom save.bin/isa release”。
5. 用AwdFlash将新的BIOS文件烧录到FlashROM中。重起计算机,检验程序。
进行以上实验前,最好自备编程器,万一计算机不能正常启动,也可以重新恢复BIOS,如果可以用本身具有双BIOS保护功能的计算机进行实验则更加保险。
下面设计两个简单的Hello程序,分别采用了两种不同的方式,两个程序都是在屏幕上显示一行字“Hello!Press F1 to continue…”,当按下F1功能键后,程序退出,计算机继续启动。
2005-6-7 16:03
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
4
尝试挂接file system

by shadow3

主程序:Hookfilesystem.c

//尝试挂接file system

#include "Hookfilesystem.h"

HANDLE        hFileHandle;
OBJECT_ATTRIBUTES        ObjectAttrib;
PDEVICE_OBJECT        pFileDeviceObject;

struct _DRIVER_OBJECT *pDeviceObject;

PDRIVER_DISPATCH RealCreateDispatch;

NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject ,IN PUNICODE_STRING RegistryPath)
{
        UNICODE_STRING        uninameString,unilinkString;
        NTSTATUS        ntStatus;
        PDEVICE_OBJECT        pDeviceObject;
        
        RtlInitUnicodeString(&uninameString,L"\\Device\\Shadow3");
        
        ntStatus = IoCreateDevice(DriverObject,
        0,
        &uninameString,
        FILE_DEVICE_UNKNOWN,
        0,
        TRUE,
        &pDeviceObject
        );
                                                                                                               
        if(!NT_SUCCESS(ntStatus))        //如果创建设备失败,则直接退出
                return ntStatus;
               
        //创建Win32可见的符号连接
        RtlInitUnicodeString( &unilinkString, L"\\DosDevices\\shadow3" );
        
        ntStatus = IoCreateSymbolicLink(&unilinkString ,&uninameString);
        if(!NT_SUCCESS(ntStatus))
        {
                return ntStatus;        
        }
        
        //设置Dispatch
        DriverObject->MajorFunction[IRP_MJ_CREATE] = DriverDispatch;
        DriverObject->MajorFunction[IRP_MJ_CLOSE] = DriverDispatch;
        //设置Unload
        DriverObject->DriverUnload = DriverUnload;
        //Hook File System
        HookFileSystem();
        
        return 0;        
}

NTSTATUS
DriverDispatch(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP           Irp
    )
{
               
    Irp->IoStatus.Status = STATUS_SUCCESS;
    IoCompleteRequest (Irp,IO_NO_INCREMENT);
    return Irp->IoStatus.Status;
}

void DriverUnload(IN PDRIVER_OBJECT pDriverObject)
{
                UNICODE_STRING uniNameString;
               
                RtlInitUnicodeString(&uniNameString, L"\\DosDevices\\shadow3");
                IoDeleteSymbolicLink(&uniNameString);        //删除win32可见
                IoDeleteDevice(pDriverObject->DeviceObject);        //删除设备
               
                return ;
}

void HookFileSystem(void)
{
        UNICODE_STRING uniDeviceName;
        NTSTATUS        Ntstatus;
        IO_STATUS_BLOCK IoStatusBlock;
        PVOID pFileObject;
        
        RtlInitUnicodeString(&uniDeviceName ,L"\\DosDevices\\C:\\");
        
        InitializeObjectAttributes(&ObjectAttrib ,&uniDeviceName ,OBJ_CASE_INSENSITIVE, NULL, NULL);
        //打开一个设备
        Ntstatus = ZwCreateFile(
                                &hFileHandle,
                                SYNCHRONIZE|FILE_ANY_ACCESS,
                                &ObjectAttrib,
                                &IoStatusBlock,
                                0,
                                0,
                                FILE_SHARE_READ|FILE_SHARE_WRITE,
                                FILE_OPEN,
                                FILE_SYNCHRONOUS_IO_NONALERT|FILE_DIRECTORY_FILE,
                                0,
0
                                );
                                                        
        if(!NT_SUCCESS(Ntstatus))
        {
                DbgPrint("ZwCreateFile Failed,ntstatus:%ld\n",Ntstatus);        
                return;
        }
        
        //通过文件句柄得到与之向对应的文件对象
        Ntstatus = ObReferenceObjectByHandle(hFileHandle,FILE_READ_DATA,0,0,&pFileObject,NULL);
        if(!NT_SUCCESS(Ntstatus))
        {
                ZwClose(hFileHandle);
                DbgPrint("ObReferenceObjectByHandle Failed,ntstatus:%ld\n",Ntstatus);        
                return;
        }
        
        //在通过该文件对象查找相对应的文件设备
        pFileDeviceObject = IoGetRelatedDeviceObject(pFileObject);
        //文件对象引用计数器减一
        ObDereferenceObject(pFileObject);
        ZwClose(hFileHandle);
        
        if(pFileDeviceObject==NULL)
        {
                DbgPrint("Get File Object Failed\n");               
                return ;
        }
        
        pDeviceObject = pFileDeviceObject->DriverObject;
        
        if(pDeviceObject->MajorFunction[IRP_MJ_CREATE] == HookCreateDispatch)
        {
                DbgPrint("already hook IRP_MJ_CREATE\n");        
                return ;
        }
        
        //保存IRP_MJ_CREATE处理的地址
        RealCreateDispatch = pDeviceObject->MajorFunction[IRP_MJ_CREATE];
        
        //Hook Create DisPatch
        pDeviceObject->MajorFunction[IRP_MJ_CREATE] = HookCreateDispatch;
        
        return;        
}

NTSTATUS
HookCreateDispatch(   
                IN PDEVICE_OBJECT DeviceObject,
    IN PIRP           Irp
    )
{
        // DbgPrint("hook success\r\n");
        PIO_STACK_LOCATION        pIocurrentstack;
        PFILE_OBJECT pFileObject;
        
        DbgPrint("DeviceName:%S\r\n",DeviceObject->DriverObject->DriverName.Buffer);
        
        
        pIocurrentstack = IoGetCurrentIrpStackLocation(Irp);
        
        pFileObject = pIocurrentstack->FileObject;
        
        DbgPrint("FileName:%S\r\n",pFileObject->FileName.Buffer);
        
        _asm
        {
                push Irp
                push DeviceObject
                call RealCreateDispatch        
        }
        
        return 0;        
}

头文件:Hookfilesystem.h

#ifndef _INCLUDE_
#define _INCLUDE_

#include <ntddk.h>

NTSTATUS
DriverDispatch(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP           Irp
    );
   
void DriverUnload(IN PDRIVER_OBJECT DriverObject);

void HookFileSystem(void);

NTSTATUS
HookCreateDispatch(   
                IN PDEVICE_OBJECT DeviceObject,
    IN PIRP           Irp
    );

#endif
NE365 magazine V0.1
From NE365
2005-6-7 16:03
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
5
关于进入ring0的另一种方法

by shadow3

    在保护模式下,ring0有至高无上的权限,他一直是很多黑客程序员追求的目标,在NT平台上,MS对系统表格作了保护,不能在象win9x那样,去直接修改系统表格,但是还是有不少办法能够进入ring0的,例如,在国内,最早sinister利用编写驱动程序的方法进入ring0,这也是最通用的方法了,紧跟着WebCrazy又使用读写物理内存的方法来读写GDT所在的物理内存,在GDT上生成自己的调用门来随意进出ring0。后来由MGF提出一种更新的方法,这也就是我要介绍的方法,修改NTLDR。
为什么要修改NTLDR呢,因为windows在启动之时,需要装载GDT上的描述符,而NT的引导程序是NTLDR,那么也就是说描述符可能在NTLDR中,如果我们的假设成立,那么我们就能够在NTLDR中找到系统描述符,好,我们首先来做个实验,用UE打开NTLDR,搜索16进制数ffff 0000 009a cf00(这是GDT上的一个描述符,它的选择子为8h),结果我们搜到了,那么证明想法是对的,在向后看,发现还有不少描述符,哈哈,如果我们在搜索到的描述符区域中空的地方加入自己的调用门和自己的系统描述符,当系统重新启动的时候我们的调用门就会被操作系统装载到内存中,这样我们就有了我们需要的调用门,就可以利用这个调用门自由进出ring0了。这里可能有人要问为什么不用系统选择子08h所对应的描述符,而自己生成自己的选择子和描述符,这是因为我们的调用门所指向的代码一般都在用户区,MS会做检测,如果发现运行在选择子为8h的代码在0x80000000以下,就会认为是非法进入ring0,就会产生异常。下面请看代码
2005-6-7 16:04
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
6
EditPlus 数据结构

By nbw

    EditPlus 是一款优秀的文本编辑器,可以快速方便地操作文档数据,即使对于较大文档也不例外。本文讨论他的数据结构和一些诸如添加新行之类的操作。重点在于阐述文本编辑器对于数据的组织,也希望可以给打算写文本编辑器之类软件的朋友以帮助。我的调试环境是EditPlus 2.10c 中文汉化版,对于其他版本,我想原理应该适用,只不过具体的反汇编代码地址会发生变化。在此感谢aogo。

下略。。。
2005-6-7 16:04
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
7
感染闪存和移动硬盘

by tankaiha

   
    利用这个原理的病毒早已出现了,比如卡巴斯基定义的Win32.Small.da。
    基本原理就是当闪存插入时会给每一个窗口发送WM_DEVICECHANGE消息,其中wParam里是Event,包含了当前的事件。

MADN中定义的事件如下:

        DBT_CONFIGCHANGECANCELED      A request to change the current configuration (dock or undock) has been canceled.
        DBT_CONFIGCHANGED      The current configuration has changed, due to a dock or undock.
        DBT_DEVICEARRIVAL      A device has been inserted and is now available.
        DBT_DEVICEQUERYREMOVE      Permission is requested to remove a device. Any application can deny this request and cancel the removal.
        DBT_DEVICEQUERYREMOVEFAILED      A request to remove a device has been canceled.
        DBT_DEVICEREMOVECOMPLETE      A device has been removed.
        DBT_DEVICEREMOVEPENDING      A device is about to be removed. Cannot be denied.
        DBT_DEVICETYPESPECIFIC      A device-specific event has occurred.
        DBT_QUERYCHANGECONFIG      Permission is requested to change the current configuration (dock or undock).

其中DBT_DEVICEARRIVAL表示设备插入。这样我们的程序只需要建立一个窗口,便可接收这个消息,然后lParam为指向DEV_BROADCAST_HDR结构的指针。如果其中的dbch_devicetype参数为BT_DEVTYP_VOLUME,则lParam又可以理解为PDEV_BROADCAST_VOLUME的指针,其中的dbcv_unitmask指出了盘符。(MSDN自带了一个非常不错的例子)
下略。。。
2005-6-7 16:05
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
8
CCL系列说明

by tankaiha

前言:CCL是 tankaiha 写的查找、修改软件特征码的工具,他将关于该工具的源代码以及使用说明都提供在本电子书中,这篇说明档大体说明了该系列内容,详细情况可以察看本电子书中具体文章。

1、什么是特征码?
        
        防病毒软件检测病毒、蠕虫和黑客软件的原理之一是特征码,也就是将程序的片段和一些预先采样的数据片段进行比较来判断一个文件是不是含有恶意代码。如果能在自已的软件中找出特征码的所在,并进行适当的变形,便能一定程度上提高代码的隐蔽性。《黑客防线》2004年第10期上的文章《杀毒软件能奈我何――网络神偷特征码修改实战》介绍了怎样寻找特征码,即逐字节替换法:逐字节(或逐段)将代码替换为0000(或者别的),如果进行替换后防病毒软件没有报警,说明特征码已被替换掉,即特征码在该被替换的位置。

2、什么是CCL?
        
        手工操作进行特征码定位的工作量是可想而知的,即使一个很小的PE文件也会让你花上一整天的功夫。为了方便我编写了CCL(特征码定位器)这个小玩具。它利用了上述原理,将程序中的代码替换为0000,最后根据哪些生成文件被删除而哪些没有来定位特征码的位置。

3、CCL的使用
(以下几篇文章均为发表在《黑防》上的关于使用CCL的文章,版权归黑防所有,请勿转载)

打造不被查杀的黑器之超级攻略
打造免杀的winshell后门??源代码级的特征码修改
打造免杀的灰鸽子
让黑器在内存中翱翔

4、源代码文件说明
代码文件(.asm)
CCL                主代码文件
DlgAbout        关于窗口
DlgCon                设置窗口
DlgConAuto        自动参数设置窗口
DlgConManual        手动参数设置窗口
DlgInfo                信息及操作窗口
DlgSec                段选择窗口
(MACROS                MASM32中的宏代码)

包含文件(.inc)
CCL                主包含文件
CCLdll                定义了CCLdll.dll中的几个函数

其它
CCL.RES                资源文件
CCLdll.lib
CCLdll.dll        (关于此文件,见杂志中CCLdll源代码)

5、关于CCLdll.dll
在编写特征码定位器的过程中,我将一些常用的PE文件操作集合在一起,做成了动态链接库CCLdll.dll。很EASY的。
2005-6-7 16:06
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
9
Win32病毒入门 -- ring3篇 (1)

by pker / CVC.GB

目录

----

I.  声明

II. 前言

III.对读者的假设

IV. 正文

    1.  PE文件结构

    2.  关于FASM

        2.1  导入表

        2.2  导出表

        2.3  强大的宏

    3.  重定位的奥秘

    4.  SEH

    5.  API函数地址的获得

        5.1  暴力搜索kernel32.dll

        5.2  搜索导出表,获取API地址

    6.  实现一个最简单的病毒

    7.  EPO

    8.  多态(Polymorphism)

        8.1   随机数发生器

        8.2   动态代码生成技术

        8.3   一个完整的引擎

    9.  变形(Metamorphism)

V.  结束语
2005-6-7 16:06
0
雪    币: 261
活跃值: (162)
能力值: ( LV13,RANK:320 )
在线值:
发帖
回帖
粉丝
10
nbw东西真不少,打包全下了。
2005-6-7 16:10
0
雪    币: 233
活跃值: (43)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
11
搬个板凳,好好学习
2005-6-7 16:14
0
雪    币: 47147
活跃值: (20465)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
12
不错,收藏。
你们团队定位感觉不错,跳出了破解这个圈圈,有点新意,但研究方向好像太广了,不容易出成绩。
2005-6-7 16:30
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
13
最初由 kanxue 发布
不错,收藏。
你们团队定位感觉不错,跳出了破解这个圈圈,有点新意,但研究方向好像太广了,不容易出成绩。


呵呵,多谢老大关心,我们本来定位就不是破解,应该说是后来涉及了破解这个圈圈。我们都很菜,在一起就是为了互相学习交流。成绩那些等以后努力吧。哈哈。
2005-6-7 16:42
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
14
不错的杂志。
2005-6-7 16:44
0
雪    币: 229
活跃值: (168)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
15
太邦了!我狂顶!
2005-6-7 16:59
0
雪    币: 258
活跃值: (230)
能力值: ( LV12,RANK:770 )
在线值:
发帖
回帖
粉丝
16
最初由 kanxue 发布
不错,收藏。
你们团队定位感觉不错,跳出了破解这个圈圈,有点新意,但研究方向好像太广了,不容易出成绩。
2005-6-7 18:14
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
持,
2005-6-7 18:32
0
雪    币: 258
活跃值: (230)
能力值: ( LV12,RANK:770 )
在线值:
发帖
回帖
粉丝
18
nb 王..为NE卓越献身....
2005-6-7 18:40
0
雪    币: 2199
活跃值: (1975)
能力值: ( LV12,RANK:810 )
在线值:
发帖
回帖
粉丝
19
2005-6-7 18:40
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
2005-6-7 19:05
0
雪    币: 288
活跃值: (415)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
21

支持啊
2005-6-7 20:15
0
雪    币: 267
活跃值: (235)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
22
好东西啊,多谢老大无私奉献
2005-6-7 21:00
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
万分感谢NBW大哥!NBW出品,必属精品!

老罗提供下载空间?

老罗真是太热心了!?助助为孽。
2005-6-7 21:11
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
24
很新颖,支持~
2005-6-7 21:17
0
雪    币: 519
活跃值: (1223)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
25
支持~~
病毒~~曾经的梦想~~
2005-6-7 21:23
0
游客
登录 | 注册 方可回帖
返回
//