IDA动态调试总结

1.快捷键

参考资料:https://www.cnblogs.com/lsgxeva/p/18629167

ida动调快捷键

作用

F7

单步步进

F8

单步步过

F9

继续运行程序

F4

运行到光标所在行

Ctrl + F7

直到该函数返回时才停止

Ctrl + F2

终止一个正在运行的进程

F2

设置断点

2.常见汇编跳转代码:

参考资料:https://www.cnblogs.com/del/archive/2010/04/16/1713886.html

跳转指令分三类:
一、无条件跳转: JMP;
二、根据 CX、ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转)、JECXZ(ECX 为 0 则跳转);
三、根据 EFLAGS 寄存器的标志位跳转, 这个太多了.
根据标志位跳转的指令:


JE   ;等于则跳转
JNE  ;不等于则跳转

JZ   ;为 0 则跳转
JNZ  ;不为 0 则跳转

JS   ;为负则跳转
JNS  ;不为负则跳转

JC   ;进位则跳转
JNC  ;不进位则跳转

JO   ;溢出则跳转
JNO  ;不溢出则跳转

JA   ;无符号大于则跳转
JNA  ;无符号不大于则跳转
JAE  ;无符号大于等于则跳转
JNAE ;无符号不大于等于则跳转

JG   ;有符号大于则跳转
JNG  ;有符号不大于则跳转
JGE  ;有符号大于等于则跳转
JNGE ;有符号不大于等于则跳转

JB   ;无符号小于则跳转
JNB  ;无符号不小于则跳转
JBE  ;无符号小于等于则跳转
JNBE ;无符号不小于等于则跳转

JL   ;有符号小于则跳转
JNL  ;有符号不小于则跳转
JLE  ;有符号小于等于则跳转
JNLE ;有符号不小于等于则跳转

JP   ;奇偶位置位则跳转
JNP  ;奇偶位清除则跳转
JPE  ;奇偶位相等则跳转
JPO  ;奇偶位不等则跳转


跳转相关的标志位:

11

10

9

8

7

6

5

4

3

2

1

0

OF

DF

IF

TF

SF

ZF

 

AF

 

PF

 

CF


     








影响标志位的汇编指令:






加法指令:ADD、ADC、INC、XADD
                  
                  除了INC不影响CF标志位外,都影响条件标志位。
                  CF、ZF、SF、OF
                  CF最高位是否有进位
                  DF若两个操作数符号相同而结果符号与之相反OF=1,否则OF=0.

减法指令:SUB、SBB、DEC、NEG、CMP、CMPXCHG、CMPXCHG8B
                  
                  前六种除了DEC不影响CF标志外都影响标志位。CMPXHG8B只影响ZF。
                  CF说明无符号数相减的溢出,同时又确实是被减数最高有效位向高位的借位。
                  OF位则说明带符号数的溢出
                  无符号运算时,若减数>被减数,有借位CF=1,否则CF=0.
                  OF若两个数符号相反,而结果的符号与减数相同则OF=1.否则OF=0.

乘法指令:MUL、IMUL
                  
                  MUL:如果乘积高一半为0,则CF和OF位均为0,否则CF和OF均为1.
                  IMUL:如果高一半是低一半符号的扩展,则CF位和OF位均为0,否则就均为1.

除法指令:DIV、IDIV
                  
                  对所有条件位均无定义。

逻辑指令:AND、OR、NOT、XOR、TEST
                  
                  NOT不影响标志位,其余4种CF、OF、置0,AF无定义,SF、ZF、PF位看情况而定。

定位扫描指令:BSF正向位扫描、BSR反向位扫描
                  
                  影响ZF位。

3.修改汇编跳转代码:

例题:[HNCTF 2022 WEEK2]getflag

逻辑是这个,只要修改判断条件就可以得到flag:

先看汇编代码:

只要修改判断条件就可以,但我为什么要判断,直接改成jmp就行:

然后点ASS,之后点最下面的apply即可完成修改,

运行一下:

点击就给

4.IDA远程动态调试:

参考资料:https://blog.csdn.net/m0_46296905/article/details/115794076

远程动调用于不同系统间的调试,我的主系统是windows,我想调试linux的程序就很困难。

而使用远程动调则可以让你在windows环境下调试linux的文件。

原理是本机当主机,虚拟机当服务器。

以linux系统为例

第一步:

找到IDA目录下的dbgsrv目录,然后将符合你虚拟机位数的文件拖入与你要动调的文件的目录下

我的是64位,我用linux_server

就像这样放在一起:

然后打开IDA的远程调试:

之后再返回虚拟机,运行服务器组件:

-P是设置密码,P后的是密码

返回IDA:按照下面输入

成功:

posted @ 2025-03-21 11:01  漫宿骄盛  阅读(149)  评论(0)    收藏  举报