River5tone

Ubuntu Linux 虚拟机 + IDA 动态调试 Welcome

字数统计: 607阅读时长: 2 min
2018/09/12 Share

Linux虚拟机+IDA动态调试 第一次 感动到哭

肥宅还是强啊tql

先讲一下

远程调试的步骤:
  1. 虚拟机里某一文件夹下(随意啦随心意就好),要有linux_server64(本机IDA安装文件夹下搜索即可得到)文件与要进行调试的文件。右键–>在终端打开输入命令:./linux_server64,回车,即连接。

  2. IDA中也打开要调试的文件,Debugger–>Select Debugger–>Remote Linux DebuggerDebugger–>Process Options,出现如下对话框:

    前两行输入在虚拟机中的调试文件路径名,第3行存放所在文件夹,第五行填写虚拟机ip地址,如果有密码要把密码也填上。

    BTW:上面一行彩色条,蓝色表示函数等,黄色有数据,黑色无用。

  3. 运行即可。

题目:
  1. 分析静态汇编代码,程序大体流程(分块意识):初始化,Input字符串,判断匹配,正确则Congratulations!,反之Day_Day_up

    那么重点就是判断了。我们只需要找出,我们输入的字符串是如何比较的,与什么比较的,就能知道flag了。(思路要清晰):读下来,不知道什么鬼。有一个不知道执行了什么函数的语句call rbx ,动态调试一番。

    补充:能发现是某一地方存了特别长特别长的字符串,并对字符串进行了异或操作,移来移去,各寄存器储存各种地址,最后rbx指向的地址就是这个字符串,而这个字符串变成了一个函数!惊了!

  2. 打好断点,在一下意义不明和判断的地方打。调试到call rbx 语句时,进到那个地址,快捷键C将数据转为函数样式,如下:

    那段数据引入很值得注意,长度啥的都感觉嗯,应该是flag没跑了。

  3. 继续往下看,有一个跳转循环判断的过程;

    每一次循环上图函数,cdqe将判断部分分成 取得字符放入edx–>取出前4位放入ecx–>后四位左移放到前四位的地方并或上ecx中的后四位并存入eax–>比较判断输入字符edx与标准字符eax。既然我们知道了过程,就能通过将刚才那串数据左右移位得到的ASCll码解出flag flag{G0OD_9o0d_5tudy!}

附录:ASCll码对照表
CATALOG
  1. 1. 远程调试的步骤:
  2. 2. 题目:
  3. 3. 附录:ASCll码对照表