Reverse Engineering (6) 썸네일형 리스트형 Dreamhack : rev-basic-5 문제 링크https://dreamhack.io/wargame/challenges/19 rev-basic-5Reversing Basic Challenge #5 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출dreamhack.io 풀이 위 그림 1에서 빨간 박스는 해당 문제의 주요 로직을 나타낸다. 디컴파일하여 위 그림 2와 같이 확인이 가능하다. 그림 1의 어셈블리 연산에서도 확인이 가능했지만, 사용자 입력 값 배열의 앞, 뒤 원소를 더한 값이 아래 그림 3의 chall05의 원소들과 같아야 한다. chall05_byte = [ 0xAD, 0xD8, 0xC.. Dreamhack : rev-basic-4 문제 링크https://dreamhack.io/wargame/challenges/18 rev-basic-4Reversing Basic Challenge #4 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출dreamhack.io 풀이 해당 문제에서 주요한 부분은 위 그림 1과 같다. 해당 로직을 디컴파일(F5)하여 확인하면 위와 같다. 사용자 입력 값을 대상으로 4비트 이동 ( >> 4 )을 하고, 16을 곱하기 ( 정답 배열의 메모리 주소가 가리키는 값은 위 그림 3과 같다. Python>list(get_bytes(0x00007FF659DF3000,28))[.. Dreamhack : rev-basic-3 문제 링크https://dreamhack.io/wargame/challenges/17 rev-basic-3Reversing Basic Challenge #3 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출dreamhack.io 풀이 이번 문제는 바로 정답을 찾기보다는 좀 더 메모리 구조와 흐름을 이해해보기 위해 자세히 포스팅 해보았다. 먼저, Bp를 아래 그림 1을 기준으로 scanf를 받은 후 나오는 call 함수에 걸었다. [rsp+32]가 가리키는 주소에는 사용자가 입력한 문자열이 위치해 있다. 이때, 위 그림 1과 같이 lea rcx, [rsp+32]를 통.. Dreamhack : rev-basic-2 문제 링크https://dreamhack.io/wargame/challenges/16 rev-basic-2Reversing Basic Challenge #2 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출dreamhack.io 풀이 문제의 파일을 IDA로 열었을 때, 위 그림 1과 같은 로직을 확인할 수 있다. 그리고 디컴파일(F5) 시, 아래 그림 2와 같다. 사용자 입력을 받고, sub_140001000 함수에서 처리가 이뤄진 후, Correct와 Wrong 둘 중 하나가 결정되는 것으로 보인다. 해당 함수( sub_140001000)를 위 그림 3에서 살.. Dreamhack : rev-basic-1 문제 링크https://dreamhack.io/wargame/challenges/15 rev-basic-1Reversing Basic Challenge #1 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출dreamhack.io 풀이 해당 제공 파일 실행 시, 이전 rev-basic-0 문제와 동일하게 오답을 입력할 경우 Wrong이 출력 되어진다. IDA를 사용해 해당 바이너리 파일을 열었을 때, 위와 같은 로직을 확인할 수 있었다. 사용자 입력 값을 받은 후, sub_140001000 함수 내에서 처리 후 이후 ZF 플래그 설정에 따라 Correct 혹은 Wron.. Dreamhack : rev-basic-0 문제 링크https://dreamhack.io/wargame/challenges/14 rev-basic-0Reversing Basic Challenge #0 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출dreamhack.io 풀이 해당 문제의 exe 파일을 실행 시키면, 사용자 입력 값을 받는 "Input :" 창이 생성되며, 랜덤한 값을 입력하면 곧바로 종료가 됨을 확인했다. (Powershell 실행 시, wrong이 출력되어짐) 해당 exe 파일을 ida로 열었을 때, 위와 같이 View 기능을 통해 어떻게 분기가 이뤄지는지 확인할 수 있다. 동적 분석을 해.. 이전 1 다음