Myccl使用
- 格式:docx
- 大小:335.07 KB
- 文档页数:7
MySQL使用方法和步骤详解一、介绍MySQLMySQL是一种开源的关系型数据库管理系统,广泛应用于Web应用程序的开发中。
它是一款功能强大、性能优越的数据库管理系统,并且易于使用。
本文将详细介绍MySQL的使用方法和步骤。
二、安装MySQL1. 下载安装包在MySQL官方网站中下载适合你操作系统的MySQL安装包,例如Windows环境下可以选择MSI安装包。
2. 运行安装程序双击以运行MySQL安装程序,按照安装向导的指示进行安装。
可以选择自定义安装,设置MySQL的安装路径以及其他选项。
3. 配置MySQL安装完成后,需要进行一些配置。
在MySQL的安装目录下找到my.ini文件,用文本编辑器打开。
在该文件中,你可以设置MySQL的相关参数,例如端口、字符集等。
4. 启动MySQL服务打开“服务”管理器,找到MySQL服务,将其启动。
这样,你就成功安装并配置了MySQL数据库。
三、登录MySQL1. 打开命令行终端或者MySQL客户端工具在Windows环境下,可以通过“开始”菜单中的“运行”命令输入“cmd”打开命令行终端。
在终端中输入“mysql -u 用户名 -p”,按下回车键。
2. 输入密码在命令行或者客户端中,输入你设置的MySQL用户密码。
3. 登录成功如果密码正确,你将成功登录到MySQL数据库服务器。
四、创建数据库1. 创建数据库在MySQL中,可以使用“CREATE DATABASE 数据库名;”语句来创建数据库。
例如,输入“CREATE DATABASE mydb;”创建名为“mydb”的数据库。
2. 使用数据库使用“USE 数据库名;”语句来选择要使用的数据库。
例如,输入“USE mydb;”选择使用名为“mydb”的数据库。
五、创建表1. 创建表在选择要使用的数据库后,可以使用“CREATE TABLE 表名 (列名1 数据类型, 列名2 数据类型, ...);”语句来创建表。
MySQL中的连接池的使用和配置方法一、引言在现代的数据库应用程序中,数据库连接的管理是非常重要的一项任务。
连接池是一种常见的数据库连接管理解决方案。
本文将探讨MySQL中连接池的使用和配置方法,帮助开发人员更好地管理数据库连接,提高数据库应用程序的性能和可靠性。
二、连接池的概述连接池是一种数据库连接管理的机制,它通过事先建立一定数量的数据库连接并保存在连接池中,应用程序需要时,直接从连接池中获取连接,使用完毕后,再将连接归还给连接池。
这种机制可以避免频繁地创建和销毁数据库连接,从而提高数据库操作的性能。
三、MySQL连接池的实现MySQL连接池可以通过各种方式进行实现,下面将介绍两种常用的实现方式。
1. 基于Apache Commons DBCP的连接池Apache Commons DBCP(数据库连接池)是一个开源的Java连接池库,可以与多种数据库进行集成。
下面是使用Apache Commons DBCP实现MySQL连接池的简要步骤:步骤一:在项目中引入Apache Commons DBCP库。
步骤二:配置dataSource,设置连接参数,如数据库URL、用户名、密码等。
步骤三:创建BasicDataSource对象,该对象属于Commons DBCP库的一部分,提供连接池的基本功能。
步骤四:通过BasicDataSource对象获取连接,并在连接使用完毕后关闭连接,将连接返回给连接池。
使用Apache Commons DBCP连接池可以极大地简化连接管理的工作,并提供一些高级功能,如连接验证、连接池大小的动态调整等。
2. 基于C3P0的连接池C3P0是另一个常用的开源连接池库,它提供了丰富的配置选项和监控功能。
下面是使用C3P0实现MySQL连接池的简要步骤:步骤一:在项目中引入C3P0库。
步骤二:配置dataSource,设置数据库URL、用户名、密码等参数。
步骤三:创建ComboPooledDataSource对象,并设置连接池的一些属性,如最大连接数、最小连接数、连接超时时间等。
MySQL中的连接池使用与配置方法在开发和运维过程中,数据库是一个非常重要的组成部分。
针对高并发的场景,数据库连接的创建和关闭是一个非常耗时的操作,通常会导致性能瓶颈。
为了解决这个问题,我们可以使用连接池来缓解数据库连接的创建和关闭带来的性能问题。
连接池是一种数据库连接的管理机制,它可以预先创建一定数量的数据库连接,并将这些连接保存在一个池中。
当应用程序需要访问数据库时,可以直接从连接池中获取一个空闲的连接,使用完毕后再将连接返回给连接池。
这样可以减少每次访问数据库时创建和关闭连接的时间,提高了应用程序的响应速度和并发处理能力。
在MySQL中,连接池是通过使用连接池软件实现的。
常见的连接池软件有C3P0、Druid等。
接下来,我们将重点介绍如何使用Druid连接池,并对其进行配置。
Druid是阿里巴巴开源的一个高性能、可扩展的数据库连接池。
它具有监控、可扩展、可配置等特点,并且在高并发环境下表现出色。
下面我们将分步骤介绍如何在MySQL中使用Druid连接池。
第一步:添加Druid依赖在项目的pom.xml文件中添加Druid的依赖。
可以通过以下方式引入其最新版本:```xml<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.5</version></dependency>```第二步:配置数据源在项目的配置文件中,添加Druid的数据源配置。
可以根据实际情况进行配置,以下是一个示例配置:```yamlspring:datasource:url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTCusername: rootpassword: 123456# 配置数据源类型和驱动type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driver# 配置Druid连接池的相关参数druid:# 初始化连接数initial-size: 5# 最小空闲连接数min-idle: 5# 最大活跃连接数max-active: 20# 获取连接时的最大等待时间,单位毫秒max-wait: 60000# 配置测试连接的SQL语句validation-query: SELECT 1# 配置获取连接时是否验证连接的有效性test-on-borrow: true```在上述配置中,需要注意以下几点:- `url`、`username`和`password`配置的是数据库的连接信息。
MySQL中的游标操作与存储过程使用方法引言对于开发者来说,数据操作是一个非常重要的任务。
在MySQL中,游标操作和存储过程是两个非常常见的功能,它们可以帮助我们更高效、更灵活地操作和管理数据。
本文将介绍MySQL中的游标操作和存储过程的使用方法,帮助读者更好地应用这些功能。
第一部分:游标操作什么是游标?游标是一种数据库对象,它用于处理数据集。
通过游标,我们可以逐行处理查询结果,而不是一次性地将所有结果返回。
这对于处理大量数据或者需要在结果集上进行逐行处理的情况非常有用。
游标的基本使用方法在MySQL中,使用DECLARE语句声明游标,使用FETCH语句获取游标的下一行数据,使用CLOSE语句关闭游标。
下面是一个简单的示例:```DECLARE cursor_name CURSOR FOR SELECT column1, column2 FROMtable_name;OPEN cursor_name;FETCH cursor_name INTO variable1, variable2;CLOSE cursor_name;```在这个示例中,我们首先声明了一个名为"cursor_name"的游标,然后打开游标并获取第一行数据到变量"variable1"和"variable2"中,最后关闭游标。
游标的类型MySQL支持两种类型的游标:FORWARD_ONLY和SCROLL。
FORWARD_ONLY游标只能向前遍历结果集,而SCROLL游标可以以任何顺序遍历结果集,包括向前、向后和随机访问。
使用游标实现分页查询游标非常适合实现分页查询功能。
通过游标,我们可以在一个较大的结果集中,按照一定的页大小逐页取出数据,而不需要一次性将所有数据加载到内存中。
下面是一个使用游标实现分页查询的示例:```DECLARE page_cursor SCROLL CURSOR FOR SELECT column1, column2 FROM table_name LIMIT start_index, page_size;OPEN page_cursor;FETCH page_cursor INTO variable1, variable2;WHILE NOT done DO-- 处理当前行数据...FETCH page_cursor INTO variable1, variable2;-- 判断是否还有下一页数据IF no_more_data THENSET done = TRUE;END IF;END WHILE;CLOSE page_cursor;```在这个示例中,我们使用了SCROLL游标,并通过LIMIT子句指定了查询的起始位置和页大小。
在MySQL中使用游标进行数据处理与操作MySQL是一个广泛使用的关系型数据库管理系统,它提供了丰富的功能和灵活的操作方式,使得开发人员可以轻松地处理和操作数据。
而在MySQL中,使用游标是一种非常有用的技术,它能够让我们更加灵活地处理和操作数据,为我们的应用程序提供更好的性能和效果。
那么,什么是游标呢?简单地说,游标就是一个指向结果集的指针,通过游标,我们可以逐行地读取和处理结果集中的数据。
使用游标,我们可以在数据库中进行更加复杂和精确的数据操作,提高我们的数据处理能力。
在MySQL中,使用游标进行数据处理和操作主要可以分为以下几个步骤:1. 声明游标在MySQL中,我们需要先声明一个游标变量,用来存储和操作结果集。
声明游标的语法如下:DECLARE cursor_name CURSOR FOR select_statement;其中,cursor_name是你自定义的游标名称,select_statement是一个SQL查询语句,用来指定要操作的数据集。
通过声明游标,我们可以将结果集中的数据存储到游标变量中,方便后续的数据处理和操作。
2. 打开游标在声明游标之后,我们需要通过打开游标来初始化游标变量,并获取结果集中的数据。
打开游标的语法如下:OPEN cursor_name;其中,cursor_name是上一步声明的游标名称。
通过打开游标,我们可以将结果集中的数据读取到游标变量中,方便后续的数据处理和操作。
3. 读取游标在游标打开之后,我们可以使用FETCH语句逐行地读取游标变量中的数据,并进行相应的处理。
FETCH语句有以下几种形式:FETCH NEXT FROM cursor_name INTO variable_list;FETCH PRIOR FROM cursor_name INTO variable_list;FETCH FIRST FROM cursor_name INTO variable_list;FETCH LAST FROM cursor_name INTO variable_list;FETCH ABSOLUTE|RELATIVE n FROM cursor_name INTO variable_list;其中,cursor_name是游标的名称,variable_list是一个变量列表,用来存储游标中的数据。
详细讲解MYCCL使用方法及使用技巧========================================== ========================================== ============一、MYCCL的原理1、正向与反向:2、复合定位与单一定位:3、填充数据:木马文件复合定位(正向)单一定位(正向)DFE2312DAWD24DAD DFE2000000000000 00E2312DAWD24DADWR341ASFWR123412 0000000000000000 WR341ASFWR1234124SAFASFW31DADG23 0000000000000000 4SAFASFW31DADG233432FSFFGSRF4124 0000000000000000 3432FSFFGSRF412421DASDD11314SFFR 0000000000000000 21DASDD11314SFFR复合定位是一种还原模式,单一定位是一种填充模式。
二、MYCCL的设置:文件目录分块个数单位长度填充开始位置分段长度正向/反向结束位置复合定位/单一定位三、步骤:1、选择文件2、分块个数(一般不要用10,50,100等整数,防止杀毒软件的干扰机制)3、填充数据更改(常见填充数据有00 FF 90,建议使用随机任意的填充数据)4、选择开始位置(如PE头不存在特征码,则建议使用区段的起始位置,一般为400)5、选择复合定位,点生成。
6、杀毒软件杀生成的文件7、点二次处理,返回到步骤68、6和7不断循环,直到杀毒软件不再杀到毒为止。
9、点特征区间,进行进一步精准的定位。
并返回步骤2,但是要跳过步骤3.也即2-4-5-6-7-8步骤循环。
总结:几个注意的地方——分块个数填充数据开始位置复合定位。
下面我就来说说怎么用,效果会最好.(个人认为)1.先打开"MYCCL" 在"文件"位置选择你"木马"所在的位置,它会自动在"木马"当前目录中生成一个"outup"文件夹.2.分快个数: 简而言之就是在"OUTUP"这个文件夹中要生成的个数. 这个是由后面的单位长度决定的.如果单位长度越大,则生成的单位个数越少,特征码就越定的粗像. 反之,则不同了.不过,经过我实践正明,50KB到100KB的木马(包含50KB以下的)3.单位长度可以选择100-200,500KB以上的,这都是比较大的木马,不能选择500,最好选700-1000.这样,生成的文件才不会太多,太大.单位长度是什么意思呢?我想了一下子,估计就是每次对木马作特征码定位时所要填0的长度.这个长度越小,定位就越精确,生成的文件就越多.4.还有一个位置,在这里我一般会选择"单一精确定位"而不选择复合定位操作步骤一般为:∙把以上的都操作完后,可以点击"生成"在OUTUP这个文件夹中生成木马.∙打开杀毒软件,对其查杀,把能杀掉的全部删掉.∙杀完后,就点击"二次处理"∙处理完后,再选择"特征区间"在这里是被填0的木马文件没有被杀的一个大概范围.其实"单位长度不管写多少,他都会生成一些特征区间的,如果你的单位长度写的越在,则生成的特征区间就越少.越粗像"打开特征区间,在右边选择一个代码.在上面点"反键"选择"定位单一特征区间"∙再点生成,再对生成的文件查杀.∙再进行二次处理,再选择"特征区间"如果特征区间中有的代码最后两个数字很小,或者只有一个数.比果:00001254_0000006这个,这时,你可以打开16进制文本编辑器,找到00001254这个位置,填六个单位长度的0.再保存,再用杀软对生成的木马对生成的文件进行查杀,发现已不杀.。
MyCCL 工作原理详解——回答几个常见问题2009-07-28 11:40相信很多人一开始用MyCCL的时候都是根据网上的一些视频教程来按照步骤操作就行了,但是久而久之就会碰到一些无法解决的麻烦,甚至有些人因为专业知识太狭隘永远都不明白问题出在哪里。
因为我手上的MyCCL的说明书不见了,所以我先文字描述下MyCCL的工作原理,然后再用图文举例。
MyCCL的工作原理如下:假设病毒/木马文件内容如下:X X XXX X XXXX,红X表示某个杀毒软件定位此病毒/木马的特征码所在的区间,我们把它切成十个文件,此时各个文件的内容不是单个X,而是第一个文件内容是X000000000,第二个文件内容是X X00000000,第三个文件内容是X X X0000000,……,第九个文件内容是X X XXX X XXX0,第十个文件内容是X X XXX X XXXX——也就是说这此病毒/木马在十个切片中慢慢恢复了。
现在如果用杀毒软件查杀这十个切片,肯定会从第二个文件开始,后面的都报毒。
等杀毒毒后二次处理时MyCCL就能发现第二个文件不见了,就能定位出一个特征区间,也就是第一个红X代表的区间。
现在明白了为什么有的人杀到一个病毒就停止查杀了吧?因为按顺序摆放,找到某处特征码时,后面的暂时没必要管。
因为现在的杀毒软件一般是复合定位,也就是说多特征码定位,而且发现任何一处特征码就能确定出病毒/木马来,所以MyCCL在确定出一处特征码(这里是第一个红X)时,会提醒用户要不要继续分析。
此时当然选"是"了,这个时候又会生成十个切片,而此时第一个文件内容是X000000000,第二个文件内容是X000000000,第三个文件内容是X0X0000000,……,第九个文件内容是X0XXX X XXX0,第十个文件内容是X0XXX X XXXX。
看见没?这十个切片和上面十个切片的差别就在于第一个特征码(红X)处被0覆盖了,也就是说这块不会被查杀了,此时会从第6个文件(第二个特征码出现)开始报毒,……………………然后按照上面同样的方法,一直到切片中没有被杀的了。
一.免杀工具:myccl:特征码定位器PEID:查壳工具C32Asm:特征码修改工具[静态]Ollybg:特征码修改工具[动态]OC:文件地址内存地址换算器加花工具:怒剑狂花加区段工具:zeroadd加密工具:兼容性较好的,maskPE2.0和VMProtect v 1.4压缩工具:upx,aspack北斗壳二.熟悉掌握的术语与操作:加密工具操作花指令编写手工加花myccl复合特征码,内存特征码定位方法特征码修改三.研究免杀方法与技巧1.善于收集新免杀工具,有特效的压缩工具,免杀器等.比如收集一些可直接过杀软的压缩,加密工具2.理解免杀原理,熟悉各种杀毒软件的查杀特点3.多学习相关汇编知识相关汇编资料4.看别人优秀教程,举一反三.5.大胆的猜想与不断的实验和测试.四:特征码与花指令的详细定义与修改添加的方法等价替换、通用跳转、指令顺序调换、大小写替换、特征码十六进制加减1、NOP、填0、以及特殊常见指令的修改方法.JMP 无条件转移指令CALL 过程调用RET/RETF 过程返回.PUSH 压入堆栈.NOP 空操作.等价替换:修改方法:JMP = JE JNE je改成jle ja/jle适用范围:把特征码所对应的汇编指令命令中替换成类拟的指令通用跳转法:修改方法:把特征码移到零区域(指代码的空隙处),然后一个JMP又跳回来执行.(可以换成push xxxx retn)适用范围:没有什么条件,是通用的改法,强烈建议大家要掌握这种改法.指令顺序调换法:修改方法:把具有特征码的代码顺序互换一下.适用范围:具有一定的局限性,代码互换后要不能影响程序的正常执行修改字符串大小写法:修改方法:把特征码所对应的内容是字符串的,只要把大小字互换一下就可以了.适用范围:特征码所对应的内容必需是字符串,否则不能成功.(注意:函数不能用这种方法)直接修改特征码的十六进制法(特征码十六进制加减1、nop)修改方法:把特征码所对应的十六进制改成数字差1或差不多的十六进制、或者填充90(nop)或者填0适用范围:一定要精确定位特征码所对应的十六进制,修改后一定要测试一下能否正常使用.test eax, eax很多程序都是用test eax, eax来做检测返回值是否为0,那么遇到test eax, eax 那么可以直接改or eax, eaxcall例子:call 11111111改成 call 22222222 (22222222为0区域)2222处jmp 11111111五:简单花指令的编写PUSH 把字压入堆栈.POP 把字弹出堆栈.PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.ADD 加法.ADC 带进位加法.INC 加1.AAA 加法的ASCII码调整.DAA 加法的十进制调整.SUB 减法.SBB 带借位减法.DEC 减1.JMP 无条件转移指令CALL 过程调用RET/RETN 过程返回.。
mysql安装后怎么使用
默认安装使用的是mysql账号,密码为空
在windows上连接,使用Navicat for MySQL
1.下载Navicat,使用默认安装。
2.点击连接->MySql,配置连接名,IP,端口,用户名,密码。
3.连接测试,成功以后确定。
4.左侧出现配置好的连接名,双击连接。
5.右键点击连接名,选择新建数据库。
输入数据库名称,字符集。
6.双击新建数据库,右侧工具栏出现新建表按钮。
填上字段名,类型,是否主键。
7.也可以打开查询窗口,执行自己写好的Sql语句。
在linux上使用mysql client连接
1.Yuminstallmysql安装mysqlserverandclient。
2.运行mysql –version检查是否安装成功。
3.执行mysql-u 用户名-p密码-h 主机地址-P端口号命令连接。
默认执行
mysql-umysql连接本机3306端口,密码为空。
4.进入mysql>提示符后使用createdatabase数据库创建数据库。
e数据库选择数据库。
6.Createtable表(字段1数据类型1,字段2数据类型2)创建表。
MySQL数据库连接池的配置和使用引言在现代软件开发中,数据库是实现数据存储和管理的重要工具之一。
MySQL数据库作为一种常用的关系型数据库管理系统,被广泛应用于各种Web应用和企业系统中。
为了提高数据库的性能和可用性,合理配置和使用数据库连接池是必不可少的。
1. 什么是数据库连接池?数据库连接池是一种管理数据库连接的技术,它通过预先创建并维护一定数量的数据库连接,提供给应用程序使用。
通过复用连接对象,避免了频繁的连接和断开操作,减轻了数据库服务器的负担,提高了应用程序的响应速度和并发访问能力。
2. 配置数据库连接池2.1 驱动程序首先,我们需要在应用程序中引入适用于MySQL数据库的驱动程序。
常用的MySQL JDBC驱动程序是MySQL Connector/J。
可以通过在项目构建文件中添加相关依赖项来引入驱动程序。
2.2 连接池配置参数数据库连接池的配置参数可以根据应用程序的实际需求进行调整。
以下是一些常用的连接池配置参数:- 初始化连接数(initialSize):指定连接池同时初始化的连接数量。
- 最大连接数(maxActive):连接池允许的最大活跃连接数。
- 最小连接数(minIdle):连接池中至少保持的最小空闲连接数。
- 最大等待时间(maxWait):获取数据库连接的最大等待时间,超过该时间将抛出异常。
- 连接有效性检查(testOnBorrow):从连接池获取连接时,是否检查连接的有效性。
2.3 连接池配置示例以下是一个基本的数据库连接池配置示例:```javaimport mons.dbcp.BasicDataSource;public class DBUtil {private static BasicDataSource dataSource;static {dataSource = new BasicDataSource();dataSource.setDriverClassName("com.mysql.jdbc.Driver");dataSource.setUrl("jdbc:mysql://localhost:3306/mydb");dataSource.setUsername("root");dataSource.setPassword("password");dataSource.setInitialSize(10);dataSource.setMaxActive(100);dataSource.setMinIdle(5);dataSource.setMaxWait(10000);dataSource.setTestOnBorrow(true);}public static Connection getConnection() throws SQLException {return dataSource.getConnection();}}```通过以上配置,我们可以创建一个名为"dataSource"的数据库连接池对象,并将其初始化为10个连接,最大连接数为100,最小连接数为5。
MyCCL 工作原理详解——回答几个常见问题2009-07-28 11:40相信很多人一开始用MyCCL的时候都是根据网上的一些视频教程来按照步骤操作就行了,但是久而久之就会碰到一些无法解决的麻烦,甚至有些人因为专业知识太狭隘永远都不明白问题出在哪里。
因为我手上的MyCCL的说明书不见了,所以我先文字描述下MyCCL的工作原理,然后再用图文举例。
MyCCL的工作原理如下:假设病毒/木马文件内容如下:X X XXX X XXXX,红X表示某个杀毒软件定位此病毒/木马的特征码所在的区间,我们把它切成十个文件,此时各个文件的内容不是单个X,而是第一个文件内容是X000000000,第二个文件内容是X X00000000,第三个文件内容是X X X0000000,……,第九个文件内容是X X XXX X XXX0,第十个文件内容是X X XXX X XXXX——也就是说这此病毒/木马在十个切片中慢慢恢复了。
现在如果用杀毒软件查杀这十个切片,肯定会从第二个文件开始,后面的都报毒。
等杀毒毒后二次处理时MyCCL就能发现第二个文件不见了,就能定位出一个特征区间,也就是第一个红X代表的区间。
现在明白了为什么有的人杀到一个病毒就停止查杀了吧?因为按顺序摆放,找到某处特征码时,后面的暂时没必要管。
因为现在的杀毒软件一般是复合定位,也就是说多特征码定位,而且发现任何一处特征码就能确定出病毒/木马来,所以MyCCL在确定出一处特征码(这里是第一个红X)时,会提醒用户要不要继续分析。
此时当然选"是"了,这个时候又会生成十个切片,而此时第一个文件内容是X000000000,第二个文件内容是X000000000,第三个文件内容是X0X0000000,……,第九个文件内容是X0XXX X XXX0,第十个文件内容是X0XXX X XXXX。
看见没?这十个切片和上面十个切片的差别就在于第一个特征码(红X)处被0覆盖了,也就是说这块不会被查杀了,此时会从第6个文件(第二个特征码出现)开始报毒,……………………然后按照上面同样的方法,一直到切片中没有被杀的了。
等第一轮切片完了后,就会出现显示特征码区间的文字格式形如:.M...M....。
现在开始逐步缩小区间范围,此时点击MyCCL界面上的特征区间,就能在右边看见两个特征区间了,然后选中一个-->右键-->复合定位此处特征。
这个时候也像上面一样继续切片,如果选第一特征区间则切片是格式,X x000000000XXX0XXXX,X xx00000000XXX0XXXX,也就是把另外一个特征区间出全部用0覆盖,这样就不会干扰了,而自己区间在分成若干块(这里是把1个大X 分成10个小x/0块),然后逐渐恢复,而其它没有特征码的区间则保留。
就这样一直被特征码区间缩小到你可以接受的范围内,这样就可以方便对它动手脚了。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------上面是理论知识可是实践起来还是会有新的挑战的,我坚信像我这样悟性差的人还是有很多的。
先打开MyCCL的界面让大家看看。
这是我打开一个黑防鸽子服务端后的界面,除了文件路径和输出路径外,其它的每个能选中的字符都是有学问的。
从下往上看,最下面的大框里是这个PE文件区段信息。
结束位置:是文件最后的文件偏移地址,这里可以由最后区段(.rsrc)的地址(B1C00)+长度(8200)-1得到。
它的作用在解决分块时的边界问题、除不尽问题。
分块数量、单位长度一般人都能理解,只是注意一下他们是十进制。
填充00也好理解,在切片里某些区间用00填充、没有杀毒软件会把一串00当做特征码的,当然改成FF,90这些特殊串也行的。
开始位置是最有研究价值的,它声明此位置前面的内容在任何切片中不被覆盖,主要是保留PE文件格式中必要的头部而存在。
分段长度+开始位置=结束位置-1。
因为某个免杀视频教程的缘故,很多年轻人看见大框里最小的起始位置是400,就直接把它换掉上面的E0,然后去做免杀,其实这种方法是错误的。
刚好这个黑防鸽子+瑞星能解释为什么。
我也先把开始位置这种填上400,然后切成10片。
先别杀毒,去output目录下看看结果。
因为刚好除的尽,所以长度都是12900H。
用WinHex之类的十六进制工具打开这几个文件看看,所有文件的0-3FFH都保留完好,第一个文件恢复了从400H开始的12900H长度的内容,也就是从0-12CFFH块正常,后面其它区间范围都是00。
第二个文件则比第一个多恢复了从12D00H开始的12900H范围的区间,以此类推最后那个文件完全恢复。
用瑞星杀毒,发现全杀了,这说明从第一文件开始就存在特征码,也就是有一个特征码在400H-12CFFH(从400H开始的12900H长度)的区间。
但是因为可能其它区间还存在特征码,所以继续分析。
再切成10片,此时用WinHex之类的十六进制工具打开这10个文件看看,很明显此时400H开始的12900H长度在任何切片中都被覆盖成00,但是一杀毒结果结果还是全杀了,很奇怪吧?上面说明第一处特征码并不在上图圈圈里那些区域,而是在保留的头0-3FFH区间里。
所以无论怎么切分都是会被全杀的。
要验证也很简单,把第一个文件里从PE头开始到3FFH全填充00(保留PE标示符)后就不被杀了。
那么开始位置应该怎么选呢?当年杀毒软件的确只把特征码定位到各个区段,所以才会有哪些老的视频教程遗留下来的问题。
现在有的杀毒软件把特征码定位到PE头上去了,虽然PE头范围小而且很容易发生碰撞,但是如果提取整个文件的一些宏观信息在配合PE头上的某些特征码就能唯一确定出病毒/木马了,所以开始位置应选在PE头的开始处。
默认的开始位置特征之所以是E0,因为VC++6.0编译器编译的程序PE头开始位置就是E0(Delphi的是100H被囊括在内)。
而病毒主要是汇编/C语言写的,木马一般是C++/Delphi写的,现在年轻人的水平越来越差了,所以主要是木马免杀的变种多。
特别注意Dos MZ Head 和Dos stub块理论上也可以定位特征码的,尽管目前我还没发现过,如果发现定位异常就直接用十六进制打开文件看看头部有什么特殊的,要么把开始位置改成02(保留MZ头)。
现在大家明白为什么有一款灰鸽子首轮二次免杀切片的时候开始全被杀,很多人以为是分得不够细,导致每片都有特征码,后来有人只要把入口点加1,就能减少死亡甚至免杀,其实是入口点加1时改变了PE Header的内容,而当时的杀毒软件对PE Header里的特征码实施的是精确匹配,所以才会造成这种情况。
C++/Delphi写的程序入口指令是55(PUSH EBP),*.exe文件跳过这条指令没什么关系,*.dll跳过这条指令才会在调用函数返回时出问题。
回到正题,我把开始位置改成100H(我先看了下它的PE头地址),对这个鸽子做特征码侦查因为除不尽,所以最后一个恢复的长度比前面几个大一点。
第一次杀毒全杀了,说明100H开始的1294CH长度范围内有特征码。
这时点"二次处理"会提示找到一处特征码但是还可能存在别的特征码,是否继续分析,当然选Yes了,之后又会生成10个文件,此时的十个文件块和上次一样,只是100_1294C区被00填充了,杀毒时发现后面三个被杀了,也就是82214_1294CH有一处特征码。
这时点"二次处理"会提示找到一处特征码但是还可能存在别的特征码,是否继续分析,当然选Yes了,之后又会生成10个文件,此时的十个文件块里100_1294C和82214_1294CH区都被填充00了,继续杀毒发现没有病毒,说明只有这两个区域内有特征码,这时点二次处理能看见大框中出现特征区间的描述了(如果有毒还会提示继续分析)。
点击主界面上的特征区间上,就会在程序右边弹出一个特征区间窗口然后右键点击某个特征区间-->复合定位此处特征。
假设我选中第一处特征码操作,这时主界面上的数据会变成开始位置就是第一个特征区间的开始位置,长度也是第一个特征区间的长度,结束位置也是,此时默认是以单位长度为2切分,这样分块数量太多,在前几轮切割中显然会卡死。
所以最好改成分块数量10-50。
当点<生成>,此时的文件中非特征码区域都保留下来,第一个特征区间(100_1294CH)慢慢恢复,其它特征码区间(这里只有第二处),则被填充00了。
继续按第一轮特征码区间定位那样操作下去,直到单位长度到达2-6之间就差不多了。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------上面讲的是所谓的文件特征码定位,还有内存特征码定位,这个时候操作有点不一样,主界面上要勾上带后缀。
如下图:杀毒时是,右键选择目录那一行(也就是图中变蓝的地方),然后用TK.Loader 载入内存,如下图:此时点击全部载入内存,然后用杀毒软件的内存杀毒功能杀毒,在手工删除被报毒的几个文件。
其它的和文件特征码操作时一样。
为什么要带上后缀名呢?因为要送到内存中执行,如果不带的话会被当做*.txt文件那样被关联程序解释而不是自己执行。
为什么要手工删除呢?因为在内存中运行时,也就是正在执行的文件不能直接删除,不过现在的杀毒软件能把正在运行的程序删除。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------附:用MyCCL时必须每一步都小心,要不然很容易把问题积累到后面。
那个复合定位,单一定位因为现在杀毒软件对一些主流的目标都是多特征码的,所以最好一直选复合定位,顶多最后一步选单一定位,中间有时会自动跳到单一定位(MyCCL想一气呵成时就会出现),这时修改了分块数量时别忘了把这里改成复合定位成。