Linux虚拟机+IDA动态调试 第一次 感动到哭
肥宅还是强啊tql
先讲一下
远程调试的步骤:
虚拟机里某一文件夹下(随意啦随心意就好),要有
linux_server64
(本机IDA安装文件夹下搜索即可得到)文件与要进行调试的文件。右键
–>在终端打开
输入命令:./linux_server64
,回车,即连接。IDA中也打开要调试的文件,
Debugger
–>Select Debugger
–>Remote Linux Debugger
,Debugger
–>Process Options
,出现如下对话框:前两行输入在虚拟机中的调试文件路径名,第3行存放所在文件夹,第五行填写虚拟机
ip
地址,如果有密码要把密码也填上。BTW:上面一行彩色条,蓝色表示函数等,黄色有数据,黑色无用。
运行即可。
题目:
分析静态汇编代码,程序大体流程(分块意识):初始化,Input字符串,判断匹配,正确则
Congratulations!
,反之Day_Day_up
。那么重点就是判断了。我们只需要找出,我们输入的字符串是如何比较的,与什么比较的,就能知道flag了。(思路要清晰):读下来,不知道什么鬼。有一个不知道执行了什么函数的语句
call rbx
,动态调试一番。补充:能发现是某一地方存了特别长特别长的字符串,并对字符串进行了异或操作,移来移去,各寄存器储存各种地址,最后
rbx
指向的地址就是这个字符串,而这个字符串变成了一个函数!惊了!打好断点,在一下意义不明和判断的地方打。调试到
call rbx
语句时,进到那个地址,快捷键C
将数据转为函数样式,如下:那段数据引入很值得注意,长度啥的都感觉嗯,应该是flag没跑了。
继续往下看,有一个跳转循环判断的过程;
每一次循环上图函数,cdqe将判断部分分成
取得字符放入edx
–>取出前4位放入ecx
–>后四位左移放到前四位的地方并或上ecx中的后四位并存入eax
–>比较判断输入字符edx与标准字符eax
。既然我们知道了过程,就能通过将刚才那串数据左右移位得到的ASCll码解出flagflag{G0OD_9o0d_5tudy!}
附录:ASCll码对照表
![[ASCII表]](/2018/09/12/20180912bcdtts/ASCLL.png)