关于动态调试的一些事情(一)

0x0 前言

动态调试是指用户跟踪软件的运行,从而协助自己解决软件的问题。想成为一个优秀的开发者或逆向工程师,动态调试都是必不可少的技术之一。接下来我们就由浅及深慢慢道来。

0x1 涉及工具

codeblocks
ida
注:截图中工具为codeblcoks 13.12,ida 7.0

0x2 codeblocks

对于刚刚接触编程的人来说,codeblcoks的调试功能可能比较陌生,但是当代码的复杂度提升后,调试可以帮助我们更好的发现代码的错误。
这里写图片描述
点击File->New->Project新建一个工程
这里写图片描述
选择命令行程序,创建工程,创建时注意观察保存路径,成功后我们可以在Manager视图看到刚才所建的工程以及一个以及创建好的main.c文件。注意:创建好工程后,其余不在工程中的代码文件无法编译,即编译时会默认编译工程中文件。
这里写图片描述
接下来我们在main文件中写一个简单的输入验证程序

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char password[]="admin123";
    char username[]="admin";
    char user[10];
    char pass[10];
    scanf("%10s",user);
    scanf("%10s",pass);
    if(!strcmp(user,username)&&!strcmp(pass,password))
    {
        puts("welcome~");
    }
    else
    {
        puts("wrong!");
    }
    return 0;
}

对输入的user和pass与固定字符串进行比较。
这里写图片描述
在代码左侧单击下断点(对于断点不了解的可以百度一下,这里不再赘述),然后我们点击Debug->Start运行程序
这里写图片描述
因为我们的断点下在了输入语句之后,所以我们需要先在命令行输入user和pass的值,可以看到在原先的红色点上面出现了一个黄色三角,这就是程序将要执行的下一行。 接下来我们点击Debug->Debugging windows->Watches,打开变量面板
这里写图片描述
可以看到我们代码中所定义的四个变量以及他们的值,接下来我们就可以通过下一行、步入、步过指令进行分析程序了~
这里写图片描述

0x3 IDA

由于这是一个学逆向的人写的经验分享,所以我们还是回到逆向上来。 IDA作为逆向的神器,其可以将汇编代码转化为伪代码的功能受到无数人的喜爱。 我们在刚才的工程文件夹下找到编译出的Exe文件,用ida打开(注意64位程序用ida64打开,32位程序用ida打开)。打开后ida会定位到程序的入口点,按空格从视图转化为代码段,我们看到一大片不认识的代码一定感到很慌张,不过不要紧,我们按F5就可以将代码反编译为伪代码了~
这里写图片描述

和codeblocks类似,在伪代码左边单击下断点,不同的是我们需要选择我们需要的调试器,由于我们是windows系统上的程序,这里我们选择Local windows debug。

这里写图片描述
然后我们点击绿色的三角开始调试,和codeblocks一样,当对user和pass赋值后,程序停在断点处,还是按F5将代码变为伪代码。 我们单击Debugger->debugger windows->locals打开变量视图查看变量的值。
这里写图片描述

这样我们就成功的将程序跑了起来,调试之路正式起航~

0x4 未完待续

猜你喜欢

转载自blog.csdn.net/Magic1an/article/details/78455061