4.13(LoadLibrary)

接着之前预习的知识,我观察的自己编译出来的bin

LoadLibraryExA

LoadLibraryExA函数进去,现时用RtInitAnsiString函数初始化了ANSI的计数字符串,底层是调用了LoadLibraryExW函数,在LoadLibrarExW函数里做了unicode的计数字符串的初始化,这里过后主要看都了路径(path)函数,我看了LoadLibrarExW底层一路到LoadDL函数,没看懂,然后一路跳出来,最后就是释放最开始的字符串的函数了
在这里插入图片描述RtlAnsistringTounicodestring
RtlInitansistringEx
LdrGetolIPath
LdrLoadDLL
RtIfreeUnicodestring
RtlReleasePath

GetProcAdderss

GetProcAdderss用的底层函数GetProcAddressforcaller,同样内部也是做计数字符串的初始化,然后底层函数是LdrGetProcedureAddressForCaller,进入这个函数又看到了RtlAcquireSRWLockExclusive函数,这个函数进行读写,应该是获取地址,这里没有跟进去,后面跳出来了RtIReleasesRhLockExcIusive又做了释放,奇怪的是释放后又再次掉用了RtIAcqurieRhLockExcIusive,大致是这样
在这里插入图片描述

讲解

在学长的电脑上看到的

RtlpImageNtHeader

RtlImageDirectoryEntryToData

LdrLoadDll

LdrpCreateDllSection

ZwMapViewOfSection

NtUnmapViewOfSection

LdrpAllocateDataTableEntry

LdrpFetchAddressOfEntryPoint

ZwProtectVirtualMemory

DecodeSystemPointer

EncodeSystemPointer
其实LoadLibrary 核心流程其实是:把一个DLL 拷贝到内存,然后解析DLL PE结构中的导入表,把该DLL 所需要的DLL模块,都加载到内存,然后处理导入函数从stub到真正函数指针的过程,所有函数指针处理完之后,就可以返回了

RtlpImageNtHeader、RtlImageDirectoryEntryToData 这两个函数操作,PE结构,获取PE头,获取导入表项的
加载DLL 的时候,首先从文件到内存,那么既然需要找文件,就会有很多默认的路径,去搜索并打开文件
打开文件,读取到内存之后,就需要把DLL 模块内容,映射到进程内存中
ZwMapViewOfSection 映射
NtUnmapViewOfSection 解除映射
DLL 装入内存后,DLL内存区域的不同的节,用途不同,所以内存赋予的内存属性也不一样
和之前我们学过的,内存申请函数VirtualAlloc 的参数中提到一样,最常用的读 写 执行
一般存数据的是只读,代码节,必须得赋予可执行属性内存,才能最后跑起来
ZwProtectVirtualMemory 这个函数就可以修改内存的属性,其顶层函数是VirtuallProtect(应该是这个)

那么有一个问题:如果每次加载一个动态链接库,到同一个地址上,是不是使用GetProcAddress 获取同一个函数的指针地址值是相同的?

答案是显而易见的,相同的

如果每次基址都一样,硬编码地址值之后,就能直接这个函数了,这个就涉及到一个安全问题,一段注入EXE的SHELLCODE,能很简单获取到系统接口地址,是不是就能很容易的搞事情了

PIE(要记得,学安全技术,一定要懂得这个东西产生的背景)在这里插入图片描述

也叫漏洞利用缓解及对抗技术ALSR ,ALSR地址空间布局随机化
不过,PE结构上有个项,可以关闭这个地址空间布局随机化,所有SHELLCODE 加载之后,第一件事,就是去找所用函数的指针,没有例外
所以在获取函数指针的途径上,一定会有各种技术,来提高这个操作的门槛
还有就是刚才提到的两个函数,在比较新的windows上才有: EncodePointer/DecodePointer,
在传递函数指针的过程中,对指针值,进行编码解密的一个处理
ALSR 开启后,每次加载的DLL基址,都会不同所以做DLL函数HOOK ,或者是捞函数指针,就不太容易了
在很早以前,那种恶意代码中,经常发现硬编码的函数指针
就是利用基址,重复的特性
目前shellcode 做法,就是寻找,进程的DLL保存指针,获取到kernel32的基址,之后,自己遍历PE结构,获取函数指针
进程空间中,也存在,一种监控程序的HOOK,IAT HOOK,通过在PE加载时,把PE导入表函数地址改了,先走监控函数,再走系统函数来达到监控的目的
杀软的HOOk,是做在内核层的,而且WINDOWS 是不希望第三方程序去监控系统底层接口的
只不过,现在搞内核钩子的难度比较大而已
而且稳定性,这块很考验功夫的
IAT钩子,最致命的一点,就是仅仅在加载时做完操作了
所以对抗手法就是,病毒实现把原始函数的入口点若干字节,crc 存好,用之前先匹配crc,crc不对,直接退
还有一种对抗手法,就是单独复制一份DLL到内存,用自己复制这份DLL的代码
不是用LoadLibrary 加载,而是自定义的加载函数
其实,知道懂得原理,就能写出来 链接:
https://www.cnblogs.com/StudyCat/p/16001615.html
(链接帖子里面的信息一定要认知看)
PE内存加载,内存执行SHELLCODE,目前已经是恶意代码用得最多的方式
传统的安全软件,大多是基于文件的
而且,内存不好搞监控
搞PE,动态加载,就绕不开PE结构
有种极限方法,是把函数头搞出来,然后改汇编跳到,HOOK之后,的DLL代码上
只要能绕过HOOK代码就行
什么是HOOK?
https://blog.csdn.net/qq_36381855/article/details/79962673
说白了,HOOK对抗,比的就是谁更猥琐
对于汇编代码修改,这块,安全技术上,对抗手法,就是局部代码crc校验
英雄联盟用的TP ,里面全是好几个线程,校验关键crc
就是不停的去读取那块代码,然后算CRC,CRC校验失败,直接下狠手
本课的另一个函数,GetProcAddress ,其实就是PE结构的导出表的结构的解析
RtlAcquireSRWLockExclusive 这个是一个同步手段
类似自旋锁的东西
如果需要访问需要遵循读写分离的内存区域时,就需要用到
拿锁,之后,非该线程的代码时不允许访问目标块的
只有拿锁的,释放锁之后,才能访问LdrGetProcedureAddress

这节课的知识点,关联的几个好玩的编码项目:PE内存加载,进程hollow 技术https://jev0n.com/2020/03/11/65.html
虽然这个IATHook 技术很老,但是也要看用的地方
进程hollow 简单点,就是把当前进程代码挖空,给进程换代码
卸载当前进程的代码块,就用NtUnmapViewOfSection
必须对PE结构熟悉,才能搞
https://zhuanlan.zhihu.com/p/30990104?from_voters_page=true
https://www.cnblogs.com/bonelee/p/15866488.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/12763.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python入门(五) vscode配置Anaconda 环境,代码自动提示

文章目录 1.conda的下载地址:1.配置conda的环境变量安装conda配置path 2.vcode配置python插件3.配置conda1) Select Interpreter2) 选择conda环境 4.测试 vscode配置Anaconda 环境,代码自动提示. 本人工作中,用到了ai相关技术,但是java出身&a…

七项新发布,亚马逊云科技Amazon S3持续进化

17年前的3月14日,亚马逊云科技推出了一项“非常简单的”对象存储服务(Amazon Simple Storage Service)。该服务允许开发人员创建、列出和删除私有存储空间(称为存储桶)、上传和下载文件以及管理其访问权限。当时&#…

北京筑龙:采购供应链平台-构建能源企业数智供应链的必经之路

4月13至14日,“中国国际管道会议(CIPC)暨技术装备与成果展”高峰论坛在北京举行。来自国内外管道领域的院士、知名专家、学者齐聚一堂,共同探讨新时代背景下管道技术领域的发展方向。作为采购供应链数字化产品及服务提供商&#x…

每日学术速递4.13

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Slide-Transformer: Hierarchical Vision Transformer with Local Self-Attention(CVPR 2023) 标题:Slide-Transformer:具有局部自注意力的分层视觉变换器 …

Camera | 8.让rk3568支持前后置摄像头

一、目标 本文主要目标是,支持前置摄像头0v5648、后置摄像头ov13850,以及移植过程遇到的一些小问题的解决。 1. 摄像头连接图 参考上图,摄像头详细信息如下: 2个摄像头均连接在I2C通道42个摄像头共用同一个MIPI数据通道2个摄像…

LeetCode:454. 四数相加 II —— 哈希表为什么叫哈希表~

🍎道阻且长,行则将至。🍓 🌻算法,不如说它是一种思考方式🍀 算法专栏: 👉🏻123 hash是什么,哈希表为什么叫哈希表? 一、🌱454. 四数…

Java基础(八)异常处理

1. 异常概述 1.1 什么是生活的异常 男主角小明每天开车上班,正常车程1小时。但是,不出意外的话,可能会出现意外。 出现意外,即为异常情况。我们会做相应的处理。如果不处理,到不了公司。处理完了,就可以…

一文搞懂Plant Simulation中的Rotation设置

在处理3D动画或者展示时,常常需要在Plant Simulation调整数模的姿态,静态设置或动态设置Rotation是一个很重要的手段。 编辑3D属性,在Transformation选项卡中,我们可以看到Rotation的设置参数,如上图所示,只有一个角度和3个轴参数。如果对计算机图形学不了解的同学,估计…

MySQL优化——Explain分析执行计划详解

文章目录 前言一. 查看SQL执行频率二. 定位低效率执行SQL三. explain分析执行计划3.1 id3.2 select_type3.3 table3.4 type3.5 key3.6 rows3.7 extra 四. show profile分析SQL 前言 在应用的的开发过程中,由于初期数据量小,开发人员写 SQL 语句时更重视…

【技术分享】接口自动化测试中,如何做断言验证?

在服务端自动化测试过程中,发起请求之后还需要对响应值进行验证。验证响应信息符合预期值之后,这一条接口自动化测试用例才算完整的通过。所以这一章节,将会讲解在接口自动化测试中,如何对服务端返回的响应内容做断言验证。 实战…

Linux命令·traceroute

通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。linux系统…

【微服务笔记13】微服务组件之Config配置中心基础环境搭建

这篇文章,主要介绍微服务组件之Config配置中心基础环境搭建。 目录 一、Config配置中心 1.1、什么是配置中心 1.2、Config配置中心特点 二、搭建Config配置中心 2.1、配置Git仓库 2.2、创建ConfigServer服务端 (1)引入依赖 &#xff…

【天梯赛—不想坑队友系列】L1-002 打印沙漏(java)

题目链接 PTA | 程序设计类实验辅助教学平台 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印 ************ *****所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符…

企业在实施采购管理时需要注意哪些问题?

采购管理是指企业为了获得所需的物资和服务等,通过筛选供应商、谈判合同、执行采购计划等一系列过程来实现目标的管理活动。在实施过程中,采购管理需要注意以下几个问题: 1、采购策略的选择 采购策略的选择是采购管理中非常关键的环节。不同…

NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022

然后我们来看一下如何操作模板 首先我们准备好了一个模板,叫做CsvToJSON这样一个模板文件了 然后我们再来看左下角有个上传模板 可以选择这个模板上传上来,然后,就可以在右侧找到,菜单,找到template,点击,来查看模板了 然后添加组,就是顶部的那个两个圆圈的组件拖过来以后用来…

Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载

文章目录 一、业务背景二、实现思路二、准备工作1.准备data模板.xlsx2.引入poi相关依赖,用于操作excel3.针对WorkBookZIP压缩输入/输出流,相关方法知识点要有所了解 三、完整的项目代码四、可能遇到的问题错误场景1:java.io.IOException: Str…

Echarts数据可视化(下)

四、数据可视化项目实战 后台搭建 结合Vue开发图表组件 WebSocket实现数据推送 主题切换/页面合并/全屏切换 4.1 Koa2 学习介绍:koa2 - 简书 官网:Koa (koajs) -- 基于 Node.js 平台的下一代 web 开发框架 | Koajs 中文文档 4.1.1 Koa2 的介绍 基…

百度智能云对象存储BOS批量下载文件方法

百度智能云对象存储BOS支持批量打包下载吗?目前对象存储BOS浏览器端不支持批量下载,可以使用对象存储BOS桌面或BOSCMD批量下载,也可以使用API/SDK调用接口循环下载。新手站长网来详细说下百度云对象存储BOS批量下载的方法: 目录 …

Git 分布式版本控制工具

文章目录 Git 分布式版本控制工具课程内容1. 前言1.1 什么是Git1.2 使用Git能做什么 2. Git概述2.1 Git简介2.2 Git下载与安装 TODO3. Git代码托管服务3.1 常用的Git代码托管服务3.2 码云代码托管服务3.2.1 注册码云账号3.2.2 登录码云3.2.3 创建远程仓库3.2.4 邀请其他用户成为…

c++小知识

1、一般头文件&#xff1a; #include<iostream> using namespace std; 2、ios::sync_with_stdio(false); 其含义是取消cin与stdin的同步&#xff0c;cout和stdout的同步 cin.tie(0); tie是将两个stream绑定的函数&#xff0c;空参数的话返回当前的输出流指针。 3、…