쉘코드를 이용한 리버싱 문제는 처음봐서 되게 색달랐다.
해당 파일을 IDA로 파악해보면 문제 설명 출력이 되고 입력 받은 후에 byte값을 xor 시킨 후 해당 byte를 쉘코드로 실행시킨다.
즉 byte가 암호화된 쉘코드라는 의미다
쉘코드는 영재교육원에서 만들어봤던 것 빼고는 인연이 없어서 어떻게 풀지 고민하다가 두글자니까 그냥 brute force 했다.
[solve]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import os import sys import subprocess import commands brute_table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$^*():_-<>?{}" count = 1 for i in brute_table: print count count += 1 for j in brute_table: cmd = "python -c 'print \""+i+j+"\"' | ./unlockshell" (statux, result) = commands.getstatusoutput(cmd) if result.find('(core dumped)') == -1: print i + j print result exit(1) | cs |
풀고보니 힌트가 결정적이였단 걸 알았다.
function prolog 니까
push rbp
mov rbp, rsp
위 어셈 코드가 function prolog이고 이를 opcode로 나타내면 55 48 89 e5 가 나온다.
byte_601060 첫 2byte가 0x7, 0x7b 이므로 아래와 같다
0x55 ^ 0x7 = 0x82('R')
0x48 ^ 0x7b = 0x51('3')
'Reversing > ▷ ETC' 카테고리의 다른 글
Arm, mips, ppc등 cross compile and excution (1) | 2018.03.12 |
---|---|
Side Channel Attack using gdb (0) | 2018.02.16 |
hsdecomp error modification (0) | 2018.02.06 |
objdump 사용법 (1) | 2018.02.01 |
IDA bind: Address already in use (0) | 2018.01.31 |