ctf逆向分析过程中有一类情况是程序中有某个函数未被调用,但其中存在一些重要信息(例如flag)且需要运行(即动态调试)后才可以获取到
因为主函数的进程中从未调用,因此单纯的调试无论如何也无法进入该函数
eip寄存器用来存储CPU要读取指令的地址,CPU通过EIP寄存器读取即将要执行的指令,故而修改eip寄存器的值可以让cpu直接执行某函数
参考本篇->EIP寄存器——详解(for me)_eip寄存器详解-CSDN博客
一,题目链接
NSSCTF | 在线CTF平台
二,演示
本题的具体分析略过,最终目的是要调用_ques()这个函数,它在main函数的进程中从未被调用
切换汇编视图查看该函数的起始地址,为【0x00401520】(注意地址一定是十六进制的!)
找到main函数,查看汇编代码,在main函数结束的位置(retn指令)打上断点
F9开始调试(选择【Local Windows debugger】),停于断点处,此时双击右上角的eip寄存器并修改其值为欲调用函数_ques()的地址【0x00401520】后,直接跳转到该函数