关于INT 2E 转帖留用 关于ANTI-DEBUG&ANTI-ANTI-DEBUG

转至:http://www.pediy.com/kssd/pediy08/pediy8-682.htm

下面是反汇编ntdll.dll的NtCreateEvent部分 NtCreateEvent调用了int 2E

Exported fn(): NtCreateEvent – Ord:005Ah
Exported fn(): ZwCreateEvent – Ord:02E2h
:77F83219 B81E000000         mov eax, 0000001E
:77F8321E 8D542404           lea edx, dword ptr [esp+04]
:77F83222 CD2E             int 2E
:77F83224 C21400             ret 0014

int 2e的使用方法:

mov eax, service_id
lea edx, service_param
int 2e

Windows 2000 int 2e 功能表
共248个
EAX = function number
EDX = address of parameter block
0x0   AcceptConnectPort
0x1   AccessCheck
0x2   AccessCheckAndAuditAlarm
0x3   AccessCheckByType
0x4   AccessCheckByTypeAndAuditAlarm
0x5   AccessCheckByTypeResultList
0x6   AccessCheckByTypeResultListAndAuditAlarm
0x7   AccessCheckByTypeResultListAndAuditAlarmByHandle
继续阅读“关于INT 2E 转帖留用 关于ANTI-DEBUG&ANTI-ANTI-DEBUG”

Flags

O 溢出 D I 单中断 T S 正负 Z Zero A P 奇偶 C 进错位

11      10 9          8 7          6            4 2           0

熟记

OF 溢出标志

DF 增量标志

保证字串处理方向  摘自0Day 第二版P91

IF 单中断标志

SF 正负标志 同时也是 Single Step标志

用于保证目标进程每执行一条指令就能与调试进程进行一次通信(摘自加密与解密3 P496)

ZF  0标志

PF 奇偶标志

CF 进错位标志

浮点指令

对下面的指令先做一些说明:
st(i):代表浮点寄存器,所说的出栈、入栈操作都是对st(i)的影响
src,dst,dest,op等都是指指令的操作数,src表示源操作数,dst/dest表示目的操作数
mem8,mem16,mem32,mem64,mem80等表示是内存操作数,后面的数值表示该操作数的内存位数(8位为一字节)
x <- y 表示将y的值放入x,例st(0) <- st(0) – st(1)表示将st(0)-st(1)的值放入浮点寄存器st(0)

1.  数据传递和对常量的操作指令

继续阅读“浮点指令”

指令格式 指令含义 执行的操作
FLD src 装入实数到st(0) st(0) <- src (mem32/mem64/mem80)
FILD src 装入整数到st(0) st(0) <- src (mem16/mem32/mem64)
FBLD src 装入BCD数到st(0) st(0) <- src (mem80)
FLDZ 将0.0装入st(0) st(0) <- 0.0
FLD1 将1.0装入st(0) st(0) <- 1.0
FLDPI 将pi装入st(0) st(0) <- ?(ie, pi)
FLDL2T 将log2(10)装入st(0) st(0) <- log2(10)
FLDL2E 将log2(e)装入st(0) st(0) <- log2(e)
FLDLG2 将log10(2)装入st(0) st(0) <- log10(2)
FLDLN2 将loge(2)装入st(0) st(0) <- loge(2)

MASM`s 指令速查

指令 功能
AAA 调整加
AAD 调整除
AAM 调整乘
AAS 调整减
ADC 进位加
ADD
AND
ARPL 调整优先级
BOUND 检查数组
BSF 位右扫描
BSR 位左扫描
BSWAP 交换字节
BT 位测试
BTC 位测试求反
BTR 位测试清零
BTS 位测试置一
CALL 过程调用
CBW 转换字节
CDQ 转换双字
CLC 进位清零
CLD 方向清零
CLI 中断清零
CLTS 任务清除
CMC 进位求反
CMOVA 高于传送
CMOVB 低于传送
CMOVE 相等传送
CMOVG 大于传送
CMOVL 小于传送
CMOVNA 不高于传送
CMOVNB 不低于传送
CMOVNE 不等传送
CMOVNG 不大于传送
CMOVNL 不小于传送
CMOVNO 不溢出传送
CMOVNP 非奇偶传送
CMOVNS 非负传送
CMOVO 溢出传送
CMOVP 奇偶传送
CMOVS 负号传送
CMP 比较
CMPSB 比较字节串
CMPSD 比较双字串
CMPSW 比较字串
CMPXCHG 比较交换
CMPXCHG486 比较交换486
CMPXCHG8B 比较交换8字节
CPUID CPU标识
CWD 转换字
CWDE 扩展字
DAA 调整加十
DAS 调整减十
DEC 减一
DIV
ENTER 建立堆栈帧
HLT
IDIV 符号整除
IMUL 符号乘法
IN 端口输入
INC 加一
INSB 端口输入字节串
INSD 端口输入双字串
INSW 端口输入字串
JA 高于跳转
JB 低于跳转
JBE 不高于跳转
JCXZ 计数一六零跳转
JE 相等跳转
JECXZ 计数三二零跳转
JG 大于跳转
JL 小于跳转
JMP 跳转
JMPE 跳转扩展
JNB 不低于跳转
JNE 不等跳转
JNG 不大于跳转
JNL 不小于跳转
JNO 不溢出跳转
JNP 非奇偶跳转
JNS 非负跳转
JO 溢出跳转
JP 奇偶跳转
JS 负号跳转
LAHF 加载标志低八
LAR 加载访问权限
LDS 加载数据段
LEA 加载有效地址
LEAVE 清除过程堆栈
LES 加载附加段
LFS 加载标志段
LGDT 加载全局描述符
LGS 加载全局段
LIDT 加载中断描述符
LMSW 加载状态字
LOADALL 加载所有
LOADALL286 加载所有286
LOCK
LODSB 加载源变址字节串
LODSD 加载源变址双字串
LODSW 加载源变址字串
LOOP 计数循环
LOOPE 相等循环
LOOPNE 不等循环
LOOPNZ 非零循环
LOOPZ 为零循环
LSL 加载段界限
LSS 加载堆栈段
LTR 加载任务
MONITOR 监视
MOV 传送
MOVSB 传送字节串
MOVSD 传送双字串
MOVSW 传送字串
MOVSX 符号传送
MOVZX 零传送
MUL
MWAIT
NEG 求补
NOP
NOT
OR
OUT 端口输出
OUTSB 端口输出字节串
OUTSD 端口输出双字串
OUTSW 端口输出字串
POP 出栈
POPA 全部出栈
POPF 标志出栈
PUSH 压栈
PUSHA 全部压栈
PUSHF 标志压栈
RCL 进位循环左移
RCR 进位循环右移
RDMSR 读专用模式
RDPMC 读执行监视计数
RDSHR
RDTSC 读时间戳计数
REP 重复
REPE 相等重复
REPNE 不等重复
RET 过程返回
RETF 远过程返回
RETN 近过程返回
ROL 循环左移
ROR 循环右移
RSM 恢复系统管理
SAHF 恢复标志低八
SAL 算术左移
SALC
SAR 算术右移
SBB 借位减
SCASB 扫描字节串
SCASD 扫描双字串
SCASW 扫描字串
SETA 高于置位
SETB 低于置位
SETE 相等置位
SETG 大于置位
SETL 小于置位
SETNA 不高于置位
SETNB 不低于置位
SETNE 不等置位
SETNG 不大于置位
SETNL 不小于置位
SETNO 不溢出置位
SETNP 非奇偶置位
SETNS 非负置位
SETO 溢出置位
SETP 奇偶置位
SETS 负号置位
SGDT 保存全局描述符
SHL 逻辑左移
SHLD 双精度左移
SHR 逻辑右移
SHRD 双精度右移
SIDT 保存中断描述符
SLDT 保存局部描述符
SMI
SMINT
SMINTOLD
SMSW 保存状态字
STC 进位设置
STD 方向设置
STI 中断设置
STOSB 保存字节串
STOSD 保存双字串
STOSW 保存字串
STR 保存任务
SUB
SYSCALL 系统调用
SYSENTER 系统进入
SYSEXIT 系统退出
SYSRET 系统返回
TEST 数测试
UD0 未定义指令0
UD1 未定义指令1
UD2 未定义指令2
UMOV
VERW 校验写
WAIT
WBINVD 回写无效高速缓存
WRMSR 写专用模式
WRSHR
XADD 交换加
XBTS
XCHG 交换
XLAT 换码
XOR 异或
XSTORE

指令 功能
EMMS 媒体空MMX状态
F2XM1 浮点栈顶绝对值
FADD 浮点加
FADDP 浮点加出栈
FBLD 浮点加载十数
FBSTP 浮点保存十数出栈
FCHS 浮点正负求反
FCLEX 浮点检查错误清除
FCMOVB 浮点低于传送
FCMOVBE 浮点不高于传送
FCMOVE 浮点相等传送
FCMOVNB 浮点不低于传送
FCMOVNBE 浮点高于传送
FCMOVNE 浮点不等传送
FCMOVNU 浮点有序传送
FCMOVU 浮点无序传送
FCOM 浮点比较
FCOMI 浮点比较加载标志
FCOMIP 浮点比较加载标志出栈
FCOMP 浮点比较出栈
FCOMPP 浮点比较出栈二
FCOS 浮点余弦
FDECSTP 浮点栈针减一
FDISI 浮点检查禁止中断
FDIV 浮点除
FDIVP 浮点除出栈
FDIVR 浮点反除
FDIVRP 浮点反除出栈
FENI 浮点检查禁止中断二
FFREE 浮点释放
FFREEP 浮点释放出栈
FIADD 浮点加整数
FICOM 浮点比较整数
FICOMP 浮点比较整数出栈
FIDIV 浮点除整数
FIDIVR 浮点反除
FILD 浮点加载整数
FIMUL 浮点乘整数
FINCSTP 浮点栈针加一
FINIT 浮点检查初始化
FIST 浮点保存整数
FISTP 浮点保存整数出栈
FISTTP
FISUB 浮点减整数
FISUBR 浮点反减整数
FLD 浮点加载数
FLD1 浮点加载一
FLDCW 浮点加载控制器
FLDENV 浮点加载环境
FLDL2E 浮点加载L2E
FLDL2T 浮点加载L2T
FLDLG2 浮点加载LG2
FLDLN2 浮点加载LN2
FLDPI 浮点加载PI
FLDZ 浮点加载零
FMUL 浮点乘
FMULP 浮点乘出栈
FNCLEX 浮点不检查错误清除
FNDISI 浮点不检查禁止中断
FNENI 浮点不检查禁止中断二
FNINIT 浮点不检查初始化
FNOP 浮点空
FNSAVE 浮点不检查保存状态
FNSTCW 浮点不检查保存控制器
FNSTENV 浮点不检查保存环境
FNSTSW 浮点不检查保存状态器
FPATAN 浮点部分反正切
FPREM 浮点部分余数
FPREM1 浮点部分余数二
FPTAN 浮点部分正切
FRNDINT 浮点舍入求整
FRSTOR 浮点恢复状态
FSAVE 浮点检查保存状态
FSCALE 浮点比例运算
FSETPM 浮点设置保护
FSIN 浮点正弦
FSINCOS 浮点正余弦
FSQRT 浮点平方根
FST 浮点保存
FSTCW 浮点检查保存控制器
FSTENV 浮点检查保存环境
FSTP 浮点保存出栈
FSTSW 浮点检查保存状态器
FSUB 浮点减
FSUBP 浮点减出栈
FSUBR 浮点反减
FSUBRP 浮点反减出栈
FTST 浮点比零
FUCOM 浮点无序比较
FUCOMI 浮点反比加载标志
FUCOMIP 浮点反比加载标志出栈
FUCOMP 浮点无序比较出栈
FUCOMPP 浮点无序比较出栈二
FWAIT 浮点等
FXAM 浮点检查
FXCH 浮点交换
FXTRACT 浮点分解
FYL2X 浮点求L2X
FYL2XP1 浮点求L2XP1
MOVED 媒体双字传送
MOVEQ 媒体四字传送
PACKSSDW 媒体符号双字压缩
PACKSSWB 媒体符号字压缩
PACKUSWB 媒体无符号字压缩
PADDB 媒体截断字节加
PADDD 媒体截断双字加
PADDSB 媒体符号饱和字节加
PADDSIW
PADDSW 媒体符号饱和字加
PADDUSB 媒体无符号饱和字节加
PADDUSW 媒体无符号饱和字加
PADDW 媒体截断字加
PAND 媒体与
PANDN 媒体与非
PAVEB
PCMPEQB 媒体字节比等
PCMPEQD 媒体双字比等
PCMPEQW 媒体字比等
PCMPGTB 媒体字节比大
PCMPGTD 媒体双字比大
PCMPGTW 媒体字比大
PDISTIB
PMACHRIW
PMADDWD
PMAGW
PMULHRIW
PMULHRWC
PMULHW
PMVGEZB
PMVLZB
PMVNZB
PMVZB
POR 媒体或
PSLLD 媒体双字左移
PSLLQ 媒体四字左移
PSLLW 媒体字左移
PSRAD 媒体双字算术右移
PSRAW 媒体字算术右移
PSRLD 媒体双字右移
PSRLQ 媒体四字右移
PSRLW 媒体字右移
PSUBB 媒体截断字节减
PSUBSB 媒体符号饱和字节减
PSUBSIW
PSUBSW 媒体符号饱和字减
PSUBUSB 媒体无符号饱和字节减
PSUBUSW 媒体无符号饱和字减
PSUBW 媒体截断字减
PUNPCKHBW 媒体字节高位解压
PUNPCKHDQ 媒体双字高位解压
PUNPCKHWD 媒体字高位解压
PUNPCKLBW 媒体字节低位解压
PUNPCKLDQ 媒体双字低位解压
PUNPCKLWD 媒体字低位解压

汇编书籍整合

最近有朋友说搞汇编不知道看什么书,哎 当初我也遇到这个问题很困惑了很久~走了许多弯路(什么?看书都走弯路..呃 由于咱实在小白 所以一开始看<C专家编程>果然天书呢..兴许你不会)

此处用来整合我许久以来在互联网上多处寻得的关于学习汇编各个方面的书籍,由于可能对于初学者来说,从什么地方开始都是一个难题..(呵呵 有点自大了呢)..PPS:自己没看过的我不会贴上来..

本来这贴在那啥博客上的,但是后来发现一个问题所以贴回这里了..果然自己的网站里啥都方便啊~但是认为太SB的东西又不敢挂上来 (现在的情况是,偶尔会认为自己昨天之前很SB)..因为只有可怜的300MB啊~而且两个邮箱都好贵好贵了..

(1)16位入门经典书籍 王爽汇编语言 经典中的经典(给朋友的建议:如果你真的想学汇编,这本书就必须完成其中的各个任务,否则浪费了王爽老师的一片苦心)

作者:王爽

这本书没找到清晰版 不过这个版本也不错 你可以去其他地方找找看..

汇编语言:http://dl.dbank.com/c02witsx3z

答案:http://dl.dbank.com/c0in8om672

(2)Win32入门经典书籍 高清版 INTEL汇编语言程序设计

作者:Kip Irvine

作者网站:http://kipirvine.com/asm/

网上很多模糊版本 唯独这个是高清版 花了我不少时间去找呢…(源代码随便G.CN上都有 这里就不放上来了)

我曾致电作者,不过作者似乎一直忙着另外一本书的写作 无暇顾及读者呢..呵呵 当然也可能是由于我魅力不够..抑或ZG人在国际形象不好。。。人家懒得理

A卷:http://dl.dbank.com/c01i0vqwk5#

B卷:http://dl.dbank.com/c089t7nqw4

(3)Win32汇编编程技巧介绍书:Iczelion的Win32汇编教程

作者:Iczelion

着本书总的来说是相对于有一定Win32汇编基础的或者是有高级编程语言基础的人,总的来说就是API,API,API 几个经典的API调用,但是的却非常精简 全是必要的技术部分 值得一看!

书籍:http://dl.dbank.com/c0ltkvv7te

(4)从DOW到WIN32汇编书 出自AOGO论坛的 DOS2WIN32

整合:AOGO坛友

这资料总的来说是不错的,因为整合了AOGO汇编论坛的精华部分,但是看个人喜欢不喜欢咯..

AOGO论坛虽然现在人气下降,但确是我最喜欢的论坛之一..感觉一下回到了90年代的..清新自然

DOS2Win:http://dl.dbank.com/c0hypuzhfn

(5)Win32位汇编最经典书籍:Windows环境下32位汇编语言程序设计 第一版 第二版

作者:罗云彬

这本书一直被汇编界奉为经典中的经典 等级和王爽老师的同级 一个16位 一个32位 撑起整个汇编语言学习界,由于汇编本来研究的人就不多 学的人也不多,这就造就了关于汇编的教程少之又少 幸亏有这这两个老师的努力编写,在这里必须给他们敬礼..以下是URL

说明:第一版不是扫描版而是完全的字体版 非常好 我找了很久才找到..

第二版是扫描版 清晰度一般..第二版在内容上和第一版差不多 但是第二版扩充了点内容…

第一版:http://dl.dbank.com/c0gn6a6lzx

第二版:http://dl.dbank.com/c0w2dh7s0b

(6)保护模式下编程:保护模式下汇编编程

作者:昌哥

这本书..不好描述 但是很受汇编学习着的欢迎..当然也许我说错了..

书籍:http://dl.dbank.com/c0oe8t9igy

PS:暂时就那么多,以后再更新