2017-07-26 2 views
-1

Ich versuche, PE-Header zu lesen, und sehen möchten, ob eine Exe ASLR aktiviert hat.Vergleichen von WORD-Eigenschaften

ich zur Zeit tue.

if (PE.FileHeader->OptionalHeader.DllCharacteristics == IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE) 
     std::cout << "ASLR is enabled :)" << std::endl; 
    else 
     std::cout << "ASLR is disabled >:(" << std::endl; 

Allerdings bekomme ich immer „ASLR ist deaktiviert> :(“, auch wenn ich weiß für eine Tatsache, ASLR aktiviert ist

Ich weiß, das muss tun mit meinem Bediener, aber wie kann ich testen und sehen, ob ein PE-Header ein bestimmtes Wort Charakter hat?

+1

Es ist wichtig, im Auge ASLR zu halten wird auch unabhängig vom Inhalt der DllCharacteristics * deaktiviert werden, wenn * Im Modul fehlt ein .reloc-Abschnitt. Siehe Raymond Chens Blog für weitere Informationen: https://blogs.msdn.microsoft.com/oldnewthing/20170607-00/?p=96295 – byteptr

+0

Danke @byteptr, das wusste ich nicht! – CPunkh

Antwort

5

DllCharacteristics ist eine Bitmaske, kann es mehrere Flags aktiviert enthalten. Ihr Scheck das bitweise & Operator anstelle des == verwenden müssen Betreiber:

if (PE.FileHeader->OptionalHeader.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE) 
    std::cout << "ASLR is enabled :)" << std::endl; 
else 
    std::cout << "ASLR is disabled >:(" << std::endl; 
+0

Beachten Sie, dass Sie mit einer Menge von Bitflags, die selbst eine Zusammensetzung von einfacheren Flags (oder einer bitmaskierten Enumeration) sind, tatsächlich & (mit einer Maske) und dann auch auf Gleichheit prüfen müssen. –

+0

@ChrisBecke - ja, aber im Falle einfach (genau ein Bit) einfach genug "&" – RbMm

1

es Gefunden arbeitet von unten Art und Weise bei Multibit-Flaggen IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE ist höchste Bit in DllCharacteristics:

if (PE.FileHeader->OptionalHeader.DllCharacteristics & 
    (IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE| 
    IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE) == 
    IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE) 
    std::cout << "ASLR is enabled :)" << std::endl; 
else 
    std::cout << "ASLR is disabled >:(" << std::endl;