我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:六合生肖表 > 反编译程序 >

谁能帮我把一个hex文件反编译为c语言文件?

归档日期:05-27       文本归类:反编译程序      文章编辑:爱尚语录

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  兄弟连IT教育专注PHP培训,JAVA培训,大数据培训,HTML5培训,UI培训,Linux培训,python培训,云计算培训。是中国最大的移动开发高端人才教育平台,也是中国移动互联网研发人才一体化服务的领导者!

  文件有两种,一种是文本文件,一种是程序二进制文件,不管哪种文件都可以用十六进制编码来显示,称为hex文件。

  1、文本Hex文件一般不需要转成C语言,更多的是程序二进制文件,用十六进制显示,可以转换成C语言,一般使用相应的反汇编程序来实现,这方面的工具很多,不同的平台略有不同。Windows平台一般常用的OllyDbg、Windbg、IDA,Linux平台使用最多的是GDB和Linux版的IDA。

  OllyDbg,简称OD,一般是软件逆向工程爱好者,最先使用的一个工具,但是因为当下不在更新,所以一般用一般用于学习使用,下图中左上角的区域即为反汇编区域 ,用户可以根据汇编指令,分析程序算法,然后自己编写代码。

  在Windows平台,特别是x64平台,最好用的反汇编工具除还得是Windbg。将程序载入Windbg后,可以输入u命令来查看程序的反汇编代码。

  2、对于编程人员来说,逆向分析是一个基本的技能,但是往往不容易入门,这里举一个例子。以一段早些年ShellCode的十六进制代码为例,代码如下图所示,这段不起眼的代码,实际上实现了一个下载者的功能。

  拿到这样的十六进制代码,一般来说,先将其生成二进制文件,然后再分析其指令,通过反汇编指令再写出源码。只需要将上面的十六进制代码,保存到C语言的字符串数组中,写入到一个Exe的文件空段中,再修改指令将其跳转到程序入口处即可,这个过程类似于软件安全领域的壳。

  将十六进制代码写入一个exe文件后,就可以将exe文件载入动态调试器进行动态分析或者使用静态反汇编程序进行静态分析,两者的不同在于动态调试器是要运行程序的,而静态反汇编分析不需要运行程序,所以一般恶意程序,都采用静态分析。反汇编开头的一段十六进制代码注释如下:

  有经验的程序员, 通过分析即明白上面反汇编代码的主要目的就是获取GetProcAddress函数的地址。继续看反汇编代码:

  接下来的操作便是通过已获得地址的GetProcAddress()来分别得到GetSystemDirectory()、URLDownLoadToFile()、WinExec()及ExitProcess()函数的地址,并依次执行。到这里实际上有经验的程序员,马上就能写出C语言代码来。 后面的数据区不在分析了,主要是介绍如何操作。

  使用C语言,虽然知道了Hex文件的大致流程,但是一般来说,对于汇编指令,更倾向于直接使用asm关键字来使用内联汇编。如下图所示:

  展开全部本人从事把HEX文件反编译成C语言很多年,成功完成把机器执行代码变成C语言的项目20余个,涉及的处理器有:8085和Z80(古老的处理器,比现在大部分程序员的年龄还大了),51系列,STM32,PIC,AVR,8086等等。大的项目原来的二进制代码达到100多KB。把HEX文件变成C语言,HEX文件原来最初应是用C语言写了以后编译的,如果原来就是用汇编语言写的,就比较难变成C语言,因为这相当于理解汇编程序以后用C语言改写。当然,目前为止,没有一个软件工具能自动把执行代码准确反编译成C语言,这些处理都是人工进行处理的,反编译的工作量是很大的。

  反编译是逆向设计工程,一般用于研究别人的产品,作为学习和参考。实施反编译应注意涉及知识产权的问题。

本文链接:http://oms15.com/fanbianyichengxu/284.html