Patrzę na kilka prostych środków anty-debug wymienione w tym artykule http://www.codeproject.com/Articles/30815/An-Anti-Reverse-Engineering-Guide#BpMemanty debug - oblicz zużycie pamięci funkcja detekcji przerwania int 3
I zostały wdrożone prostą kontrolę dla int 3 pułapki w sposób dana funkcja, aby funkcja testForInt3Breakpoints zwróciła wartość true, jeśli punkt przerwania jest ustawiony w dowolnym miejscu w obrębie thisIsADummyFunction. powyżej
int thisIsADummyFunction()
{
int i = rand();
++i;
return i;
}
bool testForInt3Breakpoints()
{
bool breakPointPresent = false;
unsigned char* memPtr = reinterpret_cast<unsigned char*>(thisIsADummyFunction);
auto size = 0x16; //this value determined by manual inspection of compiled code
for (size_t i = 0; i < size; i++) {
if (memPtr[ i ] == 0xCC) { //see if byte equals int 3 instruction
breakPointPresent = true;
break;
}
}
return breakPointPresent;
}
Funkcja działa dobrze dla mnie, dla tej jednej konkretnej funkcji, ale chciałbym być w stanie monitorować wiele funkcji bez konieczności sprawdzania skompilowany kod za każdym razem.
Moje pytanie brzmi: czy istnieją metody uzyskiwania informacji o funkcji pamięci, aby wiedzieć, jaką pamięć monitorować?
rozumiem jest wieloplatformowym nie ogólny sposób, aby to zrobić w czasie wykonywania: How to get the length of a function in bytes?
ale używam na Windows x64 i Visual Studio 2015 i dość szczęśliwy dla konkretnych odpowiedzi na pomoście lub czegokolwiek, co mogłoby zautomatyzować proces w pewnym sensie.
Twój kod generuje fałszywe alarmy.Jeśli naprawdę chciałeś sprawdzić opcodes 'int 3', musisz przeanalizować instrukcje. 0xCC może być częścią opcora innego niż "int 3" (na przykład wartość bezpośrednia). Poza tym debugger ma całą moc, by zmienić swój świat. Może zawieszać wątki, przeskakiwać kod lub ustawiać punkty przerwania inne niż przez wstrzykiwanie sekwencji 0xCC. To naprawdę bardzo naiwna próba odparcia ataków. – IInspectable
Zamiast skanowania dla 0xCC, lepiej jest wygenerować skrót kodu, a następnie porównać pod kątem różnic. Ma to również zaletę wykrywania innych ataków polegających na modyfikacji kodu. –
W skrócie, nie ma na to dobrego sposobu. Zobacz także: http://stackoverflow.com/questions/4156585/how-to-get-the-length-of-a-function-in-bytes –