zoukankan      html  css  js  c++  java
  • IDApro自带动调初探

    由于不会汇编,每次对着Ollydbg或者恶心的Linux自带的GDB调试的时候都一脸懵逼,由于第一次尝试remote Linux debugger时一直连不上直接给我劝退了,后来经过几天的坐牢和学长帮助发现是vmware的虚拟网卡被防火墙给屏蔽了,关闭防火墙重新安装vmware终于可以实现虚拟机与主机的互ping之后,萌新开始了第一次动调。

    先拿一道攻防世界题举例:no-string-attached
    反编译之后发现关键代码:

    void authenticate()
    {
      wchar_t ws[8192]; // [esp+1Ch] [ebp-800Ch] BYREF
      wchar_t *s2; // [esp+801Ch] [ebp-Ch]
    
      s2 = (wchar_t *)decrypt((wchar_t *)&s, (wchar_t *)&dword_8048A90);
      if ( fgetws(ws, 0x2000, stdin) )
      {
        ws[wcslen(ws) - 1] = 0;
        if ( !wcscmp(ws, s2) )
          wprintf(&unk_8048B44);
        else
          wprintf(&unk_8048BA4);
      }
      free(s2);
    }
    

    发现只要运行了decrypt函数即可获得flag,考虑动调。
    扔进Exeinfo PE:

    发现是linux下的程序,需要远程调试,以下为操作步骤:

    • 将Linux_server和Linux_server64两个文件放到共享文件夹(分别对应32位和64位程序,此题只需32位)
    • 将待调试文件放到共享文件夹
    • 查询Linux虚拟机IP地址
    • 用IDApro打开待调试程序
    • 选择对应的调试环境
    • 在decrypt后一行下断点
    • 在Linux找到共享文件夹后打开Linux_server
    • IDApro中设置Hostname为刚才查到的IP
    • 开始调式,按TAB键可以实现C语言和汇编语言的切换

    • 此时程序已经执行到断点处,可以直接查到s2的值,得到flag:9447{you_are_an_international_mystery}
  • 相关阅读:
    python中的 if __name__ == "__main__": 语句的作用
    python的打包与解包
    python循环删除列表元素
    python字典键值对新增与修改的几种方法及差异总结
    python列表元素删除的几种方法以及差异总结
    python之redis(二)
    python之redis(一)
    python之mysql(四)
    python之mysql(三)
    python之mysql(二)
  • 原文地址:https://www.cnblogs.com/THRANDUil/p/15550329.html
Copyright © 2011-2022 走看看