hu1y40's blog

hu1y40'blog
天堂的穹空遍布地狱之火的颜色,但也是天堂。
  1. 首页
  2. 书籍阅读
  3. 正文

加密与解密 第12章实验

2023年10月7日 1861点热度 0人点赞 0条评论

0x01 静态修改PE输入表法

实验环境

推荐使用的环境 备注
操作系统 Windows 10
编译器 VS2019
二进制编辑器 010Editor

实验过程

C语言代码。

// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "pch.h"
#include <stdio.h>
#include <Windows.h>
DWORD WINAPI ThreadShow(LPVOID lpParameter);
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
CreateThread(NULL, 0, ThreadShow, NULL, 0, NULL);
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

DWORD WINAPI ThreadShow(LPVOID lpParameter) {
char szPath[MAX_PATH] = { 0 };
char szBuf[1024] = { 0 };
GetModuleFileNameA(NULL, szPath, MAX_PATH);
MessageBoxA(NULL, szBuf, "Injected by hu1y40", MB_OK);
printf("%s", szBuf);
OutputDebugStringA(szBuf);
return 0;
}

要添加一个新的IID,所以原先OptionalHeader中输入表的目录的大小要改。newIIDSize=OldSize+sizeof(IID)。

先看看原先的IID数组。

基地址ImageBase。

fig:

FOA光标处,长度0xC8。添加后所需的长度是0xDC。

fig:

找块空间写入IID结构所需的各类数据。

随后将IID数据填充。

最后修正PE头,如输入表位置,大小。并且由于输入表加载过程中FirstThunk要被填充为真正的函数地址所以该节需要可写。

最后清除PE文件头数据目录中的Bound Import Table。强制重新处理输入表。

0x02 进程创建期修改PE输入表法

实验环境

推荐使用的环境 备注
操作系统 Windows 10
编译器 VS2019

实验过程

可以在R3/R0的各个阶段进行干预。由于进程创建修改的是映射后的内存,所以利用的是内存空隙,空隙会更大。

首先以挂起的方式创建目标进程。

随后获取目标进程中的PE结构信息。这里需要读取EXE的实际加载位置来获取,但是由于此时进程中的很多数据结构没有初始化,EnumProcessModules之类依赖PEB->Ldr链表的函数无法使用,所以可以自行搜索MEM_IMAGE的页映射文件。由于此时内存中只映射了EXE和ntdll.dll。由于dll文件加载位置靠后,所以第一个具有MEM_IMAGE属性的页地址就是EXE的实际加载基址。另一种办法是使用ZwQueryInformation,查询ProcessBasic Information,获取PEB的地址。PEB偏移0x8处是ImageBase。

在这之后获取原IID的大小,增加一项,可以在最后一个节的结束为止申请新的内存。

fig:

再然后构造新的IID及其相关的成员。

最后修改PE头,继续运行主线程。

该实验待后续补充。

0x03 输入表项DLL替换法(DLL劫持法)

实验环境

推荐使用的环境 备注
操作系统 Windows 10
编译器 VS2019

实验过程

进程创建尚未完成的时候ntdll就已经加载了。在加载时,ntdll的路径是系统在启动阶段就以及设置好的位于system32目录下的路径,R3的劫持对他无效。

系统启动的时候,smss.exe会根据设置项创建一个\KnownDLLs对象目录,其中存放了各个KnownDLL的Section对象。

当需要加载DLL时,系统会优先从\KnownDLLs对象目录中查找,如果有的话,直接在这里使用NtMapViewOfSection将其映射到当前进程中。如果没有,进行搜索。

fig:

如果在KnowDLLs中找不到目标DLL,Windows将按照如下顺序查找DLL。

  1. 正在加载DLL的进程的可执行文件的目录。
  2. 系统目录(WINDOWS/SYSTEM32,WINDOWS/SYSTEM,WINDOWS)
  3. 正在加载DLL的进程当前目录
  4. PATH环境变量中列出的目录
标签: 实验 总结
最后更新:2023年10月7日

hu1y40

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复
文章目录
  • 0x01 静态修改PE输入表法
    • 实验环境
    • 实验过程
  • 0x02 进程创建期修改PE输入表法
    • 实验环境
    • 实验过程
  • 0x03 输入表项DLL替换法(DLL劫持法)
    • 实验环境
    • 实验过程

分类目录

  • 0day安全
  • Bypass
  • C++Prime
  • CTF
  • DoS
  • DoS
  • FUZZ
  • iot
  • JSONP
  • MISC
  • MISC
  • PHP伪协议
  • Python
  • REVERSE
  • sqli-labs
  • SQL注入
  • Trick
  • UAF
  • WEB
  • WEB
  • XXE
  • 书籍阅读
  • 二进制
  • 代码阅读
  • 信息搜集
  • 信息泄露
  • 加密与解密
  • 双重释放漏洞
  • 反序列化
  • 命令执行
  • 命令执行
  • 堆溢出
  • 密码学
  • 弱加密
  • 提权漏洞
  • 整数溢出
  • 文件上传
  • 未分类
  • 栈溢出
  • 格式化字符串漏洞
  • 模型
  • 汇编语言
  • 渗透测试
  • 漏洞分析
  • 漏洞利用
  • 漏洞战争
  • 漏洞挖掘
  • 病毒分析
  • 越界读取
  • 路径遍历
  • 逻辑漏洞
  • 配置不当
  • 钓鱼
  • 靶场
最新 热点 随机
最新 热点 随机
加密算法 2023年度总结 RTSPServer StackOverflow Vulnerability FUZZ 总览篇 MP4Box 无限循环漏洞 CVE-2023-40477 Winrar RCE漏洞分析
CVE-2021-35515 Apache Commons Compress拒绝服务漏洞 正则表达式 regexp sqli-labs 11-20 二维码结构分析 深入理解计算机操作系统 上 CVE-2013-3346 Adobe Reader ToolButton UAF漏洞

COPYRIGHT © 2023 hu1y40's blog. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

鄂ICP备2021009673号-1