sweetchip's blog


후!


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


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


그러면서 잠시나마 즐거움을 줬던것이 시큐인사이드 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!!


신고

Comment 8

  • Frost
    2013.05.27 22:58 신고 수정 답글

    잘 보고 갑니다 ;)

    게임같은 경우 Ollydbg쪽으로 하다가 영 안되서
    그냥 티서치 같은 메모리 변조 프로그램으로 보스의 체력을 0으로 만드는 쪽으로 풀었었는데...

    저런 식으로도 풀리네요 ㄷㄷ...

    • 2013.05.28 01:20 신고 수정

      감사합니다 ㅎㅎ

      저의경우 따로 조건이 없어서 그냥 저렇게 했는데 0으로 만들면 되더라구요..

      하다가 중간에 멈추긴 뭐해서 그냥 계속 했습니다 ㅎㅎ

      감사합니다.

  • 전수진
    2013.06.20 17:22 신고 수정 답글

    질문좀 드릴께요

    이런류의 프로그램의 소스를 수정해서 다시 컴파일하고싶은데

    어떻게 하면좋은가요 ? 조언좀 부탁드립니다

    http://www.pabcd.net/



    홍보 절대 아닙니다 오해마세요

    파일을 올리려했는데 23MB라 안올라가네요 ㅠ.ㅠ

    하실줄아시는분이나 가능하신분 알면 후사하겠음.. 부탁드립니다

    • 2013.06.20 20:47 신고 수정

      현재 공개되 있는 리버스 엔지니어링 기술로는 100% 원본 코드 변환이 불가능 합니다.

      그리고 내용에 대해선 다른 분께 알아보시는 것이 좋을 것 같습니다.

      감사합니다.

  • 궁금이
    2013.07.23 01:59 신고 수정 답글

    PE_Time.zip 파일이 실행이 않되네요...
    올바른 WIn32 응용프로그램이 아닙니다 라고 뜨는데..
    혹시 이유를 알 수 있을까요??

    • 2013.07.23 10:33 신고 수정

      테스트는 안해봤지만 xp 에선 실행이 안될수도 있습니다~

  • PE Time 실행 하면 어떤 창이 뜨나요?? 사진좀 올려주세요 ~

    • 2013.11.07 16:48 신고 수정

      원모양의 창이뜨고 메세지박스로 이름이 뜨는것 같습니다.
      감사합니다.