반응형

CTF/리버싱 41

[DiceCTF] babymix - 리버싱 / IDA / Python

쉬운것 같으면서도 쉽지 않은 리버싱 문제 python z3 를 알고있다면 금방 풀수있다. babymix 라는 이름의 바이너리 파일이 하나 주어진다. 한번 실행시켜봤다. admin 비밀번호를 입력하라고 요구하고, 비밀번호가 틀리면 Incorrect 메세지가 출력되면서 종료된다. 바로 IDA 를 이용해 디컴파일 해보았다. main 함수를 보면 사용자의 입력값을 s에 담아 check815546 함수로 집어넣는다. 그 검증결과가 참일경우 Correct 라는 메세지가 출력된다. check815546 함수를 살펴봤다. 사용자가 입력한 값의 각 자리를 계산해서 특정한 조건을 만족시키는지 검증한다. 그런데 한번 검증하고 끝나는게 아니라 여기서 또 check921708 함수를 호출한다. check921708 함수도 마찬..

CTF/리버싱 2023.03.05

[LACTF] caterpillar - 리버싱 / 자바스크립트

자바스크립트 난독화와 관련된 리버싱 문제 복잡해 보이지만 어렵지 않게 풀 수 있다. const flag = "lactf{XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}"; if (flag.charCodeAt(-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~[]) == -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~[]..

CTF/리버싱 2023.02.23

[justCTF] That's not crypto - 리버싱 / uncomplye6

어렵지 않은 리버싱 문제 crypto 문제가 아니라고 문제 제목에서부터 강력하게 어필하고 있다. 문제에서 주어지는 것은 checker.pyc 파일이다. .pyc 파일을 파이썬 코드로 복구하는데는 uncompyle6 라는 도구를 사용한다. pip install uncompyle6 라고 입력하면 다운로드 받을 수 있다. uncompyle6 이라고 입력하면 아래쪽에 디컴파일된 결과가 출력된다. from random import randint def make_correct_array(s): from itertools import accumulate s = map(ord, s) s = accumulate(s) return [x * 69684751861829721459380039 for x in s] def val..

CTF/리버싱 2023.02.15

[JISCTF] REV102 - 리버싱 / Uncompyle6

푸는데 머리조금 아팠던 리버싱 문제이다. 역시나 수학은 어려운것 같다.. 문제에서 주어지는 것은 be_true 라는 바이너리 파일이다. 무슨 파일인지 보려고 HxD로 열어봤는데 중간중가네 pys, pyt 이런 단어들이 보여서 파이썬으로 만들어진 것이라고 추측했다. 확실하게 파이썬이라고 생각한건 을 구글에 검색한 결과 파이썬 제너레이터라는 검색결과가 나왔기 때문이다. 그래서 해당 파일의 확장자를 .pyc 로 바꾸고 분석을 시작했다. .pyc 파일을 파이썬 코드로 복구하는데는 uncompyle6 라는 도구를 사용한다. pip install uncompyle6 라고 입력하면 다운로드 받을 수 있다. python3 uncompyle6 이라고 입력하면 이렇게 파이썬 코드를 복구할 수 있다. import opera..

CTF/리버싱 2023.01.22

[JISCTF] Baby Reverse - 리버싱 / IDA

제목처럼 간단한 리버싱 문제 아무런 설명없이 파일만 덩그러니 주어진다. Easy.zip 파일 압축을 풀어보면 Easy 라는 이름의 파일이 들어있다. 리눅스 환경에서 file 명령어를 통해 어떤 파일인지 확인할 수 있다. ELF 파일이라고 나오는데 ELF는 리눅스에서 실행가능한 실행파일이다. 한번 실행시켜 봤더니 실행하자마자 Try harder!! 라는 문구가 나오면서 프로그램이 종료된다. IDA라는 디스어셈블러를 이용해 Easy 파일을 열어 main 함수의 수도코드를 살펴보았다. 가장 먼저 보이는 조건문에서 argc가 1인지 확인을 한다. 여기있는 argc는 argument의 갯수를 의미한다. 아까처럼 ./Easy 라고만 실행하면 argc 는 1이 되어서 Try harder!! 가 출력되고 끝나는 것이다..

CTF/리버싱 2023.01.17

[PoseidonCTF] The Large Cherries - 리버싱 / IDA / Pwntool

쉬운 난이도의 리버싱 문제 원격으로 접속할 수 있는 주소와 Lao-Tzu 라는 이름의 바이너리 파일이 제공된다. 참고로 Lao-Tzu 는 춘추시대 철학자인 노자를 말한다. Lao-Tzu 파일을 리눅스 환경에서 실행시켜 보았다. Enter the secret for the magic word : 라면서 사용자의 입력을 기다린다. 123 이라고 입력해봤는데 magic word 가 아닌지 바로 프로그램이 종료되었다. 바로 IDA를 이용해 바이너리를 열어서 main 함수를 살펴보았다. Enter the secret for the magic word : 라는 문구가 출력된 후에, scanf 로 사용자 입력을 받아 v9 변수에 저장한다. 그다음 magic_word 함수에 v9를 인수로 집어넣고, 그 결과를 v4에 ..

CTF/리버싱 2022.11.12

[2020CCE] Easyransom - 리버싱 / IDA / HxD / XOR

2020년에 진행되었던 국정원 주최 사이버공격방어대회 묵혀놨던 Write Up을 이제야 포스팅 해 본다. 제목에서 알 수 있듯이 이번 문제는 랜섬웨어와 관련된 문제이다. 랜섬웨어는 몸값을 뜻하는 Ransom과 Software(소프트웨어)가 더하여진 합성어로 컴퓨터에 저장된 문서파일이나 사진 등을 암호화하고, 복호화하는 대가로 몸값을 요구하는 악성코드를 말한다. 문제파일로 두개의 파일이 주어진다. 하나는 easyransome.exex.exe 파일이고 다른 하나는 flag.txt.easyransom 파일이다. exe 파일이 랜섬웨어 역할을 하는 파일인것 같고, flag.txt.easyransom 파일은 flag.txt 파일이 암호화되어서 easyransom 으로 확장자가 바뀐듯 하다. 암호화된 파일을 HxD..

CTF/리버싱 2022.11.04

[2020CCE] My Friend - 리버싱 / IDA / Python

2020년에 진행되었던 국정원 주최 사이버공격방어대회 묵혀놨던 Write Up을 이제야 포스팅 해 본다. 이번에 포스팅 할 문제는 My Friend 라는 제목의 리버싱 문제이다. 주어지는 파일은 mf 라는 이름의 바이너리 파일이다. 리버싱 카테고리에 있는 문제고, 알 수 없는 바이너리 파일을 받았으니 바로 IDA 라는 디스어셈블러를 이용해 열어보았다. IDA에서 인식하길 해당 파일은 Mach-O 파일이라고 한다. Mach-O 파일은 애플의 MacOS 에서 동작하는 프로그램이다. 개인적으로 CTF에서 Mach-O 파일이 나오는걸 이때 처음봤다. IDA로 분석해보면 함수가 친절하게 이거밖에 없다. 그중 _main 함수와 _get_flag 함수가 눈에 띈다. _main 함수의 내용이다. 별 내용이 없다. 사용..

CTF/리버싱 2022.11.01

[2020CCE] Simple Botnet - 리버싱 / IDA

2020년에 진행된 국정원 주최 사이버공격방어대회 오랫동안 컴퓨터에 당시 문제들을 묵혀놨다가 이제야 풀이 포스팅을 해본다. 당시는 거의 이런 대회에 나가본게 처음이라, 시간에 쫒겨서 캡쳐를 제대로 못한 부분이 많다. Simple botnet 이라는 첫번째 리버싱 문제이다. simple_botnet 이라는 이름의 바이너리 파일이 하나 주어진다. file 명령어로 확인해보면 ELF 파일은 것을 알 수 있다. ELF 는 리눅스 환경에서 실행가능한 파일이다. 한번 실행시켜 봤는데 아무런 동작도 없이 바로 프로그램이 종료된다. 자세히 보기위해 IDA 라는 디스어셈블러를 이용해 주어진 바이너리를 열어보았다. main 함수의 수도코드를 한번 천천히 살펴보았다. int __cdecl main(int argc, cons..

CTF/리버싱 2022.10.11

[SharkyCTF] SIMPLE - 리버싱 / 어셈블리어 / IDA

문제 제목처럼 간단한 어셈블리 리버싱 문제 문제의 목표는 프로그램이 1 을 리턴하도록 하는 적절한 입력값을 찾는 것이다. BITS 64 SECTION .rodata some_array db 10,2,30,15,3,7,4,2,1,24,5,11,24,4,14,13,5,6,19,20,23,9,10,2,30,15,3,7,4,2,1,24 the_second_array db 0x57,0x40,0xa3,0x78,0x7d,0x67,0x55,0x40,0x1e,0xae,0x5b,0x11,0x5d,0x40,0xaa,0x17,0x58,0x4f,0x7e,0x4d,0x4e,0x42,0x5d,0x51,0x57,0x5f,0x5f,0x12,0x1d,0x5a,0x4f,0xbf len_second_array equ $ - the_seco..

CTF/리버싱 2022.08.27
반응형