动态调试
通过本周的学习,对ida有了新的认识,除了查看代码外,还可以进行动态调试
查看系统
在查壳的时候要看一下程序是什么系统的程序,一般是windows的和linux的程序
windows
如果是windows的程序那么直接就在本地的主机进行动态调试就可以了
linux
如果遇到了linux系统的程序,比如kali或者乌邦图的程序,就比较麻烦,需要进行虚拟机远程调试,下面会详细描述一下遇到的一些问题
easy_Maze(linux)
inux系统的程序,则比较复杂需要在linux系统的虚拟机里面进行远程调试
拷贝linux_server到kali中
由于需要虚拟机进行远程调试,所以需要把ida安装包下的一些文件转移到linux的虚拟机里面
就是linux_server和64位的程序拖动到虚拟机里面
先搜索一下
建议在虚拟机里面新建一个ida的文件夹存放这两个文件,之后进行建立远程链接的时候要用
然后把需要调试的程序也拖动到这个文件夹下
动态调试
然后把linux虚拟机里面的程序拖动到windows的ida中并反编译然后选择选择remote linux
然后单击对话框debugger(调试器)---start process
然后弹出一个提示框,这个是提示有可能是恶意代码的,一般的题肯定不会有恶意代码的,所以直接跳过就行了
然后弹出一个对话框
区域1表示改程序在虚拟机中的路径名,如果是在虚拟机直接拖到ida中的话在这里就直接是默认的就可以
区域2表示该文件所在的文件夹的路径,同上拖动的默认即可
区域三要填虚拟机的id地址,不填应该也可以
在kali中使用ifconfig查看IP地址
如何查看linux虚拟机的IP地址:
使用ifconfig命令
首先虚拟机一般是没有插件的,所以需要下载和ip地址有关的插件
安装ifconfig工具包
首先在linux虚拟机中打开命令行,进入root模式后,然后输入命令apt-get -y install net-tools安装工具
进入root
进入root模式的命令是su root ,如果进入不去的话,那可以尝试重新设置一个password然后使用新的password进入root
出现这样的提示就是安装完成了,就可以进行ifconfig了
config一下看到ip地址
无法显示ip地址
如果没显示出来,比如出现以下的样子
这说明VWware的网卡连接模式为桥接
然后改成仅主机模式就可以有ip地址
但是一般虚拟机与主机都是可以相互连通的,所以正常默认情况如果行不通可以用用这个IP地址找主机的方法
开启kali端的服务器连接
然后解决了这些东西之后,如果点击ok的话会发现并不成功,会提示目标计算机拒绝
这时候我们就需要动用一下之前拷贝过去的linux_server了
在kali里面运行64位的程序
出现Listening on 0.0.0.0:23946...就是执行成功了
然后在重复上面的步骤进行远程调试
分析程序,在step函数设置断点然后开始调试
之后我们就进入了调试界面,因为要看迷宫的具体参数,所以可以查看一下在断点处v5的数值
通过分析函数可以分析出这个迷宫是一个7*7的,所以可以直接按照顺序换行得到1迷宫的地图
再然后在kali里面先给迷宫程序设置权限级别,然后wasd控制迷宫移动即可
得到flag
fmf_my_reverse(windows)
查壳
通过查壳这个是一个windows系统的程序,直接可以本地进行调试
反编译
用32位的ida反编译出来
会发现有这么几串代码阻止了程序的调试,我们可以先执行程序到输入语句然后在ida中添加进程调试以此来跳过这几行代码
启动本机程序
类似于linux的server,在ida文件夹的根目录D:\Reverse\fby\IDA_Pro_7.7_Portable\IDA_Pro_7.7_Portable\dbgsrv
找到win32_remote.exe程序
然后设置断点
设在if语句 if ( !strcmp(v4, v6) )可以直观看到数值
主机运行程序
由于我们要跳过那三行阻止动调的代码,所以就现在主机运行程序然后在动调的时候选择编译正在运行的进程
然后在ida中选择remote windows
再然后选择debugger菜单下的attach to process调试已运行进程
选择进程调试
点击后出现选择进程的对话框,选择执行的程序进程即可
输入跳过scanf
之后就到了调试界面,此时已经因为没有输入所以停在了scanf语句
然后再在程序中随便输入使程序继续运行,直到断点
更新ida的进程运行
返回ida中,按f9或者单击绿色的三角形
然后就得到了运行到断点的程序,并且查看数值得到flag