부제굴능
article thumbnail
[HackCTF] keygen Write-up
HackCTF/Reversing 2021. 12. 6. 22:31

이번에 풀 문제는 keygen 문제입니다. 무려 200점 짜리 문제네요?? 얼마나 어려울지.. 거두절미하고 바로 풀어보겠습니다. IDA로 열고 main 함수를 디컴파일하면 위와같은 코드가 나옵니다. 여기서 눈여겨볼 함수는 check_key 인데요 check_key 함수를 if문에서 비교해서 true 일시 플래그를 뿌려주는것 같습니다. check_key 함수에 들어왔습니다. 해석을 해보면 a1 (input string) 의 길이를 우선 비교하는데요 10

article thumbnail
[HackCTF] strncmp Write-up
HackCTF/Reversing 2021. 12. 6. 22:04

첫 150점짜리 문제를 풀어봅니다. 근데 생각보다 엄청 쉬워서 놀랐네요. C언어만 완벽히 하실 줄 아신다면 정말 쉬운문제가 되겠습니다. 바로 풀이 해볼게요 우선 첨부된 바이너리 파일을 IDA로 열어보겠습니다. 열어보신분들은 알겠지만 main 함수의 어셈블리가 상당히 깁니다.. 배열에 문자열이 들어가는걸 어셈블리로 표현해서 그런 것 같은데요 슈도코드로 보면 아주 간결하게 정리가 됩니다. 이렇게요! 해석을 해보면 "OfdlDSA|3tXb32~X3tX@sX`4tXtz" 을 v5 변수에 복사해줍니다. 그런다음 사용자의 문자열 입력을 받고, strcmp로 문자열을 비교해서 맞다면 Good game, 틀리면 Always dig deeper (항상 더 깊게 파고들어라..?) 뭐 이런문자열이 출력이 됩니다. 실제로 실..

article thumbnail
[HackCTF] Handray Write-up
HackCTF/Reversing 2021. 12. 6. 15:35

또 100점짜리 문제입니다만 문제를 푼 사람은 이전 문제의 거의 2/3가량이네요. 다들 여기서 포기를 한걸까요? 근데 그럴만 한것 같네요 IDA로 열어봐도 이것밖에 보이지 않습니다. 정확히 말하면 뭔가 많은데 슈도코드로는 저것밖에 보이지 않습니다. 흠... 직접 뜯어보는수 밖에요 우선 해당 프로그램을 실행 해봤습니다. flag를 뛰어넘었다고 나오네요? 무슨뜻인지는 잘 모르겠지만 해당 문자열을 출력하는 부분이 어딘가에 있을겁니다. main 함수를 자세히 살펴보다가 누가봐도 수상한 문자열을 출력하는곳을 발견했습니다. 뭔가 저곳으로 이동한다면 Flag를 출력할 수 있을것만 같네요 우선 해당주소로 이동하기전에 분기하는 곳을 찾아봅시다. 위에가 짤렸지만 맨 위에가 main 함수이구요, 바로 밑에서 jmp 명령어로..

article thumbnail
[HackCTF] Reversing Me Write-up
HackCTF/Reversing 2021. 12. 6. 15:00

Reversing 분야에 두번째 문제입니다. 전문제와 동일한 100점 짜리 문제네요 그리고나서 C언어 코드가 들어있습니다. 첨부파일로 준 code.c도 문제에 나온 코드랑 똑같은거네요 해석을 해보자면 사용자가 입력하는 키와 배열에 들어있는 serial 값을 짝수, 홀수에 따라 xor 해서 값이 맞다면 정답이 출력되는 방식이네요 제가 원하는건 Key 값이 아닌 Flag 값이죠?? A ^ B = C B ^ C = A 위와같은 XOR의 성질을 이용하여 원래의 Flag값을 찾아낼 수 있습니다. XOR 복호화 코드를 작성해서 출력하면 끝입니다.

article thumbnail
[HackCTF] Welcome_REV Write-UP
HackCTF/Reversing 2021. 12. 6. 14:45

이번에 적당한 CTF 사이트들을 찾아보다가 우연하게 HackCTF 를 알게되었습니다. 정말 유명한 사이트인데 왜 여태 몰랐는지 ㅡ.ㅡ;; 바로 문제를 풀어보겠습니다. 첫 문제는 문제 제목부터 뭔가 저를 친절하게 반기고있어서 바로 해당문제부터 풀어봤습니다. Welcome_REV 입니다. 바로 바이너리 분석을 해보도록 하겠습니다. IDA로 열면 위와같이 나오는데 보기 힘드니까 슈도코드로 바꿔줄게요 한결 보기 편해졌죠? 대충 해석을 해보면 프로그램의 인자값의 갯수가 0개일땐 'Please provide a password!' 라는 문구가 뜨구요 인자가 1개이상 (아마 코드상 패스워드만 받으니 1개겠죠) 들어올때 check_password() 함수를 실행시켜서 뭔가 출력시킵니다. 딱 봐도 수상한 저 check_..