告别硬编码-发个获取未导出函数地址的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加密,返 ...
随机推荐
- Java中List的使用
package ch8; import java.util.*; /** * Created by Jiqing on 2016/11/27. */ public class ListTest { p ...
- JavaScript的事件对象_概述/this
JavaScript 事件的一个重要方面是它们拥有一些相对一致的特点,可以给你的开发提供更多的强大功能. 最方便和强大的就是事件对象,他们可以帮你处理鼠标事件和键盘敲击方面的情况,此外还可以修改一般事 ...
- iOS开发 差间距滚动
CGFloat fView_Height(UIView *aView) { return aView.frame.size.height; } CGFloat fView_Width(UIView * ...
- winScp 跳板机到服务器
http://jingyan.baidu.com/article/454316ab6ffe1af7a7c03a31.html?qq-pf-to=pcqq.group
- commonJS — 数字操作(for Number)
for Number github: https://github.com/laixiangran/commonJS/blob/master/src/forNumber.js 代码 /** * Cre ...
- 通过yum安装nginx-mysql-php-fastcgi配置LNMP
最近指想服务器跑静态文件,所以想单独配置个nginx的webserver,然而并不是我想象的那么简单,使用rpm包来安装会发生很多软件依赖的错误: 当我尝试使用yum安装nginx的时候,总是提示未找 ...
- innodb_fast_shutdown中值为1或者2的区别是?
innodb_fast_shutdown=0 , 1 , 2时的意思分别是 0 把buffer pool中的脏页刷到磁盘和合并insert buffer,当然包括redo log也会写到磁盘中. 2 ...
- Eclipse全面提速小技巧
转自:http://rongmayisheng.com/post/eclipse%E5%85%A8%E9%9D%A2%E6%8F%90%E9%80%9F 欢迎关注我的社交账号: 博客园地址: http ...
- Java Swing事件处理机制
Java Swing的事件处理机制 Swing GUI启动后,Java虚拟机就启动三个线程,分别为主线程,事件派发线程(也是事件处理线程)和系统工具包线程. 主线程 :负责创建并显示该程序的初始界面: ...
- AngularJS 中文资料+工具+库+Demo 大搜集
中文学习资料: 中文资料且成系统的就这么多,优酷上有个中文视频. http://www.cnblogs.com/lcllao/archive/2012/10/18/2728787.html 翻译的 ...