
----IDA分析
文章平均质量分 62
eGanWo
联系方式:641290869@qq.com
展开
-
IDA 逆向代码 --- _stack_chk_guard变量 之后的局部 怎么处理
场景:IDA逆向代码的时候,看到反编译出来的有边界检测,一般使用最后一个四字节局部变量A做边界检测,但B也有些情况下,这个边界后面还会定义一个局部变量B,根据反编译出来的代码,可以看出这个 B 没有什么实际的意义,代码使用它的地址来进行偏移访问前面的局部变量。 char s_reqcomand[100]; // [sp+14h] [bp-ECh]@1 unsigned __int8 v...原创 2020-03-25 18:48:46 · 2341 阅读 · 0 评论 -
IDA 逆向代码 --- LOBYTE、HIBYTE、BYTE0~BYTE3 的使用
场景:IDA 反编译的代码,对于取当前数的某位时,使用的是LOBYTE、HIBYTE、BYTE1~BYTE8,但是实际上,IDA反汇编的代码里面 BYTE8从来没有用过,会使得逆向工程师产生疑惑。需要知道其具体的意义.分析,这些类型数据都存储在defs.h 中,我们逆向代码的时候可以直接将此文件加到工程中,直接创建一个win32工程,贴下列代码://测试 LOBYTE、HIBYTE ...原创 2020-03-25 18:10:30 · 7687 阅读 · 1 评论 -
IDA 逆向代码 --- 反编译失败 Decomplication failure
场景:IDA经常会解析错误,Decomplication failure,我们要学会如何处理这些错误,才能得到伪代码。可能原因1:函数约定的错误;可能原因2:函数参数识别错误;解决方法:分析函数的参数个数和调用约定,Y重新定义函数;例如:上面有提示出错的地址 ,G过去看 是在调用函数,看看他是调用什么函数,函数有啥问题。可能原因3:函数体内字节码未识别;解决...原创 2019-11-29 11:14:17 · 2725 阅读 · 0 评论 -
IDA 逆向代码 --- 双精度浮点型jumpout
场景:IDA识别出一个函数为:int __fastcall _floatsidf(int result){ if ( result ) JUMPOUT(&loc_DD7F4AA4); return result;}分析:调试一下,通过输入和输出发现:函数floatsidf 实际上就是将int 转换成为 double型;浮点数,注意R0 和R1,是使用...原创 2019-11-11 16:23:00 · 4856 阅读 · 0 评论 -
IDA 逆向代码 --- 可变参识别错误解决
一、背景:碰到一个IDA识别可变参函数调用的时候,识别错tt_uart_send_head_80499B6(2, 0x19);//函数调用的地方unsigned int tt_uart_send_head_80499B6(int a1, ...)// 函数定义明显这里有错误,因为我们知道可变参列表的前面一定有一个参数表示可变参的个数;二、分析: 2.1 可变参的基础C 库宏 - v...原创 2019-11-11 15:49:04 · 2054 阅读 · 0 评论 -
IDA sig文件的生成与使用
问题引入:Sig文件能使得IDA识别更多的符号,便于分析;前面在《IDA 逆向技巧》中有提到sig文件的制作,自己写一个demo编译成为lib,再生成sig文件,具体步骤如下;1、使用IDA打开lib,可以看出lib里面有多少个obj文件;2、使用link.exe 将lib中的obj文件导出来(这个link.exe 来自于哪里?)命令:link -lib /extract:test...原创 2019-08-05 11:02:22 · 2852 阅读 · 0 评论 -
IDA 逆向代码--- 指针类型的使用
场景:指针、地址、数组访问、一维二维数组转换在IDA F5 之后的伪代码里面时常被用到;理解:指针指向的是地址,指针表示的是 从某个地址开始 按照 指定数据类型 读取数据;如下函数定义: int v12; // r3@32 unsigned int v39[96]= { //int v39; // [sp+94h] [bp-1074h]@1 ...原创 2019-09-07 16:15:15 · 1787 阅读 · 0 评论 -
IDA逆向代码 --- F5 反汇编识别错误的情况
场景:F5 之后的伪代码,变量直接被使用,没有被赋值,但是根据上下文,一定具有含义;例如:v3 = &v104 + 0x14 * (signed __int16)v29 - 0x442;// 这里的104 是什么??前面只有定义,没有被赋值,而且不属于数组中的一部分查看对应Arm指令:.text:9FAADCD8 MOVS R6, #0...原创 2019-09-07 16:28:09 · 3564 阅读 · 0 评论 -
IDA andriod程序分析小技巧
1、andriod elf文件识别: 实际上.so 文件就是 elf 文件格式; IDA识别显示:“ELF for ARM (Shared object)[elf.ldw]”2、函数调用时,前四个参数放在IDA的r0\r1\r2\r3,其余参数的放在stack区 中; 例如:sprintf(dest_describe_value, "%03d %02X %c%c%c ", ...原创 2019-09-07 16:36:42 · 366 阅读 · 0 评论 -
IDA 逆向代码---小技巧
1、识别局部变量。 反汇编出来的伪代码中,后面又注释的 rX@X的就是局部变量; int v7_stepID; // r0@1 int v8_ret; // r4@1 局部变量可以直接使用,IDA一般不会识别错误; 2、越界判断代码,逆向时不用管。 unsigned __int8 v13_recbuf[1024]; // [sp...原创 2019-09-07 16:41:00 · 2308 阅读 · 0 评论 -
IDA逆向代码 --- 结构体分析与建立
结构体的创建首先要确定结构体的大小,主要是通过数据的使用来确定结构体的大小; IDA中结构体成员一般出现在:类初始化的地方(XX.dll);根据成员的多少,我们创建结构体的大小,注意虚表vt占4个字节;一般有三个地方有助于我们创建结构体:初始化函数成员列表、memcpy函数的使用、memset函数的使用、数据库字段;在memcpy的参数中的size,结构体大小起码为size;在...原创 2019-10-11 17:35:51 · 1927 阅读 · 0 评论 -
IDA动态调试---设置内存断点(半转载)
前言在IDA中单步,找到一段数据后,想看看数据是如何被使用的。对数据下内存访问断点。然后F9让cm跑起来,当内存访问断点命中后,停下来单步数据处理的逻辑,这样操作性强。实验实验环境IDA7.0 + win10x64*在代码区,g到找到的数据块地址。*在数据块首地址按下F2,设置断点。*因为这个断点所在位置不是代码块,IDA会弹出设置对话框。可以在里面填数据块长度。...转载 2019-07-22 19:32:47 · 9318 阅读 · 1 评论 -
IDA + ADB 调试andriod 设备环境搭建
一、工具1.1ADB 工具包1.adb1.0.321.2 吾爱破解:IDA6.91.3 目标andriod 设备1.4 USB线一条二、搭建环境 IDA调试andriod设备条件: andriod设备先运行起来 android_server, 然后 PC 端 forword对应的端口,才能链接;2.1将adb中的android_server 传到目标设备中;2.2...原创 2019-07-22 19:58:53 · 1437 阅读 · 0 评论 -
二、IDA快捷键
快捷键太多,自己开个IDA,多用就记住。按空格键切换反汇编窗口(列表视图&图形视图) 翻页 esc 和 Ctrl+Enter G :定位地址; X: 交叉引用 TAB: 汇编指令与伪代码之间切换; N :重命名; Y:修改函数原型 或者 变量类型; 双击:转到定义处; 注释 “;”和”:” 按;号输入的注释,所有交叉参考处都会出现, 按:号键输入的注释只在该处出...原创 2018-09-02 17:38:57 · 12408 阅读 · 1 评论 -
五、IDA静态分析常用
5.1交叉参考通过交叉参考(XREF)可以知道指令代码互相调用的关系.如下:.text:00401165 loc_401165: ;CODE XREF:sub_401120+B|j这句CODE XREF:sub_401120+B|j 表示该调用地址是401120,“j”表示跳转(jump)“o”表示偏移值(offset)“p”表示子程序(procedure)双击这里或按回车键可以跳...原创 2018-09-02 17:42:10 · 2316 阅读 · 0 评论 -
六、IDA动态分析
6.1 本机调试 使用IDA打开exe,选择菜单Debugger下的Start process(也可以按F9键)来开始调试;在寄存器窗口中显示着每个寄存器当前的值和对应在反汇编窗口中的内存地址。函数在进入时都会保存堆栈地址EBP和ESP,退出函数时恢复。6.2如何对DLL文件进行动态跟踪用[F2]在IDA View中当前代码行切换断点。 启动装载DLL的EXE文件。 使...原创 2018-09-02 17:44:39 · 3086 阅读 · 0 评论 -
IDA逆向技巧(持续更新)
读者如果发现错误,请指正。IDA的逆向分析水平就是一个逆向工程师的水平;7.1 IDA与OD的联合使用一般使用OD下断点,找到关键代码位置,然后使用IDA静态看流程。需要注意的是IDA需要与OD基地址对齐,这样才方便在IDA中查找代码位置,具体方式如下:Edit ---> Segment ----- Rebase Program : 设置基地址;在WINdbg中基地址...原创 2018-09-02 17:48:53 · 25025 阅读 · 9 评论 -
如何参考IDA来逆向代码
逆向代码1、如果是小的代码点,我们只需要将代码看懂,使用高级语言实现就行了;2、如果是大批量的反代码,我们需要做的是将函数含义,函数参数,返回值,数据结构先分析好,建好结构体,然后将整个函数转成.c 文件,再将函数拷贝到VS中,然后逐句重写;IDA 逆向代码,分析清楚函数的参数,然后直接将IDA的代码C导出来,然后复制粘贴,然后每行去逆向代码, 这里面变量就是不变的;注意点:...原创 2018-10-19 20:43:15 · 6127 阅读 · 0 评论 -
C++ 反编译揭秘 笔记
一、 基本数据表现形式1.1 整数类型整数使用二进制直接存储; 1.1.1 有符号第一位是符号,0表示正,1表示负;负数:补码 = 反码 + 1;计算机只能做加法,所以负数使用补码做加法; 1.1.2 无符号32位取值范围:0x00000000 ~ 0xFFFFFFFF (4294967295); 小端方式:根据数据类...原创 2019-02-01 16:05:19 · 12351 阅读 · 0 评论 -
逆向反汇编--- 虚函数特征识别与虚表的建立
一、虚函数重要性虚函数是面向对象的重要组成部分,是多态的基础,如果定义了虚函数但是没有定义构造函数,编译器必须提供默认的构造函数(因为必须要初始化虚表指针);二、虚函数特性与识别虚表指针一定是在对象的首地址的前4个字节(固定的,且4字节,这一点很重要),虚表指针指向的虚函数表的首地址,虚函数作为成员函数使用; 对于开发者来说,虚表和虚表指针都是隐藏的;如果类没有虚函数,构造的时候不...原创 2019-03-08 23:14:32 · 1046 阅读 · 0 评论 -
逆向反汇编: X86进入函数的时候到底发生了什么?
一、引入问题 随便问一个软件开发人员,函数调用的时候发生了什么,大家都会说出,“函数先保存环境,再执行函数,再恢复环境,再返回”,这样是不错,但是不够具体,我们要知道函数的调用约定、帧栈的形成、平栈、函数的识别等具体的细节;二、函数调用完整的代码及汇编函数调用部分: bool bFlag = testFunction(i, l);00D2...原创 2019-03-15 23:16:23 · 410 阅读 · 0 评论 -
Android IDA So的动态调试(转载)
问题:1.动态调试的作用以及与我们常说的脱壳区别之处?2.IDA的下断点调试的原理?3.有无反调试的步骤区别?以及原理?4.反调试与反附加的区别?5.IDA动态调试so时有哪三个层次?以及如何下断点?注意:so的动态调试与脱壳在步骤上有很多的相似之处,关于脱壳在后面会详细介绍加壳以及脱壳的发展历程。解答:第一个问题:动态调试的作用以及与我们常说的脱壳区别之处?曰...转载 2019-07-24 20:07:24 · 396 阅读 · 0 评论 -
IDA 逆向代码 --- 数组分析与建立
需要逆向的代码:(IDA 拷贝出来的) int v54; // [sp+F4h] [bp-1124h]@1 int v55; // [sp+104h] [bp-1114h]@1 int v56; // [sp+108h] [bp-1110h]@1 int v57; // [sp+10Ch] [bp-110Ch]@1 int v58; // [sp+110h] [bp-1108h...原创 2019-08-02 20:03:50 · 2516 阅读 · 0 评论 -
一、IDA简介
IDA是 交互式反编译专业版,International disassemble professional,采用递归向下反编译器,目的是尽可能呈现接近原代码的代码; IDA分为windows版本、OS版本、Linux版本;IDA的目录结构: 1.1 IDA界面打开IDA Pro 6.5,为进入IDA界面提供三种启动选项,分别是New(新建),Go(运行),Previous(上一个...原创 2018-09-02 17:36:24 · 5224 阅读 · 0 评论