x32dbg
-
[reversing.kr] Position 풀이Wargame/reversing.kr 2021. 5. 22. 20:14
1. 프로그램 분석 첨부파일로 Position.exe와 ReadMe.txt 파일이 있다. 우선 Position.exe를 실행시켜보자. 특정 Name과 Serial을 입력해야 하는 듯하다. ReadMe.txt 파일을 열어보자. 파일에 대한 설명이 나와있다. Serial이 76876-77776일때의 이름을 찾으면 된다. 이름은 네 글자이고 'p'로 끝난다고 한다. 2. Debugging(with x32dbg & Ghidra) x32dbg로 파일을 열어보자. 사용되는 모듈을 먼저 보면 mfc로 작성된 프로그램임을 추측해볼 수 있다. 디버깅이 쉽지는 않을 것 같다. 어떻게 접근해볼지 고민하다가 Wrong이라는 문자열이 있는 것을 보아 적절한 input에 대해 Correct와 같은 문자열이 출력될 것이라 생각했다..
-
[리버싱 핵심원리 study] 37장 x64 프로세서 이야기Reverse Engineering 2021. 2. 1. 19:11
1. x64에서 추가/변경된 사항 (1) 64비트 메모리 주소가 64bit(8byte)로 표현된다. 마찬가지로 레지스터와 스택의 기본 단위도 64bit로 증가하였다. (2) 메모리 가상 메모리의 크기가 2^64 = 16TB로 증가하였으며, User 영역 및 kernel 영역이 각각 8TB의 크기를 갖는다. (이론상 그러하며 실제로 사용되는 영역은 이보다 적다.) (3) 범용 레지스터 레지스터들이 64bit로 확장되었으며, R8 ~ R15 레지스터가 추가되었고, R로 시작한다. (ex. EAX->RAX로 변경, RAX의 하위 32bit가 EAX) (4) CALL/JMP Instruction 똑같은 기능을 하는 다음 두 명령어를 살펴보자. - x86 => Addresss : 00401000 FF1500504..
-
[리버싱 핵심원리 study] 28장 어셈블리 언어를 이용한 Code 인젝션Reverse Engineering 2021. 1. 15. 23:03
이번 실습에서는 28장의 Code injection과 동일하지만 ThreadProc() 함수를 어셈블리 언어로 작성하여 code 인젝션을 구현한다. 1. OllyDbg로 코드 작성 OllyDbg로 예제 파일인 asmtest.exe를 열고 401000 주소에 다음과 같이 New origin here 항목을 이용하여 EIP를 401000으로 변경해보자. 이제 여기다 ThreadProc() 함수를 작성해볼 것이다. (asmtest.exe는 단순히 OllyDbg를 이용하여 어셈블리 코드를 작성하기 위한 아무 의미 없는 프로그램으로 보면 된다.) 아래와 같이 작성해보자. 이제 문자열을 입력하기 위해 dump 창의 00401033(함수가 끝난 다음 주소)에 아래와 같이 "ReverseCore:를 입력해주자. (이때..
-
[리버싱 핵심원리 study] 11장 Lena's Reversing for NewbiesReverse Engineering 2020. 12. 23. 22:09
Lena라는 사람이 www.tuts4you.com/게시판에 40여 개의 crackme라는 강좌를 올려놓았다고 한다. 나중에 한 번 들어가서 보는 것도 괜찮을 것 같다. forum.tuts4you.com/files/categories/ 에서 관련된 파일을 다운로드할 수 있다. 리버싱 핵심원리 책에서는 Tut.ReverseMe1.exe 파일을 다뤄보고 이에 대한 crack을 진행한다. 1. 프로그램 실행 위와 같은 문구가 출력된다. 확인 버튼을 눌러보자. 무언가 적합한 Regcode를 발견하여 Register me! 버튼을 눌렀을 때 통과할 수 있는 구조 같다. SmartCheck는 Numega 사에서 만든 크래커들이 자주 이용하는 툴이라고 한다. Nag? 버튼을 클릭해보자. 위와 같이 프로그램을 초기에 실..
-
[reversing.kr] Easy Unpack 풀이Wargame/reversing.kr 2020. 12. 13. 15:17
1. 프로그램 실행 reversing.kr에서 Easy Unpack을 다운로드하여 실행시켜 보자. 위와 같이 빈 창이 나올 뿐 다른 어떤 동작도 하지 않는다. 폴더내에 있는 ReadMe.txt를 읽어보자. Find the OEP. 즉 Original Entry Point를 찾을 것을 요구한다. 문제의 제목을 보면 알 수 있듯이, 해당 프로그램은 실행 압축되어있고 본래의 entry point를 찾는 것이 문제의 목적인 듯하다. 2. Debugging(with x32dbg) 실행하자마자 401150으로 jump 하는 부분이 있고, 해당 부분으로 jump를 하면 다음과 같다. 바로 entry point가 나와 버린다... x32dbg 옵션에서 시스템 중단점을 체크 해제해뒀을 때 위와 같이 OEP로 넘어가기 직..
-
[reversing.kr] Easy Keygen 풀이Wargame/reversing.kr 2020. 12. 9. 11:16
reversing.kr의 두 번째 문제다. 나름 꼼꼼하게 풀어보려고 다양한 시도를 해봤지만 도저히 감이 안 와서 다른 분들의 풀이를 참고하였다. 1. 프로그램 실행 해당 프로그램은 콘솔형태의 프로그램으로 클릭하여 실행하면 바로 결과를 출력하고 콘솔 창이 사라져 버린다. Powershell로 프로그램을 실행해보자. 사용자로부터 Name과 Serial을 input으로 받고 결과를 출력한다. 각각 'maple19out', 'maple19out'을 입력하였지만 조건을 만족하지 않아서 Wrong을 출력한다. 같은 폴더에 있는 ReadMe.txt를 읽어보자. 결과적으로는 어떠한 Serial Key가 5B134977135E7D13인 Name을 찾아 홈페이지에 Auth를 해야 점수를 받을 수 있다. 본격적으로 디버깅을..
-
[리버싱 핵심원리 study] 8장 abex' crackme#2 분석(1)Reverse Engineering 2020. 12. 2. 01:44
이번 포스팅에서는 abex' crackme#2라는 프로그램을 분석해본다. 해당 프로그램은 Visual Basic으로 제작되어 visual C++로 작성된 프로그램과는 다른 형태의 디스어셈 코드를 보이는데, 이런 부분에 대한 설명은 생략하고 크랙 하는데 초점을 맞춰 글을 작성해보겠다. 1. abex' crackme#2 실행 우선 해당 프로그램을 실행시켜보자. Name과 Serial 입력란과 세 가지 버튼이 보인다. 왠지 name과 serial을 입력하고 Check를 통해 만족하는 serial key인 경우 통과하는 형태의 프로그램으로 보인다. maple19out / maple19out을 입력하고 Check 버튼을 눌러보았다. 예상대로 뭔가 조건을 만족하지 않아 Wrong이라는 메시지박스가 창에 나타난다. ..
-
[리버싱 핵심원리 study] 7장 Stack FrameReverse Engineering 2020. 12. 1. 02:02
1. Stack Frame 개념 설명 Stack Frame이란 ESP(스택 포인터)가 아닌 EBP(베이스 포인터) 레지스터를 이용하여 스택 내의 로컬 변수, 파라미터, 복귀 주소 등에 접근하는 기법을 말한다. ESP 값은 프로그램 안에서 수시로 변하기 때문에 EBP를 함수 시작 전에 저장하고 유지하면 안전하게 변수, 파라미터, 복귀 주소 등에 접근할 수 있다. Stack Frame의 어셈블리 코드 부분은 다음과 같다. PUSH EBP MOV EBP, ESP ... ... ... MOV ESP, EBP POP EBP RETN 함수가 호출되고 나면 PUSH EBP를 통해 기존 EBP값(함수 호출 이전의 EBP 주소)을 저장한다. 이후에 MOV EBP, ESP를 통해 ESP 값을 EBP에 저장하게 되면, 함수..