动态调试
快捷键
F9调试
F7步入
F8步过
ctrl+F5 退出调试
1、EASY
先查壳

然后放入32位ida,发现main上面有个可疑函数,进去看一下

有个result=putchar,那大概是没跑了

设置一下断点,修改汇编代码,直接将call main改成call ques

注意,先调试程序,再进行修改函数,
修改快捷键ctrl+alt+k

然后F8步步跟进即可,两次就行


NSSCTF{HACKIT4FUN}
2、string
查壳发现是linux文件,等会放到kali里面调试

先放到64位ida
跟进flag函数,发现是个随机种子生成函数


找到seed

然后编写脚本,按照种子生成伪随机数,即flag
1 | |

注意win里面生成的是错误的
因为系统不同,所以生成的种子也不同

3、getflag
注意:如果修改了汇编,patch后那么程序就会更改了,所以调试前最好备份一下
如果你这么玩的话,那我只能修改你汇编指令了


点到左边的check函数里面,看到要99999999次的click才能getflag,玩呢

直接动态调试,先在比较cmp地方前面下一个断点
第一种办法,将判断条件修改,jg改成jle
JG ;有符号大于则跳转
JLE ;有符号小于等于则跳转

然后本地调试即可

第二种,调试时修改寄存器的内容
CMP
功能: 比较OP1与OP2的值
语法: CMP r/m,r/m/data
标志位: C,P,A,Z,O
MOV
功能: 把源操作数送给目的操作数
语法: MOV 目的操作数,源操作数
格式: MOV r1,r2
MOV r,m
MOV m,r
MOV r,data
在比较cmp前面下个断点,然后F7步过进入cmp,修改左上角eax寄存器的值,只要大于0x5E5E0FFh
点击eax,右键modify,修改数值即可

我这边就修改的比他大1,为5F5E1000,进了一位,然后再F7步过就可以跳到flag分支了



成功跳转后,F9运行程序即可

NSSCTF{MFC_pr0gr4mming_is_awes0m3}
4、贪吃蛇
32位

放入ida,随便看一下函数
将jle改成jg,保存一下然后动调即可


NSSCTF{YourAreTheMasterOfGame!}
更新: 2024-10-24 10:04:04
原文: https://www.yuque.com/chaye-apqbl/vsc85q/chld642z56nkhary