• 2.逆向分析Hello World!程序-上


    1. 先写一个HelloWorld程序(vs2015 / C++)

     

    1. 编译链接生成可执行文件XX.exe,然后用OD[OllyDbg]打开调试:

     

    代码窗口:默认用于显示反汇编代码,还用于各种注释、标签,分析代码时显示循环、跳转位置等信息

    寄存器窗口:实时显示CPU寄存器的值,可用于修改特定的寄存器

    数据窗口:以Hex/ASCII/Unicode值的形式显示进程的内存地址,也可在此修改内存地址

    栈窗口:实时显示ESP寄存器指向的进程栈内存,并允许修改

    1. EP(EntryPoint,入口点)

    EP是Windows可执行文件(EXE、DLL、SYS等)的代码入口点,是执行应用程序时最先执行的代码的起始位置,它依赖于CPU。用OD调试XX.exe刚开始默认跳转的位置就是EP处。

     

    1. 接下来是尝试找出main()函数中的MessageBox()函数的代码。

    先补充几个快捷键:
        Ctrl+F2  重新开始调试(终止正在调试的进城后再次运行)

        F7      单步步入,可以进入到函数里

        F8      单步步过,不进入任何函数,往下走一条指令

        Ctrl+F9  一直执行,知道遇到RETN指令,跳出函数

    加载exe到od里,直接来到EP处,然后就是一路F7/F8[这个是刚开始,后期有经验了就不会这么无脑的从头开始找了]call,是函数调用,遇到call想进函数里看看就F7想路过就F8然后是找到这么一个地方(注意你的地址和我的地址可能不同)

     

    我的PE文件代码段FOA(400)->RVA(1000)->VA(1341000)这个计算方式以后说。

    然后就F7进去看看:

     

    红色注释部分就是我们要找的函数。而且在call之前各种把参数push进去,还有就是看到了字符串地址在013420F8处,从栈和内存里也能清楚的看到:


    同时现在考虑下,这个调用MessageBox函数的函数不就是main函数吗?执行到这个函数的return处,在F8返回上一层:

     

    回来后就准备开始执行add了,那么上面那个call NXYod.00341000就是main函数地址码。这个其实是可以算出来的。还是根据FOA->RVA->VA 最后那个RVA->VA在OD里可以直接Ctrl+G输入RVA他会自动跳转到VA处,比如我的FOA是400,我算出来RVA是1000(我自己写了个计算工具),然后我在OD里直接Ctrl+G

     

    OK之后直接跳转到:

     

    这直接就是main函数了。

     

     

  • 相关阅读:
    最近的几个坑
    最近对Allegro的几个总结
    sub drawing
    Allegro的几点小结
    产品量产的几个问题
    电源板问题的定位
    PCB学习
    servlet(6) 链接数据库
    servlet(5) HttpSession
    servlet(4)异常处理
  • 原文地址:https://www.cnblogs.com/csnd/p/12061889.html
Copyright © 2020-2023  润新知