Reversing.kr Easy Unpack Writeup Using Ghidra
OEP의 가능성이있는 Far Jump를 추출하는 Ghidra Script를 작성했으므로 Ghidra 연구의 기록으로 남겨 둡니다.
문제 배포 사이트
Easy Unpack은 EXE와 텍스트 파일을 전달하며 텍스트 파일에는
Find the OEP
ex) 00401000
라고 기재되어 있다.
우선, IDA free
Graph overview로 아래쪽으로 이동
Graph view의 마지막 쪽에 있는 점프처를 몇개인가 입력하면 정답이었다.
여기에서 본제
OEP는 VirtualAlloc 등으로 새롭게 할당할 수 있었던 메모리 공간에 있으므로 멀리 jump 해야 한다.
멀리 점프할 때 jump to any absolute address 가 될 것.
Ghidra에서 Script를 짜서 Far Jump를 자동으로 찾는 것에 도전.
참고 사이트:핑크 선생님의 Ghidra Script 두는 장소
Ghidra API
Far Jump 추출하기 Ghidra Script
far_jmp_search.py
from ghidra.program.model.listing import CodeUnit
jump_count = 0
#get all memory ranges
addr_ranges = currentProgram.getMemory().getAddressRanges()
for addr_range in addr_ranges:
insts = currentProgram.getListing().getInstructions(addr_range.getMinAddress(), True)
for inst in insts:
flow_type = inst.getFlowType()
if flow_type.isJump():
len = inst.getDefaultFallThroughOffset()
# Exclude near jumps
if len > 2:
print("{} {} {}".format(inst.address, inst, len))
jump_count += 1
print('far jump count: {}'.format(jump_count))
결과
Reference
이 문제에 관하여(Reversing.kr Easy Unpack Writeup Using Ghidra), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/housu_jp/items/d14b6cf3f638d359999f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)