从个人年久失修的git博客搬运

  • test.cpp
#include "stdafx.h"
#include <process.h>int main()
{printf("输入\n");int a, b;scanf_s("%d", &a);b = 1 / a;printf("%d\n", b);system("pause");return 0;
}
  • dllmain.dll
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "stdafx.h"
#include "stdio.h"
#include "windows.h"LONG WINAPI veh(EXCEPTION_POINTERS* pExce)
{if (pExce->ExceptionRecord->ExceptionCode == EXCEPTION_INT_DIVIDE_BY_ZERO){pExce->ContextRecord->Eip += 3;printf("fdsf\n");return EXCEPTION_CONTINUE_EXECUTION;}return EXCEPTION_CONTINUE_SEARCH;
} BOOL APIENTRY DllMain( HMODULE hModule,DWORD  ul_reason_for_call,LPVOID lpReserved)
{switch (ul_reason_for_call){case DLL_PROCESS_ATTACH://1. 将异常处理函数注册到系统AddVectoredExceptionHandler(TRUE, veh);printf("注册异常处理函数成功!\n");break;case DLL_THREAD_ATTACH:break;case DLL_THREAD_DETACH:break;case DLL_PROCESS_DETACH:break;}return TRUE;
}
  • 注入器
// 远程注入.cpp: 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include "windows.h"bool injectDll(DWORD dwPid, const char* pszDllPath);int main()
{DWORD dwPid;char szDllPath[MAX_PATH] = { "C:\\Users\\Administrator\\source\\repos\\VEH_Dll\\Debug\\VEH_Dll.dll"};printf("输入要注入到的进程PID:");scanf_s("%d[*]", &dwPid);injectDll(dwPid, szDllPath);return 0;
}bool injectDll(DWORD dwPid, const char* pszDllPath)
{bool   bRet = false;HANDLE    hProcess = 0;HANDLE    hRemoteThread = 0;LPVOID   pRemoteBuff = NULL;SIZE_T  dwWrite = 0;DWORD  dwSize = 0;//打开进程hProcess = OpenProcess(PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION | PROCESS_VM_WRITE,/*创建线程和写入内存权限*/FALSE, dwPid/*进程ID*/);if (hProcess == NULL){printf("打开进程失败,可能由于本程序的权限太低,请以管理员身份运行再尝试\n");goto _EXIT;}//1. 在远程进程上开辟内存空间pRemoteBuff = VirtualAllocEx(hProcess,NULL,64*1024,/*大小:64Kb*/MEM_COMMIT,/*预定并提交*/PAGE_EXECUTE_READWRITE/*可读可写可执行的属性*/);if (pRemoteBuff == NULL){printf("在远程进程上开辟空降失败\n");goto _EXIT;}//2. 将DLL路径写入到新开的内存空间中dwSize = strlen(pszDllPath) + 1;WriteProcessMemory(hProcess,pRemoteBuff,/* 要写入的地址 */pszDllPath,    /* 要写入的内容的地址*/dwSize,       /* 写入的字节数 */&dwWrite    /* 输入:函数实际写入的字节数*/);if (dwWrite != dwSize){printf("写入Dll路径失败\n");goto _EXIT;}//3. 创建远程线程//   远程线程创建成功后,DLL就会被加载,DLL被加载后DllMain函数//     就会被执行,如果想要执行什么代码,就在DllMain中调用即可.hRemoteThread = CreateRemoteThread(hProcess,0, 0,(LPTHREAD_START_ROUTINE)LoadLibraryA,  /* 线程回调函数 */pRemoteBuff,                          /* 回调函数参数 */0, 0);// 等待远程线程退出.// 退出了才释放远程进程的内存空间.WaitForSingleObject(hRemoteThread, -1);bRet = true;_EXIT:// 释放远程进程的内存VirtualFreeEx(hProcess, pRemoteBuff, 0, MEM_RELEASE);// 关闭进程句柄CloseHandle(hProcess);return bRet;
}

DLL注入 + VEH 的方式处理异常相关推荐

  1. [web安全]深入理解反射式dll注入技术

    一.前言 dll注入技术是让某个进程主动加载指定的dll的技术.恶意软件为了提高隐蔽性,通常会使用dll注入技术将自身的恶意代码以dll的形式注入高可信进程. 常规的dll注入技术使用LoadLibr ...

  2. 深入理解反射式dll注入技术

    前言 dll 注入技术是让某个进程主动加载指定的 dll 的技术.恶意软件为了提高隐蔽性,通常会使用 dll 注入技术将自身的恶意代码以 dll 的形式注入高可信进程. 常规的 dll 注入技术使用 ...

  3. 【安全技术】关于几种dll注入方式的学习

    何为dll注入 DLL注入技术,一般来讲是向一个正在运行的进程插入/注入代码的过程.我们注入的代码以动态链接库(DLL)的形式存在.DLL文件在运行时将按需加载(类似于UNIX系统中的共享库(shar ...

  4. Windows核心编程_远线程方式实现Dll注入

    之前有介绍过HOOK的方式注入,这次介绍以其它方式注入,而无须HOOK,要知道在Windows这个浩荡的海洋里,API就是宝藏,找到足够多的宝藏那么你就是海贼王~! 实现思路如下: 首先打开一个进程的 ...

  5. c++实现DLL注入的几种方式

    经过几天的折腾,找到了几个dll注入的方法,但是不意外的是,都暂时没法注入到LOL中,毕竟有进程保护在那,OpenProcess这一步就直接被拒绝了,提升Debug权限也没用,下面记录一些代码,希望能 ...

  6. Windows注入与拦截(3) -- 使用钩子方式完成DLL注入

    一. 钩子技术介绍 前面介绍了< Windows注入与拦截(2) – 使用注册表方式完成DLL注入>,本文介绍使用钩子的方式将DLL注入到进程的地址空间中. Windows提供了3个API ...

  7. DLL注入的方式 (转载自看雪学院)

    DLL 注入技术的 N 种姿势 看雪学院 看雪学院,为IT专业人士.技术专家提供了一个民间交流与合作空间. 18 人赞同了该文章 本文中我将介绍DLL注入的相关知识.不算太糟的是,DLL注入技术可以被 ...

  8. 关于dll注入方式的学习(全局钩子注入)

    何为dll注入 DLL注入技术,一般来讲是向一个正在运行的进程插入/注入代码的过程.我们注入的代码以动态链接库(DLL)的形式存在.DLL文件在运行时将按需加载(类似于UNIX系统中的共享库(shar ...

  9. python dll注入监听_注入方式,劫持dll注入的实现

    基础的东西不想多讲,简单的提一句,具体请问度娘. Windows的PE加载器会从执行文件目录下寻找DLL,如果找不到再去其他地方找. 把我们特定的DLL伪装成系统DLL,然后放在执行文件目录下,就能实 ...

  10. 【逆向】【Part 3】DLL注入

    目录 一.通过自制调试器来理解其原理 1.调试器的工作原理 实现反汇编功能(重点) 重点分析exception_debug_event 重点:1.对调试器程序增加异常处理操作功能,核心API, CON ...

最新文章

  1. BZOJ1965 [Ahoi2005]SHUFFLE 洗牌 快速幂
  2. 愤怒的小鸟素材包_点映预售开启|愤怒的小鸟2搞笑升级,萌贱无敌!
  3. 大规模数据库的性能改善方法之一 数据分割
  4. 2021年技术人员的最佳Linux桌面前5名
  5. (转) java 复制文件,不使用输出流复制,高效率,文件通道的方式复制文件
  6. linux 开启防火墙的指定端口
  7. oracle中的fetchsize,oracle setFetchsize() 优化查询速度
  8. Oracle9个重要的视图
  9. 西贝凭什么一年做到50多亿?| 独创的合伙人制:创业分部+赛场制
  10. NLPIR/ICTCLAS中文分词系统 java相关api文档总结
  11. Mac_苹果电脑设置眼睛保护色
  12. 微信视频提取及接收文件路径
  13. B站有哪些程序员大牛up主?
  14. 关于matlab中的gcf,gca
  15. 悼念打dota的日子
  16. Merge碰到ORA-30926 无法在源表中获得一组稳定的行
  17. HTML基础知识(一) 网页简介
  18. Day 3 (云计算-zsn)
  19. JS完成注册页面的省市联动(JS内置对象全局函数,select标签操作)
  20. 2月第4周榜单丨飞瓜数据B站UP主排行榜(哔哩哔哩平台)发布!

热门文章

  1. 浅谈setOnClickListener使用方法
  2. 交互设计理论之格式塔理论与四大法则
  3. 20210729 线性增长条件和全局Lipschitz条件的关系
  4. 第十三届蓝桥杯C B组 J:砍竹子
  5. Nebula3 SDK (Apr 2009)更新内容
  6. [CVPR 2019]类别级物体6自由度位姿估计
  7. PS亮度蒙版插件TKActions V5 Mac版
  8. Java后端开发工作 - 写接口
  9. PS与CSS字间距转换
  10. 如何通过组织管理提升团队战斗力?每个CTO都需要了解的三大支柱