我要投搞

标签云

收藏小站

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

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

IDA Hex-Rays反编译器使用的一些小技巧

归档日期:07-02       文本归类:反编译器      文章编辑:爱尚语录

  在我的IDA系列中,我会介绍一些我在交互式反汇编程序,IDA Pro中发现的有趣又有用的东西。

  大部分有价值的信息都很分散,难以找到。有时候,你不得不靠自己去找寻这些信息,或是在论坛中寻求帮助。

  更好的理解IDA的架构可以使你在使用它的时候少一些挫折感,也有节省大量时间。了解你的工具的不足和了解它的功能同样重要。[1]

  对于这个反编译器,你需要了解的第一件事就是,它能进行反汇编并把它转化为C语言伪代码。听起来似乎有点多余,但确实很多人都没有意思到这点。例如,假设你有一个函数,它的功能是将一串flag变量与一个静态值进行比较,像这样:

  Hex-Rays觉得这是一个偏移地址,因为它看起来像一个地址,但实际上它是一个标记检查代码。

  在伪代码窗口中没有选项来修正它,但这个反编译器能把汇编代码映射为伪代码,我们可以通过把鼠标移至&loc_401001上,按下TAB键转到对应的反汇编代码中,把鼠标移到这个值上,按H,把它标记为一个值,而不是地址偏移。在再次按下F5进行反编译后,我们可以看到代码变成了我们想要的样子:

  一些人觉得反编译给出的伪代码有错误,如果有需要,它会把分支消去,人们觉得这种做法不可靠,所以他们花了大量时间在那些没有经过优化,重复,臃肿的汇编代码上。这种做法是错误的。反编译器应该是我们的朋友,它给出了许多方式来提示你希望伪代码变成什么样。

  正如你看见的,代码中有一个cmp和jz,但反编译器只显示了第一个分支。不仅于此,再看看图形视图,我们可以发现还有更多的分支:

  它告诉我们数据引用的段会被替换为常数,例如:通过假设.r_data段中的数据永远不会改变,来优化输出。

  这里有一个对数据的引用,dword_40E000。如果我们检查一下这个数据的位置,就可以发现它在.r_data数据段中:

  因为dword_40E000的值是0,而它又被识别为只读的,也就相当于上述代码是无效的,相当于:

  理论上来说,它什么也不做,所以在优化时就把它去除了。如果要修正它,我们可以把这个特殊的变量标记为volatile(常量/const/read-only variable的反义词),或是把整个段标记为可读写。

  不仅如此,因为Hex-Rays会进行优化,它会把对程序无用的垃圾代码去除掉。

  本系列教程完全参照王爽《汇编语言(第三版)》,这本书对call、ret指令做了相当一部分的讲解,其重要性可见一斑从栈的角度分析call和ret分析以下代码......博文来自:清风阁

  CALL和RET指令call和ret指令都是转移指令,它们都修改IP,或同时修改CS和IP。它们经常被共同用来实现子程序的设计。10.1ret和retfret指令用栈中的数据,修改IP的内容,从而实现...博文来自:的博客

  pop()是移除堆栈顶部的元素并且返回它的值push()是把对象压入堆栈的顶部这里的堆栈不是特指栈,是LinkedList中特有的方法,LinkedHashset和LinkedHashMap,Arra...博文来自:的博客

  call和ret指令call和ret指令都是转移指令,它们都修改IP,或同时修改CS和IP。它们经常被共同用来实现子程序的设计。 ret和retfret指令用栈中的数据,修改IP的内容,从而实现近转移...博文来自:DRLVROS的博客

  call、ret指令,本质上还是汇编『跳转指令』,它们都用于修改IP,或同时修改CS和IP;这两个指令经常被用来实现子程序的设计ret指令和retf指令ret指令用栈中的数据,修改IP的内容,从而实现...博文来自:清风阁

  本博文系列参考自第三版,作者:王爽call与ret都是转移指令,它们可以改变IP值,或者同时改变CS与IP的值,往往在程序中使用它们进行子程序模块的设计。10.1 ret和retfret用栈的数据修...博文来自:vpoet

  IDA反编译器,正如IDA官网所说,虽然还原出来的代码不能直接使用,但是其参考作用不容否认。这里记录一些反编译时会用到的功能。1.生成伪代码:view-Opensubviews-Generatep...博文来自:lixiangminghate的专栏

  安卓开发及安全交流,感兴趣的可以加群。介绍IDA动态调试.so之前先说几个在调试过程中可能遇到的坑和相应的解决方法。问题一:IDA在使用过程中,F5插件翻译C/C++代码,汇...博文来自:KevinHe的博客

  CALL和RET指令call和ret指令都是转移指令,它们都是修改IP,或同时修改CS和IP。它们经常被用来实现子程序的设计。也就是常用来实现程序的加载和返回ret和retfret指令用栈中的数据,修...博文来自:AndrewYZWang的博客

  最近研究SO文件调试和dump内存时,为了完整IDA调试起来,前后摸索了3天才成功,里面有很多坑和细节,稍微不注意,就一直排行,需要理解每步骤的作用意义,否则就会觉得教程不对,要详细的教程可能找不到,...博文来自:在路上-codingAndlearning

  IDA PRO简称IDA(Interactive Disassembler) ,是一个世界顶级的交互式反汇编工具,有两种可用版本。标准版(Standard)支持二十多种处理器。高级版(Advanced)支持50多种处理器。一个非常强大的反...

  之前发的资源有人说解压不了 =。= 我很无语,两个包我下载下来都能解压的,不需要密码。 现在有权限了直接上传个大文件,顺便降低资源分。

  感觉这东西有点烧脑,花了一下午时间终于整个捋顺了整个流程。想理解好此过程,理解每个指令的作用,必须结合指令行地址,栈地址和寄存器一起来分析,否则很容易被绕晕。大图图片说明:内存地址,汇编指令都为简写,...博文来自:liu_if_else的博客

  call、ret、retf指令详解本文讲解针对NASM编译器,8086处理器的call、ret、retf指令。对于其他编译器和保护模式下的80x86,指令用法类似,可以作为参考。...博文来自:车子(chezi)

  Ret和call也是转移指令,但是他们跟jmp不同的是,这两个转移指令都跟栈有关系。ret用栈中的数据修改IP的地址,从而实现近转移(ip)=((ss)*16+sp)(sp)=(sp)+2相当于pop...博文来自:eskimoer的专栏

  1625-5 王子昂 总结《2017年4月10日》 【连续第191天总结】A.汇编语言第十章70%OlleyDbg基本操作B.ret指令用栈中的数据修改IP的内容,从而实现近转移。相当于popIPre...博文来自:whklhhhh的博客

  帧栈结构图:最近在研究如何在程序crash定位出错函数,补充的计算机系统基础知识。此篇主要是介绍IA32中帧栈结构(framestack)....博文来自:striver1205的专栏

  这里对我平时也用得少的但是unity比较实用的技巧分享一二:1:运行时更改的一些属性数值在退出程序时会还原,如果想要保留数据,可以在运行时右键复制组件(copycomponent),然后退出程序时右键...博文来自:天行九歌

  1、加载文件windows下,用ida加载文件后,会在该文件同目录下生成几个文件,含义如下:.id0:二叉树数据库.id1:  文件包含描述每个程序字节的标记.nam: 包含IDA NAME窗口的数据...博文来自:知其所以然

  IDAPro脱壳实战(一)标签(空格分隔):Apk逆向1.前言关于IDAPro的介绍,已不用多说了,是目前最棒的一个静态反编译软件,编程天才的杰作。这里的脱壳实战我们以阿里比赛样本AliCrackme...博文来自:daide2012的博客

  jquery/js实现一个网页同时调用多个倒计时(最新的)nn最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦!nnnn//jsn...博文来自:Websites

  这一篇,代码折腾的时间较长,完成之后都是一些小细节,主要有三:n1、引入的依赖错误;n2、启动配置错误;n3、xml文件的mapper命名空间错误。n一、完整的pom.xmlnn...博文来自:lxhjh的专栏

  本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。1、 Esp8266之 搭建开发环境,开始一个“hellow worl...博文来自:徐宏的博客。

  扫二维码关注,获取更多技术分享nnn 本文承接之前发布的博客《 微信支付V3微信公众号支付PHP教程/thinkPHP5公众号支付》必须阅读上篇文章后才可以阅读这篇文章。由于最近一段时间工作比较忙,...博文来自:Marswill

  采用EasyUI 1.4.x 版本,默认default风格,异步加载页面,多Tab页展示,使用JSON文件模拟从后台动态获取数据。...博文来自:般若

  DirectX修复工具API Sets强力修复实验包下载地址:nn密码:5y5vnnnn实验包使用说明...博文来自:VBcom的专栏

  接着上次的图书管理系统rnrn修改完问题后把SpringBoot成功部署到了服务器上rn测试了下api接口,能正常访问rn那么下面就是在服务器上部署前端的vue.js了rnrnrn这里的话我们要明确一...博文来自:小时的枫的博客

本文链接:http://oms15.com/fanbianyiqi/449.html