![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c语言学习
玩撕你
111
展开
-
缓冲区溢出的基本原理
缓冲区溢出原理简单介绍传送门:缓冲区溢出的基本原理(一).一句话概括: 由于程序的运行机制,假设利用strcpy()函数进行字符串赋值,因定义字符串长度及传入字符串长度不一致(过长),从而占用了ebp(栈底)和call(函数)返回地址的栈区。基于此可利用修改函数调用结束后的返回地址,从而使计算机毫不犹豫的执行由我们编写的代码(shellcode)调用前:push eip...原创 2019-11-02 22:59:04 · 3626 阅读 · 0 评论 -
KPCR结构体
@0环的ETHREAD结构体是记录线程的相关信息,EPROCESS结构体是记录进程相关的信息,同样我们每个CPU也有一个结构体来记录每个CPU的状态这个结构体就是KPCR结构体KPCR结构体如下下面该结构体中几个主要的成员,kd> dt _KPCRnt!_KPCR+0x000 NtTib : _NT_TIB+0x01c SelfPcr ...原创 2019-11-02 00:44:08 · 496 阅读 · 0 评论 -
自己在三环实现ReadProcessMemory避免三环挂钩
// readMemory.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "windows.h"void ReadMemory(HANDLE hProcess,PVOID pAddr,PVOID pBuffer,DWORD dwSize,DWORD *dwSizeRet){ _asm { le...原创 2019-10-31 00:48:51 · 678 阅读 · 0 评论 -
调用门详解
1. 调用门描述符的格式调用门用于在不同特权级之间实现受控的程序控制转移,通常仅用于使用特权级保护机制的操作系统中。本质上,它只是一个描述符,一个不同于代码段和数据段的描述符,可以安装在GDT或者LGT中,但是不能安装在IDT(中断描述符表)中。注意:Linux Kernel 0.12 中并没有用到调用门。上图就是调用门描述符的格式(图片来自赵炯的《Linux内核完全剖析》)。调用门描...原创 2019-09-25 16:42:39 · 850 阅读 · 0 评论 -
代码段跳转流程
代码跨段,本质就是修改段寄存器段寄存器有ES,CS,SS,DS,FS,GS,LDTR,TR段寄存器读写:除CS外,其他的段寄存器都可以通过MOV,LES,LSS,LDS,LFS,LGS指令修改CS为什么不能直接修改,cs的值改变意味着Eip的改变,改变cs的同时必须修改eip,所以我们无法用上面的指令来修改1.代码间的跳转(段间跳转吗,非调用门之类)段间跳转,有两种...原创 2019-09-25 00:11:16 · 531 阅读 · 0 评论 -
API函数的调用过程(三环进0环)
kernel32.dll(ReadProcessMemory)只是简单调用了ntdll.dll(NtReadProcessmemory).text:7C92D9E0 public ZwReadVirtualMemory.text:7C92D9E0 ZwReadVirtualMemory proc near ; CODE XREF: Ld...原创 2019-09-24 19:34:57 · 674 阅读 · 0 评论 -
API函数调用过程(三环部分)
1.Windows API主要是存放在c:\WINDOWS\system32下面所有的dll2.几个重要的DLLKernel32.dll:最核心的功能模块,比如管理内存、进程和线程相关的函数User32.dll:是Windows用户界面相关应用诚信接口,如创建窗口和发送消息等。GDI32.dll:全称是Graphical Device Interface(图形设备接口),包含...原创 2019-09-24 08:29:55 · 401 阅读 · 0 评论 -
常用WinAPI函数整理
之前的博客写了很多关于Windows编程的内容,在Windows环境下的黑客必须熟练掌握底层API编程。为了使读者对黑客常用的Windows API有个更全面的了解以及方便日后使用API方法的查询,特将这些常用的API按照7大分类进行整理如下,希望对大家的学习有所帮助。一、进程创建进程:CreateProcess("C:\\windows\\notepad.exe",0,0,0,0,0...原创 2019-09-04 20:06:57 · 4655 阅读 · 0 评论 -
创建dll
创建空的c++动态库(1)创建Visual C++ —》空项目(2)修改项目属性将配置类型改为动态库(.dll),目标文件扩展名改为(.dll),另外注意平台的一致性32位、64位(3)添加MyDLL.h文件和MyDLL.cpp文件MyDLL.h文件代码如下:MyDLL.h文件代码如下:...原创 2019-08-07 17:25:17 · 111 阅读 · 0 评论 -
代码注入-dll注入
// 代码注入#include <iostream>#include <Windows.h>bool InjectDll(DWORD dwPID, LPCTSTR szDLLPath){ HANDLE hProcess = NULL, hThread = NULL; DWORD BufSize = (DWORD)(strlen(szDLLPath) ...原创 2019-08-07 16:04:58 · 312 阅读 · 0 评论