Hi, I am creating a crackme (or possibly keygenme, if i feel like it) that realys on a IsDebuggerPresent call to see if the user has olly or another debugger open analyzing it. My current code reads as follows:
#include <windows.h>
#include <stdio.h>
#include <iostream>
#include <ctime>
using namespace std;
void debuggerPresent() {
SYSTEMTIME st, lt;
GetSystemTime(&st);
GetLocalTime(<);
cout << "Application error or Debugger Present!!!" << endl;
return;
}
void noDebug(int mode){
SYSTEMTIME st, lt;
GetSystemTime(&st);
GetLocalTime(<);
if(mode = st.wMonth) {
//Do the main username/password thing here....
}
else {
debuggerPresent();
}
return;
}
int main() {
BOOL WINAPI IsDebuggerPresent(void);
SYSTEMTIME st, lt;
GetSystemTime(&st);
GetLocalTime(<);
int day = st.wMonth;
if(!IsDebuggerPresent) {
noDebug(day);
return 0;
}
if(IsDebuggerPresent) {
debuggerPresent();
system("pause");
return 0;
}
return 0;
}
I am getting this error:
41 C:\Dev-Cpp\files\crackMes\debuggerPresent\ver1.cpp [Warning] the address of `BOOL IsDebuggerPresent()', will always evaluate as `true'
45 C:\Dev-Cpp\files\crackMes\debuggerPresent\ver1.cpp [Warning] the address of `BOOL IsDebuggerPresent()', will always evaluate as `true'
Why is IsDebuggerPresent always returning true?
Also, for those wondering, the date is there to make sure they dont just patch the program to just JMP to the main code.