zoukankan      html  css  js  c++  java
  • ida & gdb 调试

    布布转PC端逆向啦。加油加油!!!

    今天在看滴水三期的x86汇编课程和吾爱ximo的脱壳教程。现在是边学变做题。。有着arm的基础。x86的汇编很容易接受,懂了点基础指令。开始尝试解题。今天做的题碰到的也是upx的壳。打开kali直接upx -d 就脱掉了。没啥意思,期待后面吧。

    第一次用ida远程调试Linux 系统下的文件,刚开始遇到了坑,最后还是解决了。留个记号吧。

    第一次学用gdb来调试程序。基本上对着教程来操作的。总之也留个记号吧。

    相关教程:https://blog.csdn.net/horotororensu/article/details/82256832

    热爱可抵岁月漫长

    使用ida & gdb 调试 程序。

    案例:攻防世界- RE - 新手入门  no-strings-attached

    ida & gdb 调试

    1. 打开查壳软件Exeinfo

      发现没有加壳。同时为ELF格式文件且为32位。

      image.png

      打开32位的ida将文件拖进去F5查看主函数

      image.png都是函数。分析可知,在authenticate()中出现了我们想要的flag痕迹。

      跟进去查看伪代码.

      image.png

      发现有个加密函数decrypt(看名字看出来的)

      估计是对传进来的函数进行了加密操作然后赋值给s2.

      而下面就是对有关s2和输入对比的if判断。所以,s2就是我们想要得到的flag。而我们如何获得呢?我们可以进行动态调试获得。

      ida调试
    2. 开启在Linux开启ida的调试服务。

      将ida目录下dbgsrv文件夹里面的image.png移入Linux的目录中。打开一个来启动调试服务。

      image.png

      打开idaimage.png

      选择image.pngimage.png

      出现如图所示

      image.png然后

      Application 选择linux系统中,你所要调试的文件的路径,

      Directory 现在linux系统中,你所要调试的文件所在的目录路径

      parameters 不用填,留空

      Hostname 选择你linux的IP(下文给出怎么找到ip地址)

      password 你linux的密码。

      获取IP:打开linux终端。输入 ifconfig -a 

      image.png

      填好上方后,如图。

      image.png点击OK

      成功进入。

      image.png

      另外打开一个IDA直接加载该文件。来查看authenticate函数的位置。

      image.png

      重新切换回我们的动态调试的ida。按G 搜索0x08048708并跳转。设下断点。开始运行。image.png

      一直F8调试到08048725

      image.png一定要经过decrypt这个加密函数。然后起字符串都保存在了eax这个寄存器中。我们在HEX 中查看eax保存过的值。

      image.png

      这里就可能有人说上面不是还有一个1吗?应该是从1开始的,我们直接进eax跳转的地址看。image.png

      发现是从9开始。故。我们的flag为

      9447{you_are_an_international_mystery}

      成功用ida动态调试的方法解出。

    gdb动态调试

    我们现在来讲讲用gdb来动态调试。

    打开kali,用gdb加载程序。

    image.png

    既然是动态调试,gdb也跟ida一样,也要下一个断点来进行调试。从上文IDA静态分析可知,经过decrypt加密后即为我们要的flag。故我们在decrypt这函数下断点  b为下断点

    image.png

    输入 r 开始运行程序,会运行到我们下断点的地方

    image.png

    然后n为单步步过,p为单步步入。

    此处我们需要n。直接步过该函数,让函数直接执行完。

    image.png

    我们直接看保存在eax中的值。使用x命令(格式如下)

    image.png

    输入 x/200xw $eax    (200是要查看的内存单元个数为200个,x是输出整数的格式为十六进制。w是4字节输出。)

    image.png

    在C语言中。0x00000000 为字符串结束符‘’。那么前面即为我们需要的flag的十六进制了。扣出来,写个脚本跑一下,或者直接复制到十六进制转文本的在线转换网页转换即可得到flag。

  • 相关阅读:
    506. 相对排名 Relative Ranks
    500. 单词是否在键盘上的同一行 Keyboard Row
    openstack live migration性能分析
    libvirt/qemu特性之numa
    nova Scheduling 配置
    Specify compute hosts with SSDs
    nova conductor
    osprofiler
    watcher
    stacktach和ceilometer
  • 原文地址:https://www.cnblogs.com/pupububu/p/13825940.html
Copyright © 2011-2022 走看看