비슷한 형식의 실행파일 200개를 주는데 각각의 실행파일을 실행해 보면 문자열을 입력받아 비교한다.
ida로 열어봤을 때 'enter code' 문자열을 찾아서 비교문을 찾아볼려 했는데 찾을 수가 없어서 exit으로 찾음
이 위로 올라가보면 read로 입력받는 부분도 찾을 수 있으니 exit말고 read로도 찾아볼 수 있다.
cl과 비교하길래 'cmp cl'로 찾으려 했는데 al로도 비교하는 걸 보고 'cmp .l'로 찾았다
문자열을 찾으려면 'cmp al,r13b' 아래부터 'cmp al,0x68' 까지 봐야 하는데 여기 말고도 al이나 cl, dl과 비교하는 부분이 많아서 비교문이 있는 함수 끝에 있는 'add rsp,0x88'을 이용하기로 함
다행히 'add rsp,0x88'이 두개 밖에 없는데 두 개 중 첫 번째 주소가 비교 함수 끝에 있는 명령어여서 저 주소랑 'cmp .l' 부분 주소랑 비교해서 원하는 부분만 가져올 수 있었다.
import os, sys, commands
ls=os.listdir('./sorcery_dist')
for fname in ls:
command1= "objdump -d -M intel ./sorcery_dist/"+fname+" | grep 'cmp .l'"
command2= "objdump -d -M intel ./sorcery_dist/"+fname+" | grep 'add rsp,0x88'"
stop=int(commands.getoutput(command2).splitlines()[0][:8],16)
result=commands.getoutput(command1).splitlines()
result.sort()
print "=========="+fname+"=========="
for line in result:
if int(line[:8],16) < stop :
try:
sys.stdout.write(chr(int(line[-4:],0)))
except:
continue
print ""
grep으로 가져온 것들 중 처음 'cmp al,r13b' 때문에 chr에서 에러가 나서 예외처리도 해줬다
'Write Up > CTF' 카테고리의 다른 글
[CTF]encrypt (0) | 2018.01.14 |
---|---|
[CODEGATE2017]HelloProtector (0) | 2018.01.07 |
[CODEGATE2017]RamG (0) | 2018.01.07 |
Defcon CTF 2017 Witchcraft (0) | 2017.07.08 |
Defcon CTF 2017 Alchemy (0) | 2017.07.08 |