char* msg = NULL; __asm{ lea eax, DWORD PTR [errormsgok] mov [msg],eax } // 函数调用,返回代码直接写入eax TestKey(); // 该函数在另外一个DLL中,主要做序列号验证 __asm{ push eax cmp eax, 0x0 // 注册跳转 jz normal // 未注册跳转 lea eax, DWORD PTR [errormsgerr] mov [msg],eax jnz abnormal // 以下防止一般的反汇编,写入花指令 _emit 0Ebh // 以下防止一般的反汇编程序查找字符串引用 errormsgok: // 字符串: "OK!" _emit 0x4f _emit 0x4b _emit 0x21 _emit 0x00 errormsgerr: // 字符串:"未注册用户!" _emit 0xCE _emit 0xB4 _emit 0xD7 _emit 0xA2 _emit 0xB2 _emit 0xE1 _emit 0xD3 _emit 0xC3 _emit 0xBB _emit 0xA7 _emit 0xA3 _emit 0xA1 _emit 0x00 }abnormal: // 平衡堆栈 __asm{ pop eax } AfxMessageBox(msg); return FALSE;normal: // 平衡堆栈 __asm{ pop eax } AfxMessageBox(msg);
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课