1、反调试技术基本概念许多软件为防止被破解,阻止调试器的分析,会使用反调试技术来检测自身是否正在被调试,或采取一系列手段让调试器失效,从而增加调试分析时间和复杂度。常见的反调试手段大致可以分为检测、干...
IDA 技巧(72) 更多字符串字面量
我们之前已经介绍过字符串常量(也称为字符串字面量)的基础知识。IDA还支持一些其他功能,在某些情况下可能会很有用。特殊字符串类型Pascal和衍生语言(如Delphi)有时会使用以长度开头的字符串字面...
修复反编译器中的错误地址引用
最近常常遇到一个反编译的问题,当反编译没有高级元数据的代码(尤其是固件)时,你可能会看到看起来很奇怪的地址表达式(如上),这些表达式似乎没什么意义。这些是什么/如何修复/改进伪代码?因为在CPU级别上...
IDA 技巧(70) 多重高亮
在之前的IDA版本中,已经有了高亮功能,并且可以选择锁定它,以便在浏览数据库时保持固定。在IDA 7.7中,这个功能得到了改进,现在你可以同时激活多个高亮!设置高亮基本用法保持不变:高亮任何你想要的字...
IDA 技巧(69) 拆分表达式
在使用反编译器时,有时您可能会在上下文菜单中看到名为拆分表达式的项目。它的作用是什么,在哪些情况下有用呢?让我们来看两个可以应用的例子。结构字段初始化现代编译器执行许多优化以加快代码执行速度。其中之一...
IDA 技巧(68) 可跳过指令
在编译代码中,有时会发现一些指令并不直接代表程序员编写的代码,而是由编译器为了自身目的或程序执行环境的要求而添加的。可跳过指令的种类编译函数通常在开始时有序言指令,用于执行各种记录操作,例如:保存函数...
逆向工程中面对除法优化的经验结论
假设在IDA中肉眼怀疑有除法优化,不是所有神密常量都能放狗命中,想纯静态还原出除数,从而得到人类可读的最简除法表达式。此需求在逆向工程中时有碰到,以前写过两篇技术文章,当时IDA F5尚不能还原除数,...
IDA 技巧(67) 反编译器辅助工具
我们之前已经描述过自定义类型在反编译代码中的使用,但你可能还会遇到一些类似函数调用的不寻常关键字。它们被反编译器用来表示无法映射到优雅C代码的操作,或者只是为了使输出更紧凑。它们列在反编译器提供的de...
IDA 技巧(66) 反编译器注释
当你在反编译器中处理伪代码时,可能会注意到变量声明和提示中有一些内容略显神秘的注释。那么它们是什么意思呢?Image虽然有些注释的含义显而易见,但有些则不那么明显,还有一些仅在罕见情况下出现。变量位置...
IDA 技巧(65) 栈帧视图
栈帧是由当前函数管理的栈的一部分,包含该函数使用的数据。背景栈帧通常包含以下数据:局部和临时变量;传入参数(对于使用栈传递参数的调用约定);保存的易失性寄存器;其他记录信息(例如x86上的返回地址)。...
IDA 技巧(64) 全屏模式
全屏模式虽然不常用,但在使用单个显示器或笔记本电脑处理复杂的IDA布局时可能会很有帮助。例如,当你需要阅读一长串列表行而不想一直滚动时,这个功能就显得尤为实用。这个功能有些隐藏,但在视图菜单中确实可以...
IDA 技巧(62)创建自定义类型库
之前,我们讨论了使用IDA附带的类型库,但当处理不常见或自定义的API或SDK时,该怎么办呢?在这种情况下,可以使用我们为IDA Pro用户提供的下载中心中的tilib工具。创建类型库tilib是一个...
34