#include<Windows.h>
#include<iostream>
using namespace std;
_declspec(naked)void messageBoxAsm(const char *memoryASCII) {
__asm {
mov ebp,esp
pushad
push 0x0
push 0x0
push dword ptr ss:[ebp+0x4]
push 0x0
call MessageBoxA
popad
retn
}
}
_declspec(naked)unsigned short demo(const char* memoryASCII) {
__asm {
mov ebp,esp
pushad
push dword ptr ss:[ebp+0x4]
call messageBoxAsm
pop eax
popad
mov eax, 0x3
retn
}
}
_declspec(naked)DWORD tebInfo0x4() {
__asm {
mov ebp,esp
pushad
mov eax, fs: [0x18]
mov eax, dword ptr[eax + 0x4]
popad
retn
}
}
_declspec(naked)DWORD tebInfo0x8() {
__asm {
mov ebp, esp
pushad
mov eax, fs: [0x18]
mov eax,dword ptr[eax+0x8]
popad
retn
}
}
//内嵌call
_declspec(naked)DWORD boxShowAsm(const char * ascii) {
__asm {
mov ebp,esp
pushad
push dword ptr ss:[ebp+0x4]
boxMain:
mov ebp,esp
push ebp
push 0x0
push 0x0
push dword ptr ss:[ebp+0x0]
push 0x0
call MessageBoxA
pop ebp
jmp retn1
retn1:
add esp,0x4
popad
retn
}
}
//反调试检查beingDebugger
_declspec(naked)DWORD beingDebugger(){
__asm {
mov ebp,esp
push ebp
push ebx
mov eax,dword ptr fs:[0x30]
mov ebx,dword ptr[eax+0x2]
mov eax,ebx
pop ebx
pop ebp
retn
}
}
//ntGlobFlag标志检查(反调试)
_declspec(naked) DWORD ntGlobFlag() {
__asm {
mov ebp,esp
push ebp
mov eax,dword ptr fs:[0x30]
mov eax,dword ptr [eax+0x68]
pop ebp
retn
}
}
//INT3扫描
_declspec(naked)DWORD scannerINT3() {
__asm {
mov ebp,esp
push ebp
push ecx
call $+0x5
pop edi
sub edi,0x5
mov ecx,0x400
mov eax,0xCC
repne scasb
mov eax,ecx
pop ecx
pop ebp
retn
}
}
//时钟检查
_declspec(naked)DWORD rdstcExamine() {
__asm {
mov ebp,esp
push ebp
rdtsc
mov ecx,eax
rdtsc
sub eax,ecx
pop ebp
retn
}
}
05-21