14번 


문제는 


Name이 CodeEngn 일때 Serial을 구하시오 

(이 문제는 정답이 여러개 나올 수 있는 문제이며 5개의 숫자로 되어있는 정답을 찾아야함, bruteforce 필요) 

Ex) 11111 


이거임 



아이다 뭔 지금 맛가서 잘 안댐 ... 그래서 어쩔수 없이 걍 디버거 돌림 

모듈 검색해보니까 뭔가 저기를 봐야 할 것 같다는 느낌이 들었음 

그래서 브포 걸고 들어갔는데 ..... 내가 개 멍청이처럼 문제를 잘못이해하고 CodeEngn 안넣고 K0ng 내 닉넴넣었음 ;;;;


이보셈 ;;;;; 


그래서 좀 해매다가 ;; 문제 다시 읽고 품 .... 개 쉬움


저기 보면 0040133A CMP 문에서 EAX, ESI 값 비교 하고 분기문 뛰는데 , 내가 입력한 시리얼 값이 어디였더라... (두개중 하나의 레지에 들어가고)


다른  레지를 보니 000012D91 이란 값 들어가있음 . 그래서 그거 10진수 돌려서 serial 입력해주어서 풀음 





근 이틀간 tjctf 대회 문제만 풀고 있음 그래서 다른 글 업데이트가 없음 ..ㅋㅋㅋㅋ


잼씀 근데 내가 넘 못해서 빡침 ...... 


그래도 열심히 해보는중 


나중엔 올클 해야지 


껄껄 


시간 나면 문제 풀었던거 롸업 올려야겠다

'개인공부' 카테고리의 다른 글

TJCTF 후기  (0) 2018.08.16

12 번 문제~


Key를 구한 후 입력하게 되면 성공메시지를 볼 수 있다 

이때 성공메시지 대신 Key 값이 MessageBox에 출력 되도록 하려면 파일을 HexEdit로 오픈 한 다음 

0x???? ~ 0x???? 영역에 Key 값을 overwrite 하면 된다. 


문제 : Key값과 + 주소영역을 찾으시오 

Ex) 7777777???????? 


이거임 


디버거 던져서 ......... 아니 근데 아이다 자꾸 안쓰네 ........... 근데 이거 아이다에 돌려봤다가 디버거로 돌리는게 뭔가 더 익숙하고 편해서 ... 그렇게 풀었음 진짜 앞으론 아이다!


암튼 디버거에 던져 모듈을 확인해 보니 이렇게 이씀 



일단 성공메시지 출력하는 곳에 가보니 위에서 7A2896BF랑 CMP 하고 JNZ 하는걸 확인



사실 7A2896BF 이거 첨에 보고 주소인줄 알았는데 ... 아님 ㅎㅎㅎ. .. 어찌되었든 저거 헥스값을 10진수로 변경하면 




이렇게 나옴 





짜라잔 정답임 ! 




시리얼 키 값은 찾았고 이제 헥스에디터로 값 변경을 해줘야함 ! 어느부분에 ? congratulation ~~~ 나오는 부분에 !


왜 ? 시리얼 키 값이 출력되어야 하니까 !



그래서 헥스 에디터 켜서 이렇게 수정해 주면 됨

 


아 그리고 0 1 2 3 4 5 6 7 8 9 A B C D E F 로 순서가 나아감







11번 문제는 


OEP를 찾으시오. Ex) 00401000 / Stolenbyte 를 찾으시오. Ex) FF35CA204000E84D000000 

정답인증은 OEP+ Stolenbyte 

Ex ) 00401000FF35CA204000E84D000000


이거임 전에 꺼랑 비슷함


패킹이 되어 있었고 , 패킹풀고 실행하면 아래처럼 실행되어짐 





패킹 풀리기 전 파일로 Stolenbyte 찾고 





그 바이트를 패킹 푼 파일에 수정해서 입력하면 아래 그림처럼 정상적인 메시지 박스가 출력되어짐 




위 사진에서 OEP도 나왔고 Stolenbyte 도 나왔으니 끝!







9번 문제는  StolenByte를 구하시오임


Ex) 75156A0068352040 


처음 실행 시키면 아래와 같이 실행됨


근데 패킹 되어 있길래 자연스럽게 패킹 풀고 다시 실행시켜 보니 아래 그림과 같이 실행됨 


여기서 stolenByte의 의미를 깨닳음  .. 뭔가 저 메시지 박스 출력하는데에서 빠졌구나 ...


그럼 무엇이 빠졌나 생각을 해보면 간단히 메시지 박스 타이틀(abex' 3rd crack me ) 이랑 Clik OK to check ~~~ 하는 스트링 들이 없어진걸 확인 할 수 있음 


 


언패킹된 원래 상태의 실행파일을 던져서 보면 저 popad 아래에 위에서 말한 타이틀이랑 스트링이 있음 .. 그럼 어떤 바이트가 빠진건지 알 수 있음 (옆에 다 나와있으니까 ....ㅇㅇ)



아 알바하면서 공부하기 힘들다 ...... 뭐 할라하면 자꾸 손님오네 .. 


일단 알바하면서 공부할 수 있다는게 엄청 감사한 일이긴 한데ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 암튼 8번임


8번 문제는 


OEP를 구하시오 

Ex) 00400000 


이거임 


실행 시키면 일케 뭐 계산기뜸 ! 



알빠 아니구 OEP 구하라고 하니까 당연히 packing 되어 있을거 같아서 Exeinfo 돌려보니까 UPX 패킹 되어 있음 




언패킹 안한 상태로 아이다에 던져서 popad 하는부분 찾음 



여기서 계속 실행시키니까 01020DC2 아랫부분 루틴 돌다가 갑자기 뿅 하고 OEP 로 점프 뜀 


끗!




 

7번 문제는 


컴퓨터 C 드라이브의 이름이 CodeEngn 일경우 시리얼이 생성될때 CodeEngn은 "어떤것"으로 변경되는가 


이거임 

먼저 이번에도 혹시 패킹이 되어있나 안되어 있나 확인을 해봄 


오 패킹 안되있음 그럼 바로 아이다에 ㄱ ㄱ 아이다에 던져보니 


이부분이랑 


이 부분을 봐야할것 같은 느낌이 옴  

그리고 드라이브의 이름을 건드리고 있으니까 드라이브 관련 API를  호출하는 부분을 탐색해봐야 겠단 마음이 들어서 드라이브 관련 API 검색을 을 해야 할 것 같다는 생각을 함



그래서 드라이브 볼륨 정보 받아오는 API 찾고 , 브포 걸고 진행 해보니까 아래와 같은 루틴을 발견함 



일단 첨에 보니까 4562-ABEX 가 Add + 1 씩 하면서 6784-ABEX로 변환되는걸 확인(앞의 4 자리만) 그리고 L2C-5781 뒤에 +1 씩 된 스트링 값을 붙임


 마지막으로 사용자 입력값으로 검증 함 


근데 문제가 '컴퓨터 C 드라이브의 이름이 CodeEngn 일경우 시리얼이 생성될때 CodeEngn은 "어떤것"으로 변경되는가' 였으니까 CodeEngn 을 대상으로 저 루틴을 수행하면 될 


것 같음




  


6번 문제는 


Unpack을 한 후 Serial을 찾으시오. 정답인증은 OEP + Serial 

Ex) 00400000PASSWORD 


이겁니당 OEP는 Original Entry Point ! 


문제에서 이미 언팩을 하라고 했으니까 패킹이 되어있는지 부터 확인 ! 




보니까 패킹이 UPX로 아주 잘 되어 있음 ! 





그래서 언패킹 해주었음 ! 언패킹 방법은 전 문제에 설명이 되어 있으니.. 여기서는 생략





언패킹 후 ... 디버거에 던져서 OEP 찾았고 ! (그냥 따라가면 나옴)


 



아이다에서 Serial 찾았음 .. 사실 아이다에서 OEP 찾는법 몰라서 디버거 썼음 ㅋㅋ 찾아봐야겠다 


 

5번문제임 


문제는 


이 프로그램의 등록키는 무엇인가 


이겁니당당당

실행 시켜보면 


이렇게 실행됨 


그리고 임의의 값을 넣어서 등록하면



이렇게 틀렸다고 다시 시도하라고.... 나옴 


오키 .. 다시시도해보겠음 ..  그전에 아이다에 던지고 할꺼임 ... 즐 


아이다에 던져보니 upx packing 이 되어 있길래




다시 Exeinfo PE 로 확인해 보니까 되어 있음 UPX packing 특징은  첨에 PushAD 하고 마지막 popad 하고 점프함  



그 점프하는 주소로 따라가서 보면 되는데 이거 올리에서 툴 안쓰고 하는법 있었는데 까먹음 .......



그래서 그냥 툴돌림 .ㅋ 




UPX 언패킹 툴은 구글에 검색하면 많이많이 나올꺼임 ! 


언팩하고, 다시 아이다에 던져서 분기문으로(정답/오답) 가려고 메시지박스에 출력되는 스트링 검색으로 가봄 

 


가보니까 역시 있었음 ..! 







4번임


문제는 


이 프로그램은 디버거 프로그램을 탐지하는 기능을 갖고 있다. 디버거를 탐지하는 함수의 이름은 무엇인가 


이거임 

이것도 기억이남.. IsDebuggerPresent 이거였을 거임

디버거 안키고 실행시키면 아래그림처럼 루프 돌면서 정상 출력해줌 


일단 아이다에 던져 보았음 이것도 간단하게 특정 벨류값 으로 인해 while 문 안에서 for 문 수행하는 보습처럼 보임 




그리고 당연히 디버깅 하면 디버깅 당했다고 출력함ㅋㅋㅋㅋㅋㅋㅋㅋ 디버깅 당함 왤케 귀엽지 ... 





암튼 어떤 함수로 디버깅 당하는지 안당하는지 알고 있으니까 (IsDebuggerPresent) 에 브포 걸고 어떤값 반환하는지 보려고 그 함수 안으로 들어가봤음 


일단 건드리는 레지스터는 eax 값이란걸 알았고 ..  (movzx는 크기가 더 커도 복사해주는 어셈 명령어임) 나와서 test eax,eax 를 수행하는걸 확인함 



그리고 IsDebuggerPresent 이 함수는 디버깅 당하지 않을때 Return 0 을 하고 디버깅 당할땐 Return Non zero 함 그래서 EAX 레지 수정해서 풀었음 






+ Recent posts