段寄存器(1)
在保护模式下,为了对程序加以保护。引入了页保护、段保护等机制。随着段保护也产生了新的寄存器,比如CS、DS、SS、ES、FS、GS、TR、GDTR、LDTR等 。
在IA-32模式下,程序的模型有段管理模式和平坦模式,Windows 32位环境为平坦模式。 段选择子CS、DS、SS所指向的段描述符的基址为0,G位为1(对齐粒度为PAGE 4K),段界限为0xFFFFF,所以地址空间为4G。
如图1所示,这是x32dbg附加到notepad.exe进程,显示CS、DS、SS寄存器的值分别为0x1B、0x23、0x23,当前CPL==3(segment selector的0、1位),TI==0(segment selector的第2位)。
解析这三个段寄存器:
12345CS Index:0x3 TI:0x0 CPL: 0x3DS Index:0x4 TI:0x0 CPL: 0x3SS Index:0x4 TI:0x0 CPL: 0x3
如果TI置位,则表示指向LDT(Local Descriptor T ...
逆向工程--失业的娱乐
前段时间在网上看了IAT Hook的文章,也正好期末提前放假,闲着想自己也想试一试,于是跟着网上的教程实现了汉化Windows系统自带的计算器。实现的话只应用到了dll注入和IAT Hook,实现起来也比较简单。
大概实现思路是:写一个dll,dll中钩取显示数字的目标API(usr32.SetWindowTextW),在执行该函数前,将缓冲区内的阿拉伯数字0~9改为汉字的零~九,然后将dll注入到目标进程,即可实现该功能。不再赘述,直接写出我的具体实现步骤:
一、写一个dll文件,dll文件会注入到目标进程(calc.exe进程)这个dll文件的实现为:
搜索user32中原始SetWindowTextW函数地址
编写Detour函数,实现将数字0~9改为汉字零~九
遍历目标进程内存空间,定位到导入表。
通过OriginalFirstThunk遍历函数名称,找到目标函数,对应的FirstThunk的值为目标函数地址。
注入dll时,将detour函数地址替换原函数地址,保存原函数地址,卸载时恢复
二、将上述dll文件注入到calc.exe进程中
提升 ...
Windows(IA-32e模式)系统调用
一、本文主题Windows NT是一个面向分层的操作系统,最底层是硬件,最高层使用户接口,Windows采用这种模式来保护内核不被应用程序错误的波及,操作系统核心运行在内核层(Ring 0 ),用户模式运行在应用层(Ring 3)。这只是操作系统分层的抽象概念。而本文旨在讨论Windows操作系统在IA-32e模式下从Ring3进入Ring0的部分具体实现过程,也会对比IA-32模式下的部分差异。本文IA-32e测试系统为Windows 10 2004。
二、系统调用Windows操作系统通过任务门、陷阱门、中断门三种途径进入内核。其中任务门通过应用层执行syscall指令后,执行系统调用分发函数KiSystemCall64Shadow,这个函数的地址存放在IA32_LSTAR(0xc0000082)的MSR寄存器中。
当我们从应用层调用一个API时,会通过应用层的ntdll进入内核,在执行syscall指令时,寄存器按照一些规则改变,本文举例介绍一些:
将syscall下一条指令地址存放在rcx寄存器中
将rip设置为IA32_LSTAR寄存器中的值
cs寄存器中Select ...
NEW START
ABOUTThis site is dedicated to those who relentlessly pursue knowledge and share it selflessly.
FOR MYSELFThe construction of this website is not the end, but a new beginning.
GITHUB:
This is my personal github website