Reversing 18

11장 Lena's Reversing for Newbies

먼저 프로그램을 실행시켜 보았다. 목표는 2가지이다. 모든 성가신 Nags(잔소리?)를 없애라. registration code 코드를 찾아라! 우선 디버거로 프로그램을 까보았을때는 다음과 같다. 스트링 검색으로 성공부분을 따라 들어가 main부분을 찾았다. 이제 여기서부터 빠르게 리버싱을 해보면 될것같다. 메인을 시작하면서 바로 요놈 듣기 싫은 잔소리가 뜬다. 먼저 요놈부터 퇴치해야지! 아까 Visual Basic 코드 부분에서 메세지 박스 호출 부분을 조작할건데 MSVBVM50.rtcMsgBox 를 조작할것이다. 디버거에서 마우스 우측 버튼 메뉴의 Search for - All intermodular calls 명령을 사용하면, API 호출 목록이 나타나는데 우리가 찾는 rtcMsgBox는 총 4개 ..

10장 함수 호출 규약

함수 호출 규약? Calling Convention의 우리말로 번역해 놓은 것이다. 이것은 '함수를 호출할 때 파라미터를 어떤 식으로 전달하는가?'에 대한 일종의 약속이다. 함수 호출 전에 파라미터를 스택을 통해서 전달하는데 스택이란 프로세스에서 정의된 메모리 공간이며 아래방향(그냥 주소가 줄어드는 방향이라고 하는게 편함)으로 자란다. 또한 PE헤더에 그 크기가 명시되어있다. 즉 프로세스가 실행될 때 스택 메모리의 크기가 결정된다(malloc/new 같은 동적 메모리할당과는 다름) 함수가 실행완료되었을때 스택에 들어잇던 파라미터는 어떻게 되냐? 스택 메모리는 이미 고정되어있기때문에 메모리를 해제할 수도 없고 할 필요도 없다. 그리고 어차피 다음번에 스택에 다른 값을 입력할 때 저절로 덮어쓰기에 그건 그냥..

9장 Process Explorer - 최고의 작업 관리자

Process Explorer? Windows 운영체제에서 최고의 프로세스 관리 도구 Process Explorer 유명한 sysinternals(현재는 MS에 인수되었음)의 Mark Russinovich가 만든 프로세스 관리 유틸리티 이 분이 만든 유용한 유틸리티에는 FileMon, RegMon, TcpView, DbgView, AutoRuns, Rookit Revealer 등이 있다. 실행화면을 살펴보자. 화면 위의 좌측 -> 현재 실행 중인 프로세스들을 Parent/Child의 트리 구조로 표시 우측 -> 프로세스 각각의 PID, CPU 점유율 등을 보여준다.(Option을 통해 더 추가 가능) 화면 아래(옵션) > 선택된 프로세스에 로딩된 DLL 정보 또는 해당 프로세스에서 오픈한 object h..

8장 abex` crackme #2(미완)

우선 프로그램을 실행 시켜 보았다. 보아 하니 이름과 시리얼에 맞는것을 입력해야 되는 문제인 것 같다. 먼저 사전 지식으로써 이 파일은 Visual Basic으로 제작되었다고 한다. Visual Basic? 윈도우용 응용 프로그램을 개발할 수 있는 프로그래밍 언어이다. 비주얼 언어는 화면 디자인을 위해 많은 줄의 코드를 작성하지 않고 미리 만들어진 도구를 이용하여 그림 그리듯이 디자인할 수 있는 언어를 말한다. 디버깅을 시작하기 전에 Visual Basic 파일의 특징을 살펴보는 것이 좋겠다. VB 전용 엔진 VB 파일은 MSVBVM60.dll (Microsoft Visual Basic Virtual Machine 6.0)이 라는 VB 전용 엔진을 사용한다(The Thunder Runtime Engine..

7장 스택 프레임

스택 프레임이란? 쉽게 말해 ESP(스택 포인터)가 아닌 EBP(베이스 포인터)레지스터를 사용해 스택 내의 로컬 변수, 파라미터, 복귀 주소에 접근하는 기법을 말한다. ESP는 수시로 변하기 때문에 스택에 저장되어진 변수, 파라미터에 접근하고자 할때 ESP 값을 기준으로 하면 프로그램을 만들기 힘들고 CPU가 정확한 위치를 참고할 때 어려움이 있기 때문에 어떤 기준 시점(함수 시작)의 ESP의 값을 EBP에 저장하고 이를 함수 내에서 유지해준다면, ESP 값이 아무리 변하더라도 EBP를 기준(base)으로 안전하게 해당 함수의 변수, 파라미터, 복귀 주소에 접근할 수 있다. 이게 바로 EBP 레지스터 베이스 포인터 역할이다. // 스택 프레임의 구조 PUSH EBP ; 함수 시작(EBP를 사용하기 전에 ..

[Reversing.kr]Direct3D FPS

FPS 게임을 하는 문제이다! 설레는 문제 ~ 먼저 패킹이 되어있나 확인을 해보니 안되어있었다. 다음단계로 정적분석을 해보았다. 별 소득은 없었다고 한다. 프로그램을 켜서 고구마를 다 잡아보았는데 별 차이를 발견하지 못했다.. 삽질의 시작 동적 분석을 하던중 불편해서 ASLR을 없애주기위해 IMAGE_OPTIONAL_HEADER - DLL Characterstics 값에서 IMAGE_DLLCHARACTERISTICS_DYNAMICS_BASE (40) 플래그를 없애면 ASLR 기능이 없어진다. HP가 변조되는 값을 찾아 Dump window 에서 확인해 보고 변조를 하고 고구마를 잡아 보았다. 먼가 값이 변하게는게 보여서 계속 잡았다. 고구마를 열심히 잡아보니 Congratulation~ Game Clea..

[Reversing.kr]ImagePrc

이 문제를 차근차근 풀면서 다시 한번 되짚어 보는 리버싱 기본 단계이다. 리버싱 - 기본 단계 분석 대상 바이너리에 따라 다르다, 기본적으로 다음과 같은 단계를 거친다. 패커/프로텍터/암호화 탐지 탐지되면 우선 언팩/복호화를 시도하고 imports 등을 복구함 정적 분석 실제 환경에서 실행하지 않고 어플리케이션의 알고리즘 로직 분석 동적 분석 바이너리를 실행하여 행위 분석 먼저 Reversing.kr를 풀때 보니 ReadMe가 있었다. 하지만 이 문제에는 없었으니 일단 프로그램을 실행해 봤다. 요렇게 빈공간에 그림을 그릴수 있고 Check를 누르면 비교하는 것 같다. 그렇다면 차근차근 단계부터 밟아 나가보자. 먼저 1단계로 패킹이 되어있나 확인을 해보았다. 되어있지 않았으니 다음단계로 API가 겁나 많아..

6장 abex' crackme #1 분석

실습예제를 다운받아 분석 시작! exex 확장자로 되어있는 것을 exe 확장자로 변경해 실행시켜보니 이렇게 나온다. Hint를보니 CD-Rom 단어를 보고 HD가 HDD(Hard Disk Drive)를 의미한다고 추측한다고한다.. 정적 분석을 하자! 심플심플 그이유는 어셈블리 언어로 만들어져 그렇다고한다. 전체적인 흐름을 보니 Ok.. 하는 부분이 나와야 하는것 같다. 간단하게 처리 완료..! JE는 Equal 부분이니 같으면 점프 하는데 그냥 점프명령어 JMP로 바꿔버림! YEAH!! 문제를 풀었다. 그리고 어셈에서 PUSH를 해서 인자를 넘겨줄때는 함수에서 역순으로 들어간다고 보면된다! FILO 구조이므로!

4장 IA-32 Register 기본 설명

CPU 레지스터란? Register란 CPU 내부에 존재하는 다목적 저장 공간. RAM과는 성격이 조금 다르다. CPU가 RAM에 있는 데이터를 액세스 하기 위해서는 물리적으로 먼 길을 돌아가야 하기에 시간이 오래 걸린다. 하지만 레지스터는 CPU와 한 몸이기 때문에 고속으로 데이터를 처리할 수 있다. cpu가 재빨리 읽고 쓰기를 해야 하는 데이터들을 cpu 내부에 존재하는 메모리를 사용하는 데 이 메모리를 레지스터라고 한다 어셈블리 명령령어의 대부분은 레지스터를 조작하고 그 내용을 검사하는 것들이라 알아야 한다! IA-32의 레지스터의 종류 Basic program execution registers x87 FPU registers MMX registers XMM registers Control reg..