存档

文章标签 ‘SEH’

ShellCode常用的GetPC方法

2012年11月24日 1 条评论

GetPC,也即Get Program Counter,取得程序计数器的值,在x86下就是GetEIP了,其作用是在进程的内存空间中得到当前的EIP的值,通常用于需要对代码自身进行操作的场合下,比如自解码和自修改代码(更一般的来说常见于病毒、溢出攻击代码等,也称之为代码重定位技术)。因为在x86下无法直接操作EIP寄存器,所以需要一些特殊的方法来获取EIP寄存器的值。
1. CALL GetPC
最简单的GetPC方法是使用call指令,之前的文章有提到过(http://www.programl[......]

继续阅读

Windows SEH汇编版

2011年5月17日 没有评论

SEH,即Structured Exception Handling,中文为结构化异常处理。是Windows操作系统提供给程序设计者的强有力的处理程序错误或异常的武器。Ring3下fs:[0]指向TEB(Thread Environment Block)结构,打开WinDbg,查看_TEB结构:

nt!_TEB
+0×000 NtTib : _NT_TIB
+0x01c EnvironmentPointer : Ptr32 Void
+0×020 Cli[......]

继续阅读

分类: Win32 ASM 标签: , , ,

[转]防缓冲区溢出开关/GS /SAFESEH

2011年5月15日 没有评论

缓冲区溢出通常表现为一个最为常见的漏洞而存在于今天的各种软件之中,黑客可以用恶意的输入,从而更改程序的执行流程,由此入侵相应的进程、电脑、或整个域。如果进程运行于一个高度受信的账户之下,如管理员或本地系统账户,那么黑客带来的破坏将是极其严重,并有潜在广泛传播的危险。近几年来爆发的一些”知名”病毒,如红色代码、冲击波、震荡波等等,都源于C/C++代码缓冲区溢出的结果。
从程序的角度来看,缓冲区溢出只是一个再简单不过的编程错误–都是关于复制一个内存区域的内容到另一[......]

继续阅读

分类: 缓冲区溢出 标签: , ,

调试与反调试(二)——BeingDebugged

2011年4月21日 2 条评论

如果进程处于被调试状态,那么PEB里面的BeingDebugged标志会置位,《调试与反调试(一)——IsDebuggerPresent》中的IsDebuggerPresent就是这么实现的~不信?可以看网上流传的Windows 2000源代码,在“\win2k\private\windows\base\client\debug.c”里面可以看到,就是这么实现的:

BOOL
APIENTRY
IsDebuggerPresent(
VOID
)
 
/*[......]

继续阅读