본문 바로가기

Reversing/▷ ETC

[ch4n3 world] unlockshell

쉘코드를 이용한 리버싱 문제는 처음봐서 되게 색달랐다.


해당 파일을 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