no image
pwnable.kr flag
Pwnable.kr flag 파일을 HxD로 열어보면 UPX로 패킹이 되어있는 것을 확인할 수 있다. 패킹을 풀어준다. IDA로 열어보면 패킹이 정상적으로 풀린 것을 확인할 수 있다. 이제 Flag의 값을 확인해본다. Flag 더블클릭하면 값을 확인할 수 있다. UPX...? sounds like a delivery service :)
2020.06.26
no image
reversing.kr Easy_UnpackMe
Reversing.kr Easy_UnpackMe 파일을 PEiD로 확인하면 EP Section을 확인할 수 없다. 또한 어떤 방식으로 패킹이 되어있는지 모르겠다. 파일을 올리디버거로 연다. 마지막의 0000이라는 의미 없는 부분 위의 JMP 명령에 BP를 걸고 실행한다. 00401150 그러면 00401150으로 이동하게 된다. 이 위치가 OEP이다. Ctrl+A를 사용하면 코드를 분석해준다. 이 위치에서 dump를 뜬 후 PEiD로 다시 확인해보면 패킹이 풀린 것을 확인할 수 있다.
2020.06.26
no image
picoCTF rev_this
picoCTF rev_this 코드를 살펴보면 flag.txt를 열어서 +, - 연산을 진행 후 그 값을 rev_this 파일에 저장한다. 따라서 rev_this의 값과 코드를 통해서 flag.txt의 값을 찾아야 한다. flag.txt의 값을 찾기 위해 +연산은 -로, -연산은 +로 고친 후 실행시키면 flag가 출력된다. picoCTF{r3v3rs369806a41}
2020.06.26
no image
HackCTF Reversing me
HackCTF Reversing me 문제에서 소스코드를 다운받아서 확인하면 serial 변수와 이를 xor하여 진짜 serial 값을 만들어내는 코드를 확인할 수 있다. 이 코드를 수정하여 serial 값을 출력하였다. 위의 코드를 추가하여 enter에 실제 serial 값을 대입한 후 출력시켰다. HackCTF{hey_success_D0_y0u_kn0w_r3verse_3n9ineer1n9?}
2020.06.25
no image
IOLI crackme 0x03~0x05
crackme0x03~0x05 0x03 디컴파일러로 확인해보면 입력한 값과 0x52b24를 비교한다. 338724 0x04 입력 값을 check 함수로 보낸다. check 함수에서는 입력 받은 password를 한 글자로 자른다. 그리고 그 글자가 int 정수일 경우 ans에 더한다. 그 값이 0xf가 되면 문제가 풀린다. 0xf는 15이므로 그 값이 15가 되도록 78, 726 등을 입력하면 문제가 풀린다. 그 사이에 문자가 들어가도 괜찮다. 0x05 여기도 동일하게 check 함수가 존재한다. 이번에는 그 값이 0x10이 되면 문제가 풀린다. 또한 마지막 자리가 0이어야 한다. 0x10은 16이므로 880 등의 값을 넣으면 해결된다.
2020.06.25
GDB 사용법
GDB 사용법 gdb 설치 sudo apt -get install gdb 안되면 sudo apt-get update gcc -g -o add add.c gdb 실행 gdb [program] 인텔형 어셈블리어로 보기 (gdb) set disassembly-flavor intel 기본은 AT&T 디스어셈블 (gdb) disassemble [address/symbol] 레지스터 보기 (gdb) info reg: 레지스터 전체 출력 (gdb) info reg [reg]: 특정 레지스터 출력 (gdb) x/x: 16진수로 주소 확인 (gdb) x/x $[reg]: 16진수로 레지스터 값 확인 (gdb) x/t: 2진수로 확인 (gdb) x/o: 8진수로 확인 (gdb) x/d: 10진수로 확인 (gdb) x/u:..
2020.06.25
no image
picoCTF 2018 learn gdb
picoCTF 2018 learn gdb 프로그램을 실행시키면 일정 시간동안 .이 출력되다가 종료된다. 프로그램이 종료되기 전에 전역 변수 flag_buf의 값을 출력시켜야 한다. disas로 main 함수를 살펴보았다. decrypt_flag라는 함수가 있다. decrypt_flag 함수이다. flag_buf의 값을 만들고 있다. 함수가 종료되기 전에 break point를 걸었다. 프로그램을 실행시키니 프로그램이 종료되기 전에 멈췄다. flag_buf의 타입을 지정해준 후 프린트하면 플래그가 출력된다. picoCTF{gDb_iS_sUp3r_u53fuL_a6c61d82}
2020.06.25
no image
CTFLearn PIN
PIN 파일을 실행시킨 후 임의의 값을 넣으면 PIN salah!라 뜬다. gdb로 파일을 연 후 main을 살펴보니 cek이라는 함수를 확인할 수 있다. cek 함수를 확인해보았다. 에 cmp 명령이 있어서 break를 건 후 실행했다. [rbp-0x4]와 eax를 비교하고 있다. 레지스터 정보를 확인하니 eax에 333333이라는 값이 들어가 있었다. 프로그램을 다시 실행해 333333을 입력하니 정상적으로 풀렸다.
2020.06.25

pwnable.kr flag

assb
|2020. 6. 26. 16:51

Pwnable.kr flag

 

 

파일을 HxD로 열어보면 UPX로 패킹이 되어있는 것을 확인할 수 있다.

 

 

패킹을 풀어준다.

 

 

IDA로 열어보면 패킹이 정상적으로 풀린 것을 확인할 수 있다. 이제 Flag의 값을 확인해본다.

 

 

Flag 더블클릭하면 값을 확인할 수 있다.

 

 

UPX...? sounds like a delivery service :)

 

728x90

'CTF > 리버싱' 카테고리의 다른 글

reversing.kr Easy_UnpackMe  (0) 2020.06.26
picoCTF rev_this  (0) 2020.06.26
HackCTF Reversing me  (0) 2020.06.25
IOLI crackme 0x03~0x05  (0) 2020.06.25
GDB 사용법  (0) 2020.06.25

Reversing.kr Easy_UnpackMe

 

 

 

파일을 PEiD로 확인하면 EP Section을 확인할 수 없다. 또한 어떤 방식으로 패킹이 되어있는지 모르겠다.

 

 

파일을 올리디버거로 연다.

 

 

마지막의 0000이라는 의미 없는 부분 위의 JMP 명령에 BP를 걸고 실행한다.

 

 

00401150

그러면 00401150으로 이동하게 된다. 이 위치가 OEP이다. Ctrl+A를 사용하면 코드를 분석해준다.

 

 

이 위치에서 dump를 뜬 후 PEiD로 다시 확인해보면 패킹이 풀린 것을 확인할 수 있다.

 

 

728x90

'CTF > 리버싱' 카테고리의 다른 글

pwnable.kr flag  (0) 2020.06.26
picoCTF rev_this  (0) 2020.06.26
HackCTF Reversing me  (0) 2020.06.25
IOLI crackme 0x03~0x05  (0) 2020.06.25
GDB 사용법  (0) 2020.06.25

picoCTF rev_this

assb
|2020. 6. 26. 16:43

picoCTF rev_this

 

 

코드를 살펴보면 flag.txt를 열어서 +, - 연산을 진행 후 그 값을 rev_this 파일에 저장한다. 따라서 rev_this 값과 코드를 통해서 flag.txt의 값을 찾아야 한다. 

 

 

flag.txt의 값을 찾기 위해 +연산은 -로, -연산은 +로 고친 후 실행시키면 flag가 출력된다. 

 

 

 

picoCTF{r3v3rs369806a41}

728x90

'CTF > 리버싱' 카테고리의 다른 글

pwnable.kr flag  (0) 2020.06.26
reversing.kr Easy_UnpackMe  (0) 2020.06.26
HackCTF Reversing me  (0) 2020.06.25
IOLI crackme 0x03~0x05  (0) 2020.06.25
GDB 사용법  (0) 2020.06.25

HackCTF Reversing me

 

 

문제에서 소스코드를 다운받아서 확인하면 serial 변수와 이를 xor하여 진짜 serial 값을 만들어내는 코드를 확인할 수 있다. 이 코드를 수정하여 serial 값을 출력하였다.

 

 

위의 코드를 추가하여 enter에 실제 serial 값을 대입한 후 출력시켰다.

 

 

HackCTF{hey_success_D0_y0u_kn0w_r3verse_3n9ineer1n9?}

728x90

'CTF > 리버싱' 카테고리의 다른 글

reversing.kr Easy_UnpackMe  (0) 2020.06.26
picoCTF rev_this  (0) 2020.06.26
IOLI crackme 0x03~0x05  (0) 2020.06.25
GDB 사용법  (0) 2020.06.25
picoCTF 2018 learn gdb  (0) 2020.06.25

crackme0x03~0x05

 

 

0x03

 디컴파일러로 확인해보면 입력한 값과 0x52b24를 비교한다. 

 

 

 338724

 

 

 

0x04

 입력 값을 check 함수로 보낸다.

 

 

 check 함수에서는 입력 받은 password를 한 글자로 자른다. 그리고 그 글자가 int 정수일 경우 ans에 더한다. 그 값이 0xf가 되면 문제가 풀린다. 0xf 15이므로 그 값이 15 되도록 78, 726 등을 입력하면 문제가 풀린다. 그 사이에 문자가 들어가도 괜찮다. 

 

 

 

0x05

 여기도 동일하게 check 함수가 존재한다. 

 

 

 이번에는 그 값이 0x10이 되면 문제가 풀린다. 또한 마지막 자리가 0이어야 한다. 0x10은 16이므로 880 등의 값을 넣으면 해결된다.

728x90

'CTF > 리버싱' 카테고리의 다른 글

picoCTF rev_this  (0) 2020.06.26
HackCTF Reversing me  (0) 2020.06.25
GDB 사용법  (0) 2020.06.25
picoCTF 2018 learn gdb  (0) 2020.06.25
CTFLearn PIN  (0) 2020.06.25

GDB 사용법

assb
|2020. 6. 25. 15:17

GDB 사용법

 

 

gdb 설치

sudo apt -get install gdb

안되면 sudo apt-get update

gcc -g -o add add.c

 

 

gdb 실행

gdb [program]

 

 

인텔형 어셈블리어로 보기

(gdb) set disassembly-flavor intel

기본은 AT&T

 

 

디스어셈블

(gdb) disassemble [address/symbol]

 

 

레지스터 보기

(gdb) info reg: 레지스터 전체 출력

(gdb) info reg [reg]: 특정 레지스터 출력

(gdb) x/x: 16진수로 주소 확인

(gdb) x/x $[reg]: 16진수로 레지스터 값 확인

 

(gdb) x/t: 2진수로 확인

(gdb) x/o: 8진수로 확인

(gdb) x/d: 10진수로 확인

(gdb) x/u: 부호 없는 10진수로 확인

(gdb) x/x: 16진수로 확인

(gdb) x/c: char로 확인

(gdb) x/f: 부동소수점으로 확인

(gdb) x/s: 스트링으로 확인

 

 

bp 설정

(gdb) b *[address/symbol]

(gdb) b *main: 메인 함수 bp

(gdb) b *0x804854d: 특정 주소 bp

 

 

bp 제거

(gdb) delete

(gdb) delete [num]

 

 

bp 확인

(gdb) info breakpoints

 

 

프로그램 실행

(gdb) r [arguments]: 처음부터 실행

(gdb) continue: bp부터 계속 실행

(gdb) step [n]: n번 실행, 기본값은 1

(gdb) ni: 한 스텝 실행, 함수로 들어가지 않음

(gdb) si: 함수를 추적해서 들어감

(gdb) fin: 함수를 끝냄

 

 

* gdb는 자동 완성 기능을 제공

disassemble -> disas

breakpoints -> b

이런 식으로 입력해도 문제 x

 

https://ctf101.org/reverse-engineering/what-is-gdb/

 

What is GDB - CTF 101

From here you can search these documents. Enter your search terms below.

ctf101.org

 

728x90

'CTF > 리버싱' 카테고리의 다른 글

HackCTF Reversing me  (0) 2020.06.25
IOLI crackme 0x03~0x05  (0) 2020.06.25
picoCTF 2018 learn gdb  (0) 2020.06.25
CTFLearn PIN  (0) 2020.06.25
reversing.kr Easy_Keygen  (0) 2020.06.25

picoCTF 2018 learn gdb

 

 

 프로그램을 실행시키면 일정 시간동안 .이 출력되다가 종료된다. 프로그램이 종료되기 전에 전역 변수 flag_buf의 값을 출력시켜야 한다.

 

 

 disasmain 함수를 살펴보았다. decrypt_flag라는 함수가 있다.

 

 

 decrypt_flag 함수이다. flag_buf의 값을 만들고 있다.

 

 

 함수가 종료되기 전에 break point를 걸었다.

 

 

 프로그램을 실행시키니 프로그램이 종료되기 전에 멈췄다.

 

 

 flag_buf의 타입을 지정해준 후 프린트하면 플래그가 출력된다.

 

 

picoCTF{gDb_iS_sUp3r_u53fuL_a6c61d82}

728x90

'CTF > 리버싱' 카테고리의 다른 글

IOLI crackme 0x03~0x05  (0) 2020.06.25
GDB 사용법  (0) 2020.06.25
CTFLearn PIN  (0) 2020.06.25
reversing.kr Easy_Keygen  (0) 2020.06.25
reversing.kr Easy_CrackMe  (0) 2020.06.25

CTFLearn PIN

assb
|2020. 6. 25. 15:15

PIN

 

 

 파일을 실행시킨 후 임의의 값을 넣으면 PIN salah!라 뜬다.

 

 

 gdb로 파일을 연 후 main을 살펴보니 cek이라는 함수를 확인할 수 있다.

 

 

 cek 함수를 확인해보았다. <+13>cmp 명령이 있어서 break를 건 후 실행했다.

 

 

 [rbp-0x4] eax를 비교하고 있다.

 

 

 레지스터 정보를 확인하니 eax333333이라는 값이 들어가 있었다.

 

 

 프로그램을 다시 실행해 333333을 입력하니 정상적으로 풀렸다.

728x90

'CTF > 리버싱' 카테고리의 다른 글

GDB 사용법  (0) 2020.06.25
picoCTF 2018 learn gdb  (0) 2020.06.25
reversing.kr Easy_Keygen  (0) 2020.06.25
reversing.kr Easy_CrackMe  (0) 2020.06.25
CodeEngn(코드엔진) advance 04  (0) 2020.06.25