리버싱/책 스터디 9

패킹과 언패킹(1)

1.패킹과 언패킹 1.1패킹과 언패킹 컴프레싱:실행코드를 단순압축 프로텍팅: 실행파일을 암호화. 실행코드는 암호화된 상태로 배포되고 실행시점에 복호화되어 동작함 (173페이지 그림) upx 기반으로 살펴볼 것이다. 패킹된 파일 구성 : 언패킹에 필요한 코드영역( Unpacking code) ,패킹된 데이터가 들어가 있는 영역, 패킹된 데이터가 저장될 빈공간 메모리에 로딩 후 : 진입점으로부터 프로그램이 실행. 패킹된 파일의 진입점은 언패킹 코드 영역에 들어음 > 언패킹 코드는 패킹된 데이터를 하나씩 읽어 압축을 풀고 비어있던 공간에 원본데이터를 저장. >모든 코드가 언패킹 되면 원 진입점에서부터 프로그램이 다시 시작된다. 1.2 패킹도구 패킹도구에는 여러가지가 있지만 주로 쓰이는 것만 말하자면 컴프레서에..

abex crackme 5번째 예제

어떤 함수들을 사용하는지 [Search for] > [All intermodular call]에서 확인한다 MSDN에서 함수의 기능을 살펴본다. 입력값과 출력값이 어디에 저장되고 이 값들이 프로그램에서 어떻게 사용되는지 조사하면 해결에 도움이 된다. GetVolumeImformation()함수 지정된 루트 디렉터리가 속한 파일 시스템 정보와 볼륨정보를 가져오는 함수다. MSDN에서 정희한 함수의 구조를 보면 다음과 같다. BOOL GetVolumeInformationA( [in, optional] LPCSTR lpRootPathName, [out, optional] LPSTR lpVolumeNameBuffer, [in] DWORD nVolumeNameSize, [out, optional] LPDWORD ..

abex crackme 4번째 예제

1)동작방식 abex crackme 예제 4의 동작방식은 디버거로 프로그램을 열어 실행하면 일련번호를 입력하는 창이 나온다. 특정 숫자를 입력하지 않으면 아래의 'resistered'버튼이 비활성화 상태로 지속된다. 프로그램을 분석해서 올바른 일련번호를 입력하면 restistered 버튼이 활성화 되고 버튼을 누르면 성공메시지를 보여주는 창이 나온다. 2)API 검색 정답을 입력하기전에는 비활성화 상태로 지속되기때문에 오류메세지를 확인할 수 없고 따라서 문자열 검색을 통해서 분석의 실마리를 찾기 어렵다. 이럴때 사용하는 방법이 API검색(All intermodular calls)이다. 일련번호는 정답과 정답이 아닌것을 비교하는 형식을 많이 사용하므로 비교함수를 찾아본다. 비교함수에 커서를 갖다대고 엔터키..

Immunity Debugger , OllyDbg 1.10 기본기능

리버싱 입문 책을 공부하고 있다고 말하고 시작하겠다. 책에서 다루는 버전과 내가 사용하고 있는 올리디버거의 버전이 달라서 내가 현재 사용하고 있는 버전으로 최대한 설명하겠다. 1.디버거 개요 프레임: 현재 어떤 프로그램의 무슨 모듈을 디버깅하고 있는지 표시 메뉴 바: 디버거에서 제공하는 기능을 모두 담고있음 퀵 링크: 자주 사용되는 기능을 아이콘 형태로 제공. 분석에 필요한 기능 대부분 해결가능 뷰 영역: 분석화면을 보여주는 영역 상태 바: 왼쪽에는 현재 디버거가 어떤 동작을 수행하는지 보여주고 (디버거는 DLL정보를 분석해서 udd파일로 저장하고 다음에 분석할때 재사용한다) 오른쪽에는 디버거의 실행상태를 보여준다. 디버깅하는 상태:Paused 사용자의 입력을 기다리는 상태: Running 1.1 디버거..

abex crackme 1번째 예제 풀이

문제해결방법 중 내가 생각해낸 방법은 해결방법1. JE를 JNE로 바꾸는 것 해결방법2. 메세지 박스로 점프하는 것. 즉 점프할 곳의 주소를 고친다. ->Assemble을 통하면 어셈블러 코드를 고칠 수 있다. 책에 나온 것은 3번부터이다. 해결방법3.INC,DEC값이1씩 증가,감소하는 것임을 이용해서 계산이 맞도록 계산식을 띄운다. 하지만 이 방법은 가상머신일 때만 가능한 방법이다. ESI는 가상머신에서만 00000000DMFH 돼있는데 실제 컴퓨터에서 ESI는 값을 갖고 있다. ESI는 값을 수정해봤을 때 렉이 발생했는데 , ESI는 값을 수정하면 오류가 많이 뜬다고 한다. 해결방법4. 점프문에서 제로플래그를 변경한다. JE 같으면 점프한다고 했는데 ZF값을 보고 점프하는것이다. 비교명령어에서 인자 ..

리버싱 기초지식

리버싱 공부전 기초지식 -들어가기전에 '리버싱 입문'이라는 책을 공부한 것임을 밝힌다. 프로그램 실행구조 -윈도우에서 실행파일을 PE파일이라 부른다. -기본적으로 HDD(하드디스크)에 저장한다 -PE파일은 header와 body로 구성한다고 본다. -OS 로더가 헤더를 분석해서 바디에 있는 코드와 데이터를 '메모리'에 배치한다. ㄴ 메모리에 로딩시: 메모리에서 코드 영역,데이터 영역에 들어감 ㄴ프로그램 실행시:스택영역,히프영역에 쌓임 레지스터 프로그램의 명령어는 CPU의 연산장치, 제어장치가 실행한다 따라서 필요 데이터는 모두 레지스터에 있어야 실행이 가능하다. 레지스터: CPU에 있는 고속 기억 장치 주로 사용되는 것들만 소개하겠다. *범용 레지스터(a,b,c,d 순으로 있다고 외우면 쉽다) 1)EAX..