Reverse Engineering
-
[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를 해야 점수를 받을 수 있다. 본격적으로 디버깅을..
-
[reversing.kr] Easy Crack 풀이Wargame/reversing.kr 2020. 12. 7. 14:30
오늘 드디어 리버싱 관련 첫 wargame문제를 풀어보았다. Easy Crack이지만 전혀 easy하지 않았다... 우선 reversing.kr에서 easy crack문제를 다운로드하고 실행시켜보자. 1. 프로그램 실행 무언가 원하는 key를 입력해야 할 것 같다. 임의로 m을 10개 입력해보자. 역시나 예상대로 Incorrect 메시지 박스가 나타난다. 본격적으로 디버깅을 해보자. 2. Debugging (with x32dbg) 우선 위 프로그램이 작동하는 부분을 찾기 위해 디버거를 켠 후, 문자열 참조로 Incorrect Password라는 문자열이 호출되는 부분을 확인해보자. "Congratulation !!" 문자열을 더블클릭하여 주변을 살펴보기로 하자. 일단은 congratulaion 문자열 기..
-
[리버싱 핵심원리 study] 10장 함수 호출 규약Reverse Engineering 2020. 12. 4. 19:47
함수 호출 규약(Calling Convention)은 함수를 호출할 때 어떤 방식으로 argument를 전달할지, 함수가 끝난 후 어떤 방식으로 ESP(스택 포인터)를 정리하는지에 대한 약속이다. 대표적으로 cdecl, stdcall, fastcall 등이 있다. Ollydbg로 예제 프로그램의 어셈블리 코드를 살펴보면서 각 방식의 특징을 살펴보겠다. 1. cdecl 주로 C언어에서 사용되는 방식이며, 'Caller'에서 스택을 정리하는 특징을 보인다. #include "stdio.h" int add(int a, int b) { return a+b; } int main(int argc, char* argv[]) { return add(1, 2); } 위와 같은 코드를 VC++에서 최적화 옵션을 끄고 빌드..
-
[리버싱 핵심원리 study] 8장 abex' crackme#2 분석(2)Reverse Engineering 2020. 12. 3. 13:11
https://maple19out.tistory.com/8 [리버싱 핵심원리 study] 8장 abex' crackme#2 분석(1) 이번 포스팅에서는 abex' crackme#2라는 프로그램을 분석해본다. 해당 프로그램은 Visual Basic으로 제작되어 visual C++로 작성된 프로그램과는 다른 형태의 디스어셈 코드를 보이는데, 이런 부분에 대한 maple19out.tistory.com 지난 포스팅에 이어 이번에는 serial 생성 알고리즘을 살펴보겠다. abex' crackme#2 프로그램에서는 이름/시리얼을 입력하고 [Check] 버튼을 클릭한 후, 조건에 대한 검사를 통해 올바른 시리얼 키인지 아닌지를 판별한다. 즉, 이전에 찾았던 조건 분기 코드는 check button을 클릭했을 때 호..
-
[리버싱 핵심원리 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에 저장하게 되면, 함수..
-
Debugging ToolsReverse Engineering 2020. 11. 20. 02:15
1. Ollydbg http://www.ollydbg.de/ OllyDbg v1.10 www.ollydbg.de 32-bit debugger이다. 위 첨부된 링크에서 다운 받을 수 있으며, 가벼워서 처음 리버스 엔지니어링을 접할 때 이용하기에 좋다. 앞으로 작성할 리버싱 핵심원리 공부 관련 포스팅에서는 Ollydbg를 이용하여 리버싱을 할 것 같다. 64-bit program에서 debugging 할 수 없는 제약사항이 있다. 2. x64dbg https://x64dbg.com/#start x64dbg Built on open-source libraries x64dbg uses Qt, TitanEngine, Zydis, Yara, Scylla, Jansson, lz4, XEDParse, asmjit an..