代码窗口:默认用于显示反汇编代码,还用于各种注释、标签,分析代码时显示循环、跳转位置等信息
寄存器窗口:实时显示CPU寄存器的值,可用于修改特定的寄存器
数据窗口:以Hex/ASCII/Unicode值的形式显示进程的内存地址,也可在此修改内存地址
栈窗口:实时显示ESP寄存器指向的进程栈内存,并允许修改
EP是Windows可执行文件(EXE、DLL、SYS等)的代码入口点,是执行应用程序时最先执行的代码的起始位置,它依赖于CPU。用OD调试XX.exe刚开始默认跳转的位置就是EP处。
先补充几个快捷键:
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函数了。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章