恶意代码分析二

X86架构中其他压入和弹出的指令,最常用的是pusha和pushad,将所有寄存器压栈

 

Pusha以下面顺序将所有16位寄存器以下面顺序压入栈中:AX,CX,DX,BX,SP,BP,SI,DI

Pushad                32                            EAX。。。

 

 

在shellcode中,如果要将寄存器的当前状态全部保存在栈上,以便稍后回复,常使用这些指令,编译器很少使用。

 

重复指令是一种操作数据缓冲区的指令。数据缓冲区是一个字节数组的形式,也可以是单字或双字。

 

最常见的数据缓冲区操作指令是movsx,cmpsx,stosx,scasx,其中x可以是b,w或者d,分别表示字节、字、双字,在这些操作中,使用ESI和EDI寄存器,ESI是源索引寄存器,EDI是目的索引寄存器,还有ECX用作寄存器的变量。这些指令还需要一个前缀。用于对长度超过1的数据做操作。

 

在x86下。使用重复前缀来做多字节操作

 

一个标准C程序的函数有两个参数,形式如下:

Int main(int argc,char * argv)

参数argc,argv是在运行时决定的。Argc是一个整数,说明了命令行中参数的个数,包括程序名字本身;参数argv是一个字符串数据指针,指向了所有的命令行参数

 

全局变量是通过内存地址引用,而局部变量是通过栈地址引用

 

Windows API是一个广泛的功能集合,管理着恶意代码与微软程序库之间的交互方式

 

Windows API常见类型:

WORD(w) 一个16位的无符号数值

DWORD(dw)  一个双字节、32位的无符号数值

Handles(H)      一个对象索引,句柄中存储的信息并没有文档化,而且这一句柄应该只被windows API操作。例子如hmodule,hinstance,hkey

LONG Pointer(L)一个指向另一类型的指针,如有CPByte是指向字节的指针,LPCSTR是一个指向字符串的指针,字符串通常是由LP作为前缀的,因为他们实际上是指针

Callback 表示一个符号会被windows API调用的函数,例如InternetSetStatus CallBack函数传递一个函数指针,当系统有Internet连接状态的更新时将会调用这个函数

 

句柄是在操作系统中被打开或被创建的项,如一个窗口、进程、模块、菜单、文件等等。句柄在他们引用一个对象或其他内存位置这点上很像指针,但是句柄并不总是表示对象地址。能对句柄做的唯一的事就是保存它,并在后续函数调用中使用它来引用同一个对象

 

文件映射经常被恶意代码作者使用,因为他们允许将一个文件加载到内存中,以便更加容易地进行操作CreateFileMapping函数将负责从磁盘上加载一个文件到内存中,mapviewoffile函数则返回一个指向映射的基地址指针,它可以被用来访问内存中的文件。程序调用两个函数,能够使用从mapviewoffile函数返回的指针,在文件中的任意位置进行读取和写入。这个特性在解析一个文件特性时极其顺手,因为你可以简单地跳转到不同的内存地址。

 

在获得一个文件的映射以后,恶意代码可以解析PE头,并对内存中的文件进行所有需要的修改,因此使pe文件就像被操作系统加载一样执行起来。

 

共享文件是以\\servername\share或\\?\servername\share开头命令的特殊文件,他们用来访问保存在共享目录中的目录或文件。\\?\前缀告诉操作系统禁用所有的字符串解析,并允许访问长文件名。

在操作系统中,也有一些文件可以通过名字空间进行访问。名字空间可以被认为是固定数目的文件夹,每一个文件夹中保存不同类型的对象。底层的名字空间是NT名字空间,以前缀\开始。NT名字空间可以访问所有设备。

 

以前缀.\\开始的win32设备名字空间,经常恶意代码用来直接访问物理设备,并且将一个文件一样进行读写操作。通过某些方式可以允许程序通过普通API不可能做到的方式来修改磁盘。使用这种方法,恶意代码可以读写数据到一个未分配的扇区,而无须创建或访问文件,使得能够避开防病毒和安全软件的检测

 

注册表术语:

注册表被划分为下面5个根键:

HKEY_LOCAL_MACHINE(hklm): 保存本地机器全局设置

HKEY_CURRENT_USER(HKCU):保存当前用户特定的设置

HKEY_CLASSES_ROOT  保存定义的类型信息

HKEY_CURRENT_CONFIG  保存当前关于硬件配置的设置,特别是当前和标准配置之间不同的部分

HEKY_USERS  定义默认用户、新用户、当前用户的配置

 

一些键实际上虚拟键值,提供一种引用底层注册表信息的方式。如HEKY_CURRENT_USER键实际上存储在HEKY_USERS\SID中,这里SID是当前登陆用户的安全描述符

 

向run子健中写入项,是设置程序自启动的方法

 

用.reg作为扩展的文件包含人类的:注册表数据、点击.reg文件时,它会自动合并文件包含的信息到注册表中,未修改注册表

 

恶意代码经常在一个程序的资源节存储另一个程序,并创建一个新进程。当一个程序运行时,他会从PE头中提取附加的可执行文件,将它写到磁盘上,然后调用create process来运行这个程序

 

一个操作系统在线程间切换之前,在CPU中的所有值会被保存到一个称为线程上下文的结构体中,然后操作系统加载这个上下文到一个新的线程中,并使这个新线程在CPU中执行

 

除了线程之外,微软系统还使用纤程。纤程和线程类似,但是被一个线程管理,而不是操作系统。纤程共享一个单一的线程上下文

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值