상세 컨텐츠

본문 제목

Secuinside 2013, Game, PE time Write up

0x10 정보보안/0x14 Reverse Engineering

by sweetchip 2013. 5. 27. 18:24

본문

반응형


후!


이번 주말은 너무 바빳습니다.


자기소개서를 쓰면서 또 취약점도 분석하고 등등... 너무 할일이 많았던 주말이었습니다.


그러면서 잠시나마 즐거움을 줬던것이 시큐인사이드 ctf였엇는데 틈날때마다 한두시간 들어가서 문제를 풀이 했습니다.


쉬운건 쉬우나 어려운건 어려웠습니다. ㅋㅋ


그중 리버싱 문제 간단한것 2개를 풀이 해 보도록 하겠습니다.





PE_Time


PE_time (1).zip





프로그램을 실행시켜보면 메세지 박스가 뜨고 확인을 누르면 어느 캐릭터가 나오는 프로그램입니다.


exeinfo로 살펴보니 unknown 이라고 떠서 그냥 이뮤니티에 바로 attach 시켰습니다.


문자열 검색을 해보니 C;@R 이 나왔고 그 바로 위에는 sub와 xor 연산이 있는 것이 보이고 getwindowstext가 있는것을 보아 100%라는 것을 확신하고


분석을 시작햇습니다.


간단하게 첫번째 글자를 가져오고 5를 뺀다음 3과 xor 연산을 하고 다시 4를 빼고 3과 xor연산을 하는 것처럼 보였습니다.


처음 답을 얻으려면 다시 거꾸로 진행만 하면 될것같아 스크립트를 작성햇습니다.


b = bytearray("C;@R")


for i in range(1,6):

b[0] ^= 0x3

b[0] = i


for i in range(1,5):

b[1] ^= 0x4

b[1] = i


for i in range(1,4):

b[2] ^= 0x5

b[2] = i


for i in range(1,3):

b[3] ^= 0x6

b[3] = i


print "Flag : " b





Flag : SECU





game


beist_attack_game3.exe



exe 파일 한개가 주어졌습니다.


힌트를 보니 바이트 배열이라고 하는데 왠지 삘이 딱 와서 바로 풀이를 시작했습니다.




사람이 날라 다니며 강력한 총알을 발사하는 슈팅게임입니다.


디버거로 Attach 시키고 한번 메모리덤프를 쭈욱 살펴보던 차에 왠지 수상해 보이는 부분을 발견 했습니다.




바로 이부분 입니다. 왠지 많이 매우 수상해보입니다. 그냥 Feel 입니다. ㅋㅋ


그래서 게임을 좀 하다 보니..


아니!! 이렇게 바뀌어 있었습니다.


저렇게 바뀌는 것은 점수가 20점이 되었을때 연산이 시작됩니다.


그래서 프로그램을 다시 로딩시키고 하드웨어 브레이크를 설정했습니다.



그랬더니 저부분에서 멈춥니다.


예상대로 xor 연산을 하고 있었습니다.


하지만 P!.... 이 부분은 전혀 답처럼 보이지 않았고 다른 연산이 무언가 있을것이 분명해서 IDA로 찾아봤습니다.




IDA로 아까 루프 부분을 찾았습니다.



Hex-ray로 변환시켜 보니 == 20 이 있는것을 보아 역시 20점이 되면 바뀌는것을 확실히 볼수 있었습니다.


그리고 xor 연산을 하는것도 확실히 보이네요!


이부분까지 연산을 한뒤, 불완전한 답이 메모리에 존재하는걸 아까 확인 했고


다른 루틴을 찾아보기 위해서 byte_406450를 하이라이트 시키고 밑으로 내려봤습니다.



오오... 이부분이 확실해 보입니다.


%s 가 있는것을 보아 무언가를 출력하고 각 글자마다 18[int] 를 더하는 것을 볼수 있었습니다.


저렇게 연산한뒤 답을 출력할것 같아 간단한 스크립트를 제작했습니다.


encrypted_data 파일.


b = bytearray(open('encrypted_data', 'rb').read())


data1 = ""


for i in range(len(b)):

b[i] ^= 0x98

for i in range(len(b)):

b[i] = 0x12 # hex(18)


print "Flag : " b






Flag : b315t_15_0ur_3n3my!!


반응형

관련글 더보기