IDA系列教程: 结构体
创建结构体 使用结构体模板 在structures窗口, 右键或者Insert键 选择Add standard structure, IDA会把常用结构体列出来,添加即可 添加之后,在IDA view, 偏移处右键即可看到使用结构体效果 创建新的结构体 不适用模板创建结构体 要给结构体添加新字段,将光标放在结构体定义的最后一行(包含ends的那一行)……
IDA系列教程:IDA加载器
VIEW-OPEN SUBVIEW-SEGMENTS 加载段 可以看到程序段自动加载! 但是头部却没有加载! Start End是开始和结束地址! R可读 W可写 X(EXECUTION)可执行 D(DEBUGGER) L(LOADER) D是以调试器模式加载程序并显示加载的段时被调用。 L显示加载器加载的内容和其他不太重要的列. 如果想要加载头,那……
IDA系列教程:基于堆栈传输特定指令
什么是堆栈? 堆栈是一个内存部分,其中的访问模式为FILO,表示先进先出。 它允许保存和恢复数据。对于数据处理,有两个基本操作: PUSH将对象放置在堆栈上,其反操作POP取出最后被压入的元素。 在任何时候,它只能访问堆栈的顶部或最后推送的对象 通常,在32位中,PUSH用于在调用CALL之前将函数参数发送到堆栈 PUSH 64将dword 64放在堆栈的……
IDA系列教程:sp-analysis failed
某些函数在使用 f5 进行反编译时,会提示错误 “sp-analysis failed”,导致无法正确反编译。原因可能是在代码执行中的 pop、push 操作不匹配,导致解析的时候 esp 发生错误。 解决办法步骤如下: 用 Option->General->Disassembly, 将选项 Stack pointer 打钩 仔细观察每条 ca……
IDA系列教程:local variable allocation failed
此错误消息意味着反编译器无法使用寄存器和堆栈位置分配本地变量。 只有在配置文件中启用了HO_IGNORE_OVERLAPS之后,才会看到这个错误消息。如果输出中允许有重叠的变量,则以红色显示。 请检查所有相关功能的原型,包括当前的功能。变量类型和定义也可能导致此错误。 更新函数堆栈帧并创建正确的堆栈变量也可以帮助解决这个问题。 如果在对函数类型或变量类型进行……
IDA系列教程:IDA Python
参考资料 Alex Hanel写的电子书:https://leanpub.com/IDAPython-Book Magic Lantern写的:https://magiclantern.fandom.com/wiki/IDAPython 官方教程:https://hex-rays.com/products/ida/support/idapython_docs……
IDA系列教程:堆栈平衡原理与手动恢复平衡
1. 背景 调试样本时发现在某个函数时不能F5,显示positive sp value has been found。初步断定是因为堆栈不平衡导致的,因此需恢复堆栈平衡。 2. 恢复堆栈平衡 IDA->Option->General->Disassembly 勾选stack pointer,打开栈指针显示。 双击左下角output wi……
IDA系列教程:寄存器与数据类型
0x01 什么是寄存器,它们的用途是什么? 32-bit 寄存器: EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI 和 EIP EAX – 累加器寄存器 EBX – 基础寄存器 ECX – 计数器寄存器 EDX – 数据寄存器 ESI – 源指针 EDI –……
IDA系列教程:由软件破解谈windows消息机制
0x01 背景 在IDA系列教程(一)中附件中有一个可执行程序,在分析这个程序时,部分函数涉及到windows消息机制,恶意代码也会利用windows消息机制来隐藏恶意功能代码。 0x2 基础知识 以下知识选自安全客文章《Windows调试艺术——从真实病毒学习消息机制》一文,本文章尊重原著,纯属学习目的。 Windows是一个消息驱动的系统。Windows……
IDA系列教程:IDA使用方法
0x01 判断32位还是64位程序来选择不同位数的IDA进行分析 64位程序可以看到“PE..d†”,32位程序可以看到“PE..L“。 0x02 操作 使用 ”空格键“ 来切换图形模式和指令模式 使用”options-debuging options-line prefixes“来对图形化界面指令前添加地址。 使用”view-open subv……