还在为找内核未导出函数地址而苦恼嘛?
还在为硬编码通用性差而不爽吗?
还在为暴搜内核老蓝屏而痛苦吗?
请看这里:

最近老要用到内核未导出的函数及一些结构,不想再找特征码了,准备到网上找点符号文件解析的代码抄抄,也玩玩符号文件解析获取未导出函数,可惜资料寥寥无
几,下了一些代码,发觉编译后问题不断,有的编译通过了却取不到任何地址,弄了半天白弄了,于是静下心来看dbghelp的说明文件(中文的都木有),发
觉dbghelp用起来很不爽,由于版本太多,又是32位和64位什么的,最要命的是dbghelp的说明文件里所有升级了的函数一律找不到旧函数的说明
了,加之编译器里包含的相关文件版本不一,里面的函数用起来经常出现莫名其妙的问题,我估计也就是网上抄来的代码在自己机子上不能用的原因吧。于是自己写
了个Dll,放几个接口,保证在其他电脑上也可用。

先说下思路:
1、InitSymHandler(进行一些初始化)
1.1、先创建一个目录 symsrv.yes文件,没这个symsrv.dll不会自动下载符号文件
1.2、取自己进程句柄,用GetCurrentProcess取的没用,原因不明,网上的代码很多用这个,但我用死活不行
1.3、设置符号文件目录,调用SymInitialize进行初始化

2、LoadSymModule(加载符号文件)
2.1、使用SymGetSymbolFile来取得符号文件,如果搜索路径没有这个文件,那么将从微软服务器下载,然后调用SymLoadModule64加载它
2.2、路径设置如:srv* xxxx *http://msdl.microsoft.com/download/symbols

3、GetSymByName(获取未导出函数或变量地址)
3.1、上面2步好了后第一次运行时会下载符号文件,要等一会(机子一定要保持联网- - 当我白说),下载好后以后运行就快了
3.2、GetSymByName会调用SymGetSymFromName根据函数名称获取其地址,我用网上说的EnumSyms怎么也不行,不是调用失败就是得到的数据是0,蛋疼不已,不得已从dbghelp翻了这个函数出来了

4、CloseSym
不需要符号文件了后调用这个函数把符号文件打开的一些句柄什么的关闭,退出,没什么好说的

调用形式在SymbolAnalyzeDll.inc里已经定义了,用汇编的话直接包含就行了,其他自行改改就好,暂时不支持64位,虽然里面用的都是
64位的函数。折腾了1天多被莫名其妙的各种问题弄得筋疲力尽,结果弄了个这么个东西,离我的设想还好远,源码也附上,有兴趣的朋友可在此基础上增加更多
功能,暂时不想写了,所以有更好的版本记得发给楼主我也用用。

测试程序和调用示例都包含在附件里了,注意里面的ModuleBase_win32k内核基址我硬编码的,这个要自己改,ring3下怎么获取内核文件基
址还没实践过,内核下遍历下就可以了,所以就懒的写了,不过不传入内核基址也没关系,只不过返回的是相对基址的偏移,然后+下基址也没问题。

PS:如果网络不好可能会调用失败

源码-Dll-测试程序(更新了下,发现CloseSym有个错误,现在更新了调用LoadSymModule的ModuleBase为0也可以返回正确的地址,而不是偏移):

http://pan.baidu.com/share/link?shareid=4223498672&uk=3895584076

告别硬编码-发个获取未导出函数地址的Dll及源码的更多相关文章

  1. 告别硬编码,让你的POI导入导出拥抱变化

    GitHub地址 | 博客 | 中文 | English | 原文链接 为什么使用AutoExcel? Excel导入导出在软件开发中非常常见,只要你接触过开发,就一定会遇到.相信很多人会跟我一样选择 ...

  2. 告别硬编码,mysql 如何实现按某字段的不同取值进行统计

    上周我突然意识到,我在grafana上写的 sql 语句存在多处硬编码.这篇笔记将记录如何实现没有硬编码的sql语句,以及自学编程过程中如何应对自己的笨拙代码和难题不断的状况. 1.有效但粗笨的硬编码 ...

  3. highchart导出功能的介绍更改exporting源码

    本案利用highchar作为前端,展示数据的图形效果,结合spring+springmvc来完成数据图片的导出. jsp引入文件: <script src="${pageContext ...

  4. 【UE4】如何获取/下载虚幻4(Unreal Engine4)源码

    在官网中点击[获取虚幻引擎]可以看到,虚幻4完整源代码已经放在Github上,所以与其用百度搜别人的资源,当然是直接上Github下啊. 主要步骤如下: 注册一个Github帐号,这个没啥值得说的. ...

  5. Session获取不到的情况及解决办法(源码解析)

    本博客是自己在学习和工作途中的积累与总结,仅供自己参考,也欢迎大家转载,转载时请注明出处,请尊重他人努力成果,谢谢. 1. 当有连个sessionFactory时,容易产生获取不到session的情况 ...

  6. python3-开发进阶 django-rest framework 中的 版本操作(看源码解说)

    今天我们来说一说rest framework 中的 版本 操作的详解 首先我们先回顾一下 rest framework的流程: 请求进来走view ,然后view调用视图的dispath函数 为了演示 ...

  7. 告别尬聊,解锁秀场+社交新玩法(内含源码+Demo)

    直播已成为用户的生活习惯之一 艾媒咨询数据显示:2021年直播用户规模达到6.35亿人,在线直播用户以年轻群体为主,24岁及以下用户占比49%,30岁以下用户接近8成. 众所周知,Z世代用户是一个社交 ...

  8. 利用pdb获取未导出符号

      BOOL InitSymHandler(HANDLE hProc)   {   CHAR SymPath[MAX_PATH], CurDir[MAX_PATH];       GetCurrent ...

  9. ASP.NET 之 常用类、方法的超级总结,并包含动态的EXCEL导入导出功能,奉上类库源码

    实用类:UtilityClass 包含如下方法 判断对象是否为空或NULL,如果是空或NULL返回true,否则返回false 验证手机号是否正确 13,15,18 验证邮箱 验证网址 MD5加密,返 ...

随机推荐

  1. mysql 大数据量的处理

    insert 1.过滤一段时间内重复的数据2.数据缓存起来,批量写入 select1.使用分区表2.主主复制,连接不同的mysql3.建立索引4.定时求平均值,写入一个新的表中

  2. maven的仓库、生命周期与插件

    一.仓库 统一存储所有Maven项目共享的构建的位置就是仓库. 仓库分为本地仓库和远程仓库.远程仓库又分为中央仓库(中央仓库是Maven核心自带的远程仓库),伺服(另一种特殊的远程仓库,为节省宽带和时 ...

  3. windows 环境变量 %SystemDrive% 和 %SystemRoot%

    %SYSTEMROOT% == c:\windows (or the root windows directory) %SYSTEMDRIVE% == the drive windows is ins ...

  4. Android 视频投射之NanoHTTPD

    Android 视频投射之NanoHTTPD 号称用一个java文件实现Http服务器 有必要对其源码及例子进行分析 public abstract class NanoHTTPD { //异步执行请 ...

  5. centos用户权限设置

    了解常见的账号配置文件 学会管理用户账号.组账号 学会设置目录或文件的权限 学会设置目录或文件的归属 用户账号文件/etc/passwd   :保存用户名称.宿主目录.登录shall等基本信息 每一行 ...

  6. ZendStudio的配置导出

    File(文件)->Export(导 出),再弹出Export窗口中点击"General(常规)",选择"Preferences(首选项)" 点击&quo ...

  7. 关于 MySQL LEFT JOIN 你可能需要了解的三点(zhuan)

    http://www.oschina.net/question/89964_65912 ****************************************** 即使你认为自己已对 MyS ...

  8. Druid 数据库用户密码加密 代码实现

    druid-1.0.16.jar 阿里巴巴的开源数据连接池 jar包 明文密码+私钥(privateKey)加密=加密密码 加密密码+公钥(publicKey)解密=明文密码 程序代码如下: pack ...

  9. Web网页性能管理详解

    你遇到过性能很差的网页吗? 这种网页响应非常缓慢,占用大量的 CPU 和内存,浏览起来常常有卡顿,页面的动画效果也不流畅. 你会有什么反应?我猜想,大多数用户会关闭这个页面,改为访问其他网站.作为一个 ...

  10. Windows Azure免费空间如何搭建PHP网站/数据库、域名绑定

    7月份,阿象为大伙介绍了中国版Windows Azure如何建站.自定义远程虚拟机,最高可选四核.28G内存的服务器,相信不少站长.开发者用户大呼过瘾.不过Azure建站系统仅支持SQL数据库,并不支 ...