'Hacking/Reversing'에 해당되는 글 4건

반응형



① 가상메모리

 - 위치 : 가장 왼쪽 부분

 - 설명 : 프로그램이 실행이 되면 프로세스가 되어 메모리에 올라가는데 이 때의 메모리는 [가상메모리]이다. 가상 메모리는 물리메모리를 효율적으로 사용하기 위해 운영체제가 사용하는 시스템으로 이 때 물리메모리는 컴퓨터 사양에 나오는 메모리( ex, 8G메모리, 16G메모리)를 말한다.


② 기계어코드

 - CPU가 읽어들어 실행하는 코드

 - 알아볼 수 없는 숫자로 되어있다.


③ 어셈블리어

 - 기계어코드와 1:1 매핑하여 사람이 알아보기 쉽도록 만든 언어


④ 주석

 - ;을 이용하여 작성 가능


⑤ 레지스터

 - CPU가 사용하려고 가지고 있는 데이터 

 - EAX (누산기) : 계산에 대한 저장을 하는 데이터, 함수의 결과가 저장되는 레지스터

 - EBX (Base Register) : 다목적으로 사용

 - ECX (Counter Register) : 숫자를 카운팅하기 위해 사용 (ex 반복문)

 - EDX (Data Regiester) : 다목적으로 사용

 - ESI (Source Index) : 암복호화 혹은 데이터 복사 등을 위한 출발지

 - EDI (Destination Index) : 암복호화 혹은 데이터 복사 등을 위한 목적지

 - EBP (Base Pointer) : 스택의 아랫부분을 가리키는 포인터

 - ESP (Stack Pointer) : 스택의 윗부분을 가리키는 포인터

 - EIP (Index Pointer) : CPU가 다음에 실행할 명령어 주소


⑥ 덤프

 - 데이터를 볼 때 많이 사용

 - 컴퓨터의 경우 hex 코드로 저장되어 있는데 이를 영문자로 보여주는 것이 ASCII 코드


⑦ 스택

 - 실제로 데이터가 저장되는 공간

 - 스택은 가상 메모리의 또다른 공간에 따로 존재함

 - ESP와 EBP를 통해 스택이 구성되어있고, Relative 기능을 이용하여 ESP와 EBP로부터 얼마나 떨어져있는지 확인이 가능함.


※ EAX의 구성

 - EAX= Extension AX으로 4바이트(32bit)를 나타냄

    ex) 12345678

 - AX = EAX의 반으로 2바이트(16bit)를 나타냄

    ex) 5678

 - AH / AL = A High와 A Low로 각각 상위와 하위의 1바이트(8bit)를 나타냄

    ex) 56 과 78


※ Ollydbg 단축키

 - Ctrl + F2 : 재시작

 - F8 : 한 스텝(Over) 진행

 - F7 : 한 스텝(Into) 진행

 - Enter : 실행이 아닌 그냥 따라가서 해당 위치 확인

 - Ctrl + g : 해당 주소로 이동

 - F2 : BreakPoint ( udd에 저장되기 때문에 Ollydbg를 끄고 다시 실행해도 남아있다)

 - F9 : 실행 

 - Space bar : Assembly 언어 수정


※ 특정 함수에 대해 알고 싶을 때

 - 구글에 해당 [함수명 + msdn] 으로 검색하면 됌.

 ex) CreateFileA msdn 

 - 접근하면 해당 함수에서 필요로하는 인자값들과 리턴값 등에 대해 자세히 알 수 있음.


 명령어

 - CMP : 두 값을 비교 후 일치할 경우 Zero Flag가 1로 세팅

 - JNZ : Jump if Not Zero의 명령어로 zero flag가 1이 아니면 점프를 해라. 즉, 비교 결과 "일치하지 않을 경우 점프를 해라" 라는 의미이다.

 - TEST EAX, EAX : EAX에 0이 들어가있는지 TEST를 한다. 만약 EAX에 0이 들어가있을 경우 Zero Flag가 1로 세팅

 - JL, JG, JE = Jump Less-than, Jump Greater-than, Jump Equal 의 명령어로 바로 위에 있는 CMP 명령어의 결과에 따라 분기함. JL의 경우 S Flag가 세팅되어있으면 Jump 함.


※ 분기문 수정

 - 항상 넘어가게 하고 싶을 때는 분기문(JL, JNZ 등등)을 JMP 명령어로 수정하여 항상 점프하도록 변경

 - 반대로 항상 넘어가지 않도록 하고 싶을 땐 해당 분기문을 nop 명령어로 수정하여 해당 분기문을 실행하지 않도록 수정

반응형

'Hacking > Reversing' 카테고리의 다른 글

Visual Basic 파일 분석  (0) 2018.11.18
3월 5일자  (0) 2018.03.05
immunity debugger가 바로 꺼질 때 해결  (2) 2016.01.03
블로그 이미지

rootable

,
반응형

abex's 2nd crackme 파일은 Visual Baisc으로 제작되어 있다.

추후 CTF에서 VB로 제작된 파일을 분석할 수도 있으니 미리 정리해놓는다.


* VB 전용 엔진

 - VB 파일은 MSVBVM60.dll (Microsoft Visual Basic Virtual Machine 6.0)이라는 전용 엔진을 사용한다. (The Thunder Runtime Engine)이라고도 불린단다.


abex's 2nd crackme 파일을 리버싱할 때 EP 코드 전에 해당 엔진을 호출하는 것을 볼 수 있다.


 - 메시지 박스를 출력하고 싶을 때 VB 소스코드에서 MsgBox() 함수를 사용한다.. VB 컴파일러는 실제로 MSVBVM60.dll!rtcMsgBox() 함수를 호출하고, 이 함수 내부에서 Win32 API인 user32.dll!MessageBoxW() 함수를 호출한다. (VB 소스코드에서 직접 Win32 API를 호출할 수도 있다)


* N code와 P code

 - VB는 컴파일 옵션에 따라 N code와 P code로 컴파일이 가능하다.

 - N code는 Native code로서 일반적인 디버거에서 해석 가능한 IA-32 Instruction을 사용하는 컴파일 옵션이다.

 - P code는 Python처럼 인터프리터 언어 개념으로 컴파일 하는 옵션이다. 따라서 이 P code를 정확히 해석하기 위해서는 VB 엔진을 분석하여 에뮬레이터를 구현해야 한다.


 * Event Handler에 존재하는 사용자 코드

 - VB 프로그램은 Windows 운영체제의 Event Driven 방식으로 동작하기 때문에 C 언어처럼 main 함수에 사용자코드가 들어가는 것이 아니라 각 event Handler에 사용자 코드가 존재한다.

 - 따라서 Check 버튼, 혹은 Ok 버튼 등 Event가 설정되어 있을 만한 곳에 우리가 분석하기 위한 코드가 존재한다.


* undocumented 구조체

 - VB에서 사용되는 각종 정보들(Dialog, Form, Function 등)은 내부적으로 구조체 형식으로 파일에 저장된다. 

 - 하지만 Microsoft에서 이러한 구조체 정보를 정식으로 공개하지 않았기 때문에 VB 파일의 디버깅에 어려움이 존재한다고 한다.


출처) 리버싱 핵심원리

반응형

'Hacking > Reversing' 카테고리의 다른 글

Ollydbg 창 설명 및 기초  (0) 2019.02.10
3월 5일자  (0) 2018.03.05
immunity debugger가 바로 꺼질 때 해결  (2) 2016.01.03
블로그 이미지

rootable

,

3월 5일자

Hacking/Reversing 2018. 3. 5. 11:25
반응형

* 원하는 코드를 빨리 찾아내는 4가지 방법

1) 명령어 하나씩 직접 실행하면서 원하는 위치를 찾아가는 방법

2) All referenced text strings를 통해 문자열 검색

3) API 검색 후 호출 코드에 BP - All intermodular calls 이용

4) API 코드에 직접 BP - Name in all modules 이용(Packer, Protecter 이용 시 API 호출 목록이 보이지 않으므로 로딩된 라이브러리(DLL 코드)에 직접 BP


 - 3, 4의 차이는 직접 이 프로그램에서 호출한 곳에 BP를 거느냐, DLL 내 API에 BP를 걸어 사용할 때 잡히게 할거냐 의 차이


- API에 BP걸 때 이용하는 기능 구분

 All intermodular calls

 코드에서 호출되는 모든 API 함수 보기 

 Name in all modules 

 모든 API 함수 보기 



* Label과 Comment의 차이

 - Label 은 메모리 값에 이름을 붙어주는 것이므로 추후 해당 메모리를 CALL할 때 붙여준 이름으로 나타난다.

 - Comment는 말그대로 해당하는 한 줄에 주석을 다는 것


* 범용 레지스터 쓰임새

 - EAX : 주로 함수의 return값이나 사칙연산의 결과값 저장

 - EBX 

 - ECX : 반복문의 count를 저장, 반복문이 돌때마다 1씩 감소

 - EDX

 - ESP : Stack pointer

 - EBP : Stack frame을 위한 레지스터로 ESP의 값을 저장해두는 곳

 - ESI : Source pointer 로서 값 복사를 위해 주로 사용

 - EDI : Destination pointer 로서 값 복사를 위해 주로 사용


* 바이트 수

BYTE = 1바이트

WORD = 2바이트

DWORD  = 4바이트


* Calling Convention (함수 호출 규약)

cdecl : Caller가 스택 정리

stdcall : Callee가 스택 정리

반응형

'Hacking > Reversing' 카테고리의 다른 글

Ollydbg 창 설명 및 기초  (0) 2019.02.10
Visual Basic 파일 분석  (0) 2018.11.18
immunity debugger가 바로 꺼질 때 해결  (2) 2016.01.03
블로그 이미지

rootable

,
반응형

윈도우즈 애플리케이션 취약점을 공부하기 위해 modern.IE에서 가상화 PC를 받아 VMware에서 돌렸다.

공부하기 위해 Immunity debugger를 설치하였는데 설치까지 잘 되었다.


바탕화면에 있는 아이콘을 더블클릭하면 간편하게 실행이 된다고 하였는데

번쩍 실행창이 떴다가 바로 꺼져버렸다.


검색을 해본 결과 64bit에서 Program Files (x86)에 설치될 경우 쓰기가 제대로 되지 않아서 그럴 수 있다고 하였다.

(만약 설치하는 OS가 64bit이고 immunity debugger가 설치된 곳이 Program Files (x86) 이라면 C드라이브 밑에 새로 폴더를 생성하여 그 곳에 설치를 해보세요)


하지만 내가 사용하는 것은 WinXP의 32bit 운영체제여서 그렇게 해봐도 해결되지 않았다.

몇일을 고민하다 갑자기 immunity debugger는 python을 사용하는데 python을 실행시키지 못한 것이 아닐까? 라는 생각이 들었다.

바로 cmd창을 켜고 python을 친 결과 역시 python을 실행시킬 수 없었다.

그래서 나는 환경변수에 python을 넣어준 뒤 cmd에서 python이 실행되는 것을 확인한 뒤 immunity debugger를 다시 실행시켜 보았다.


그 결과는....두근두근... 성공!! 역시 문제는 python을 연동시킬 수 없었기 때문에 바로 꺼진 것이였다.

저와 같은 문제가 발생하신 분들은 python을 환경변수에 추가하여 cmd창에서 python이 실행되도록 한 뒤 immunity debugger를 실행하세요.


* 환경변수 추가 = 내 컴퓨터 -> 속성 -> 고급 시스템 설정 -> 환경 변수 -> 시스템 변수의 Path 변수에 Python 설치 공간 넣고 확인


반응형

'Hacking > Reversing' 카테고리의 다른 글

Ollydbg 창 설명 및 기초  (0) 2019.02.10
Visual Basic 파일 분석  (0) 2018.11.18
3월 5일자  (0) 2018.03.05
블로그 이미지

rootable

,