鱼C论坛

 找回密码
 立即注册
查看: 2523|回复: 0

[技术交流] 使用一种另类的方法阻止调试器对话框断点!!!

[复制链接]
发表于 2016-8-5 22:51:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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


#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,[esp-4];//得到当前代码的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;
}





想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-19 12:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表