숨겨진 문자열 표시
어느 메모리 영역에 있는 수치를 XOR(어셈블리에서는 not***) 하면 숨겨져 있던 문자열이 나온다. (이미지 2의 obj.flag에 있다)
[이미지 1]
예를 들면, 0x562c76088012의 「9e」에 대해서, 화상 2에서는 rax에 「9e」가 들어 있다.
레지스터 rax 0x0000009e
[이미지 2]
not eax를 실행 후는 rax의 하위 8비트에 「61」이 들어 있다.
레지스터 rax 0xffffff61
[이미지 3]
그런 다음 rax의 값을 rcx에 넣고 cl (rcx의 하위 8 비트)을 버퍼링하여 문자열을 생성합니다. (여기에서는 이미지 2의 obj.buf)
mov byte [rdx + rax], cl
ascii 코드에서 "61"은 "a"
[이미지 4]
모두 알아보기 위해 파이썬에서 다음과 같이 계산해 보았다.
>>> hex(0x9e ^ 0xff)
'0x61'
이것을 이용하여 화상 1의 메모리의 수치를 변환해 보면 다음과 같이 되었다.
[이미지 5]
결과 숨겨진 문자열은
"flag{Hidden_Message!}"
이었다. radare2 사랑 해요.
<계속>
ghidra로 디컴파일 해 보니 대단했다. 어셈블리로 쫓은 내용이 바삭바삭하고 몇 줄의 코드로 표시되어 있다.
Deep ghidra decompiler integration for radare2
htps : // 기주 b. 코 m / 라다레 오 rg / r2g
Cutter: Presenting r2ghidra Decompiler | r2con 2019
htps: //같다. 베 / 에 Ht 미에 zr7l8? t=948
설치 및 사용법 데모
htps: //같다. 베 / 에 Ht 미에 zr7l8? t=1945
추가:2021/09/28
asm 처리를 파이썬으로 작성했습니다.
python3
import math
sbuf = '99939e9884b7969b9b9a91a0b29a8c8c9e989ade82'
num = math.floor(len(sbuf)/2)
sret = ""
for i in range(num):
sret += chr(~int(sbuf[i*2:(i*2+2)],16)&0xFF)
print(sret)
out
flag{Hidden_Message!}
Reference
이 문제에 관하여(숨겨진 문자열 표시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/madaaamj/items/3abbc58bc7a919bd9f55텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)