❶ 如何反编译 android 中 /data/dalvik-cache/arm 下的文件
这个是动态库的东西,反编译不了的,就算成功,你也很难看懂。这就是它的安全性高,很多人用的缘故
❷ 反编译修改dll文件后重新.net重新生成dll文件
反编译之前要先检查文件是否被混淆加密了,如果没有那就要恭喜你了。
使用reflector反编译dll源文件一定要安装FileGenerator的插件,安装好后就可以然后直接生成vs2005的工程了,然后用vs2005打开工程,修改反编译代码中异常的代码,加入编译环境所需的dll动态库,编译即可。
---------------------------------------------------------------------------------------------------------------
举例来说:
1、比如inforeader.get_item("name").ToString(),其实应该是inforeader.["name"].ToString(),没办法,手工改吧
2、还有,他还会报方法参数问题的错误,比如aa.Compare("helloworld","d",5),在5的未知显示参数错误,原来是本身这个位置的参数是一个枚举类型,反编译不知什么原因变成了第五个,于是改成枚举StringComparison.OrdinalIgnoreCase
3、。。。。。。
------------------------------
如有需要可与本人联系。
❸ 有动态库 dll 和.h 怎么能反编译 .c或.cpp吗
可以反汇编,生成汇编语言。然后由汇编语言反写代码。
❹ 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#调用 c++ 动态库麻烦吗
在实际软件开发过程中,由于公司使用了多种语言开发,在C#中可能需要实现某个功能,而该功能可能用其他语言已经实现了,那么我们可以调用其他语言写好的模块吗?还有就是,由于C#开发好的项目,我们可以利用reflector等反编译工具反编译出其源代码,所以对于一些核心算法,我们不希望被别人知道,因此为了增强代码的安全性,我们需要将一些核心算法用C或C++来编写,然后用C#来调用这些已经写好的接口。在面对以上情况时,我们该怎么做呢?
方案一:重新实现
针对第一种情况,我们可以将C或者C++功能用C#来重新实现,这样的话代码比较统一,维护比较方便,但是这样的话增加了软件开发的成本,把C++的代码功能改成C#涉及到指针和内存的操作比较繁琐,况且有开发好的模块为什么不重复利用呢?针对第二种情况就不能得到有效解决,虽然可以使用混淆器对代码进行混淆,但是任然不是很安全。
方案二:封装COM组件 我们可以将C或者C++的函数封装成COM组件,在C#中调用时比较方便,但是COM组件需要注册,而且多次注册可能也会导致一些问题,同时在处理C或者C++的类型与COM组件的类型转换的时候也可能有些麻烦。
方案三:使用动态链接库
我们可以直接调用C或者C++已经写好的动态链接库,这样比较方便,这样很好的解决了上述问题。
在实际项目中,我们需要使用C#调用C++的一些接口,因此我使用的是方案三采用动态库,下面我就在实际中怎么处理的进行说明。
在调用动态库的过程中我也遇到了以下一些问题:
1、C++中有指针,C#中需要使用指针吗?
由于C++中的动态库中有指针参数,因此我也是用.NET的不安全代码,使用了C#的指针,但是最后也还是出现了一些问题,如在C#中传入的参数是一个二维数组时就出现了问题,这个问题我在网上找了好多资料也没有解决,最后和c++程序员商量了下改变了传入参数的参数类型。最后也没有使用指针。
2、C#和C++中的类型如何转换呢?
虽然C#和C++比较类似,但是其给我们的参数类型我们要与C#的参数类型一一对应起来,因此我找了一些资料把其类型一一对应了,具体看后续说明。
3、C++写好的动态库放到那个位置呢?
关于C++动态库的位置也是个问题,在应用中我们使用了相对路径和绝对路径进行测试,有的发现在VS中可以调用到,但是发布后发现无法调用到动态库,最后只要把动态的dll放到系统的目录system32下面才解决了改问题,目前还没找到其他的方法,如有其他的更好方法还请大家指点。
4、如何反编译C++的dll的名称,端口?
可以通过Dependency Walker工具进行反编译查看别人写的动态库的信息
5、还有其他的一些细节,如C#调用动态库需要指定其编码、代码写法等等
public class TestDLL
{
[DllImport(@"SomClient.dll", EntryPoint = "CreateSomClient", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode)]
public static extern UInt32 CreateSomClient(String hostIp, UInt16 port);
[DllImport(@"SomClient.dll", EntryPoint = "ReleaseSomClient", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode)]
public static extern void ReleaseSomClient(ref UInt32 clientHandle);
}
参数说明:
EntryPoint 指定要调用的 DLL 入口点。
CharSet 控制名称及函数中字符串参数的编码方式。默认值为 CharSet.Ansi。
ExactSpelling 是否修改入口点以对应不同的字符编码方式。
CallingConvention 指定用于传递方法参数的调用约定。默认值为 WinAPI。该值对应于基于32位Intel平台的 __stdcall。
BestFitMapping 是否启用最佳映射功能,默认为 true。最佳映射功能提供在没有匹配项时,自动提供匹配的字符
❻ 如何反编译NET的dll文件
在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可有多个DLL文件,一个DLL文件也可能被几个应用程序所共用,这样的DLL文件被称为共享DLL文件。DLL文件一般被存放在C:\Windows\System目录下。 1、如何了解某应用程序使用哪些DLL文件 右键单击该应用程序并选择快捷菜单中的“快速查看”命令,在随后出现的“快速查看”窗口的“引入表”一栏中你将看到其使用DLL文件的情况。 2、如何知道DLL文件被几个程序使用 运行Regedit,进入HKEY_LOCAL_MACHINE\Software\Microsrft\Windows\Current-Version\SharedDlls子键查看,其右边窗口中就显示了所有DLL文件及其相关数据,其中数据右边小括号内的数字就说明了被几个程序使用,(2)表示被两个程序使用,(0)则表示无程序使用,可以将其删除。 3、如何解决DLL文件丢失的情况 有时在卸载文件时会提醒你删除某个DLL文件可能会影响其他应用程序的运行。所以当你卸载软件时,就有可能误删共享的DLL文件。一旦出现了丢失DLL文件的情况,如果你能确定其名称,可以在Sysbckup(系统备份文件夹)中找到该DLL文件,将其复制到System文件夹中。如果这样不行,在电脑启动时又总是出现“***dll文件丢失……”的提示框,你可以在“开始/运行”中运行Msconfig,进入系统配置实用程序对话框以后,单击选择“System.ini”标签,找出提示丢失的DLL文件,使其不被选中,这样开机时就不会出现错误提示了。反编译修改dll文件后重新.net重新生成dll文件更多
❼ dll文件怎么打开编辑修改DLL文件怎么反编译
dll文件是动态链结库文件,不能打开和编辑。有些工具软件可以提取它里面的图标资源。我不清楚你为何要打开它,通常它可用vc++编写制作。确实要学习它的内容,可找一些反编译工具软件,但要熟悉汇编语言,而且有些软件是禁止反编译的!
❽ 怎么打开dll文件,dll反编译
ll文件是动态链结库文件,不能打开和编辑。有些工具软件可以提取它里面的图标资源。我不清楚你为何要打开它,通常它可用vc++编写制作。确实要学习它的内容,可找一些反编译工具软件,但要熟悉汇编语言,而且有些软件是禁止反编译的!
❾ 有一*.exe文件,看图标判断为vb生成,请问能反编译而得到源代码吗非常感谢!
Create Project -> Application !
============
执行文件的建立
1、编译格式的选择
PowerBuilder 8.0对生成可执行文件提供了两种编译格式:伪代码(Pcode,即pseudocode的缩写)和机器代码(Machinecode)。伪代码是一种在所有PowerBuilder 平台上支持的解释性语言,它的格式与PowerBuilder 运行库(.pbl)一样,在可执行状态下保存单个对象,其优点是方便和可移植;机器代码则是真正的完全脱离PowerBuilder 环境的可执行文件,其优点是速度快,但文件容量比较大。选择编译代码格式一般基于以下三个方面:
①速度。若目标是优化运行速度和应用强化脚本处理,则选择机器代码。要是代码中较多地使用了循环结构、浮点运算或整数算法及函数调用,机器代码将比伪代码做得更好。但伪代码的编译速度比机器代码快,特别是开发人员要快速地创建测试用的可执行文件时非常便利;
②大小。伪代码生成的文件比机器代码的小。如运行应用程序的终端机器容量紧张的话,就需要放弃较快的机器代码而选择伪代码;
③移植。伪代码对于跨平台的应用非常有用。它可以方便地跨平台(PowerBuilder 支持)使用,包括:Microsoft Windows (16位和32位)、AppleMacintosh和UNIX。机器代码是依赖于平台的,也就是说要求生成和可执行应用平台一致,不过它可以获得更好的性能。
2、动态库的建立
发布PowerBuilder 8.0应用可以将一些对象不放到可执行文件中,而放到动态库中在运行时装入,这样可以将应用程序分割成更小的模块便于管理和维护。
选择伪代码(Pcode)编译方式生成PowerBuilder动态库(.pbd文件),选择机器代码(Machinecode)方式在Windows和UNIX平台上生成动态链接库(.dll文件,如将test.pbl编译成test.dll),在machine平台上生成平台支持的共享库(如test.lib)。如果在Windows上有两个应用,那么编译成的.pbd包含一个调用全局外部函数的用户对象,为了保证正确调用函数必须为每个应用单独编译和发布.pbd文件。
当建立动态库时,将源库(.pbl文件)中所有对象的编译版本拷贝到动态库中。为了在某些库中只使用所需的对象,可以将它们放到一个标准的PowerBuilder库(.pbl)中。
在建立动态库时,PowerBuilder并不检查所有对象,只是简单地去掉对象的源格式,因此,对于一些在画笔或脚本中指定了使用资源(图形、图标或指针)的对象,若不想提供单独的资源,则必须在资源文件(.pbr)中罗列出这些资源,这样才能保证在建立动态库时包含这些资源。
动态库的建立有两种途径:一是在库管理画笔中建立;二是在工程画笔中建立工程对象时一起建立。
3、资源文件的使用
可执行文件或动态库中可以包含一些资源(图形、图标或指针),也可以将它们作为单独的资源文件(.pbr文件)保存。
(1)单独的分布资源
若某资源不包含在可执行文件或动态库中,则在执行应用程序引用它时,PowerBuilder按查询路径查找该资源,因此,必须将它与应用程序一起放在查询路径下。
Windows的查询路径为:当前目录,Windows目录,Windows的System目录和PATH环境变量中设置的所有目录。
(2)资源文件
可以使用PowerBuilder资源文件(.pbr)替代单独的资源,其中列出所有的动态分配的资源也可以包含动态分配的数据窗口对象。PowerBuilder将这些资源编译后放入可执行文件或.pbd文件中,这些资源在执行时可直接使用。
若给数据窗口控件动态分配数据窗口对象,则必须创建一个资源文件,且在可执行文件或动态库文件中包含该对象,或在一个单独的动态库中包含它。
资源文件(.pbr)是一个ASCII码文件,在其中列出了应用程序要有到的各种资源(如.bmp、.cur、.ico、.rle和.wmf文件)和数据窗口对象。使用文本编辑器(如Windows的记事本)创建一个文本文件,其中列出在应用中动态引用的资源文件,一行列出一个资源,格式如:
appico.ico
appbmp1.bmp
appbmp2.bmp
……
以上文件和对象都假设是在当前目录中,如果存在于另一个目录中,则必须包含所在路径,格式如:
e:\myapp\test.jpg。
❿ linux 下如何将动态链接库.so进行反编译后,换编译器重新编译
程序能不能正常运行取决于程序和动态库之间的ABI是否兼容。只要ABI兼容那么编译器版本就没有影响。高版本的编译器同样可以使用低版本的ABI来生成目标代码,但这个问题要具体分析。你解决问题的思路完全不对。