2018년 이전글/역공학(4)
-
[리버싱 핵심원리]1부 5장_스택
오랜만에 써본다 ㅎㅎㅎㅎ 그러면 오늘은 가볍게 스택에 관하여 공부해보도록 하겠다. Stack? 스택이란 무엇일까?스택이란, 제한적으로 접근할 수 있는 나열 구조이다-wiki백과 발췌스택의 역할은?함수 내의 로컬 변수를 임시 저장한다.함수 호출시 파라미터를 전달한다.복귀 주소를 저장한다.스택의 구조는?스택은 FILO 혹은 LIFO 구조 즉, 선입후출 또는 후입선출의 구조를 가진다. 다음은 아래의 그림을 통해서 이해하여보자. [그림 1] 스택 다음 그림을 보면 먼저 들어 온 값의 경우, 나중에 나가게 되고 나중에 들어온 값은 먼저 나가게 됩니다. 이것을 FILO, LIFO 구조라고 한다.
2016.11.02 -
[리버싱 핵심원리]1부 4장_IA-32 Register 기본 설명
OllyDbg를 이용해서나 다른 툴을 사용하여 디버깅을 하다보면 각각의 레지스터들의 용도에 관하여 알아야 할 경우가 있다. 자,그럼 이번엔 레지스터에 관하여 알아보도록하겠다. CPU Register? !레지스터?CPU내부에 존재하는 다목적 저장 공간이다. IA-32의 레지스터IA-32레지스터의 Basic program execution registers는 크게 또 4가지로 나뉜다. 1.General purpose Registers(32bit) --> 8개2.Segment Registers(16bit) --> 6개3.Program Status and Control Registers(32bit) --> 1개4.Instruction Pointer(32bit) --> 1개 [그림 1]Basic program e..
2016.10.27 -
[리버싱 핵심원리]1부 3장_리틀 엔디언 표기법
바이트 오더링이란?데이터를 저장하는 방식을 일컫는 말이다. 크게 빅엔디언과 리틀엔디언으로 나눈다. 그러면 빅엔디언과 리틀엔디언 의 차이점에 관하여 알아보도록 해보자. BYTE b = 0x12; WORD w = 0x1234; DWORD dw = 0x12345678; char str[] = "abcde"; [코드 1] 빅엔디언&리틀엔디언 비교 TYPE NAME SIZE 빅엔디언 리틀엔디언 BYTEb 1 [12] [12] WORDw 2 [12][34] [34][12] DWORDdw 4 [12][34][56][78] [78][56][34][12] charstr 6 [61][62][63][64][65][00][61][62][63][64][65][00] [표 1] 빅엔디언&리틀엔디언 비교 바이트 타입으로 변수를 저..
2016.10.27 -
[리버싱 핵심원리]1부 2장_Hello Reversing!
기본기를 다지려고 리버싱 공부를 책보고 차근차근 해보기로 하였다 ㅎㅎ그래서 선택한 책이 리버싱 핵심원리라는 책인데, 너무......길다!!!!!!!!!!!!근데 해보고 싶으니까 해야쥐 ㅎㅎㅎ 코럼 잡담은 그만하고 시작하도록하겠다. 1부 1장의 경우 마음가짐과 같은 당부를 하는 부분이라 생략하도록 하겠다. 1부 2장의 경우 "Hello World!"의 문자열을 포함한 메세지박스를 출력하는 코드를 작성한 후 그 동작원리를 알아보기 위해 리버싱실습을 하는 것을 목표로하는 듯하다. 그러면 우선 해당 코드를 작성해보자. [그림 1]Hello World_cpp_code그런데 책을 읽어보면 Release mode로 빌드를 하는 것이 코드가 더 간결해 져서 디버깅하기가 더 편하다고 말한다. 왜 그럴까??엄~청 궁금해서..
2016.10.25