상세 컨텐츠

본문 제목

NewHeart 2013 Write ups - reversing

0x10 정보보안/0x14 Reverse Engineering

by sweetchip 2013. 5. 29. 21:01

본문

반응형


결과가 발표나서 이제 write up을 올릴수 잇게 되엇네요.


하.. 대회때 네트워크 문제 덕분에 멘붕하고 번호판 문제떄문에 멘붕하고 저에게 미스크 문제는 맞지 않는다는걸 알게되었던 대회였습니다.


끝나고 나서 문제가 간단하게 풀리는것도 있엇고 풀이 보고 아. 했던 문제도 많았습니다.. -_-;;... 조금만더 할껄 그랬습니다. 쩝쩝





12


7C1083C98704D3ACC3B7DC801939EF14


한개의 바이너리가 주어졌고 매직넘버를 보니 exe 파일이어서 확장자를 exe로 바꾼다음 실행했다.


실행에는 msvcr100.dll 이 필요하다.




print auth key와 print hello가 있다.





아니 이런.. 나쁜 타원님이 키를 가려버렸다.


그렇다면 저 원을 제거하면 되겠다.


라고 생각 했으나 복잡해질것 같아서 그냥 text를 출력시키는 부분을 찾아보려고 했다.


hex 에디터로 뒤져보니 textoutw 가있엇고 xp에서 gdi32.dll의 base addr 과 textoutw의 offset을 더해서 0x77e27eac에 BreakPoint를 설정했다.


[현재는 print auth key를 누른 상태이다.]



역시 함수에 진입한걸 볼수 있다.


Flag : FuCking_virTua1izer





16



3E5037AE7707FC76FCEFBEEB86630562



이번에도 역시 한개의 바이너리가 주어졌다.


매직넘버를 살펴보니 zip 파일이었고 zip으로 바꾸자 trouble.py가 있었다.


그리고 base64로 인코딩 되어있엇다.


키값은 여러번 난독화 되어있엇는데. 처음에 print로 바꿔보고 확인을 하니 난독화가 몇번 정도 되어있던것 같다.




맨처음 exec는 그대로 나둬야 실행이 되고 복호화가 진행되고 등등등 계속 exec를 print로 바꿔주면 실행대신 출력으로 바뀌어서 답이 출력된다.




Flag : i_knew_you_were_trouble





9



61A4DCB5ADD9A1DC057D65BC57DFC70F



역시 바이너리 한개가 주어졌다.


매직넘버를 확인 해보니 zip 이었고 압축을 풀어보니 dll 하나와 exe가 나왔다.


xp에선 돌아가지 않아 windows7에서 분석을 진행했다.


이문제를 대회때 풀지 못햇는데 도데체 왜! 하는데 끝나고 다시 한번 보고 알았다..


프로그램은 간단하게 strcmp로 Nope debugger~!@와 비교하는 프로그램이었는데 아무리 해도 답이 인증이 안됬엇다.


그래서 뭔가.. 관두고 대회끝나고 다시 풀어봤더니 attach를 했더니 lstrcmpa 가 이상한 주소로 바뀌어 있엇다


로딩을 하면 정상적인 strcmp 가 되있고 attach를 하면 이상한 주소로 변경이 되어있엇다.


그렇다면 .. 안티디버깅 기법이다.




현재 디버깅인지 아닌지 판단을 하고 디버깅일경우 0x70으로 변한다.


디버깅중이 아닐경우 0으로 그대로 유지되는 방식으로 디버깅을 판단한다.


만약 디버깅 중일시 그냥 넘기고 디버깅중이 아닐시 istrcmpa의 포인터를 04002110 으로 바꿔버린다.


그래서 아까처럼 attach를 하면 주소가 바뀌어 있엇던 것이다.


[추가 : 다른분의 풀이를 보니 ntglobalflag를 이용한 것이라고 한다.]


그러면 이제 jnz를 nop으로 바꾸든, new origin here로 바꿔도 상관없다 istrcmpa의 포인터만 변경하게 한 다음 main함수로 진입하자.



lstrcmpa 함수 안으로 진입을 하자! [주소는 04002110으로 바뀌어있는 상태이다.]





그리고 4번 xor을 하는걸 볼수 있는데 jnz로 비교를 하는건 그냥 무시하고 따로 xor 시키자.


import sys


f = lambda a: str(hex(a)).replace("0x","").decode("hex")[::-1];


a = (0x00905a4d ^ 0x57E3313F)

b = (0x00000003 ^ 0x68516168)

c = (0x00000004 ^ 0x666E5260)

d = (0x0000ffff ^ 0x0074949E)


print "Flag : " f(a) f(b) f(c) f(d)




Flag : rksWkaQhdRnfakt


간짬뽕은 꿀맛이라고 한다.


저도 동감합니다. 히히


반응형

관련글 더보기