一.ShellCode
1.什么是ShellCode
不依赖环境,放到任何地方都可以执行的机器码
2.ShellCode的编写原则
<1>不能有全局变量
<2>不能使用常量字符串
<3>不能使用系统调用
<4>不能嵌套调用其他函数
二.HOOK攻防
(1)基本概念
<1>HOOK是用来获取、更改程序执行时的某些数据,或者是用于更改某些程序执行流程的一种技术
<2>HOOK的两种主要形式
1.改函数代码:INLINEHOOK
2.改函数地址:
IAT HOOK
SSDT HOOK
IDT HOOK
EAT HOOK
IRP HOOK
(2)常见形式
1.VirtualTable_Hook
2.IAT_Hook
改IAT导入表
3.INLINEHOOK
改程序执行的顺序
注:修改代码会占用更多字节需要补上
使用代码修改
(3)HOOK攻防常用手段
阶段一:
(防)检查JMP(E9)、检查跳转范围
(破)想法设法绕
阶段二:
(防)写个线程全代码校验/CRC校验
(破)修改检测代码(重点:找到检测代码的位置)、挂起检测线程
阶段三:
(防)先对相关API全代码校验,多线程互相检测,并检测线程是否在活动中
(破)使用瞬时钩子(挂钩子然后摘钩子)/硬件钩子
为心中的美好而战 : p