我不认为有任何可靠的方法来做到这一点。 机器码格式非常复杂,比assembly文件更复杂。 编译的二进制文件(比如ELF格式文件)并不是真的有可能产生一个源代码汇编程序,它将编译成相同的(或类似的)二进制文件。 为了理解差异,将GCC编译直接输出到汇编器( gcc -S )的输出与objdump在可执行文件( objdump -D )上的输出进行比较。

我可以想到两个主要的并发症。 首先,由于指针偏移等原因,机器码本身并不是与汇编代码一一对应的。

例如,考虑C代码到Hello世界:

int main() { printf("Hello, world!\n"); return 0; }

这编译为x86汇编代码:

.LC0: .string "hello" .text movl $.LC0, %eax movl %eax, (%esp) call printf

其中.LCO是一个命名常量,printf是共享库符号表中的一个符号。 比较objdump的输出:

80483cd: b8 b0 84 04 08 mov $0x80484b0,%eax 80483d2: 89 04 24 mov %eax,(%esp) 80483d5: e8 1a ff ff ff call 80482f4

首先,常量.LC0现在只是内存中的某个随机偏移量 – 在正确的位置创build一个包含这个常量的汇编源文件是很困难的,因为汇编器和链接器可以自由select这些常量的位置。

其次,我不完全确定(这取决于位置独立的代码),但我相信对printf的引用实际上并没有在那里的代码中的指针地址编码,但ELF头包含一个查找表,它在运行时dynamic地replace它的地址。 因此,反汇编代码并不完全对应源代码汇编代码。

总之,源程序集具有符号,而编译的机器代码具有难以反转的地址 。

第二个主要的复杂情况是程序集源文件不能包含原始ELF文件头中的所有信息,比如要dynamic链接哪些库以及原始编译器放在那里的其他元数据。 这将很难重build。

就像我所说的那样,一个特殊的工具可能会操纵所有这些信息,但是不太可能只是简单地生成汇编代码,而这些汇编代码可以被重新组装回可执行文件。

如果您只想修改可执行文件的一小部分,我build议比重新编译整个应用程序更微妙的方法。 使用objdump来获取你感兴趣的函数的汇编代码。手工将它转换为“源代码汇编语法”(在这里,我希望有一个工具实际上产生与input相同语法的反汇编) ,并根据需要进行修改。 完成后,重新编译这些函数并使用objdump来找出修改过的程序的机器码。 然后,使用hex编辑器手动将新的机器代码粘贴到原始程序相应部分的顶部,注意新代码的字节数与旧代码的字节数完全相同(否则所有偏移量都会错误)。 如果新代码较短,则可以使用NOP指令进行填充。 如果时间较长,则可能会遇到麻烦,可能需要创build新的function并调用它们。

linux 可执行文件反编译,如何反汇编,修改,然后重新组装一个Linux可执行文件?...相关推荐

  1. linux修改可执行程序,反汇编,修改,然后重新组装一个Linux可执行文件

    我不认为有任何可靠的方法来做到这一点.机器代码格式非常复杂,比汇编文件更复杂.它不是真的可能采取编译的二进制(例如,在ELF格式),并产生一个源汇编程序,将编译为相同(或相似足够)的二进制.为了理解差 ...

  2. 反编译后怎么修改服务器地址,反编译后怎么修改服务器地址

    反编译后怎么修改服务器地址 内容精选 换一换 业务接入DDoS高防后,经过高防转发的流量到服务端之后真实源IP将被隐藏,在业务应用开发中,通常需要获取客户端真实的IP地址.例如,投票系统为了防止刷票, ...

  3. 干货教程:APK反编译神器 安卓修改大师,一步步教你如何美化和修改安卓应用

    引言:本次给大家带来的是 APK反编译神器 安卓修改大师 ,安卓修改大师可以轻松地解编所有APK安装包,替换应用程序界面中的所有文本和图片,代码级别的修改可以增强中文.裂缝.功能,以及向所有界面添加自 ...

  4. linux成功mysql数据直接拷贝_mysql数据库数据从一个linux系统移植到另一个linux系统的方法...

    背景 问题介绍 现在有一个linux系统的机器上数据需要移植到另外一个linux系统上.老机器称A机器,新机器称B机器. 前期调研 鉴于网上资料很多都是相同内容,而数据库的数据一般都很重要,这些方法都 ...

  5. 反编译与反汇编、C++编译过程,包括预编译--汇编--编译--链接

    参考:C/C++程序编译流程(预处理->编译->汇编->链接) - ProLyn - 博客园 反汇编和反编译的区别_代码小卒_新浪博客 反汇编与反编译: 汇编:是把汇编源程序转变为目 ...

  6. 反编译DLL并修改再生成DLL

    一. 用到的工具: 1:反编译工具ILSpy.exe:是个很不错的反编译软件,而且是免费了: 2:微软的工具ildasm.exe:这个是把DLL生成IL文件的一个软件,是微软自带了:可以在C:\Pro ...

  7. linux 中间代码反编译,[原创]反编译原理(2)-中间表示

    中间语言 通常情况下,反编译器和编译器一样,都分成前端.中端和后端三个部分,每一部分都有1-2种中间语言.如果使用3种中间语言,则前端中间语言定义为Target Dependent HIR,中端中间语 ...

  8. py可执行文件反编译教程--exe转换py

    python的便利性,使得如今许多软件开发者.黑客都开始使用python打包成exe的方式进行程序的发布,这类exe有个特点,就是可以使用反编译的方法得到程序的源码,是不是很神奇?我们接下来就开始学习 ...

  9. 反编译DLL并修改DLL中的内容

    使用场景:针对当前用户因不愿意进行软件版本升级,但又希望可以解决当前问题,此时可以考虑通过反编辑DLL进行修改内容,然后重新生成新的DLL 操作步骤: 1.首先使用ILSpy.exe反编译DLL,查看 ...

  10. linux jad 反编译,使用Jad或JadClipse进行反编译

    1.下载: (1)jadclipse插件: 到SourceForge.net(http://sourceforge.net/projects/jadclipse/)下载插件: 下载jadclipse_ ...

最新文章

  1. ant design vue table 高度自适应_html之table表格
  2. 美妆视频小红唇如何打开大数据之门
  3. CodeAction_beta02 斐波那契 (多维DP)
  4. 长期价值三重进阶,同程艺龙加速“破局”OTA
  5. Paxos一致性协议
  6. 通过trace跟踪系统调用
  7. python是什么语言汇编_编程语言及python介绍
  8. 101次从入门到放弃,终于找到一个数据分析利器!
  9. 块级、行内元素水平垂直居中方法
  10. 没有基础的人可以学python吗-无基础可以学习Python吗?
  11. MySQL游标循环取出空值的BUG
  12. 如何将Mac中的备忘录内容导出为 PDF文档?
  13. 十进制经纬度格式转换度分格式
  14. TeeChart基础使用手册
  15. zend studio php配置,Zend Studio的配置和使用
  16. java火车站售票源代码_火车票管理系统 - WEB源码|JSP源码/Java|源代码 - 源码中国...
  17. Jmeter接口性能测试分布式的环境搭建
  18. 高等数学---常见的几个泰勒公式
  19. 论文解析 | 不确定性校准的化学反应预测模型
  20. 查看Win10序列号

热门文章

  1. Arm 中国原 CEO 被“罢免”,新指定“官方”:已获员工大力支持
  2. Arm中国合资公司具体布局浮出水面
  3. 美媒:软银售ARM中国子公司51%股权,暴露美国痛处
  4. 鼠标不受控制一直向右移动的解决办法
  5. 阿里巴巴建议的线程池创建方式,你用上了吗?
  6. Linux 使用xmodmap禁用键盘按键(禁用Linux快捷键)
  7. 线性代数基本公式结论简要总结(2)
  8. linux如何搭建sftp服务器
  9. 计算机打字正确姿势,电脑打字的7个技巧
  10. nxlog收集linux日志,Nxlog——日志采集神器简介