분류 전체보기 80

[dreamhack] level1 Recover

바이너리를 실행해보니 "fopen() error"라는 문구만 출력된다. ida로 확인해봐야할 것 같다. 문제를 읽어보니, flag.png 파일에 flag가 들어있고 해당 파일을 암호화한 파일인 encrypted 파일을 복호화하여 flag.png로 복구시켜야 하는 문제 같다.  IDA 분석flag.png 열음실패하면 fopen() error 출력 encrypted 파일 열음실패하면 fopen() error 출력 flag.png를 성공적으로 읽었다면 ptr ^= v6[v5 % 4];ptr += 19;fwrite(&ptr, 1uLL, 1uLL, s);++v5;연산을 수행하여 flag.png를 암호화하고 encrypted 파일에 암호화함 문제 해결 방안v5 = 0;while ( fread(&ptr, 1uLL, ..

[dreamhack] level 1 fake 문제

sub_140B 함수의 반환값을 ptr에 저장만약 ptr의 반환값이 0이라면 1을 반환아래 함수들을 차례대로 실행(인자는 ptr) 해당 바이너리를 실행하면 아무 결과도 나오지 않는다. 따라서 위의 코드를 보면 flag를 생성하고 지우는 작업이 있다는 것을 유추할 수 있다. 그렇다면 마지막의 함수인 free에 bp를 걸고 안에 저장된 값을 확인해보자.해당 바이너리를 PIE가 적용되어있기 때문에 bp를 걸 때 free함수의 주소를 그대로 사용하면 안되고 vmmap을 활용하여 해당 바이너리의 시작주소에 free함수의 주소를 더해준 주소에 bp를 걸어줘야 한다. GDB를 활용한 분석 이제 vmmap으로 바이너리의 시작점을 찾아보자시작점 :0x555555554000 따라서0x555555554000 + free 함..

[dreamhack] 비기너 문제 simple-operation

해당 문제를 다운받고 바이너리를 실행하면 random number을 출력하고 input?이라는 문구와 함께 입력란이 나온다. 아무거나 입력해보면 result라는 문구가 출력되고 특정한 문자가 출력되며 try again이라고 출력된다. 따라서 알맞는 입력값을 찾는 것이 이 문제의 목표인것 같다.또한 해당 문제 폴더에 flag를 확인해보면 DH{sample}이라고 출력되는 것을 봐선, flag 파일에 flag가 저장되는것 같다. IDA 분석flag 파일을 실행하고 해당 파일을 읽고 buf에 저장한 뒤에 파일 종료사용자에게 특정한 값 입력받음v11에 입력 받은 문자열(v7)과 v6와 xor 연산하여 저장7번 반복하여 s1의 i번째 배열에 s[7-i] 저장 --> a0b4c1d7를 반대로** s1과 7d1c4b..

[dreamhack] level 1 아 문제 이름 뭘로하지 문제 풀이..

ida로 디컴파일 해보니 사용자에게 입력을 받고, s를 파라미터로 하는 함수인 sub_145A의 값이 참이면 correct 출력, 아니라면 wrong을 출력한다. 해당 문제는 어떤 값을 입력해야 correct가 나오는지 알아내야 하는 문제 같다. sub_145A 함수 분석만약 input 값의 길이가 39가 아니라면 0을 반환v2~v7 : 순서대로 input + 8, 24, 32, 36, 38을 연산한 값을 저장s1[0~3] : 순서대로 Input,  v2, input + 16, v3를 저장sub_1273 함수 호출sub_139D 함수 호출s1과 s2의 첫 0x27 바이트를 비교하여 결과가 0이라면 참(1)을 반환하고 아니라면 거짓(2)를 반환. ** main 함수에서 correct가 나오려면 memcmp..

[dreamhack] level 2 ezmix

바이너리 분석문제에서 제공하는 main 파일을 실행해보니 위와 같은 문자가 출력이 됐다. 뭔지 모르겠으니 한번 ida로 찾아보자. IDA 분석main 함수를 디컴파일하여 c 코드를 살펴보면 위와 같은 코드를 확인할 수 있다. 위의 코드를 보니 a1이라는 값이 2보다 작거나 같으면 아까 봤던 문자열을 출력하고 프로그램을 종료 시킨다는 것을 알 수 있다. a2가 대체 어디서 나온 값인지 궁금해서 코드를 살펴보니 main 함수의 파라미터였다. 그렇다는건 main 파일을 실행할때 파라미터를 넘겨줘야 한다는 뜻같다. 그래서 한번 하라는대로 입력해봤는데 뭔가가 됐다. 특정 문자열을 입력할 수 있는데 이 문자열을 찾으면 flag를 찾을 수 있는 문제로 보인다.한번 ida로 계속 분석해보자. 다시 올라가서 main 함..

[dreamhack] level 2 crc 문제 풀이

바이너리 분석crc 파일을 실행하면 위와 같은 결과를 얻을 수 있다. 특정 문자열이 출력되고 stage1이라는 문구와 함께 입력란이 나온다. 아무 값이나 넣어보면 nop 이라는 문구가 출력이 되는 것을 볼 수 있다. 입력란에 특정한 값을 넣어야 플래그를 주는 바이너리인 것 같다. IDA로 바이너리 분석해당 파일을 IDA를 통해 main 함수를 찾고 main함수를 디컴파일 하게 되면위의 코드를 살펴보면 sub_1357() 함수의 반환값이 1이 아니거나 sub_14DC 함수의 반환값이 1이 아니면 nop이라는 문구를 출력한다. 그리고 다른 경우에는 flag를 출력하는 것을 알 수 있다. 따라서 해당 함수들이 1을 반환해야 한다는 것을 알 수 있다. sub_1357() 함수 분석1. v2라는 변수에 사용자가 ..

[dreamhack] level2 many-shuffle 문제 풀이

일단 해당 문제 파일에 있는 바이너리를 실행해보면 위와 같은 결과를 확인할 수 있다. 해당 바이너리에서는 랜덤한 문자열을 생성하고 Shuffled String 이라는 문자열을 출력한 뒤에 사용자에게 입력을 받는다. 하지만 입력받은 값이 특정한 값이 아니라면 Wrong이라는 문자열을 출력한다. IDA로 파일을 분석해보자main 함수를 디컴파일하면 위와 같은 정보를 얻을 수 있다. 해당 코드를 하나하나 살펴보면, 1. [A-Z]{16}에 해당하는 무작위 문자열 생성 후 s에 저장한다.2. 변수 s에 저장된 값을 dest라는 변수에 복사한다.3. dest와 s를 번갈아가면서 byte_4020 값에 따라 셔플을 진행한다.4. 그리고 셔플을 진행한 값을 출력한다. 5. 사용자에게 문자를 입력받은 뒤에  !strc..