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
no image
reversing.kr Easy_Keygen
Easy_Keygen Serial이 5B134977135E7D13일 때의 Name을 찾는 것이 문제이다. F7과 F8을 누르다 보면 name을 입력 받는 부분을 찾을 수 있다. 그 곳에 BP를 건 후 name을 입력한다. 그러면 입력한 값이 들어가는 것을 확인할 수 있다. 그 아래에는 루프가 있다. 루프를 살펴보았다. 위의 두 MOV 명령을 통해서 ECX에는 10이, EDX에는 73이 들어간다. 그리고 ECX와 EDX를 xor한 결과가 ECX에 들어간다. 그렇게 루프를 한 번 돌면 위에서 계산한 63이라는 값이 저장된다. 그 다음에는 ECX에는 20이, EDX에는 75가 들어간다. 그리고 xor한 값 55가 63 뒤에 붙어서 6355가 저장된다. 루프는 총 5번을 돌게 되고, 635552794E라는 값이..
2020.06.25
no image
reversing.kr Easy_CrackMe
Easy_CrackMe 파일의 password를 찾아야한다. GetDlgItemTextA라는 입력 받는 API가 존재한다. 그 부분에 BP를 걸고 실행하여 password를 입력한다. 첫번째 CMP이다. [ESP+5]이 61인지 확인한다. 61은 ASCII 코드로 a를 의미한다. Little Endian으로 저장되므로 [ESP+5]는 password의 두번째 글자를 의미한다. 따라서 비밀번호의 두번째 자리는 a가 된다. 비밀번호 두번째 자리에 a를 넣어 다시 진행한다. 그 다음 분기문이다. [ESP+A]와 5y를 비교한다. [ESP+A]는 cd 부분에 해당되며, 비밀번호의 세번째, 네번째 자리를 의미한다. 비밀번호에 a5y를 넣어서 다시 진행한다. 그 다음은 [ESP+10]과 R3versing을 비교한다..
2020.06.25
no image
CodeEngn(코드엔진) advance 04
※ 작년에 작성한 라이트업입니다. ※ Advance RCE L04 Name이 CodeEngn 일때 Serial은 무엇인가 1. 파일을 올리 디버거로 열어서 f8을 누른다. 2. 4011B3~4011C0에서 계속 돌게 된다. 빠져나오기 위해서 loop의 바로 아래인 4011C2에 bp를 걸고 실행시킨다. 3. F8을 눌러보면 코드에 물음표가 뜨면서 실행할 때마다 경고창이 뜨게 된다. Ctrl+A를 눌러준다. 4. 코드가 변한 것을 확인할 수 있다. F8을 계속 눌러서 프로그램 창을 띄우고 name과 serial을 입력한다. 5. 그 상태로 스크롤을 아래로 내리면 문자열을 비교하는 함수와 시리얼 번호를 확인할 수 있다.
2020.06.25
no image
CodeEngn(코드엔진) advance 03
※ 작년에 작성한 라이트업입니다. ※ Advance RCE L03 Name이 CodeEngn일때 Serial은 무엇인가 1. 파일을 올리 디버거로 연다. F8을 누르다 보면 프로그램이 바로 종료되는 것을 확인할 수 있다. 2. 문자열들을 확인한다. Serial과 관련이 있어 보이는 부분을 더블 클릭한다. 3. Cmp를 하는 부분에 bp를 걸어서 f9로 실행한다. Name과 serial을 입력하고 check를 누른다. 4. 스크롤을 아래로 내려보면 1111과 3265754874를 비교하는 함수를 확인할 수 있다. 따라서 시리얼 번호는 3265754874임을 알 수 있다.
2020.06.25
no image
CodeEngn(코드엔진) advance 01
※ 작년에 작성한 라이트업입니다. ※ Advance RCE L01 이 프로그램은 몇 밀리세컨드 후에 종료 되는가 정답인증은 MD5 해쉬값(대문자) 변환 후 인증하시오 비슷한 문제 2020/06/25 - [리버싱] - CodeEngn(코드엔진) basic 19 CodeEngn(코드엔진) basic 19 Basic RCE L19 이 프로그램은 몇 밀리세컨드 후에 종료되는가 1. 우클릭>search for>all intermodular calls를 선택해서 모든 명령들을 확인한다. 2. F9를 눌러보면 제대로 실행이 되지 않는데 함수.. assb.tistory.com 1. upx로 패킹이 되어있으므로 언패킹을 진행한다. 2. 이 다음부터는 basic 19번 문제와 비슷하게 풀면 된다. 우선 IsDebugger..
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

Easy_Keygen

 

 

 Serial5B134977135E7D13일 때의 Name을 찾는 것이 문제이다.

 

 

 F7 F8을 누르다 보면 name을 입력 받는 부분을 찾을 수 있다. 그 곳에 BP를 건 후 name을 입력한다.

 

 

 그러면 입력한 값이 들어가는 것을 확인할 수 있다.

 

 

 그 아래에는 루프가 있다. 루프를 살펴보았다.

 

 

 

위의 두 MOV 명령을 통해서 ECX에는 10, EDX에는 73이 들어간다. 그리고 ECX EDXxor한 결과가 ECX에 들어간다.

 

 

 그렇게 루프를 한 번 돌면 위에서 계산한 63이라는 값이 저장된다.

 

  

그 다음에는 ECX에는 20, EDX에는 75가 들어간다. 그리고 xor한 값 5563 뒤에 붙어서 6355가 저장된다.

 

  

 루프는 총 5번을 돌게 되고, 635552794E라는 값이 저장된다.

 

 

 그리고 이 것이 serial이 된다.

 

 

 serial이 만들어지는 방법은 다음과 같다.

 

 

 subinHex 값인 73, 75, 62, 69, 6E를 각각 10, 20, 30, 10, 20 xor한다. 그리고 그 값을 연결한 것이 최종 serial이 된다.

 

 

 5B134977135E7D13 name도 각각 10, 20, 30xor한 후, Hex 코드를 ASCII로 변환하면 알 수 있다. xor을 진행하면 4B337967336E6D33이라는 결과가 나온다. 이것을 바꾸면 K3yg3nm3 된다.

 

728x90

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

picoCTF 2018 learn gdb  (0) 2020.06.25
CTFLearn PIN  (0) 2020.06.25
reversing.kr Easy_CrackMe  (0) 2020.06.25
CodeEngn(코드엔진) advance 04  (0) 2020.06.25
CodeEngn(코드엔진) advance 03  (0) 2020.06.25

Easy_CrackMe

 

 

 

 파일의 password를 찾아야한다.

 

 

 GetDlgItemTextA라는 입력 받는 API가 존재한다.

 

 

 그 부분에 BP를 걸고 실행하여 password를 입력한다.

 

 

 첫번째 CMP이다. [ESP+5]61인지 확인한다. 61ASCII 코드로 a를 의미한다. Little Endian으로 저장되므로 [ESP+5]password의 두번째 글자를 의미한다. 따라서 비밀번호의 두번째 자리는 a가 된다.

 

 

 비밀번호 두번째 자리에 a를 넣어 다시 진행한다.

 

 

 그 다음 분기문이다. [ESP+A]5y를 비교한다. [ESP+A]cd 부분에 해당되며, 비밀번호의 세번째, 네번째 자리를 의미한다.

 

 

 비밀번호에 a5y를 넣어서 다시 진행한다.

 

 

  그 다음은 [ESP+10] R3versing을 비교한다. 따라서 비밀번호는 _a5yR3versing이 된다.

 

 

 비밀번호에 1a5yR3versing을 넣어서 다시 진행한다.

 

 

 마지막 분기이다. [ESP+4]45를 비교한다. [ESP+4]는 비밀번호 첫번째 자리를 의미하고 45E를 의미한다. 따라서 최종적으로 password Ea5yR3versing이 된다.

 

 

728x90

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

CTFLearn PIN  (0) 2020.06.25
reversing.kr Easy_Keygen  (0) 2020.06.25
CodeEngn(코드엔진) advance 04  (0) 2020.06.25
CodeEngn(코드엔진) advance 03  (0) 2020.06.25
CodeEngn(코드엔진) advance 01  (0) 2020.06.25

※ 작년에 작성한 라이트업입니다. ※ 

 

 

 

Advance RCE L04

Name CodeEngn 일때 Serial은 무엇인가 

 

 

 

1.     파일을 올리 디버거로 열어서 f8을 누른다.

 

 

2.     4011B3~4011C0에서 계속 돌게 된다. 빠져나오기 위해서 loop의 바로 아래인 4011C2bp를 걸고 실행시킨다.

 

 

3.     F8을 눌러보면 코드에 물음표가 뜨면서 실행할 때마다 경고창이 뜨게 된다. Ctrl+A를 눌러준다.

 

 

4.     코드가 변한 것을 확인할 수 있다. F8을 계속 눌러서 프로그램 창을 띄우고 nameserial을 입력한다.

 

 

5.     그 상태로 스크롤을 아래로 내리면 문자열을 비교하는 함수와 시리얼 번호를 확인할 수 있다.

 

728x90

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

reversing.kr Easy_Keygen  (0) 2020.06.25
reversing.kr Easy_CrackMe  (0) 2020.06.25
CodeEngn(코드엔진) advance 03  (0) 2020.06.25
CodeEngn(코드엔진) advance 01  (0) 2020.06.25
CodeEngn(코드엔진) basic 20  (0) 2020.06.25

※ 작년에 작성한 라이트업입니다. ※ 

 

 

 

Advance RCE L03

Name CodeEngn일때 Serial은 무엇인가 

 

 

 

1.     파일을 올리 디버거로 연다. F8을 누르다 보면 프로그램이 바로 종료되는 것을 확인할 수 있다.

 

 

2.     문자열들을 확인한다. Serial과 관련이 있어 보이는 부분을 더블 클릭한다.

 

 

3.     Cmp를 하는 부분에 bp를 걸어서 f9로 실행한다. Nameserial을 입력하고 check를 누른다.

 

 

4.     스크롤을 아래로 내려보면 11113265754874를 비교하는 함수를 확인할 수 있다. 따라서 시리얼 번호는 3265754874임을 알 수 있다.

728x90

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

reversing.kr Easy_CrackMe  (0) 2020.06.25
CodeEngn(코드엔진) advance 04  (0) 2020.06.25
CodeEngn(코드엔진) advance 01  (0) 2020.06.25
CodeEngn(코드엔진) basic 20  (0) 2020.06.25
CodeEngn(코드엔진) basic 19  (0) 2020.06.25

※ 작년에 작성한 라이트업입니다. ※ 

 

 

 

Advance RCE L01

이 프로그램은 몇 밀리세컨드 후에 종료 되는가 
정답인증은 MD5 해쉬값(대문자) 변환 후 인증하시오 

 

 

비슷한 문제

2020/06/25 - [리버싱] - CodeEngn(코드엔진) basic 19

 

CodeEngn(코드엔진) basic 19

Basic RCE L19 이 프로그램은 몇 밀리세컨드 후에 종료되는가 1.    우클릭>search for>all intermodular calls를 선택해서 모든 명령들을 확인한다. 2.    F9를 눌러보면 제대로 실행이 되지 않는데 함수..

assb.tistory.com

 

1.     upx로 패킹이 되어있으므로 언패킹을 진행한다.

 

 

2.     이 다음부터는 basic 19번 문제와 비슷하게 풀면 된다. 우선 IsDebuggerPresent 함수로 이동한다.

 

 

3.     TEST EAX, EAX CMP EAX, EAX로 고쳐서 IsDebuggerPresent 함수가 제대로 동작하지 못하도록 한다.

 

 

4.     timeGetTime 함수에 모두 BP를 걸어준다.

 

 

5.     CALL EDI를 더블 클릭한다.

 

 

6.     우클릭>Follow in Dump>Memory address를 클릭한다. 7B 33, 337B(10진수로 13179)가 이 프로그램의 실행 시간이 된다.

 

 

7.     13179MD5로 암호화한다. DB59260CCE0B871C7B2BB780EEE305DB가 정답이 된다.

728x90

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

CodeEngn(코드엔진) advance 04  (0) 2020.06.25
CodeEngn(코드엔진) advance 03  (0) 2020.06.25
CodeEngn(코드엔진) basic 20  (0) 2020.06.25
CodeEngn(코드엔진) basic 19  (0) 2020.06.25
CodeEngn(코드엔진) basic 18  (0) 2020.06.25