또 뭐하지

[기초] 리버싱 기초 문제 (Linux) 본문

I.sly()/9기 기초 - 공통

[기초] 리버싱 기초 문제 (Linux)

mameul 2024. 5. 9. 18:58
728x90

int_reversing

  • pwndbg

    pwndbg를 실행하고 info func명령을 통해서 함수 목록을 확인했다.

    disassemble main 명령을 통해서 main 함수의 어셈블리 코드를 확인했다.

코드를 살펴보면

  1. <+78>cmp DWORD PTR [rbp-0xc],eax : eax 값과 rbp-0xc 값을 비교합니다.
  2. <+65>mov eax, 0x0, <+70>call 0x10b0 <__isoc99_scanf@plt> : 해당 부분에서 scanf 함수를 호출하고 eax가 인자로 사용된 것을 보아 우리가 찾는 값이 rbp-0xc 에 저장되어 있는 것을 알 수 있다.
  3. <+27> mov QWORD PTR [rbp-0xc], 0x146 : 이 부분에서 우리가 찾는 값이 0x146인 것을 확인할 수 있다. 0x146은 10진수로 326이다.

 

  • IDA

    IDA에서 int_reversing 파일을 실행시키고 F5 단축키를 통해 decomplie을 해준다.

    그러면 위와 같이 원본 코드를 알 수 있다. 찾는 정수가 326인 것을 알 수 있다.

    파일을 실행해서 확인해보면 맞는 것을 확인할 수 있다.

 

string_reversing

  • pwndbg


pwndbg를 실행하고 info func 명령을 통해서 함수 목록을 확인했다.


disassemble main 명령을 통해서 main 함수의 어셈블리 코드를 확인했다.

코드를 살펴보면

  1. <+117>call 0x10c0 <strcmp@plt> : 이 부분에서 rsi와 rdi 값을 비교하는 것을 알 수 있다. 그 값은 각각 rbp-0x40과 rbp-0x20에서 불러져 온 것을 확인했다.
  2. scanf 가 호출되어 있는 부분에서 사용된 인자를 확인해보면 rbp-0x20이다. 해당 값은 사용자 입력값인 것을 알 수 있고, 이제 찾는 값은 rbp-0x40에 저장된 것을 알 수 있다.
  3. <+47> 줄을 보면 rax 값이 rbp-0x40에 전달된 것을 알수 있고, 그 위에 rax와 rbx 찾는 값이 저장된 것을 볼 수 있다.


찾은 값을 hex을 char으로 변환해보았다. 순서가 이상한것을 확인하고 little endian으로 정렬됐다는 것을 알 수 있었다.


이것을 다시 정렬해보면 우리가 찾는 문자열이 "Hacked_By_ISly” 인 것을 알 수 있다.


파일을 실행하여 해당 문자열을 입력하면 맞는 것을 확인할 수 있다.

 

  • IDA

    IDA에서 string_reversing 파일을 실행시키고 F5 단축키를 통해 decomplie을 해준다.

    그러면 위와 같이 원본 코드를 알 수 있다. 찾는 문자열이 "Hacked_By_ISly”인 것을 알 수 있다.