第5章:演示版保护技术——警告窗口

将程序跑起来,多下断点,多看几遍代码流程。

程序的主流程非常的简单,两个对话框的出现也只是在 DialogBoxParamA() 中,该函数的参数:

查资料可知,第四个参数是指向对话框过程的指针,即回调函数,函数返回的消息与之对应会发生相应跳转调用相应的函数。

可以看到,下方有一个 EndDialog(),即关闭该窗口,再往后又会调用 DialogBoxParamA() ,可知又会开启一个窗口,即第二个窗口。因此不能在此处修改这个函数。

在该函数内部继续查看,下面这个函数会使用之前压入栈的回调函数作为参数:

上一个窗口出现并点击确定之后,会执行到回调函数,并调用结束窗口函数,然后调用 DialogBoxParamA() 函数再起一个窗口。

调用该函数之后,在内部再次调用 DialogBoxIndirectParamAorW(),该参数与第一个有不同:

 

因为他们的回调函数都是确定不变的,并且资源地址也是不变的,因此目前有两种方式跳过第一个窗口:

① 修改 DialogBoxIndirectParamAorW() 的参数

② 修改 DialogBoxParamA() 的参数

 

两种方法都可以绕过第一个窗口。

 

posted @ 2020-09-28 15:48  Rev_omi  阅读(222)  评论(0编辑  收藏  举报