12 2018 档案
摘要:一,内核对象 内核对象的结构图 一个内核对象分为对象头和对象体两个部分,在对象头中至少有一个object_header和其他信息。对象体紧挨着对象头中的object_header。 这里注意对象指针指向的并不是对象头,如果要访问对象头,需要拿对象体减去一个特定的偏移值,获取到对象头,在通过对象头获取
阅读全文
摘要:windowsR3与R0通信 当我们调用某个API的时候,这个API是被封装在某个DLL库中,而DLL库中的函数则是在更底层的ntdll.dll文件中,而相对应的则是调用ntdll中的Native API函数ntdll中的Native API函数是成对出现,分别以Nt和Zw开头,在ntdll中他们的
阅读全文
摘要:1.内存空间布局 X86系统支持32位寻址,因此支持2^32=4GB的虚拟内存空间,windwos系统的内存主要分为内核空间和应用层空间 每部分占2GB,其中包括一个64KB的NULL空间以及非法区域。 windows内存的逻辑地址分为两部分: 段选择符和偏移地址,CPU在进行地址翻译的时候,先通过
阅读全文
摘要:时间限制程序一种为每次运行时长10.20分钟后停止,必须重新启动。计时器有如下选择: 1.setTime()函数 此函数可以在程序调用的时候,指定一个时间,同时获取一个超时后的回调函数。如果超过这个时间,系统则会给计时器窗口发送WM_TIMER,或者调用程序提供的回调函数 函数原型: UINT_PT
阅读全文
摘要:去除警告窗口意为将广告弹窗去除,去除的思路归根结底是:在不影响主程序的条件下,查找到警告窗口创建的位置将其跳过或者nop掉,显示窗口的函数主要有Messagebox、DialogBoxPara、ShowWindow、CreateWindowEx。还有一种去除的方式是通过消息断点的方式准根溯源到窗口创
阅读全文
摘要:1.获取序列号的思路: 根据输入注册码后,软件通常会在缓存区内获取输入的信息进行比较,我们可以找到注册码的地方,进行跟踪比较。常用的API有:GetWindowText, GetDIgItemText, GetDlgItemInt, 也可以根据显示对话框,告诉用户是否正确,这样可以根据这一点栈回溯查
阅读全文
摘要:虚函数 VC++实现虚函数的方式就是虚表,如果一个类至少要有一个虚函数,编译器会为这个类产生一个虚表。不同的类虚表就不同,相同的类虚表就会共享 识别构造和析构 如果在函数入口有 lea reg,off_xxxxxx, mov [reg],reg 初始化虚表,且返回值为this指针,我们就可以怀疑这是
阅读全文
摘要:1.寄存器 x64系统通用寄存器名称,第一个字母从“E”改为“R”,数量增加了8个,(R8-R15),增加了8个128位XMM寄存器(XMM寄存器用来优化代码) 用表格示意: 说明: 2.栈平衡 栈的基本入栈出栈操作和32位一样,需要注意就是在64位环境下,汇编指令对栈顶的对其值有要求,因此在VS编
阅读全文