import time import angr GREEN = "\033[92m" PURPLE = "\033[35m" RESET = "\033[0m" RED = "\033[31m" if __name__ == "__main__": # Загрузка бинарного файла print(f"{GREEN}Uploading executable file to angr...{RESET}") proj = angr.Project('a.exe', auto_load_libs=False) print(f"{GREEN}The executable has been uploaded to angr!{RESET}") ENTRY_POINT = 0x140001869 TARGET_ADDR = 0x140001881 # Целевой адрес, нахождение на нем означает что программа взломана # Создание начального состояния state = proj.factory.entry_state( addr=ENTRY_POINT, add_options={angr.options.ZERO_FILL_UNCONSTRAINED_REGISTERS, angr.options.ZERO_FILL_UNCONSTRAINED_MEMORY} ) # Инициализация стека state.regs.rbp = 0x7ffffffffffffff state.regs.rsp = 0x7ffffffffffffff # Симуляция ввода пользователя input_size = 5 input_data = state.solver.BVS('input_data', 8 * input_size) state.memory.store(state.regs.rbp - 0x50, input_data) simgr = proj.factory.simulation_manager(state) print(f"{GREEN}Start cracking...{RESET}") start_time = time.time() simgr.explore(find=TARGET_ADDR) elapsed = time.time() - start_time if simgr.found: input_data = simgr.found[0].solver.eval(input_data, cast_to=bytes) print(f"{GREEN}Success cracked! Input: {PURPLE}{input_data}{PURPLE}{RESET}") print(f"{GREEN}Pwd cracking time = {elapsed}{RESET}") else: print(f"{RED}Fail!{RESET}")