<BDC3B8AEBEF320B9F8C8A320C0DBBCBA20B7E7C6BEC0BB20BBCCBEC6B3BBBCAD D466F E687770>

Similar documents
Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

hlogin2

K&R2 Reference Manual 번역본

INTRO Basic architecture of modern computers Basic and most used assembly instructions on x86 Installing an assembly compiler and RE tools Practice co

untitled

금오공대 컴퓨터공학전공 강의자료

No Slide Title

Deok9_Exploit Technique

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

Microsoft Word - building the win32 shellcode 01.doc

Microsoft PowerPoint - chap01-C언어개요.pptx

Microsoft PowerPoint - chap10-함수의활용.pptx

BMP 파일 처리

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

Microsoft Word - FunctionCall

Microsoft PowerPoint - a8a.ppt [호환 모드]


Microsoft PowerPoint - hy2-12.pptx

Microsoft PowerPoint - a5a.ppt [호환 모드]

중간고사

<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4>

기술문서 LD_PRELOAD 와공유라이브러리를사용한 libc 함수후킹 정지훈

Microsoft PowerPoint - a6.ppt [호환 모드]

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

PowerPoint Template

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

OCW_C언어 기초

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft Word - Reverse Engineering Code with IDA Pro-2-1.doc

untitled

슬라이드 1

Reusing Dynamic Linker For Exploitation Author : Date : 2012 / 05 / 13 Contact : Facebook : fb.me/kwonpwn

PowerPoint 프레젠테이션

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

컴파일러

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습

C 언어 프로그래밊 과제 풀이

IDA 5.x Manual hwp

슬라이드 1

02.Create a shellcode that executes "/bin/sh" Excuse the ads! We need some help to keep our site up. List Create a shellcode that executes "/bin/sh" C

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

금오공대 컴퓨터공학전공 강의자료

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

PowerPoint Presentation

Microsoft PowerPoint - chap06-5 [호환 모드]

Microsoft PowerPoint - chap03-변수와데이터형.pptx

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

PowerPoint 프레젠테이션

Microsoft PowerPoint - a10.ppt [호환 모드]

Microsoft PowerPoint - chap11-포인터의활용.pptx

Æí¶÷4-¼Ö·ç¼Çc03ÖÁ¾š

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

본 강의에 들어가기 전

Microsoft PowerPoint - [2009] 02.pptx

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

슬라이드 1

2. GCC Assembler와 AVR Assembler의차이 A. GCC Assembler 를사용하는경우 i. Assembly Language Program은.S Extension 을갖는다. ii. C Language Program은.c Extension 을갖는다.

C++-¿Ïº®Çؼ³10Àå

11장 포인터

CKKeyPro 적용가이드

슬라이드 1

목 차 1. 개요 취약점분석추진배경 취약점요약 취약점정보 취약점대상시스템목록 분석 공격기법및기본개념 시나리오 공격코드

=

슬라이드 1

Microsoft Word - Crackme 15 from Simples 문제 풀이_by JohnGang.docx

The C++ Programming Language 4 장타입과선언 4.11 연습문제 Hello,world! 프로그램을실행시킨다. 프로그램이컴파일되지않으면 B3.1 을참고하자. #include<iostream> //#include 문, 헤더파일, 전처리지시

Microsoft Word - MSOffice_WPS_analysis.doc

C 프로그램의 기본

(Microsoft Word - \270\256\271\366\275\314 \271\370\277\252.doc)

PowerPoint 프레젠테이션

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

Microsoft PowerPoint - chap12-고급기능.pptx

<4D F736F F D20B9D9C0CCB7B5B9D9C0CCB7AFBDBA5FBCF6C1A42E646F63>

목차 1. 키패드 (KeyPAD) 2. KeyPAD 를이용한비밀번호입력기

Chapter #01 Subject

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Chapter_02-3_NativeApp

Microsoft PowerPoint - 08-C-App-19-Quick-Preprocessor

Microsoft PowerPoint - chap08-1 [호환 모드]

PowerPoint Template

Microsoft PowerPoint - chap-02.pptx

Microsoft PowerPoint - ch07 - 포인터 pm0415

RVC Robot Vaccum Cleaner

PowerPoint 프레젠테이션

Microsoft PowerPoint - Java7.pptx

윤성우의 열혈 TCP/IP 소켓 프로그래밍

0x00 Contents 0x About Nickster 0x Analaysis 0x Exploit

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

Eureka Mail Client_v2.2.q를이용하여오믈렛에그헌팅에대하여알아볼것이다. 익스플로잇을위해구성된환경은아래와같다. - Windows XP Professional SP3 KOR - Python Ollydbg 1.x, Immunity Debugg

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

Microsoft PowerPoint - Chapter_04.pptx

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

Microsoft Word - Static analysis of Shellcode.doc

Microsoft PowerPoint - chap05-제어문.pptx

Transcription:

시리얼번호작성루틴을뽑아내서 Brute-Force 돌리기.. 작성일 : 2005년가을작성자 : graylynx (graylynx at gmail.com) 크랙미정보 GOAL : Find the correct password No patching allowed Difficulty : 2/10 This is an exercise on brute-attacking. Written in WIN32ASM by Detten. Send solutions, questions, and comments to : Biwc@hotmail.com 역시군대에서풀었던크랙미. 이건그때인트라넷동호회에강좌같은거올리려고솔루션을문서로만들어놨네요. 부끄럽지만살짝첨부해봅니다. ^^; [ 크랙미환경 ] OS: Windows XP SP1 Disassembler: W32DASM Debugger: SoftIce + IceDump Assembler: MASM Compiler: Visual C++ crackme5(by Detten) 튜토리얼 by 태병장 자, 리버싱팀의오브젝트 #4 라는이름으로올렸던크랙미 5 에대한튜토리얼을시작하겠습니다. 이크랙미는코드패치가허용되지않으며, 오로지올바른키값을찾아야만합니다. 따라서우리는디스어셈블코드를완벽하게이해할수있어야만이녀석을공략할수있습니다. 먼저 W32DASM 으로디스어셈블을해봅니다. 실행파일이패킹되어있지도않고, 숨겨진더미코드도없기때문에올바른역코드를보여줍니다. 이코드를분석하기전에먼저소프트아이스를이용하여실시간으로코드를훑어보도록하죠. W32DASM 의 Function->Import 메뉴를선택하면, 아래와같은함수들이임포트되어있음을알수있습니다.

소프트아이스를띄운다음 bpx getdlgitemtexta 명령으로브레이크포인트를잡습니다. 그리고 crackme5.exe 를실행하고아무값이나입력하면브레이크가걸리면서소프트아이스가실행됩니다. ( 저는 12344321 을입력하였습니다 ) 소프트아이스가떳을때 getdlgitemtexta 함수내에서브레이크가걸린상태이므로, p ret 명령을내려서 ( 함수밖으로빠져나가는명령 ) 우리가원하는코드로접속할수있습니다. 이제우리는 F8 과 F10 을적절히이용하여우리가입력한 12344321 문자열이어떠한연산과정을거치는지레지스터와메모리값을추적해가며조사할수있습니다. 하지만이크랙미는 W32DASM 으로디스어셈블이가능하기때문에, 그것의디스어셈블코드로분석을하겠습니다. 밑의그림은이미제가손으로분석한것을스캐너로받아서첨부한것입니다.

실제로저는디버거상에서주석달면서내려가는것보다이렇게프린트해놓고손으로분석하는게집중이잘되더군요. ( 사실키보드를잡고있을충분한시간이없어서여기에적응되어버린건지도,,) 이제어떻게해야하느냐? 두가지방법이있습니다. 위암호화루틴을역으로분석하여복호화루틴을만드는것과순차적으로입력가능한모든경우의수를대입해보는방법이있습니다. 어떤방법이더어려울지는짐작이가시겠죠? 전자의방법은알고리즘을완벽하게파악해야함을물론이고, 상당한수학적능력이요구됩니다. 후자의방법은시간이오래걸리긴하지만, 복호화루틴없이암호화루틴만으로복호화코드를알아낼수있습니다. 우리는이미암호화루틴은알고있기때문에두번째방법을이용하는것이훨씬쉽겠죠? 저도머리쓰는것을싫어하기때문에 brute force 공격을시도하겠습니다. 먼저위루틴과동일한기능의암호화함수를만들었습니다. 이미 W32DASM 이어셈블리어로알려주었으므로 MASM 을이용하면더쉽게작성할수있습니다. 아니, MASM 을사용할수밖에없죠. (crack.asm) 저역시 icedump 를이용하여코드를덤프한뒤점프코드들에대해적절히라벨명을수정하는것만으로간단하게만들수있었습니다. MASM 으로라이브러리형태로컴파일한뒤 (ml /coff crack.asm) 확장자를.lib 으로바꿔줍니다. 함수에대한프로토타입을 long crack( char *stext ); 헤더파일 (crack.h) 에정의하고, 우리가 C 로작성할무차별대입프로그램 (solution.c) 에서 include 시켜줍니다. 이함수는우리가파라미터로넘겨준 8 자리문자열을가지고크랙미에서하는것과똑같은연산을하여 32 비트키값을리턴합니다. 크랙미에서는미리메모리에저장해둔키값 0x64F0B6D8 와비교하므로, 우리는모든값을차례대로대입하면서리턴값이 0x64F0B6D8 와같은지를체크하면되겠습니다. 처음에는숫자를입력해봤습니다만, 답이안나오더군요. readme.txt 에서도 word( 단어 ) 라고말하고있으므로 8 자리의대입가능한모든알파벳으로다시공격을시도했습니다. 결과는...? 빙고 ~! 공격한지몇분되지않아패스워드를뱉어내는군요 :) 조합가능한수많은경우의수가있기때문에, 패스워드가한두개가아니군요. 단점이있다면모든패스워드를알아내는데에는상당한시간이필요하다는것입니다. 지금의대문자 / 소문자의조합으로도 AAAAAAAA 부터 zzzzzzzz 까지연산하는데몇일은족히걸릴듯싶습니다. 거기다숫자, 특수문자까지포함된다면.. 어쩌면제대하기전에결과를못볼지도모릅니다 :) 실행되는과정을출력하게끔하면더욱더느려지기때문에 (printf 가상당히느립니다 ) 패스워드를찾았을때만출력하도록하는것이스트레스를덜받겠죠? Detten 은말이되는단어 (word) 를패스워드로설정한듯한데요, 제가알아낸것은다말이안되는것들이네요. 뭐, 그래도어때요크랙미에입력해보면맞다고하는걸요. hehe~

성공 ~ [ 첨부 1] crack.h #ifndef _CRACK_H_ #define _CRACK_H_ extern unsigned long crack( char *text ); #endif [ 첨부 2] crack.asm.386.model FLAT.DATA KEY_HIGH DD 00000000h KEY_LOW DD00000000h.CODE _crack PROC NEAR PUBLIC _crack PUSH EBP MOV EBP, ESP PUSH EDI PUSH EBX PUSH EDX PUSH ESI PUSH ECX MOV EAX, [EBP + 8] MOV EBX, [EAX] MOV KEY_HIGH, EBX

MOV EBX, [EAX + 4] MOV KEY_LOW, EBX XOR ESI, ESI MOV EAX, 0000DEADh MOV ECX, EAX XOR ECX, ECX XOR EBX, EBX LOOP2: MOV EDI, 000004D2h MOV EBX, KEY_HIGH XOR EDX, EDX CMP EBX, 40h JL ERROR LOOP1: MOV DL, BL ADD EDI, EDX ADD ESI, ESI XOR ESI, EDI SHL EDI, 02h SHR EBX, 08h CMP EBX, 00h JNZ LOOP1 INC ECX CMP ECX, 06h JNZ LOOP2 ADD ESI, EDI MOV EAX, ESI XOR ECX, ECX LOOP4: MOV EBX, KEY_LOW MOV EDI, 0000162Eh XOR EDX, EDX LOOP3: MOV DL, BL ADD EDI, EDX IMUL ESI, 03h XOR ESI, EDI SHL EDI, 03h SHR EBX, 08h CMP EBX, 00h

JNZ LOOP3 INC ECX CMP ECX, 06h JNZ LOOP4 ADD ESI, EDI ADD ESI, EAX MOV EAX, ESI JMP EXIT ERROR: MOV EAX, 0 EXIT: POP ECX POP ESI POP EDX POP EBX POP EDI MOV ESP, EBP POP EBP RET _crack ENDP END [ 첨부 3] solution.c #include <stdio.h> #include "crack.h" #define CRYPTED_KEY 0x64F0B6D8 int main( void ) { static char stext[8] = "AAAAAAAA"; register char bcnt; unsigned long lkey = 0; printf( "Solution for crackme5(by Detten) written by TAE-4 n" ); printf( "Searching Key.. (maybe it takes very long time) n n" ); //printf( "Input Text Crypted Key n" ); //printf( "---------- ----------- n" );

while( stext[0] < 'z' ) { for( bcnt = 7; bcnt > 0; bcnt-- ) { if( stext[bcnt] == ('Z' + 1) ) stext[bcnt] = 'a'; if( stext[bcnt] == ('z' + 1) ) { stext[bcnt] = 'A'; stext[bcnt - 1]++; } } lkey = crack( stext ); //printf( " r %s %X", stext, lkey ); if( lkey == CRYPTED_KEY ) printf( " => I got it! Key correct! n" ); stext[7]++; } return( 0 ); }