首先查询MSDN,可以清楚地看到

位于kernel32 dll 里面。

有目标就好办,找到这个dll,然后,开工,进入IDA。

跳啊

就到下面那块了。

遗憾的是。。。显然不是这里阿,实际上下一块调用的地方是kernelbase里面

这里才对,代码非常少。

下面那块是在取进程主模块基址,

就是这里

mov     eax, large fs:18h     //      取TEB

mov     eax, [eax+30h]         //      取PEB

mov     eax, [eax+8]             //      取基址,

这块不管了,其实看伪码也能看出来,如果参数传NULL的话,自然就是取当前进程主模块地址。

进入主菜

这个函数,

这里我们要先记录一下,前面是怎么传参的,

KernelBase.dll

BasepGetModuleHandleExW

开始了

在函数里面,首先判断参数1最低位是否是1

运气真好,如果是1,就不进来,那么我们的调用源可以不进了

参数2,值为2,肯定&4失败,所以这里也不会进

直接走else

首先,前面的& 0x1000 这个位置应该是在判断当前进程的模块里面是否有DLL模块,

这个位的具体含义没有找到官方版,但是从其他地方找到了它的含义,是

RTL_USER_PROCESS_PARAMETERS_PRIVATE_DLL_PATH

判断是否有DLL模块路径,

如果有的话,进入下面的if,先构造DLL 的路径名字,

构造结果是这样的

src  = Kernel32.dll

src1 = D:\XXX\Kernel.DLL

src2 = D:\XXX\Test.exe.Local\Kernel.DLL

如果构造正确的话,

调用

一步一步失败了的话,最后直接调用

后续我来分析这个函数

如果这里再失败了,那么就获取Last Status,然后走人。

如果成功了的话,

后面

进入NTDLL里面的这个函数,看名字很像增加DLL的引用计数,后续我来分析这个函数

其实这里吧,前面调用当前函数的时候 dwFlags = 2,那么也就是说,

其实,在前面判断dwFlags & 2 的地方,就已经越过了增加引用计数的功能了。

所以GetModuleHandleW函数,其实是不增加模块引用计数的。

之后继续

其实这里之后就没什么了,

因为前面没有加锁,所以后面也不需要解锁。

释放两块内存,之后转交一下HANDLE,就返回了,完整流程结束

到这里为止,就只有两个函数没有分析了,

1:kernelbase 的 GetModuleHandleForUnicodeString

2:ntdll 的 LdrAddRefDll

今晚先放这吧,改日继续。

其实没啥玩艺,逻辑很简单

GetModuleHandleW 分析的更多相关文章

  1. alias导致virtualenv异常的分析和解法

    title: alias导致virtualenv异常的分析和解法 toc: true comments: true date: 2016-06-27 23:40:56 tags: [OS X, ZSH ...

  2. 火焰图分析openresty性能瓶颈

    注:本文操作基于CentOS 系统 准备工作 用wget从https://sourceware.org/systemtap/ftp/releases/下载最新版的systemtap.tar.gz压缩包 ...

  3. 一起来玩echarts系列(一)------箱线图的分析与绘制

    一.箱线图 Box-plot 箱线图一般被用作显示数据分散情况.具体是计算一组数据的中位数.25%分位数.75%分位数.上边界.下边界,来将数据从大到小排列,直观展示数据整体的分布情况. 大部分正常数 ...

  4. 应用工具 .NET Portability Analyzer 分析迁移dotnet core

    大多数开发人员更喜欢一次性编写好业务逻辑代码,以后再重用这些代码.与构建不同的应用以面向多个平台相比,这种方法更加容易.如果您创建与 .NET Core 兼容的.NET 标准库,那么现在比以往任何时候 ...

  5. UWP中新加的数据绑定方式x:Bind分析总结

    UWP中新加的数据绑定方式x:Bind分析总结 0x00 UWP中的x:Bind 由之前有过WPF开发经验,所以在学习UWP的时候直接省略了XAML.数据绑定等几个看着十分眼熟的主题.学习过程中倒是也 ...

  6. 查看w3wp进程占用的内存及.NET内存泄露,死锁分析

    一 基础知识 在分析之前,先上一张图: 从上面可以看到,这个w3wp进程占用了376M内存,启动了54个线程. 在使用windbg查看之前,看到的进程含有 *32 字样,意思是在64位机器上已32位方 ...

  7. ZIP压缩算法详细分析及解压实例解释

    最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据 ...

  8. ABP源码分析一:整体项目结构及目录

    ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...

  9. HashMap与TreeMap源码分析

    1. 引言     在红黑树--算法导论(15)中学习了红黑树的原理.本来打算自己来试着实现一下,然而在看了JDK(1.8.0)TreeMap的源码后恍然发现原来它就是利用红黑树实现的(很惭愧学了Ja ...

随机推荐

  1. 一条简单的 SQL 执行超过1000ms,纳尼?

    作者:VipAugus https://juejin.im/post/5ce906a3e51d455a2f2201dc MySQL对我说"Too young, too naive!" ...

  2. mac 卸载编辑器卸不干净

    Configuration ~/Library/Preferences/ Caches ~/Library/Caches/ Plugins ~/Library/Application Support/ ...

  3. Go 语言变量、常量

    变量 第一种,指定变量类型,声明后若不赋值,使用默认值. var v_name v_type v_name = value 第二种,根据值自行判定变量类型. var v_name = value 第三 ...

  4. propTypes和 defaultProps

    propTypes和 defaultProps propTypes: 可以 用来做类型的校验 限制类型 isRequired 必须要求传递 要使用必须先引入: import PropTypes fro ...

  5. CSIC_716_20191217【事务、视图、触发器、存储过程、索引】

    事务: 事务保证对数据操作时的安全性,事务中的代码要么一起成功,要么一起失败. 事务以  start transaction  开始,中间可以写诸多个sql 语句对数据库进行操作, 以rollback ...

  6. Nginx---配置系统(自己总结)

    1.Nginx配置系统 Nginx的配置系统   由  一个主配置文件  和  其他一些辅助的配置文件  构成: 这些文件均为纯文本文件,全部位于nginx安装目录下的conf目录下: Nginx配置 ...

  7. leetcode-12双周赛-1243-数组变换

    题目描述: 自己的提交: class Solution: def transformArray(self, arr: List[int]) -> List[int]: if len(arr) & ...

  8. clickhouse核心引擎MergeTree子引擎

    在clickhouse使用过程中,针对数据量和查询场景,MergeTree是最常用也是较为合适的表引擎.针对特定的业务,MergeTree的子引擎可以针对不同的业务而定,但都基于MergeTree引擎 ...

  9. redis实现点击量/浏览量

    java+redis实现高性能新闻点击量更新 1.redis简单介绍.它用来做高性能数据存取 是极好的. 2.实例:新闻点击量. 1)每次刷新,我们并不一定要往数据库里面立即更新数据 2)可以在red ...

  10. 【LeetCode 5】 最长回文子串

    题目链接 描述 [题解] 一个讲得比较好的博客地址; 感觉manacher算法的大概思路就是利用回文串左右对称的性质. 利用之前算出来的以某个点为中心的回文串.而当前要枚举的串被包括在其中. 则可以用 ...