본문 바로가기

분류 전체보기

(42)
함수 호출 규약(Calling Convention) 함수 호출 규약이란? 함수를 호출할 때 '파라미터를 어떤 식으로 전달하는가?' 즉 함수를 호출하는 방식에 대한 일종의 약속이다. 함수 호출 규약은 인자 전달 방법, 인자 전달 순서, Stack Frame을 정리하는 방법 에 따라 그 종류를 구분한다. 함수 호출 전에 파라미터는 스택을 통해 전달된다. 스택이란 프로세스에서 정의된 메모리 공간이며 아래 방향(주소가 줄어드는 방향)으로 자란다. PUSH 명령어는 현재 ESP 레지스터가 가지고 있는 스택 메모리 주소에 인자 값을 저장한다. ESP 포인터는 PUSH 명령 어에 의해 작아지게 되고, 스택이 아래로 길어진다. pop 명령어는 현재 ESP 레지스터가 가지고 있는 스택 메모리 주소에 있는 데이터를 인자로 복사하고, ESP 포인터의 값을 +4 한다. (이 ..
Neural DSP plini plugin 후기 사용기를 좀 더 자세하게 올리기 위해 이전 포스팅에서 소개했던 Plini 플러그인에 대해 다시 포스팅을 올려보려 한다. (최근 리버싱 공부를 하면서 블로그 활동에 탄력을 받았다...ㅎㅎ) 우선 Plini 이펙터 플러그인의 구성은 다이나믹 계열 이펙터(comp, overdrive) - Amp head - EQ - Cabinet- 공간계 이펙터(delay, reverb) 로 구성되어 있다. 각 부분별로 이미지와 함께 소개하는 시간을 가져보겠다. Dynamic Effects Part 우선 보면 알겠지만 디자인부터 굉장히 깔끔하다! 컴프레서와 오버드라이브가 있는데 우선 느낀점을 말해보자면 Compressor : 굉장히 깔끔하고 투명하게 들어간다. 예전에 Mollon Compressor를 써본적이 있는데 약간 그..
Lena's Reversing for Newbies 오늘은 위의 파일로 리버싱 실습을 진행해 보도록 하겠다. 파일을 실행하면 다음과 같은 창이 뜬다. Nags를 전부 삭제하고 registration code를 찾으라는 말을 한다. 확인을 누르니 다음과 같은 창이 뜬다. 아마도 Regcode는 우리가 찾아야 하는 registration code를 말하는 거 같다. 1234를 입력하고 Register me!를 누르니 다음과 같은 창이 뜬다. 그럼 이제 디버깅을 진행하기위해 ollydbg로 해당 파일을 열어보겠다. 오늘도 평소와 마찬가지로 F8을 누르며 천천히 진행해 본다. 00401160 부분에서 그림 1의 창이 뜬다. 아마 Nags를 없애라는것은 그림 1의 창이 뜨지 않게 하라는 뜻인 거 같다. 우선 search for all referenced text ..
abex' crackme #2 분석 오늘은 위의 파일을 이용해 실습을 진행해 보겠다. 파일을 실행시키면 다음과 같은 창이 뜬다. 일단 ollydbg로 열어서 파일을 분석해본다. 우선 성공과 실패의 분기점을 찾기 위해 문자열 검색 기능(All referenced text strings)를 사용해 보겠다. 문자열 검색 기능을 통해 성공과 실패의 메시지 박스의 위치를 알아냈다. 메시지 박스가 있는 주소를 확인해보니 4023E4위치의 값을 EBP-D4에 입력하는 명령어가 있다. 혹시 모르니 4023E4 주소로 이동해본다. 놀랍게도 문자열이 모여 저장되어있는 곳을 볼 수 있다. 그렇다면 지난번과 마찬가지로 틀림을 의미하는 문자열을 수정하면 되지 않을까...? -> 이게 되면 null패딩에 값을 입력하고 전달인자를 수정하는 방법도 되지 않을까? 위치..
abex' crackme #1 분석 crackme라는 프로그램은 말 그대로 크랙 연습 목적으로 작성되어 공개된 프로그램이다. 위의 파일을 이용해 크랙 연습을 진행해 보겠다. 파일을 실행시키면 다음 문구가 뜬다. HD를 CD-Rom처럼 생각하게 하라니 무슨 소리일까? ollydbg를 켜서 파일을 분석해본다. 다음과 같이 나온다. (EP코드가 매우 짧은 이유는 abex' crackme 파일이 어셈블리 언어로 만들어 졌기 때문이라고 한다.) 일단 F8키를 쭉 쓰면서 파일이 어떻게 진행되는지 파악해본다. (아직 디버깅과 친숙하지 않기도 하고 파일이 짧아 초심자의 기운을 살려 처음부터 F8연타를 하면서 어떻게 진행되는지 알아보았다.) F8연타를 하다보니 알게된 점이 있다. 바로 아랫부분의 ok, I really think that your HD i..
프로세스 메모리 구조와 스택 프레임 구조 프로세스 메모리 구조 프로세스의 메모리 구조는 Text, Data, Heap, Stack 영역으로 구분되어 있다. Text 영역 : 프로그램 코드와 상수가 정의되어 있고, 읽기만 가능한 메모리 영역이기 때문에 데이터를 저장하려고 하면 분할 충돌을 일으켜 프로세스가 중지된다. Data 영역 : 전역 변수(Global variable)와 정적 변수(Static variable)가 저장되어 있는 영역이다. Heap 영역 : 프로그래머의 필요에 따라 동적 메모리 호출에 의해 할당되는 메모리 영역이다. c언어의 기준으로 malloc() 함수나 calloc() 함수에 의해 생성된 변수들이 이 곳에 할당된다. Stack 영역 : 함수 인자 값, 함수 내의 지역 변수, 함수의 반환 주소 등이 저장되는 영역으로 함수 호..
어셈블리어와 레지스터 Assembly language 어셈블리어란? 어셈블리어는 기계어와 일대일 대응이 되는 컴퓨터 프로그래밍의 저급 언어다. 기계어와 명령어가 1:1로 대응되는 단어들로 구성되어 있다. 고급언어와 다르게 컴파일을 하면 간단한 명령으로 실행되서 실행 속도가 굉장히 빠르다. 임베디드 시스템 or 커널 프로그래밍, 컴퓨터 보안을 위해서는 어셈블리어를 알아야 한다. 위 두 가지의 결정적인 차이는 '한번의 동작을 몇가지 할 수 있는가?' 이다. 위 사진을 보면 어셈블리는 한번에 한 가지 동작밖에 하지 못한다는 것을 알 수 있다. 코드가 간단명료하기에 한 두줄만 봐서는 어떤 목적으로 만들어 졌는지 알 수 없다. 더군다나 많은 부분을 일일히 지정해 줘야 하므로 코드의 길이가 굉장히 길어진다. 그래서 고급언어를 어셈블리어..
PE File Format - pestudio Pestudio 를 통해 PE File Format을 분석해본다. 다운로드는 www.winitor.com/features Winitor - Versions Standard free Analysis of executable in a non-professional context. www.winitor.com 여기서 하면 된다. pestudio를 통해 메모장을 열어본다. PE 구조가 잘 정리되어 있다. Dos - header 우선 PE File Format의 Dos-header 부분은 다음과 같이 분석되어 나온다. offfset이 0x000000E8으로 나오는데 앞의 0x는 16진수 표현이고 000000E8인지를 Hxd를 켜서 비교하면 000000E8 이 딱 나온다. 위쪽의 md5 ~ file-ratio 부분..