1、Nanomites Processing
Nanomites是Armadillo嵌入子进程的INT
3中断,虽然在GETRIGHT FINAL版本里没有使用nanomites 保护,但是却在CRUSADER写的教程里的beta版本里用了。
可能有 50, 100甚至 200个INT 3,它们被放入了子进程的第一个section ,以阻止子进程脱离父进程运行。INT
3中断替代了原始文件的条件跳转。所以每当父进程接收到INT
3中断,它就到存放跳转类型的report中去,看一下标志以决定是否跳转,然后测算出新的EIP,改变到子进程中去然后继续运行直到下一个 INT
3。
问题是我们不知道每个跳转和INT 3的对应关系,所以我们将要在本篇教程中学习如何patch它。 首先我们要学如何手动patch它,然后(在第二篇教程中) 我们将要学习如何让计算机自动逐行patch它。
2、输入表乱序
Import Table Elimination一般是把输入表放在壳申请的内存处并且乱序处理。
对于输入表乱序,以前有两种解法:①、写代码重新排序;②、直接用ImportRec“创建新的IAT”功能来构造新的输入表。
3、代码拼接
Armadillo会把程序中的部分代码挪移到壳申请的内存段运行,普通dump会导致此部分代码丢失,可以使用ArmInline工具来修复这部分代码
4、内存校验
内存补丁保护可以防止攻击者使用Loader改变更程序的代码。付费版本的内存保护将会比Demo版更强大。如果您使用此选项,您必须使用CopyMem-II或Debug-Block,否则本项保护将无法启用。
使用内存保护时应注意,不要在程序里添加自修改代码,否则程序将会自动退出。
5.CopyMemII保护
6.SEH (windows 结构化异常处理) 操作系统处理异常的方案
异常处理程序的返回值
EXCEPTION_EXECUTE_HANDLER equ 1 表示我已经处理了异常,可以优雅地结束了
EXCEPTION_CONTINUE_SEARCH equ 0 表示我不处理,其他人来吧,于是windows调用默认的处理程序显示一个错误框,并结束
EXCEPTION_CONTINUE_EXECUTION equ -1 表示错误已经被修复,请从异常发生处继续执行
7.PE结构 (Portable Executable File Format)可移植的执行体 即 Windows的可执行文件格式
8.OEP (Original Entry Point) 即程序加壳前的真正的入口点
9.PELoader (把PE格式的文件加载到内存并跳到OEP执行)
10.Blowfish、Twofish、TEA 加密算法
11.KPCR (Kernel's Processor Control Region,内核进程控制区域)是一个不会随WINDOWS版本变动而改变的固定结构体,在它的末尾(偏移0x120)指向
KPRCB结构。KPRCB同样是一个不会随WINDOWS版本变动而改变的固定结构体。它包含有指向当前
KTHREAD的指针(偏移值0x004)。
ETHREAD的第一项是KTHREAD,也就知道了当前的ETHREAD基地址。KTHREAD中的_KAPC_STATE结构包含当前
KPROCESS的地址每个进程
都有一个EPROCESS结构,里面保存着进程的各种信息,和相关结构的指针。
EPROCESS结构位于系统地址空间,所以访问这个结构需要有ring0
的权限。EPROCESS的第一项是KPROCESS
12.CreateProcess CreateProcess创建进程的大致步骤:
1.打开可执行文件[.exe],以FILE_EXECUTE存取方式打开。
2.把可执行映像装载进RAM。
2.创建进程内核对象(EPROCESS,KPROCESS和PEB结构)。
4.为该新建进程分配地址空间。
3.在该进程中创建主线程的线程执行对象(ETHREAD,KTHREAD和TEB结构),为主线程分配堆栈,建立该进程主线程的执行上下文。
4.Kernel32.dll通知Win32子系统已经创建了一个新进程。
5.如果标志不是CREATE_ SUSPENDED,那么就开始执行进程中的线程
6.在进程和线程的context里,完成地址空间的初始化(比如,加载需要的DLL),开始执行程序
13.PE 格式中的 SectionAlignment 与 FileAlignment
这两个值可以在PE文件IMAGE_NT_HEADER结构体所包含的iamge_optional_header结构体中找到。
FileAlignment指的是二进制文件中,
数据对齐时采用的大小。一般是一个扇区的倍数(扇区大小一般为200h也就是512bytes),这样便
于更快的从硬盘中读取数据。而
SectionAlignment主要指的是PE文件被映射到内存后,其section被映射到进程空间时所采用的数据对齐
的大小。一般就是一个页大小的倍
数(通常为1000h)。这个也是为了更快的进行数据交换,便于内存管理。FileAlignment和硬盘的扇区相
关,SectionAlignment和内存的页
相关,一个是存放在硬盘列文件数据对齐,一个是存放在内存里的数据对齐.
14.
PEBProcess Environment Block , 进程环境块 FS段寄存器指向当前的TEB结构,在TEB偏移0x30处是PEB指针,通过这个指针即可取得PEB的地址
具体用法结构参考:
http://www.anqn.com/jiamijiemi/jichuzhishi/2009-01-12/a09105367.shtml15.
Opcode 16.
VM 虚拟机保护壳. 原理:模仿opcode的运行机制并参合代码加密,代码乱序,代码变形,各种Anti. 如 themida ,vmp 等
17.
TLS:Thread Local
Storage 线程局部存储TLS. 堆栈中定义的局部变量,对多线程是安全的,因为不同的线程有自己的堆栈
18.
CRC 校验值 类似求商的余数原理那样,CRC是求XOR的余数就是CRC值
11110 --> 30
1001 xor -->
9
---------
1100 --> 12
1001 xor --> 9
--------
101 --> 3,余数 --> the CRC!19. i
nt 2E 指令是未公开指令,eax 中存放函数号,EDX中存放函数地址
作用:1.可以用来 进入 ntoskrnl.exe调用naked API
2.他是从用户模式进入内核模式的main gate。
eax 中存放函数号作为查找表中的索引,去找到最终的目标函数。这个表就是系统服务表SST
详细参考
http://bbs.pediy.com/showthread.php?threadid=2455520. SST 系统服务表