课件下载地址:

链接: http://pan.baidu.com/s/1c9uKsY 密码: ejhd

今天我们要聊的内容比较有意思 叫做API断点,程序呈现在我们面前的任何东西 都是通过API来实现的,比如之前的错误提示框,就是MessageBoxA这个API,想对API有更多的了解可以看看《Windows程序设计》或者是MSDN

好了 开始今天的主题,我们运行今天的附件,可以看到,只有一个空的MessageBoxA,字符串搜索不太靠谱

我们OD附加它,然后在OD下面的Command 输入bp MessageBoxA 这条命令的意思就是 给MessageBoxA 函数下个断点

下好以后,我们F9运行,然后输入假码,点确定,发现程序暂停下来了,并且 标题显示模块是user32 这表明我们来到了系统领空,所谓系统领空就是程序代码已经跑到系统为我们提供的函数里面了

我们看看右下角的堆栈窗口,显示我们目前调用的函数是MessageBoxA,以及函数的参数

我们按Ctrl+F9 执行到返回,我们发现 OD已经显示执行到返回,但是没断下来,是因为我们程序弹了一个框,阻止代码继续执行,我们在我们的程序点个确定

点完确定以后,发现OD变成暂停,并且停在Retn处,我们按F8单步执行

单步后来到 pop esi这条指令这里,它上面的call是调用messagebox的地方 OD也给我们注释出来了。我们继续F8两次

又到了一个pop esi,他上面的call就是调用我们错误提示的地方

简单看下上面的代码 esi+0x5c应该是存放我们输入的验证码,然后取出来 放到eax里面。再跟dbgpro.com比较,dbgpro.com应该是真码,然后call 00409446 如果一样就返回0 否则返回1 然后判断eax是不是0 如果是的话就跳过了成功的提示

所以我们把jnz nop掉 保存文件试试,大家也可以在401510处下断点 单步跟踪看看我们的猜想,我就直接nop了

保存文件试试,是不是可以了

打赏