zmr 发表于 2016-8-5 22:51:15

使用一种另类的方法阻止调试器对话框断点!!!

本人是一个即将迈入大一的小菜,很喜欢加密解密,大家都知道在破解程序的过程中,根据弹出的对话框定位关键代码是很有用的手段
例如MessageBox函数,我用OD跟踪这个函数,发现他最后调用的是MessageBoxTimeout这个api,所以将api入口的几行代码提出来在外面执行,然后在跳转回系统领空,这样无论是messagebox,还是MessageBoxTimeout,调试器都断不下来,这主要是一个思路吧,小菜我技术很垃圾{:5_92:} {:5_92:} ,第一次发帖写的不好,请大家勿喷啊!!!废话不多说,上代码!!


#include<stdio.h>
#include<windows.h>
void test()
{
        ;
}

int main()
{
        char *str1="hello word!";//对话框要显示的文本
        char *str2="hello";//对话框标题
        while(0)
        {
                MessageBoxA(0,"hello","测试!",0);//不会调用这个函数,但是要保证程序输入表中有user32.dll
        }
        _asm
        {
                mov ecx,str1;
                mov edx,str2
                call test;//这两行代码的作用是
                mov eax,;//得到当前代码的Eip
                add eax,0x20;//相当于调用api必须压入的返回地址
                mov ebx,-1;
                push ebx;
                xor ebx,ebx;
                push ebx;//参数入栈
                push edx;
                push ecx;
                push ebx;
                push eax;//让前面计算出的返回地址入栈
                mov edi,edi;//提取出的MessageBoxTimeoutA函数入口代码
      push ebp;
      mov ebp,esp;
                mov eax,0x77D6640B;//mov ebp,esp后面那条指令的位置,可能大家电脑上这个地址都不一样,所以尽量动态获取,可是小菜我不会弄啊!!
                jmp eax;//跳转到api里
        }
        return 0;
}





页: [1]
查看完整版本: 使用一种另类的方法阻止调试器对话框断点!!!