|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
}
|
|