본문 바로가기

문자열

제2회 IGRUS 해킹 대회 출제자 보고서(6번) 6번 문제 : dakuo@.exe 를 실행시켜서 답을 구하세요. 문제풀이------------------------------------------------------------------------------------------------ 6번 문제 : 1. 출제의도 : 이문제를 낸 이유는 리버싱을 할때 선행 단계들을 무시한 채 ( 리버싱 수행단계 : http://dakuo.tistory.com/21 ) 무작정 올리디버거에 넣고 보는 사람들에게 경고를 하기 위해서 출제했습니다. (동적분석 없이 바로 정적분석으로 넘어가는) 2. 문제풀이 : 리버싱 수행단계에 의해서 1. 바이너리 분석을 해본다. HexWorkshop과 PEID 로 분석결과 별 특이점을 찾지 못했습니다. 2. 문자열과 API, DLL .. 더보기
1차원 배열(Array) 배열은 일반적인 변수와 달리 값을 여러 개 저장할 수 있다. 배열의 선언 : ex.) int array [10]; 배열요소 자료형 배열이름 배열길이 배열 길이([10]) : 변수 10개를 모아서 배열을 구성한다는 뜻이다. 10개의 변수 각각을 가리켜 '배열 요소' 혹은 '배열 원소'라 한다. 배열 요소 자료형(int) : 배열을 구성하는 각각의 요소는 int 형 변수 배열 이름(array) : 배열의 요소에 접근할 때 array 라는 이름을 사용하겠다. (참고 : 배열명은 포인터이다) 즉, int 형 변수 열 개로 구성된 array 라는 배열을 생성하겠다. int int int int int int int int int int array[0] array[1] array[2] array[3] array[4.. 더보기
자료형, 상수, 변수, 연산자 예) int main() { int a = 5 ; // 지역변수 자료형 변수 연산자 상수 } 자료형 : 선언할 변수들의 특징 자료형(data type) 할당되는 메모리 크기 표현가능한 크기 정수형 / char 1 byte -128 ~ +127 (문자) 정수형 / short 2 byte -32768 ~ +32767 정수형 / int 4 byte -2147483648 ~ +2147483647 (숫자) 정수형 / long 4 byte -2147483648 ~ +2147483647 실수형 / float 4 byte 3.4*10^-37 ~ 3.4*10^+38| 소수이하 6자리까지 정밀 실수형 / double 8 byte 1.7*10^-307 ~ 3.4*10^308 (실수) 소수이하 15자리까지 정밀 실수형 / l.. 더보기
GetLastError() 함수 Windows 시스템 함수를 호출하는 과정에서 오류가 발생하면 NULL을 리턴하지만 그 원인은 파악할수 없다. 원인을 파악하기 위해서는 시스템 함수뒤에 GetLastError 함수를 호출하여 그 함수의 오류에 해당하는 에러 코드를 리턴(정상일시 0 리턴)받아서 이를 MSDN 에서 참조해야 한다. 하지만 여기서 더 나아가 에러 코드를 해석해 문자열로 만들어주는 함수를 사용한다면 MSDN 을 참조하는 번거로움을 덜 수 있다. 예제 소스 : 1. 에러 코드 확인 _tprintf(_T("Error Code : %d\n"), GetLastError()); 2. 에러 코드를 해석한 문자열 확인 #include CString PrintErrorMessage(DWORD err) { LPTSTR lpMsgBuf; CSt.. 더보기
입력하기 1. 키보드 입력 WM_CHAR 메시지 : 문자키 메시지 키보드로부터 입력이 발생했을 경우 윈도우즈는 포커스를 가진 프로그램에게 키보드 메시지(WM_CHAR, WM_KEYDOWN)를 보내주며 프로그램은 이 메시지를 받아 키보드 입력을 처리한다. (참조 : 포커스(Focus)란 입력초점이라는 뜻 즉 포커스를 가진 프로그램 = 활성화된 윈도우 오직 하나의 프로그램만이 활성화 될 수 있다) 키보드로부터 입력된 키값들을 화면으로 출력해주는 예제이다. (윈도우 프로그램 기본틀에 수정을 하면 된다 http://dakuo.tistory.com/entry/1) LRESULT CALLBACK WndProc(HWND hWnd, iMessage, WPARAM wParam, LPARAM lPara) { HDC hdc; PAI.. 더보기
출력하기 1. DC(Device Context) 윈도우즈는 세 가지 동적 연결 라이브러리(DLL) 로 구성되어 있는데 KERNEL : 메모리를 관리하고 프로그램을 실행시킨다. USER : 유저 인터페이스와 윈도우를 관리한다. GDI : 화면 처리와 그래픽을 담당한다. 윈도우즈 API 함수의 대부분은 이 세 DLL에 의해 제공된다. 특히 화면으로 출력되는 모든 글자와 그림은 GDI 를 통해야 한다. DC(Device Context)란 출력에 필요한 '모든 정보'를 가지는 데이터 구조체이며 GDI 모듈에 의해 관리된다.(ex. 폰트, 선의 색상과 굵기, 허가된 영역에만 출력하게 하기, 출력 방법 등등) 2. 기본 출력 예제 DC를 사용하여 문자열을 출력해보자. 마우스 왼쪽 버튼(WM_LBUTTONDOWN)을 누르면 .. 더보기
바이너리 분석 바이너리 분석(Binary Analysis) 툴은 어떤 패커를 이용해서 바이너리를 패킹했는지, 어떤 언어로 제작된 프로그램인지를 알아 낼 때 사용된다. PEID : 파일을 열어도 되고 드래그 앤 드롭을 하여 파일을 넣을 수도 있다. 또한 Multi Scan 기능으로 여러개의 파일을 분석할 수 있다. 플러그인에는 unpack을 해주거나 문자열을 추출해주는 것들이 있다. 리소스 해커 : 리소스를 분석해야 하느 경우, 프로그램 내부에서 사용되는 문자열이나 아이콘, 이미지, 폼 구조에 대해서 분석할 때 사용된다. 사용전에 PEID 같은 툴로 패킹이 되어있는지 확인을 먼저 해야한다. 패킹이 되어 있으면 이런 경고가 뜬다. 프로그램에서 사용되는 아이콘이나 bitmap들을 추출해서 저장할 수 있고, 프로그램에서 사용.. 더보기