gdb와 ida를 통해 문제 풀이 1

시스템 해킹|2024. 5. 15. 18:09

sudo apt-get install gdb

 

wget https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqbDRUMkRFcUtFSTgtcmdPZk5UcUZtRU1TUDBaZ3xBQ3Jtc0trcHZ0Q0ZyNnpBXy1xbTJkUW1Hd0lCZzZCMWJ0Z1VIbXNoUzV3OU5jME9nV3hoaVFIak95QS1NTEp4ekpIb2VGTEdsRkRZRXlBc2ljeTRrZDNOMTc3blE1b05lamgtdDU0N2MxUkVZc1djMVgwQzg2Yw&q=https%3A%2F%2Fgithub.com%2FLiveOverflow%2Fliveoverflow_youtube%2Fraw%2Fmaster%2F0x05_simple_crackme_intro_assembler%2Flicense_1&v=jyOoUxzrtTw

 

해당 파일을 다운로드한다. 불가 시 링크만 클릭해서 칼리로 붙여넣는다.

 

 

 

chmod 755 license_1

실행 권한 주기

 

 

./license_1 test1234

답이 아닐경우 틀렸다는 메세지가 나온다.

 

 

 

 

gdb ./license_1

gdb 실행

 

 

set disassembly-flavor intel

인텔방식으로 디스어셈블리 언어를 볼수 있는 설정

 

 

 

disas main

내용을 확인한다.

 

 

 

 

브레이크 포인트를 거는 방법

 

 

push rbp 는 메인 함수의 시작

+0번쨰에 브레이크포인트를 거는 방법

 

b *main

메인에 브레이프 포인트를 건다.

 

 

 

(gdb) b *main
Breakpoint 1 at 0x4005bd

브레이크 포닝트가 걸렷다.

 

info b

브레이크 포인트 확인 명령어

 

b *main+8

+8위치에 브레이크포인트를 건다.

 

 

 

b *main+8

+8위치에 브레이크포인트를 건다.

 

 

 

 

info b로 브레이크 포인트를 확인후

delete 2

2번의 브레이크 포인트 해제 방법

 

delete를 할경우 모든 브레이크포인트를 삭제

 

 

 

 

b *0x00000000004005bd

주소로 브레이크 포인트를 걸었다

 

 

 

run

실행 시 키가 필요하다는 것을 알았다 

 

 

 

인자기 필요해서

run test1234 전해주고싶은 인자가 필요하다

 

 

main에 브레이크 포인트를 걸고 실행

 

 

만약 다시 run을 입력 시 다시 시작하는 상황이 생긴다

이럴떄 사용하는것이 cont

 

cont

브레이크포인트를 걸고 실행이잘된다

 

 

 

 

한 스텝씩 실행하는 방법

 

run

b *main

 

없던 화살표가 생겻다.

ni

다음 명령어를 실행해라

한번씩 실행하는 방법

그래서 화살표가 다음 주소를 가리키게 됩니다.

 

 

 

 

info reg 

레지스터 확인

 

64비트로 동작해서 r인것을 확인가능

 

 

 

 

info reg $reg

특정 레지스터를 $를 붙여서확인합니다.

 

 

 

 

---

메모리를 확인하는 방법

x/t $rsp

레지스트리를 2진수로 확인가능

 

 

 

 

 

 x/o $rsp

8진수로 확인 가능.

 

메모리 주소로 확인할 경우

 

x/o 0x7fffffffddc0

메모리 주소로 확인

 

 

 

 

x/d $rsp

진수로 확인

 

x/u $rsp

언사인드 십진수로 확인

 

x/x $rsp

16진수로 확인하는방법

 

 

 

x/c $rsp

캐릭터로 확인하는 방법 아스키값이나 이런것들로 확인함

 

 

 

x/f $rsp

부동소수점 확인하는 방법

 

 

 

x/s $rsp

문자로 확인하는 방

 

 

x/bx 

1바이트 씩확인하는 방법

 

x/hx

2바이트

x/wx

4바이트씩확인하는방법

 

 

x/gx $rsp

8비트 씩 확인하는방법

 

 

 

 

 

x/10gx $rsp

10개씩 확인하고 싶다 이러면이렇게 사용

 

 

----------------------------------------------------------

 

 

실행중인 프로세스에 어태치하는방법

 

 

 

./license_1 test1234

바로 결과가 나와서 프로세스에 어태치하기가 애매하다

그러므로 gedit으로 테스트

 

 

 

bash

gedit

bg

ps

 

 

 

 

 

 

 

실행중인 gedit을 브레이크를 중단하면서 어태치를 들어갓다.

 

 

 

어태치 성공

 

실행중인 프로세스인걸 확인

 

중간에 디태치하고싶을 경우엔 

detach 명령 사용

 

 

 

 

 

 

 

 

--------------------------

 

ida와 중복 비교

 

ida 설치 후 license_1 파일을 오픈한다.

 

 

 

 

 

확인했을떄 strcmp 

스트링 컴페어 하는 구간을 들어간다.

 

 

 

수투랑 콤패허눈 규건운 400602 구간이며 

리눅스 gdb에서 확인을한다.

 

 

 

 400602 

이부분에 브레이크 포인트를 건다

b *0x400602

 

 

 

 

run 1234 실행 시 

브레이크포인트가 잘걸린 것을 알 수 있으며

 

 

 

rdi와 ris 에 인자의 정보들이 들어있는 것이기 때문에

 

x/s $rsi

x/s $rdi

두개의 인자를 비교하고 있다.

즉 이 문제에서는 

rsi와 rdi의 값이 같을때 문제가 풀린다는 것을 알 수 있었다

 

 

 

 

결국

 

run AAAA-Z10N-42-OK

이 명령을 실행하면 이 문제의 답을 찾을 수 있었다

 

 

'시스템 해킹' 카테고리의 다른 글

Protostar stack - 2 peda 사용  (1) 2024.05.16
Protostar - stack 1  (1) 2024.05.16
Protostar stack0 시작  (0) 2024.05.15
프로토스타 설치  (0) 2024.05.15
스택 공격 기법 이해하기  (0) 2024.05.15

댓글()