4.12~(小组成员对话预习)

news/2024/12/4 20:00:45/

注意我们这里观察的是XP的kernel32.dll,到win10是有变化的在这里插入图片描述

看了这个函数,似乎是让BasepExeLdrEntry不存在的时候初始化一遍,然后进行对比是否已经加载过这个dll,那么如果加载下一个dll的时候,BasepExeLdrEntry是不是还是非空状态,v3不就仍然保存着上一个dll的地址了吗
在这里插入图片描述
看了交叉引用也没发现有哪里把它至0的

有标记,就不加载了

问题在于我刚刚框出的部分没有见到for,那么查map也就不在这里进行查询,有可能的部分就是这个函数内的回调
在这里插入图片描述
在这里插入图片描述在里面的确见到了赋值和比较
在这里插入图片描述
但是在BasepExeLdrEntry非空的时候,这部分似乎没有被执行?
不符合条件,肯定跳过
那么加载过一次dll,作为全局变量的BasepExeLdrEntry不就保存了上一个dll的数据么,再加载dll的时候又是怎么判断的呢
每个进程都有一个加载map的,对比就知道了加没加过
enumloadmodule就是遍历函数

这个全局变量内部很复杂的
不是简单的dword
是一个结构体的指针
操作系统的全局变量,几乎都是大结构
不过问题在于,这个全局变量在加载第一个dll的时候被赋值过了,那么加载第二个dll的时候,就不会执行if里面的内容,也就是不会遍历,那又如何去判断是否加载过第二个dll呢
那万一是,空才是加载过了呢
这个得调过才懂
不能按正常经验判断
有些结构,头,就有那种标志位
表示状态的
在这里插入图片描述
按照分析来说应该是非空加载过了才对
至于动态调试,我的电脑是win10,看到的不太一样
在这里插入图片描述
尤其是不知道怎么找全局变量BasepExeLdrEntry的地址
即使是试着把本机的kernel32.dll丢进ida分析,却得不到代码
在这里插入图片描述
extrn,也就是本机的kernel32.dll也是引用另一个地方的LoadLibraryExW_0
注意到dbg显示的模块是KernelBase,去找了这个dll
在这里插入图片描述

自己部分

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
https://learn.microsoft.com/zh-cn/windows-hardware/drivers/ddi/wdm/nf-wdm-rtlinitansistring
LoadLibraryExA
LoadLibraryExW这两个最开始两个分别对ANSI、Unicode的计数字符串进行了初始化然LoadLibraryExA底层调用了LoadLibraryExW,跟进LoadLibraryExW里面又跟进了LoadDll
在这里插入图片描述
进里面走了一圈跳出来了,最开始的时候LoadLibraryExW里面调动RtALLocateheap做了一个堆中内存块的分配,最后在RtFreeUnicodeSting中做了个释放
在这里插入图片描述
在这里插入图片描述On Windows 10, GetProcAddress calls LdrGetProcedureAddressForCaller.
在这里插入图片描述GetProcAddress进入从LdrGetProcedureAddressForCaller又跳到了EnterCriticalSection
https://learn.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-entercriticalsection

这些函数可以了解一下,最关键还是把整体流程整理清楚


http://www.ppmy.cn/news/40454.html

相关文章

Vitamin D PEG amine,VD-PEG-NH2,维生素D聚乙二醇氨基,可以保护蛋白免受蛋白水解

【中文名称】维生素D PEG 氨基,维生素D-聚乙二醇-氨基,氨基-聚乙二醇-维生素D 【英文名称】 Vitamin D PEG NH2,Vitamin D PEG amine,VD-PEG-NH2,VD-PEG-amine,NH2-PEG-Vitamin 【结 构 式】 【分子量】1k…

虹科案例 | 丝芙兰xDomo:全球美妆巨头商业智能新玩法

全球美妆行业的佼佼者丝芙兰,其走向成功绝非仅依靠品牌知名度和营销手段。身为数据驱动型企业,2018年以来,丝芙兰就率先在行业内采用虹科提供的Domo商业智能进行数据分析和决策,并首先享受了运营优化、效率提升所带来的商业价值。…

Addressable卸载AssetBundle失效的疑惑

1)Addressable卸载AssetBundle失效的疑惑 ​2)模型Meta中的hasExtraRoot参数的作用及其历史原因 3)TMP为什么有多次Delegate.Combine()的GC 4)准备在海外发行游戏,比较常用的身份认证类SDK 这是第331篇UWA技术知识分享…

详细了解下可迭代对象与迭代器

文章目录前言一、可迭代对象(Iterable)1. 定义2. 常见的类型3. 可迭代对象的特性二、迭代器(Iterator)1. 定义3. 迭代器的特性三、检查常用的数据类型,是否可迭代对象与迭代器1. 字符串类型(str)2. 列表2. 可迭代对象转换为迭代器&#xff1a…

SpringBoot基础学习之(十二):通过spring boot框架连接MySql数据库(通过idea中的工具Database连接Mysql数据库)

Springboot这个系列实现的案例:员工后台管理系统 之前讲解的内容是前后端的交互,并没有涉及到数据库。把员工信息放置在一个数组中,实现的方法则是对数组的增删改查操作,但是从今天开始,实现的功能则是在数据库的基础上…

Solidity中的pure和view修饰符的区别是什么?什么时候添加pure和view修饰符?

Solidity是一种用于编写智能合约的编程语言,它被广泛应用于以太坊区块链上的智能合约开发。在Solidity中,有两种函数修饰符,即“pure”和“view”,它们被用来指示函数的行为。这篇文章将深入探讨“pure”和“view”的含义&#xf…

Vue——计算属性

目录 一、基础示例​ 二、计算属性缓存 vs 方法​ 三、可写计算属性​ 四、最佳实践​ Getter 不应有副作用​ 避免直接修改计算属性值​ 一、基础示例​ 模板中的表达式虽然方便,但也只能用来做简单的操作。如果在模板中写太多逻辑,会让模板变得臃…

SpringBoot + MyBatisPlus实现Yaml配置参数AES算法加密

文章目录SpringBoot MyBatisPlus实现Yaml配置参数AES算法加密1概述2 密钥加密3 Yaml参数配置4 使用方式SpringBoot MyBatisPlus实现Yaml配置参数AES算法加密 1概述 该功能为了保护数据库配置及数据安全,在一定的程度上控制开发人员流动导致敏感信息泄露。Mybati…