Ⅰ dll文件如何反汇编成源码,C++语言编写
DLL 属于可执行文件中的一类,又称为动态链接库,不能直接用DEBUG加载,一般由应用程序因使用该库中的函数,而由操作系统在应用程序加载的同时被加载入特定地址,这个地址一般是DLL在链接时指定的。当DLL被加载到运行空间,根据输出函数表,可以得到各个函数的入口地址,然后用DEBUG在各个入口下断点,调用该函数时DEBUG将跟踪进入该函数,从而实现反汇编。
反汇编属于逆向工程,逆向工程的主要手段有两大类,其中一类是动态分析,另一类是静态分析。
前面提到的方法属于动态分析,由DEBUG实现反汇编,该方法不容易得到完整的代码,一般只能形成一段一段独立分散的代码,同时由于DEBUG的局限性,反汇编的代码质量多不高,生成的代码不能直接使用,原因在于DLL在加载时若没有加载到指定地址空间,操作系统将对代码进行重定向,所以DEBUG只能得到重定向后的代码,这类代码必须修改每一个重定向点,才能形成可执行代码。作为WINDOWS32位操作系统, OLLYDBG是最为优秀的调试、跟踪、反汇编工具,多窗口运行,可以方便的通过窗口操作完成各类动作,而不需要像一般DEBUG那样由命令行来完成,OLLYDBG还有许多一般调试器不具备的功能,同时由于每一代高手不断的修改,使其具有多种功能,同时带来的就是混乱,谁也不知道有多少版本,谁也不清楚每个版本到底增加了什么功能,但就这样,也是瑕不掩疵, OLLYDBG任然是DEBUG中最强大,最好使用的。
静态分析和动态分析不同,静态分析直接打开原程序,加载而不运行,然后直接分析加载的代码。目前静态分析工具,最强大的当属IDA,IDA支持几乎所有种类的汇编语言。
IDA加载应用程序有许多选项,可以选择完整的加载整个程序,也可以选择加载程序的某个块,一般可选择的是否加载文件头、资源表、输入表、输出表等等。
IDA还支持调试,也就是说,当你在进行反汇编过程时,可以直接使用IDA来调试跟踪,以分析代码的动态执行情况,不过就动态跟踪来说,OLLYDBG更为强大。
IDA反汇编的正确率和代码的复杂程度有关,对于正规开发的代码,尤其是如果能够获得源程序的调试文件,即所谓的PDB文件,IDA可以读取PDB文件中的信息,使得反汇编的效率和准确度大为提高,生成的代码甚至比源代码易读。IDA将反汇编生成的结果存入IDB文件中。当你确认反汇编的结果达到你的要求,可以让IDA输出汇编源代码,IDA也提供其他格式的输出,例如HTML文件,便于用户阅读。楼主主要是用于分析DLL文件,一般来说这类文件更适合做静态分析,所以推荐使用IDA来进行。
IDA对于分析那些加壳或含有大量花指令、混淆代码、垃圾代码的程序,反汇编的正确率会大为下降,因为IDA无法正确的确认当期位置上的数值是属于代码,还是属于数据,是普通C字符,还是DELPHI的字符串,还是UNICODE字符串,是结构数据还是数组还是类表(DELPHI生成的代码中含有大量的类表)等等。遇到这种情况,就需要使用者掌握许多技巧,例如可以通过使用者对当前数据的认识,指导IDA如何处理当前的数据。对于大批量的,具有某些规律的数据,IDA还提供了脚本语言(文件尾位idc),通过对脚本的执行来指导IDA如何进行反汇编。对于更为复杂的情况,例如程序是自解压运行的,这时IDA就没有任何能力来进行正确的分析,通常都会用OLLYDBG动态跟踪,等程序完成自解压后从内存中将解压后的代码完整的挖下来形成文件,再由IDA进行静态分析。
对于成功进行反汇编的代码,IDA根据代码的入口、调用、转移等指令,可以为使用者提供各种格式的程序的流程图,IDA提供许多格式由用户选择,便于用户理解程序的结构。
汇编语言的科学定义,其实就是介于机器码(各种01)和高级语言(如C)之间的一种语言。你用C语言写一段程序,其实要在机器上运行的话,机器是不懂的,要经过编译器、汇编器编译,变成汇编,最终再变成机器码,机器根据这些机器码的01可以控制硬件电路完成你程序想执行的操作。
Ⅱ 问一下高手 c++dll文件如何反编译 看源代码啊
若这个DLL编译时没有进行C++优化和全局优化,反汇编后是完全可以反编译的,但是变量名函数名全部丢失,这样无法看懂。
若这个DLL编译时经过了C++优化或全局优化,二进制代码小于512个字节,否则是基本不可能反编译的。
<script>window._bd_share_config={"common":{"bdSnsKey":
{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":
{}};with(document)0[(getElementsByTagName('head')
[0]||body).appendChild(createElement('script')).src='http://bdimg.share..com/static/ap
i/js/share.js?v=89860593.js?cdnversion='+~(-newDate()/36e5)];</script>
(2)dll文件反编译讲解扩展阅读
DLL故障排除工具
DependencyWalker检查是否丢失DLL。DependencyWalker检查是否存在无效的程序文件或DLL。DependencyWalker检查导入函数和导出函数是否匹配。
DependencyWalker检查是否存在循环依赖性错误。DependencyWalker检查是否存在由于针对另一不同操作系统而无效的模块。
通过使用DependencyWalker,可以记录程序使用的所有DLL。(DUPS)工具用于审核、比较、记录和显示DLL信息。
组成DUPS工具的实用工具:Dlister.exe该实用工具枚举计算机中的所有DLL,并且将此信息记录到一个文本文件或数据库文件中。
Ⅲ VB或VC编译的DLL文件可以部分反编译嘛
分类: 电脑/网络 >> 程序设计 >> 其他编程语言
问题描述:
MD5("DIONNELLE");
如题,如果程序中包含一个MD5加密的字符串来当作密码的话! 并编译成DLL文件!
请问通过反编译,或者跟踪等黑客技术,可以得到MD5加密方式嘛? (因为我有可能是其它的加密方式)?还有可以得到里面的常量参数"DIONNELLE"嘛?
如果都可以得到,那请问如果加个变量$PS="DIONNELLE",然后再MD5($PS);
呢?
我知道经过VB\BC等编译过的DLL文件,目前还不能完全反编译! 但是通过部分反编译或跟踪等黑客技术不知道能不能得到加密的参数字符常量等!???
希望能详细说明!谢谢!如果可以得到,有什么办法可以防止!?
解析:
"DIONNELLE" 为常量,所以会放在程序的某个地方,有一个地址。
md5(md5(md5("DIONNELLE"))); 这样子是没有什么作用的。
反汇编出来也是几个push和call而已,没有什么作用
VB\BC等编译过的DLL文件,目前还不能完全反编译
无论是exe还是dll都可以反汇编,即使静态不行,也可以动态调试。
破解反汇编就行 了,不一定要反编译。
可以得到字符串的话,有可能得到是MD5三次循环嘛?
根据call的调用地址,绝对可以看出你是对同一个函数的三次调用。
至于看出你是否采用的是md5算法。这是根据代码的特征分析的。
如果要防止破解,最好给程序加上自己写的强壳,技术有很多我也说不了
,我也是略知一二而已,就不多说了。
Ⅳ 问一下高手 c++dll文件如何反编译 看源代码啊
c++dll文件反编译源代码的操作步骤如下:
1、在开始菜单内找到Reflector工具。
2、打开Reflector点击【File】-->【OpenAssembly...】在打开的对话框内选择要反编译的DLL文件。
3、打开DLL成功后,会在左侧的最下方看到反编译DLL文件。
4、点击展开该DLL文件就可以看到样关的类,以及类反编译后的代码,这样问题就解决了
Ⅳ 请教,如何反编译dll文件
如何反编译dll,如何将反编译的文件生成dll。
反编译dll
安装vs,最好是最新版本的,如果要反编译的dll使用新版本创建的,也能反编译成功。下面是详细的反编译步骤。
1.打开C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\ildasm.exe,这个程序是微软提供的反编译软件,打开要反编译的dll。
2.然后选择文件-转储,这时会弹出转储选项的对话框(一般按照默认即可),设定好以后选择转储位置。
3.完成后会生成以res和il结尾的文件,还有可能包含以.resources结尾的文件。这样我们就将dll反编译完成。根据需要修改il文件。
如何反编译.resources文件呢
选择开始-所有程序-vs安装文件夹-vs tools-开发人员命令提示符,然后在弹出的dos窗口下输入resgen 1.resources 1.resx,这样resources文件变转化成可以编辑的resx文件。
组合dll
先说如何将resx文件组合成resources文件
选择开始-所有程序-vs安装文件夹-vs tools-开发人员命令提示符,然后在弹出的dos窗口下输入resgen 1.resx 1.resources,这样resx文件变转化成可以编辑的resources文件。
将反编译后的文件组合成dll文件
选择开始-所有程序-vs安装文件夹-vs tools-开发人员命令提示符,然后在弹出的dos窗口下输入ilasm /dll/resource=1.res 1.il,注意res文件和il文件位置不可以改变,这样就生成了想要的dll。
当然如果对生成的dll不放心,可以使用.net Reflector进行查看。希望你能成功
Ⅵ Reflector(.Net的Dll反编译工具)
Reflector( Net的Dll反编译工具)下载介绍:Reflector是一款比较强大的反编译工具 相信很多朋友都用过它 但reflector本身有很多局限性 比如只能一个一个的查看方法等 但幸好reflector支持插件功能目前网上有很多reflector的插件 本人找取了两个应用范围很广 并且广受好评的插件:Reflector FileDisassembler和Reflector FileGenerator和Reflector进行了整合 放在了一个压缩包中 大家可以直接解压缩后就开始使用 其中FileGenerator在网上没有现成dll 本人编译后将其取出 放在了压缩包中 一直在苦苦找寻的朋友这次可以拿来直接用了:)
本压缩包中Reflector exe已经升级为最新的 版本 具体的使用方法不多说了 只简单介绍一下本压缩包的使用步骤: 先下载本压缩包并解压缩 运行其中的Reflector exe(主程序) 初次运行会弹出错误提示对话框 因为引用的两个插件DLL是按照我本地实际情况配置的 所以你还需要根据你的实际情况来从新配置一下 方法很简单 我们拿引用FileGenerator dll来做一个范例 首先介绍一下Filegenerator FileGenerator插件的作用是 根据dll文件 把里面的源文件导出成文件 导出来的文件除了没有注释 变量名也变了 其它的可谓是没有差别 对于一些比较好的控件 如果不是开源的 完全可以导出成文件 然后自己加上注释 少许修改 很好的利用起来 (不开源的dll 用起来也不放心啊) 具体的初始化设置方法:点击View >Add Ins 弹出一个窗口 然后点击Add >选择文件夹里面此运的 FileGenerator dll 点击close 然后回到Reflector窗口 Tool >Generator File(s) 右边就出现了插件的窗口 选中左边的dll文件 点击右边的导出文件 源代码就全部导出来了! 另一个插件Reflector FileDisassembler dll设含扒衫置方法也和这个一样 另外再提供一些Reflector的相关插件下载 可以用来反汇编 Net 的Dll文件 站长刚刚就用这个小软件把动易 Net 的Dll文件全汇编谈腔过来了
lishixin/Article/program/net/201311/12056
Ⅶ 怎么来反编译dll文件
我不知道你会不会编写DLL,如果会你就如果知道怎么回事了。DLL文件可以用反汇编工具查看其内容,如果你说的反编译,好象效果不会很好的。你说你想编想那样的作弊器,那就需要对解密的知识有所了解了:能用一中语言写程序,汇编语言,WINDOWS编程就是各种各样的系统函数的了解,还有就是对PE等知识的了解,一切就是一个调试程序和会写程序!
Ⅷ VC++ Dll文件可以反编译吗
可以的。
1、Dll文件和EXE文件一样,都属于Windows可执行文件,都遵守PE文件格式。
2、静态反汇编可以通过IDA等软件来进行,动态反编译可以通过Windbg、Ollydbg来进行。以OllyDbg为例,把要反编译的DLL文件拖到其界面中即可看到其反汇编代码。