告别硬编码-发个获取未导出函数地址的Dll及源码
还在为找内核未导出函数地址而苦恼嘛?
还在为硬编码通用性差而不爽吗?
还在为暴搜内核老蓝屏而痛苦吗?
请看这里:
最近老要用到内核未导出的函数及一些结构,不想再找特征码了,准备到网上找点符号文件解析的代码抄抄,也玩玩符号文件解析获取未导出函数,可惜资料寥寥无
几,下了一些代码,发觉编译后问题不断,有的编译通过了却取不到任何地址,弄了半天白弄了,于是静下心来看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及源码的更多相关文章
- 告别硬编码,让你的POI导入导出拥抱变化
GitHub地址 | 博客 | 中文 | English | 原文链接 为什么使用AutoExcel? Excel导入导出在软件开发中非常常见,只要你接触过开发,就一定会遇到.相信很多人会跟我一样选择 ...
- 告别硬编码,mysql 如何实现按某字段的不同取值进行统计
上周我突然意识到,我在grafana上写的 sql 语句存在多处硬编码.这篇笔记将记录如何实现没有硬编码的sql语句,以及自学编程过程中如何应对自己的笨拙代码和难题不断的状况. 1.有效但粗笨的硬编码 ...
- highchart导出功能的介绍更改exporting源码
本案利用highchar作为前端,展示数据的图形效果,结合spring+springmvc来完成数据图片的导出. jsp引入文件: <script src="${pageContext ...
- 【UE4】如何获取/下载虚幻4(Unreal Engine4)源码
在官网中点击[获取虚幻引擎]可以看到,虚幻4完整源代码已经放在Github上,所以与其用百度搜别人的资源,当然是直接上Github下啊. 主要步骤如下: 注册一个Github帐号,这个没啥值得说的. ...
- Session获取不到的情况及解决办法(源码解析)
本博客是自己在学习和工作途中的积累与总结,仅供自己参考,也欢迎大家转载,转载时请注明出处,请尊重他人努力成果,谢谢. 1. 当有连个sessionFactory时,容易产生获取不到session的情况 ...
- python3-开发进阶 django-rest framework 中的 版本操作(看源码解说)
今天我们来说一说rest framework 中的 版本 操作的详解 首先我们先回顾一下 rest framework的流程: 请求进来走view ,然后view调用视图的dispath函数 为了演示 ...
- 告别尬聊,解锁秀场+社交新玩法(内含源码+Demo)
直播已成为用户的生活习惯之一 艾媒咨询数据显示:2021年直播用户规模达到6.35亿人,在线直播用户以年轻群体为主,24岁及以下用户占比49%,30岁以下用户接近8成. 众所周知,Z世代用户是一个社交 ...
- 利用pdb获取未导出符号
BOOL InitSymHandler(HANDLE hProc) { CHAR SymPath[MAX_PATH], CurDir[MAX_PATH]; GetCurrent ...
- ASP.NET 之 常用类、方法的超级总结,并包含动态的EXCEL导入导出功能,奉上类库源码
实用类:UtilityClass 包含如下方法 判断对象是否为空或NULL,如果是空或NULL返回true,否则返回false 验证手机号是否正确 13,15,18 验证邮箱 验证网址 MD5加密,返 ...
随机推荐
- web设计经验<七>13步打造优雅的WEB字体
今天,大多数浏览器已经默认支持Web字体,日趋增多的字体特性被嵌入最新版HTML和CSS标准中,Web字体即将迎来一个趋于复杂的崭新时代.下面是一些基本的关于字体的规则,特别适用于Web字体. 原文地 ...
- poj2540Hotter Colder(半平面交)
链接 根据距离可以列得直线方程,附上初始矩形的四个顶点,依次用直线切割. #include<iostream> #include <stdio.h> #include < ...
- Eclipse工作空间相关操作
1.设置启动时是否弹出选择工作空间的提示框: 2.切换工作空间: 3.彻底删除eclipse不用的工作空间: 在eclipse的安装目录下:eclipse\configuration\.setting ...
- Android网络编程系列 一 TCP/IP协议族之传输层
这篇借鉴的文章主要是用于后续文章知识点的扩散,在此特作备份和扩散学习交流. 传输层中有TCP协议与UDP协议. 1.UDP介绍 UDP是传输层协议,和TCP协议处于一个分层中,但是与TCP协议不同,U ...
- embed object以及video标签的区别以及使用
embed object以及video标签的区别以及使用?
- Java用webSocket实现tomcat的日志实时输出到web页面
原文:http://blog.csdn.net/smile326/article/details/52218264 1.场景需求 后台攻城狮和前端攻城狮一起开发时,经常受到前端攻城狮的骚扰,动不动就来 ...
- SecureCRT设置
SecureCRT设置 文章来源:http://blog.csdn.net/dongqinliuzi/article/details/39890569 本文主要介绍SecureCRT的使用方法和技巧. ...
- 转!!!Mysql无法创建外键的原因
在Mysql中创建外键时,经常会遇到问题而失败,这是因为Mysql中还有很多细节需要我们去留意,我自己总结并查阅资料后列出了以下几种常见原因. 1. 两个字段的类型或者大小不严格匹配.例如,如果一个 ...
- iOS开发 设置状态栏样式
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault animated:NO];
- spring 编程式事务管理和声明式事务管理
编程式事务管理 Spring 的编程式事务管理概述 在 Spring 出现以前,编程式事务管理对基于 POJO 的应用来说是唯一选择.用过 Hibernate 的人都知道,我们需要在代码中显式调用be ...