본문 바로가기

Layer7

리버싱 4차시 과제(C언어 파일 리버싱, prob1)

prob1

 

objdump -M intel -d prob1 명령어로

파일 prob1을어셈블리어로 디스 어셈블 해주었고 분석을 해보았다. 

 

 

readelf -x .rodata prob1 명령어를 통해서 0x4007 d 근처로 가서 출력되는 문장을 확인할 수 있었다( input any number)

 

 

 

이제 gdb -q prob1  -> b main -> r  순서로 명령어를 입력해서 동적분석을 해보았다.

 

 

한줄한줄 실행해 봤더니

input any number가 출력되고

 

 

숫자를 입력받게 해서 아무숫자 11111111111111111... 를 입력했더니

 

 

입력한 숫자가 0xdeadbeef랑 다르기 때문에

0 xdeadbeef - [rbp-0xc]의 계산 결과가 0이 아니게 되어서 

ZF가 0이 되므로 점프되어서 <flag_generator>를 실행 할 수 없었고 플래그를 얻지 못했다.

 

 

 

그래서 16진수 0xdeadbeef를 10진수로 바꾼 3735928559를 입력했더니

0xdeadbeef - [rbp-0xc]가 0이 되므로

ZF가 1이 되어서 점프가 되지 않았고 <flag_generator>를 실행할 수 있었다.

 

 

correct! 가 출력되었고

 

 

플래그를 구할 수 있었다.

 

 

 

플래그 : Layer7{y0u_are_g00d_at_a55emb1y}