리버싱(3)
-
x64 Calling convention & Registers
x64 레지스터 register Lower 32bits Lower 16bits Lower 8bits status usage RAX EAX AX AL 휘발성 함수 리턴 값 저장 RCX ECX CX CL 휘발성 첫 번째 정수 인수, 반복문 카운터, 각종 연산의 시행 횟수 RDX EDX DX DL 휘발성 두 번째 정수 인수 R8 R8D R8W R8B 휘발성 세 번째 정수 인수 R9 R9D R9W R9B 휘발성 네 번째 정수 인수 RDI EDI DI DIL 비휘발성 데이터 목적지 포인터 RSI ESI SI SIL 비휘발성 데이터 원본 포인터 RBX EBX BX BL 비휘발성 별 역할 없음 RBP EBP BP BPL 비휘발성 프레임 포인터 RSP ESP SP SPL 비휘발성 스택 포인터 R10:R11 R10D:R..
2023.02.15 -
[DreamHack] rev-basic-3
main함수 딱 봐도 scanf인 함수가 입력값을 받아 sub_7FF6EF7D1000에서 입력값을 비교하고 있다. user_input은 원래 v4였는데 편의상 변수명을 바꿔놨다. sub_7FF6EF7D1000 24번 루프를 돌며 i와 input값을 xor한 값에 2i를 더한 값이 어떤 배열에 있는 한 바이트와 같은지 비교하고 있다. 알아보기 쉽게 수식으로 정리하자면 다음과 같다. i ^ input[i] + 2i 해당 배열을 더블클릭하면 박혀있는 데이터를 볼 수 있다. 저 값에서 역으로 2i을 빼주고 다시 xor하면 어떤 입력값을 줘야 하는지 계산할 수 있다. 코드는 다음과 같다. str = [0x49, 0x60, 0x67, 0x74, 0x63, 0x67, 0x42, 0x66, 0x80, 0x78, 0x6..
2023.02.15 -
WinDbg Preview TTD 사용법
TTD란? Time Travel Debugging의 약자로, 직역하면 시간여행 디버깅이다. 이렇게 보니까 뭔가 낭만있는 디버깅 같은데 ㅋㅋ 실제로 사용해보면 매우 편리하다. 시간여행 하면 과거나 미래의 시간으로 이동하는 것인데, 말 그대로 프로세스 실행 과정을 모두 기록해놓았다가 특정 시점으로 이동할 수 있는 기능이다. 장점 디버깅을 하다보면 이미 지나왔던 시점으로 돌아가고 싶을 때가 있다. TTD를 이용하지 않고서는 디버깅을 종료하고 처음부터 다시 실행해야 한다. 하지만 TTD를 이용하면 명령어 하나만으로 지나온 브레이크 포인트로 다시 되돌아 갈 수 있다. 😲 TTD 활용 예시 TTD가 어떤 기능인지 살펴보기 위해 간단히 메모장을 이용해 보겠다. 우선 빈 메모장을 하나 열고, 적당히 아무데나 저장해 놓..
2023.02.09