
KPOT에서 문자열을 복호화하여 주석으로 설정하는 IDA Python 스크립트
KPOT 스틸러의 문자열을 복호화하고, 런타임 중 해당 문자열을 전달받을 변수 옆에 주석으로 설정하는 IDA python 스크립트입니다. 동작 방식은 다음과 같습니다:
복호화 함수(두 개가 있으며, 그래서 이 저장소에는 스크립트가 두 개 있습니다)에 eax로 전달되는 오프셋을 mov 또는 pop eax를 통해 얻습니다.
해당 크기와 XOR 키를 읽어 배열의 문자열을 복호화합니다.
복호화된 문자열과 주석으로 설정된 위치의 오프셋을 출력하며, 복호화하지 못한 문자열도 출력합니다(아래 중요 고려 사항 참고).
코드에는 스크립트에서 처리하는 방식과 다른 방법을 사용하는 몇 가지 사례가 있습니다. Could not decrypt xref: 메시지가 있는 주소를 따라가면 해당 사례를 찾을 수 있으며, 관련 함수에 오프셋을 수동으로 제공하여 복호화할 수 있습니다.
스크립트는 복호화된 배열을 decode()를 통해 문자열로 변환합니다. 제 경험상 KPOT이 복호화하는 바이트 배열 중 세 개는 문자열이 아니며, 이로 인해 스크립트가 중단됩니다. 이것이 kpot-string-decrypter-pt1.py에서 무시되는 오프셋들입니다.
search_offset()에 현재 주소를 출력하는 줄을 추가하면 스크립트가 중단되는 위치를 찾는 데 도움이 될 수 있습니다.decrypt_str()의 반환 값을 return(newarray.hex())로 변경하기만 하면 됩니다.두 스크립트 중 어떤 것을 사용할지 알려면 복호화 루틴을 확인하세요. pt1은 바이트 XOR만 수행하는 서브루틴용이고, pt2는 XOR 후 AND 0xFF를 수행하는 서브루틴용입니다.