随笔分类 - Windows
Windows
摘要:当调试器进程通过CreateProcessW(A)创建进程时,传入的dwCreationFlags为DEBUG_PROCESS|DEBUG_ONLY_THIS_PROCESS时,表明调试当前创建的进程且不调试这个进程创建的子进程。 而CreateProcessW进程检测到此标志时会创建一个调试对象,
阅读全文
摘要:进程的创建过程 1、映射EXE文件。 2、创建内核对象EPROCESS。 3、映射系统DLL(ntdll.dll)。 4、创建线程对象ETHREAD 5、系统启动线程,通过APC进入 进入LdrInitializeThunk LdrpInitialize _LdrpInitialize LdrpIn
阅读全文
摘要:想更改控制台的背景颜色和前景色,通过打开一个新的cmd,右键点击标题栏,属性,点击颜色选项卡,设置屏幕背景和屏幕文字。 如下: 点击确定后,新启动一个cmd,显示的就是新的颜色。 但是对于其他的控制台应用程序,颜色还是没有改变过来,比如我们使用VS编写控制台程序时,调试程序或者通过Explorer启
阅读全文
摘要:在编写代码时经常需要使用到多线程,有时多个线程需要执行同一段代码,读写全局变量,此时需要将这段代码保护起来,同一时刻只有一个线程可以执行此代码,这种情况下可以使用临界区。 临界区使用简单,支持线程递归。 CRITICAL_SECTION section = { 0 }; InitializeCrit
阅读全文
摘要:vc++新建线程,可以使用CreateThread,这是windows API提供的接口,还有C运行时库提供的接口为_beginthread和_beginthreadex。 在编写代码的过程中,如果用到c库提供的接口,那么就会去读写一些c库提供的全局变量,例如错误值。 在线程中使用C库接口时,如果当
阅读全文
摘要:取自《Windows内核情景分析 上》 对于可能触发异常的代码可以使用SEH框架保护起来,然后去捕获异常、处理异常。 SEH框架是可以嵌套的。 对于SEH框架保护起来的代码,如果在代码中调用了某一个函数,这个函数中还存在SEH框架,那么这两个SEH框架从形式上看起来不是直观的嵌套,但是实质上却是嵌套
阅读全文
摘要:之前写过一篇通过Hook 拦截Windows 用户注销。 现在尝试通过Hook拦截Windows睡眠及休眠操作,测试在Windows虚拟机中进行,而虚拟机中没有休眠按钮,只有睡眠操作,但是不管是睡眠还是休眠都是调用的一个函数,只是参数不同。 通过搜索引擎可以查询到操作系统调用PowrProf动态库的
阅读全文
摘要:在编程时经常使用EVENT事件对象,在写代码时使用如下代码 TCHAR guid[] = _TEXT("D14F8A13-DD1F-326E-5A05-9B906070B9AB"); HANDLE hEvent = CreateEvent(NULL, FALSE, FALSE, &guid[0]);
阅读全文
摘要:写了一个小工具,可以通过Hook Winlogon进程主模块的导入表、延迟导入表来拦截对于User32!ExitWindowsEx函数的调用 整个步骤如下: 1、启动一个进程,注入DLL到Winlogon进程 (1) 因为winlogon进程是system级别进程,所以要让注入进程已管理员方式启动,
阅读全文
摘要:windows系统中内存页面有属性,有的属性可读可写,有的属性可读可执行,一般代码所处的页面是可读可执行的。 对于只读页面来说,即使是在内核态下(486CPU后引入)也无法直接写入,否则会引发系统异常。 在内核态下通过给CR0寄存器位16置0,就可以写入只读页面了。 DWORD old_cr0; _
阅读全文
摘要:Windows提供了API接口供程序使用,可以使用操作系统提供的功能。 大部分的API具体实现代码都在内核态R0层,用户态R3层的接口仅仅只有一小部分代码,用于调用内核态的代码。 早期的OS一般都通过中断门来实现从R3级切换到R0级,比如Linux下的int 80h、Windows NT和Windo
阅读全文
摘要:我们一般使用的是管理员账户,如果开启了UAC,那么默认情况下双击一个程序时是以medium权限运行,称为受限的管理员权限,如果右键程序“以管理员权限运行”,那么程序是high权限,称为不受限的管理员权限。 权限由高到低分别为Low Medium High System权限,Low权限很少见,浏览器的
阅读全文
摘要:为了在windows 64位系统上运行32位用户态程序,Windows操作系统有一个Wow64子系统来转换处理32位程序的调用请求。 当32位程序调用api接口时,32位接口会去调用64位的ntdll,如果存在指针,那么会把指针转化为8字节,从内核返回后,又会将64位指针转化为32位的。 还有 文件
阅读全文
摘要:需要生成uuid时,可以使用Windows SDK自带的工具uuidgen.exe 如下 如果需要生成一千个,那么使用批处理生成到txt文件中,批处理脚本如下 @echo onfor /l %%i in (1,1,1000) do uuidgen.exe>>1.txtpause 最终生成的文件如下:
阅读全文
摘要:关于调试时一些记录 在用户态时如果触发int 3断点,如果此时有内核调试器,那么内核调试器捕获到,这是调试器对于int 3的优待。 如果是release程序,如果触发栈溢出异常,用户态也可以触发,那是因为在未处理异常UnhandledExceptionFilter中 会判断如果是栈溢出异常且有内核调
阅读全文
摘要:本文描述了一个避免安装包目录下被DLL劫持的思路。 问题描述: 之前碰到了一个被DLL劫持的情况,通过打包工具做好的安装包在启动会去加载某个系统DLL,设想一种情况,我们下载文件时经常是经常是放在了默认目录下,假如安装包和恶意DLL放在同一目录下,以管理员权限运行安装包时会优先加载本地的恶意DLL,
阅读全文
摘要:问题描述: 前段时间朋友给我发送了一个exe,程序在以管理员权限即high权限下运行时正常,而以受限管理员和普通用户权限即medium权限下运行时,在点击一个按钮时切换主页面,右侧工具栏页面加载会卡顿2-3s。本文描述了如何解决这个问题的思路。 朋友给我发送了一个带盾牌的exe,,以及安装包,接下来
阅读全文
摘要:将自己在工作中的记录的一些windbg的命令记录下来,方便查阅,此页面会不断更新: 内核调试时OutputDebugString函数输出内容windbg无法看到不修改注册表的解决办法:ed nt!Kd_DEFAULT_Mask 8 参考自:https://blog.csdn.net/xbgprogr
阅读全文
摘要:工作中碰到一个问题,需要把一个远控工具放到磁盘上,读取到内存中加载PE程序。 使用github中的加载PE文件程序RunPeMemory32位程序直接加载远控工具是没有问题的,为了隐蔽性,需要写一个服务dll,然后由Windows服务主程序svchost.exe来加载服务dll,在服务dll代码中加
阅读全文