Assembly Language10 올리디버거(OllyDBG)를 이용한 CrackMe 문제 풀이 2 이번에 풀어볼 문제는 upx로 패킹이 되있는 문제로 upx -d 옵션으로 압축을 풀어도 되지만 메뉴얼 언패킹하는 방법을 간단하게 설명하기 위해서 올리디버거의 덤프 플러그인을 사용하여문제를 풀어보도록 하겠다. 다음을 다운받아 Plugin 폴더에 넣는다. 올리디버거의 메모리 덤프의 리빌드 기능만으로도 upx 압축은 풀리기 떄문에 쉽게 따라할 수 있는 문제이다. 먼저 PEID로 바이너리를 확인해본다. (PEID 사용법 참고 : http://dakuo.tistory.com/entry/바이너리-분석툴) upx 압축되어 있는 문제 파일인 CrackMe2.exe를 올리디버거로 열어본다. 코드가 압축되었으며, 분석을 더할 것인지 묻는다. 예를 누른 후 아래쪽으로 내려가다 보면 압축이 모두 풀려서 메모리에 올라가 있는 .. 2009. 10. 26. 상황별 기초 어셈블리어 어셈블리 명령어를 상황별로 어떻게 사용되는지 정리해보며 공부해보자. 1. 데이터 이동 : 어셈블리에서 데이터를 옮기고자 할때는 MOV 명령어를 사용한다. MOV [복사될 곳], [읽어들일 곳] MOV EAX, EBX의 경우 EBX 레지스터를 EAX에 대입한다. MOV EAX, [EBX]로 표현되어 있는 경우에는 EBX가 가리키는 값을 EAX에 대입한다. MOV EAX, [EBP+10]의 경우 EBP의 주소에서 20만큼 증가한 주소지의 값을 EAX에 대입한다 MOV EAX, [EBP-10]의 경우 EBP의 주소에서 20만큼 감소한 주소지의 값을 EAX에 대입한다 [EBP+10]과 [EBP-10]의 경우에 함수 내부에 존재하는 명령이었다면 EBP를 기준으로 10 증가된 경우에는 파라미터로 넘어오는 값일 수 .. 2009. 10. 26. 기초 어셈블리어. 데이터 타입 : 타입 설 명 BYTE 8bit 부호 없는 정수 SBYTE 8bit 부호 있는 정수 WORD 16bit 부호 없는 정수 SWORD 16bit 부호 있는 정수 DWORD 33bit 부호 없는 정수 SDWORD 32bit 부호 있는 정수 FWORD 48bit 정수 QWORD 64bit 정수 TBYTE 80비트 정수 피연산자(operand) 타입 : 피연산자 설 명 r8 8bit 범용 레지스터 r16 16bit 범용 레지스터 r32 32bit 범용 레지스터 Reg 임의의 범용 레지스터 Sreg 16bit 세그먼트 레지스터 imm 8, 16, 32bit 즉시값 imm8 8bit 즉시값 imm16 16bit 즉시값 imm32 32bit 즉시값 r/m8 8bt 범용 레지스터, 메모리 r/m16 16b.. 2009. 10. 25. 올리디버거(OllyDBG)를 이용한 CrackMe 문제 풀이 crackme author : abex type : cdrom check level : easy tute author : HaQue Ollydbg.exe 실행해서 abexcm1.exe를 open한다. 프로그램이 어떻게 작동되는지 보기 위해 Run(F9)을 한다. 첫 번째 메시지박스가 나타나고, 확인을 클릭하면 두 번째 메시지박스가 나타난다. 확인을 클릭하고 올리디버거를 보면 프로그램이 종료되었음을 알 수 있다. 첫번째 메시지박스에는 CD-ROM을 체크하는 루틴을 우회하라고 나오고 두번째 메시지박스에는 CD-ROM이 아니라고 하며 프로그램이 종료되었다. 이 문제를 푸는 방법에는 메모리 주소 흐름을 바꾸는 방법과, CD-ROM을 체크하는 함수의 리턴값을 변경해서 푸는 방법 2가지 방법이 있다. 1번 방법 풀.. 2009. 10. 24. 이전 1 2 다음