본문 바로가기

Reversing21

Reversing Me 이번 문제는 파일을 IDA나 gdb같은 분석 도구로 열어보지 않아도 된다. 1. 풀이 시리얼 값이 주어지는데 for문 부분을 보면 입력한 값을 xor 연산을해서 시리얼 값과 같은지 확인한다. 그렇다면 시리얼 값을 그대로 xor연산을 하면 될것이다. 2021. 3. 18.
Welcome REV 1. 풀이 32bit ELF구조인 파일이 주어지는데 실행을 시켜보니 Please provide a password! 문자열이 출력되고 argv값으로 1111을 입력하니 Incorrect Password! 문자열이 출력된다. 프로그램 어딘가에서 패스워드를 체크하는 부분이 있는거 같다. IDA로 통해 파일을 분석해보면 예상대로 check_password 함수가 보이고 문자열 검색을통해 문자열을 찾아보니 위에서 확인해본 문자열이 보인다. 그리고 "SGFja0NURnt3M2xjMG0zXzcwX3IzdjNyNTFuNl93MHJsZEBfQCFfIX0=" 문자열이 보이는데 끝에 "=" 문자가 보이는걸 보니 base64 인코딩이 되어 있는거 같다. 인코딩 되어있는 문자열을 디코딩 해보니 플래그 값이 나온다. 2021. 3. 18.
easy-crackme1 Dreamhack의 강의 문제 중 하나인 easy-crackme1을 풀어 보도록 하자. 프로그램을 실행시켜보면 input:이라는 문자열이 출력되고 숫자 2개를 입력해보니 wrong!이라는 문자열을 출력하는 것을 볼 수 있다. 이는 input:의 출력과 숫자 2개를 입력받고 무언가 받은 숫자를 처리하는 코드를 실행한 다음 결과에 따라 correct나 wrong을 출력한다는 것을 추측해볼 수 있다. 두 번째로는 main함수에서 printf, puts 등의 출력 함수 및 scanf같이 입력을 받는 함수가 포함되었을 것을 추측할 수 있다. x64 dbg로 프로그램을 열어본 후 모듈 간 호출 찾기 기능을 사용해 앞서 추측한 함수들이 있는지 찾아보면 상단에 puts함수가 보인다. puts함수를 따라가 보면 inpu.. 2021. 2. 20.
x64 명령 주기(Instruction Cycle) CPU는 아주 복잡해보이지만, 기본적으로는 다음 실행할 명령어를 읽어오고(Fetch) -> 읽어온 명령어를 해석한 다음(Decode) -> 해석한 결과를 실행하는(Excute) 과정을 반복하는 장치이다. 기계 코드가 실행되는 한 번의 과정을 Instruction Cycle이라고 한다. 이러한 과정이 매우 고도화 되어있지만, CPU를 구성하는 요소들은 이 역할을 효율적으로 수행하기 위해 필요한 것들이라고 볼 수 있다. 레지스터(Register) CPU는 Instruction Cycle을 수행하기 위해 기계 코드에 해당하는 각종 명령어를 해석하기 위한 구성 요소 외에도 읽어온 명령어가 저장된 공간을 임시로 기억해 둘 구성 요소나, 명령어를 실행한 결과를 저장해 둘.. 2021. 1. 29.