20174 [Secuinside2017]snake 이번 문제는 지렁이 키우기 게임! 문제 제목은 뱀이지만 지렁이 키우기라 하겠음. 먹이를 하나씩 먹으면서 지렁이를 키워야 하는데 손으로 게임을 이기기엔 시간이 부족할듯? 지렁이 게임을 시작해서 함수를 타고타고 가다보면 스테이지랑 점수로 연산을 하는 부분이 나온다. print_snake에 a1은 지렁이 머리인것 같지만 중요하지 않으니까 무시하고 넘어가고, sub_4011a5로 들어가보면 첫번째 연산 과정이 나온다. 여기서 스테이지 수에 따라 연산해주고 지렁이 길이가 304이상이면 두 번째 연산과정으로 넘어간다. v15는 이 전짜기는 0이라 while문 안으로 안 들어가고 원래 v15가 1일 때 game_over, 2일 때 game_clear로 가는데 마지막 과정으로 가기 위해 임시로 바꿔놨다. 죽으면 v15.. 2018. 1. 14. Defcon CTF 2017 Witchcraft main 함수를 보면 'enter code: ' 와 'sum is ' 사이에 호출되는 sub_406190 함수로 가보면 입력받은 문자열을 한 글자씩 비교하는 부분을 찾을 수 있다. 이 전에 풀었던 magic이나 alchemy와는 달리 아스키 값을 바로 비교하는 게 아니라 함수안에서 연산을 통해 값을 비교한다. 마지막 if문을 보면 v33이 249이 아니면 실행이 중지되는데, v33은 매개변수로 받았던 문자를 연산한 최종 값이 들어간다. rdi를 이용해 연산을 하니까 - 부분은 +로 + 부분은 -로 계산하면 어떤 문자인지 알 수 있다. a1 - 3 + 7 = 10 --> a1 = 3 - 7 + 10 import sys, commands, os ls=os.listdir('./witchcraft_dist') .. 2017. 7. 8. Defcon CTF 2017 Alchemy alchemy는 crackme 2000의 6문제중 하나로 crackme의 다른 문제들과 똑같이 200개의 바이너리를 주고 각 파일의 키값을 찾는 문제다. 처음에 찾을 때는 main함수에서 첫번째로 실행되는 함수가 있어서 들어가 보니까 입력받은 문자열과 한글자씩 비교하는 if문들이 여러개 있어서 찾을 수 있었는데, 나중에 보니까 'enter code: ' 문자열을 사용하는 곳으로 찾아가도 비교하는 부분을 확인할 수 있었다. 비교하는 값으로 아예 아스키 값이 들어가니까 cmp를 이용해 키값을 찾을 수 있다 비교문을 보면 rcx와 아스키 값을 비교하는데 rcx에는 입력한 문자열에서 한 글자씩 가져온 값이, r15d는 인덱스 값이 들어간다. objdump를 사용해 'cmp rcx,0x'를 이용해서 찾으려고 했는.. 2017. 7. 8. Defcon CTF 2017 Sorcery 비슷한 형식의 실행파일 200개를 주는데 각각의 실행파일을 실행해 보면 문자열을 입력받아 비교한다. ida로 열어봤을 때 'enter code' 문자열을 찾아서 비교문을 찾아볼려 했는데 찾을 수가 없어서 exit으로 찾음 이 위로 올라가보면 read로 입력받는 부분도 찾을 수 있으니 exit말고 read로도 찾아볼 수 있다. cl과 비교하길래 'cmp cl'로 찾으려 했는데 al로도 비교하는 걸 보고 'cmp .l'로 찾았다 문자열을 찾으려면 'cmp al,r13b' 아래부터 'cmp al,0x68' 까지 봐야 하는데 여기 말고도 al이나 cl, dl과 비교하는 부분이 많아서 비교문이 있는 함수 끝에 있는 'add rsp,0x88'을 이용하기로 함 다행히 'add rsp,0x88'이 두개 밖에 없는데 두.. 2017. 7. 5. 이전 1 다음