首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用IDA修补EXE

使用IDA修补EXE
EN

Stack Overflow用户
提问于 2010-02-20 06:14:01
回答 1查看 1.9K关注 0票数 0

假设有一个包含sprintf()的buggy程序,我想将它更改为snprintf,这样它就不会有缓冲区溢出。在IDA里我该怎么做?

EN

回答 1

Stack Overflow用户

发布于 2010-07-01 23:08:08

你真的不想用IDA提供的信息来做这种改变。

尽管IDA的反汇编质量相对较高,但它的质量还不足以支持可执行重写。将对sprintf的调用转换为对snprintf的调用需要将一个新参数推到堆栈上。这就需要引入一个新的指令,它会影响可执行映像中跟随它的所有内容的EA。更新这些有效地址需要极高质量的拆卸。特别是,你需要能够:

  1. 标识可执行文件中的哪些地址是数据,哪些是代码
  2. 标识哪些指令操作数是符号(地址引用),哪些指令操作数是数字的。

艾达不能(可靠地)给你那个信息。此外,如果可执行文件是静态地链接到crt的,那么它可能不包含snpritnf,这将使手动重写变得非常困难。

有一些潜在的解决办法。如果在进行调用的函数中(或之后)有足够的填充可用,您可能只需重写一个函数即可。或者,如果您可以访问对象文件,并且这些对象文件是用/GY开关编译的(假设您使用的是Visual ),那么您可能能够编辑该对象文件。但是,编辑对象文件可能仍然需要大量的修补程序。

但是,如果您可以访问对象文件,那么您可能也可以访问源。改变来源可能是你最好的选择。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2301280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档