常用逆向工具简介:
二进制尽管属于底层知识,但是还是离不开一些相应工具的使用,今天简单介绍一下常用的逆向工具OD以及他的替代品x96dbg,这种工具网上很多,也可以加群找老满(184979281):
这俩款工具都是动态调试工具,使用方式也大致相同,唯一区别的OD属于经典款,各种功能插件及其全面好用,唯一不足就是没有64位版本,而x96dbg分x32dbg和x64dbg,支持64位,但是他的插件没有OD那么完善。我们用Visual Studio 2019编写一个demo,拖入OD中分析(32位):
#include
#include
char a[] = "https://www.vultop.com/";
int main(int argc, char* argv[])
{
printf("%s", a);
system("pause");
return 0;
}
在这我们简单说一下OD主要使用的快捷键以及界面功能:
常用调试指令:
常用到的就是F7单步步入,比如走到一个call指令,F7会跟进call内部函数,F8单步步过则会跳过call内函数,执行到call下一行,F4是运行到当前光标位置,F9是让程序运行,Ctrl+F9是执行到当前call的返回地方ret指令。
断点类型:
int 3断点:F2键或者双击要下断点的代码的硬编码地方,当前代码会被暂时修改为int 3断点;
硬件断点:可以下四个硬件断点,DR0-DR3,记录四个地址;
内存断点:修改当前位置的内存属性,达到触发异常的目的。
接下来介绍一下主界面:
随后我们可以简单的通过俩种方式找到我们的主函数:
第一种,查找字符串:
可以看到我们打印的字符串,双击过去,到了我们的主函数中打印函数这里:
随后我们在这里F2下断点,然后F9就可以到我们的主函数这里:
单步走过printf函数,就可以看到控制台打印:
第二种找到主函数方法,根据VS编译器特征:
F8走过jmp,然后F7进入第一个call:
然后找到这一坨特征,进第二个call:
然后走第四个call:
走过一个jmp,就到了主函数这里:
接下来我们把demo改成64位,拖入x64dbg,大同小异,和OD用法基本一样: