mirror of
https://github.com/lief-project/LIEF
synced 2026-06-08 15:30:44 +00:00
51 lines
1.3 KiB
Python
51 lines
1.3 KiB
Python
#!/usr/bin/env python2
|
|
|
|
# Description
|
|
# -----------
|
|
# Patch binary to remove anti-debug
|
|
|
|
import sys
|
|
from lief import ELF
|
|
import distorm3
|
|
|
|
|
|
def remove_anti_debug(binary):
|
|
patch = [0x83, 0xF8, 0xFF, 0x90, 0x90] # cmp eax, 0xFFFFFFFF
|
|
ep = binary.header.entrypoint
|
|
text_section = binary.section_from_virtual_address(ep)
|
|
code = "".join(map(chr, text_section.content))
|
|
iterable = distorm3.DecodeGenerator(
|
|
text_section.virtual_address, code, distorm3.Decode32Bits
|
|
)
|
|
for offset, size, instruction, hexdump in iterable:
|
|
if "CMP EAX, 0x3000" in instruction:
|
|
# Patch 3d 00 30 00 00
|
|
binary.patch_address(offset, patch)
|
|
print("[PATCH] %.8x: %-32s %s" % (offset, hexdump, instruction))
|
|
|
|
# Distorm didn't get this one
|
|
binary.patch_address(0x804936B, patch)
|
|
|
|
|
|
def crack_it(binary):
|
|
# user: what you wants
|
|
# serial: any NUMBER
|
|
|
|
patch1 = [0x31, 0xD2] # xor edx, edx
|
|
patch2 = [0x31, 0xC0] # xor eax, eax
|
|
|
|
binary.patch_address(0x8049486, patch1) # xor edx, edi --> xor edx, edx
|
|
binary.patch_address(0x8049488, patch2) # xor eax, ecx --> xor eax, eax
|
|
|
|
|
|
def main(argv):
|
|
binary = ELF.parse("./KeygenMe")
|
|
remove_anti_debug(binary)
|
|
crack_it(binary)
|
|
binary.write("./KeygenMe.crack")
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main(sys.argv))
|