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:按照下面输入
成功:
本文来自博客园,作者:漫宿骄盛,转载请注明原文链接:https://www.cnblogs.com/msjs/p/18784751
都是顺手发的,写的时候可能有错误,如果发现了,望各位指出。