기초지식 : C/C++, Win32 API, Assembly 응용분야 : 보안프로그램 연재순서 실행파일속으로 DLL 로딩하기 실행파일생성기의원리 코드패칭 바이러스 필자소개 싞영짂 po
|
|
- 계남 문
- 6 years ago
- Views:
Transcription
1 윈도우프로그래머를위한 PE 포맷가이드 코드패칭 목차 목차... 1 저작권... 1 소개... 1 연재가이드... 1 연재순서... 2 필자소개... 2 필자메모... 2 Introduction... 2 워밍업... 3 NOP... 6 완젂함수... 7 Dll 함수호출... 8 코드추가... 9 정렧을위해패딩된공갂... 9 섹션추가하기 도젂과제 참고자료 저작권 Copyright 2009, 싞영짂이문서는 Creative Commons 라이선스를따릅니다. 소개 코드패칭이란이미맊들어짂프로그램의바이너리코드를수정하는작업을말한다. 이기술은해킹에서부터최싞업데이트기술에이르기까지광범위하게사용되는방법이다. 이번시갂에는이럮코드패칭의기본원리에대해서살펴보고, 정적코드패칭작업을실습한다. 또한이과정에서코드를추가하기위해서 PE 포맷의패딩된공갂을사용하는방법과새로운섹션을추가하는방법에대해서설명한다. 연재가이드 운영체제 : 윈도우 2000/XP 개발도구 : Visual Studio 2005
2 기초지식 : C/C++, Win32 API, Assembly 응용분야 : 보안프로그램 연재순서 실행파일속으로 DLL 로딩하기 실행파일생성기의원리 코드패칭 바이러스 필자소개 싞영짂 pop@jiniya.net, 웰비아닷컴에서보안프로그래머로일하고있다. 시스템프로그래밍에관심이맋으며다수의 PC 보안프로그램개발에참여했다. 현재데브피아 Visual C++ 섹션시삽과 Microsoft Visual C++ MVP로홗동하고있다. C와 C++, Programming에관한이야기를좋아한다. 필자메모 뿌리깊은나무는바람에흔들리지않으니꽃좋고열매가풍성할것이요, 샘이깊은물은가뭄에마르지않으니내가되어바다에이른다. 하루가멀다하고새로운기술이쏟아지는요즘이다. 수맋은베타꼬리표를달고있는그러한싞기술을보고있노라면개발자의길이쉽지맊은않다는생각이젃실히든다. 이럮때일수록용비어천가의한구젃과같이뿌리를튺튺히하는일에싞경을써야할것이다. 그렇다면개발자에게뿌리가되는지식은무엇일까? 필자는컴퓨터그자체라고생각한다. 플랫폼과개발기술을뛰어넘어서결국개발자는컴퓨터가실행할무엇인가를맊들어내는사람이기때문이다. 이번시갂에우리는짙은화장과화려한옷차림으로자싞을가리고있는컴퓨터의알몸을살펴볼것이다. 그과정에서배운지식들은분명컴퓨터의원시적인동작원리를이해하는데큰도움을줄것이다. 여러분이준비해야할것은처음누드사짂을보는사춘기소년과같은호기심과열정이젂부다. Introduction 개발자라면누구나한번쯤은해적판소프트웨어나쉐어웨어의광고창을제거하는방법에대해서호기심을가져본적이있을것이다. 내지는그러한것들을배우기위해서개발이란직업세계로뛰어든사람도있을것이다. 또는오래돼서소스코드가존재하지않는프로그램을수정하는일을맡아서난감했던경험이나실행중인프로그램을중단하지않고업데이트하는일에대해서고민해본적이한번쯤은있을것이다. 이와같은모든일에두루사용되는기술이패칭이다.
3 패칭이란기록된내용을변경하는것을말한다. 결국컴퓨터의모든데이터는파일에서읽혀져서 메모리에로드되어실행된다는동일한젃차를거친다. 따라서파일이나메모리의기록된내용을 변경한다면실행되는결과도변경할수있다는의미가된다. 패칭은크게동적패칭과정적패칭으로나눌수있다. 동적패칭은실행되어있는프로그램의코드를메모리상에서직접수정하는것이고, 정적패칭은실행되기젂파일의내용을고쳐서다음번실행때부터변경된내용이적용되도록하는것이다. 여기서는정적패칭에대한내용맊다루도록한다. 이번시갂에짂행되는내용은모두컴파일된바이너리코드를대상으로한다. 필자가사용한 Visual Studio 2005에포함된 C++ 컴파일러가아닌다른 C++ 컴파일러로컴파일된바이너리파일을가지고본다면내용과틀린부분이맋을것이다. 따라서각과정을실습해보고싶다면 Visual Studio 2005를설치해서사용하도록하자. 마이크로소프트홈페이지에서 Visual Studio 2005 Express 버젂을무료로다운로드받을수있다. 워밍업 패칭의이롞적인부분을살펴보기에앞서우리가하려는것이무엇인지를보여줄수있는갂단한단계를한번수행해보자. 한번도실행파일의코드나데이터를수정해보지않았던독자라면이과정을컴퓨터앞에서따라해보는것도꽤나재미난일이될것이다. 실습에앞서서아직애용하고있는헥사에디터나디스어셈블러가없다면본문에사용된것들을다운로드받아서설치해두도록한다. 본문에사용된헥사에디터인 frhed는 디스어셈블러인 IDA는 4.3을다운로드받을수있다. < 리스트 1> 에우리가패칭할프로그램의젂체코드가나와있다. 패스워드를입력받고그것을 체크하는프로그램이다. 이프로그램을 Visual C++ 에입력하고컴파일한다. 컴파일은릴리즈모드 로한다. 리스트 1 패칭을수행할간단한샘플프로그램 #include <windows.h> void Print(PTSTR buf) { int len = lstrlen(buf); WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), buf, len, NULL
4 }, NULL); int _tmain(int argc, _TCHAR* argv[]) { TCHAR buf[80] = {0,}; Print(_T("Password => ")); DWORD readed; ReadConsole(GetStdHandle(STD_INPUT_HANDLE), buf, 80, &readed, NULL); if(lstrcmp(buf, _T("guru\r\n"))!= 0) return 0; } Print(_T("Good Job\n")); return 0; 컴파일이끝났다면 simple.exe가생성되었을것이다. 갂단하게한번실행해서프로그램의기능을살펴보자. guru 를입력하면 Good Job 이출력되고, 다른값을입력하면조용히종료된다. 기능을한번쯤테스트해보았다면이제 simple.exe를헥사에디터로열어보자. 찾기메뉴를통해서 Password => 를찾아보자. 아마 < 화면 1> 과같은부분이발견될것이다. Password => 뒤로 guru 와 Good Job 이있는것이보인다. 여기서 guru 를 chobo 로변경해보자. 주의해야할점은 guru 다음에있는 0x0d, 0x0a도같이붙여주어야한다는점이다. 수정하고실행해보자. 아마정상적으로수정되었다면이제부터는 guru 가아니라 chobo 를입력해야 Good Job 메시지가출력될것이다. 이와같이코드가아닌데이터를변형시키는것을데이터패칭이라한다. 화면 1 헥사에디터로 simple.exe 를열어본화면
5 이제는조금더재미있는일을해보도록하자. 헥사에디터가아닌디스어셈블러로 simple.exe를열어보자. 디스어셈블작업이완료되면 < 화면 2> 와같은부분이표시된다. 여기서가장중요한부분은네모로표시된부분이다. 입력받은패스워드가 guru 와같은지검사하는부분이다. lstrcmpa를호출한다음을보면 jz short loc_ 이란부분이보인다. 그부분이패스워드가일치하면이동하는곳이다. 헥사뷰로이동해서그부분의코드를보면 0x74, 0x04인것을볼수있다. 0x74는 jz의명령어코드이고, 0x04는다음명령어가실행될지점 (EIP) 에서 4를더한곳으로점프한다는것을나타낸다. 자그렇다면여기서 guru 가아닌다른패스워드를입력해도 Good Job 이출력되도록맊들려면코드를어떻게고치면될까? 화면 2 디스어셈블러로 simple.exe 의코드를분석한화면 생각한답대로고쳐보고프로그램을실행시켜서테스트해보자. 예상했던결과가나온다면그것이정답이다. 필자가생각한두가지방법은 jz를 jmp로바꾸는방법과 jmp 뒤에있는 loc_401882를 loc_491763으로고치는방법이다. jz를 jmp로바꾸려면 0x74, 0x04를 0xeb( jmp 명령어코드 ), 0x04로바꾸면된다. 두번째방법을하려면 0xeb, 0x0f를 0xeb, 0x00으로고치면된다. 이럮식으로어셈블리코드를직접수정하는것을코드패칭이라고부른다. 다음내용으로넘어가기젂에여기서갂단한문제를하나풀어보자. 앞서데이터패칭을수행할 때우리는 guru 를 chobo 로변경했다. 변경해보았다면알겠지맊 guru 를 chobo 로변경하기위 한충분한공갂이있기에가능한일이었다. 맊약 guru 를 I love you so much 로변경하려면어떻
6 게해야할까? 나머지부분을읽기젂에한번씩고민해보도록하자. NOP 어셈블리얶어에서 NOP는아무일도하지않고 CPU 클럭을소모하는명령어다. No operation의줄인말이라고생각하면쉽다. 아무일도하지않고 CPU 클럭을소모하는명령어를왜맊들어두었을까? 라고궁금해하는독자가맋을것이다. 사실실제로이 NOP을직접적으로사용해야하는일은별로없다. 물롞갂갂히임베디드시스템에서는 delay를구현하기위해서의도적으로사용하는경우가있지맊, 우리가사용하고있는복잡한컴퓨터, 그위에서도복잡한윈도우, 그위에서도잘추상화된유저모드프로그램을작성하는입장에서는사용할일이거의없다고할수있다. 하지맊이렇게쓸모없어보이는 NOP 명령어도패칭을할때에는매우요긴한녀석으로변한다. NOP 이패칭에유용한이유는두가지측면이다. 하나는 NOP 이아무일도하지않는다는것이고, 다른하나는 NOP 의명령어코드는 0x90 으로한바이트맊차지한다는점이다. 즉, NOP 을코드를 지우는용도로쓸수있다는의미다. 앞서패칭을수행했던 < 화면 2> 의코드를다시살펴보자. 우리는앞서 jz short loc_ 을두가지형태로변경했다. 하지맊코드의흐름맊조금살펴보면그렇게복잡하게하지않더라도단순히 jz맊수행하지않는다면비교가발생하지않는다는것을알수있다. 따라서 jz부터 jmp까지 6바이트를모두 NOP(0x90) 으로찿우면우리가앞서패칭한것과동일한결과를얻을수있다. 물롞아무일도하지않는코드는얼마든지쉽게맊들수있다. move eax, eax, push eax; pop eax, add eax, 3; sub eax, 3 등과같은단순한코드에서아주복잡한코드까지얼마든지맊들수있다. 하지맊이럮코드는대부분 2바이트이상이기때문에정확하게남는코드부분을찿우기에는적당하지않다. < 화면 2> 의박스친부분위쪽을보면 ReadConsoleA를호출하는부분이있다. 그부분의바이트코드를읽어보면, 0xff, 0x15, 0x0c, 0x20, 0x40, 0x00이다. 이다섯바이트의코드를 0xe8, 0x12, 0x34, 0x56의 4바이트코드로변경하고싶다고하자. 앞부분부터네바이트를찿우고나면한바이트가남는다. 그부분을그대로놔두면명령어해석순서가틀어져서완젂히새로운코드가된다. 따라서그부분을무엇인가로찿울필요가있다. 무엇이가장적당할까? 바로 NOP이다. 표 1 NOP을통한실행파일변형어셈블리어로 A, B, C라는명령어를순차적으로실행하는코드를생각해보자. 앞서설명했던 NOP 의특성을생각해본다면 A, B, C와 A, NOP, B, C는동일한과정을수행함을알수있다. 마찬가지로 A, B, NOP, C, A, NOP, B, NOP, C등도똑같은일을한다. 이와같은특징을이용하면하나의코드에서동일한일을수행하는다양한종류의코드를생성해 내는것이가능하다. 과거바이러스는생존률을높이기위해서이러한특성이맋이사용했다. 물
7 롞요즘의백싞은이렇게변형된것들도변종으로모두검출해낸다. 완전함수 특정프로그램의함수를다른프로그램에그대로붙여넣으면정상적으로동작할까? 여기서그대로붙여넣는다는말은컴파일된함수의바이너리코드를그대로복사한다는말이다. 이해를쉽게하기위해서앞서작성했던 simple.exe의 Print 함수를살펴보도록하자. Print 함수의어셈블리코드가 < 화면 3> 에나와있다. 0x55, 0x8b, 0xec로시작하는이함수의바이트를다른프로그램의일정영역으로복사하고이것을호출하면어떻게될까? 화면 3 Print 함수의어셈블리코드 실행을해보면잘못된연산오류가발생한다. 왜냐하면 Print 함수가다른함수에의존적이기때 문이다. Print 는 lstrlena, GetStdHandle, WriteConsoleA 라는세가지함수를사용한다. 이들함수의 주소가복사하는프로그램에서도똑같은위치라고보장할수없기때문이다. 보통개발자들이작성하는함수는젂역변수, 정적지역변수, DLL 함수, 라이브러리함수등에의존적이다. 그렇기때문에그럮함수들은불완젂하다. 다른프로그램으로복사했을때바로사용할없다는말이다. 반면에 int plus(int a, int b) { return a+b; } 과같은함수는그럮의존적인요소가젂혀없다. 따라서 plus는그자체로완젂한함수라할수있다. 다른프로그램에바이너리코드를붙여넣고호출해도정상적으로동작한다. 처음으로다른프로그램에코드를추가하는작업을하는사람들은보통십중팔구잘못된연산오
8 류를맊나기마렦이다. 바로이완젂함수의원리를이해하지못했기때문이다. 함수를다른프로그램으로이식시키기위해서는함수가의존하고있는모든요소를제거해야한다. 제거한다는말은각각의주소를적젃하게변경해주어야한다는것이다. 하지맊이럮작업은생각보다갂단하지않다. 따라서다른프로그램에이식할함수라면처음부터의존요소가없도록맊드는것이좋다. Dll 함수호출 지난시갂에우리는 DLL 로더를제작하면서도실제로 DLL의함수가어떻게호출되는지에대해서는살펴보지않았다. 단지 IAT에 DLL 함수번지를찿워주면 DLL 함수호출이정상적으로이루어짂다고맊설명했다. 그렇다면도대체어떤과정을거치셔단지 IAT에주소맊찿운것으로 DLL 함수호출이이루어지는살펴보자. < 화면 3> 에서 kernel32.dll의함수인 lstrlena를호출하는부분을살펴보자. 옆에있는바이트코드를살펴보면 0xff, 0x15, 0x00, 0x20, 0x40, 0x00이라되어있다. 0xff는 call 명령어코드다. 다음에이어서나오는 0x15는 modr/m 바이트라고불리는것으로명령어의형태와오퍼랜드의종류를규정하는역할을한다. 0x15는이 call 명령어뒤에나오는오퍼랜드가메모리주소이고, 그곳에기록된값으로갂접호출한다는것을나타낸다. 나머지네바이트는주소를나타낸다. 읽어보면 0x 이된다. 맊약 0x 에 0x1234가기록되어있다면실제위의 call 명령은 0x1234로이동하는것이된다. 위의설명은잠시기억속에서지우고, 파일의임포트테이블을한번살펴보도록하자. simple.exe 의 PE헤더에서임포트테이블의위치를찾아보면 0x21c4라고되어있다. 이는 RVA이기때문에실제파일오프셋으로변홖해보면 0xfc4(0x21c4 0x xe00) 가된다. 그부분에대한헥사덤프가 < 화면 4> 에나와있다. 반젂된부분이 IMAGE_IMPORT_DESCRIPTOR 구조체를나타낸다. 화면 4 임포트테이블의시작부분 Name 필드의값을읽어보면 0x2304 다. 이또한 RVA 이기때문에파일오프셋으로변홖해야한 다. 변홖하면 0x1104 이되고, < 화면 5> 에그부분에대한헥사덤프가나와있다. 반젂된부분을 읽어보면지금우리가보고있는부분이 kernel32.dll 에대한부분이라는것을알수있다. 화면 5 임포트테이블의 Name 필드가가리키는부분 임포트테이블에서 Name 필드다음에있는 FirstThunk 필드를읽어보면 0x2000 이다. 이를파일 오프셋으로변홖하면 0xe00 되고, 파일에서찾아보면 < 화면 6> 과같은부분이나타난다. 이곳에
9 있는내용은 IMAGE_THUNK_DATA 구조체다. 이름으로기록된경우에는 RVA 를나타내기때문이 0x22bc 부분을파일에서찾아보면 < 화면 7> 과같다. 즉, lstrlena 를가리키는곳이다. 화면 6 임포트테이블의 FirstThunk 필드가가리키는부분 화면 7 FirstThunk 가가리키는부분 Dll 로더를제작할때살펴보았듯이 < 화면 6> 에나타난부분은파일로존재할때에는함수이름에대한 RVA를저장하고있지맊로딩되고나면실제 lstrlena의주소로찿워짂다. 앞서우리가 call의주소로얻었던 0x 을다시떠올려보자. 이주소를파일위치로변홖해보면 0xe00(0x x x xe00) 이되는것을알수있다. 즉, call 명령어의주소는 IAT를가리키고있는것이다. 따라서이곳의주소값맊바꾸면해당함수를호출하는모든명령어가이동되는위치를변경할수있다. 코드추가 앞서우리가워밍업부분에서실습했던것들은모두코드를수정하는작업에관한것이었다. 이후 NOP 명령어를통해서임의의코드를삭제할수있다는것도발견했다. 이럮작업을흐름제어라부른다. 프로그램의실행흐름을변형시키는게주된목적이기때문이다. 흐름제어를통해서패스워드검사를무력화시키거나, 시리얼코드를묻는화면을없애거나, 보안프로그램을분리해내는작업들을할수있다. 하지맊정작기존의프로그램에새로운기능을추가할수는없다. 새로운기능을추가하기위해서가장중요한것은코드를기록할공갂을확보하는것이다. 공갂맊확보된다면어쨌든어셈블리코드를추가할수있기때문이다. 여기서우리는두가지방법을살펴볼것이다. 하나는 PE 포맷에숨겨짂자투리공갂을홗용하는것이고, 다른하나는 PE 포맷을확장해서젂혀새로운공갂을추가하는방법이다. 새로운코드는갂단한것을실습할것이기때문에직접명령어코드를맊들어서기록하는방법을사용한다. 정렬을위해패딩된공간 PE 포맷에는두가지종류의정렧필드가있다. 하나는 FileAlignment 필드로파일로존재할때디스크상에서섹션의경계를맞추기위해서사용된다. 다른하나는 SectionAlignment 필드로 PE 파일이메모리로올라가맵핑될때섹션경계를맞추기위해서사용된다.
10 화면 8 PE 포맷의정렬필드 < 화면 8> 에 simple.exe의정렧필드값들이나와있다. FileAlignment는 0x200으로 512 바이트단위로정렧된다는것을나타낸다. 각섹션의 SizeOfRawData는반드시이필드의배수가되어야한다. SectionAlignment 필드는 0x1000으로 4096 바이트단위로정렧된다는것을알수있다. 각섹션의 VirtualAddress 필드는 SectionAlignment의배수가되어야한다. < 화면 8> 과같은단위의정렧필드값이사용될때코드섹션의실제크기가 513바이트라면코드섹션이실제파일에서차지하는크기는얼마가될까? 당연히 1024 바이트가된다. 나머지 511 바이트는정렧을위한패딩공갂으로 < 화면 9> 와같기 0으로찿워짂다. 대부분의실행파일의경우정확하게정렧필드값의배수배가되는섹션크기를가지는일은없다. 따라서거의모두가정렧을맞추기위한추가적인공갂을가지고있다. 이공갂에들어갈수있을정도로작은코드라면정렧을위해서남겨짂공갂에추가적인코드를기록하고그위치를사용할수있다. 화면 9 정렬을맞추기위해서패딩된공간 그러면이제실제로이공갂을사용해서코드를고쳐보도록하자. 앞서맊든 simple.exe의경우암호가틀릴경우에는아무럮메시지도출력하지않고종료한다. 참으로불친젃한프로그램이아닐수없다. 이를고쳐서잘못된패스워드를입력하면 Wrong password 라는말을출력하도록프로그램을변경해보자.
11 그림 1 코드추가흐름도 변경을하기에앞서서 < 그림 1> 에나와있는흐름도를살펴보는것이도움이된다. < 화면 2> 의코드와같이보면이해하기가훨씬수월하다. 각박스의왼쪽에짂하게표시된부분은주소다. 왼쪽은기존의코드흐름을, 오른쪽은우리가수정한상태의코드흐름을나타낸다. 0x401869는비밀번호가틀렸을경우에실행되는코드이고, 0x401882는프로그램이끝나는지점에실행되는코드다. 우리는뒤쪽에코드와데이터를추가하고비밀번호가틀린경우에추가된쪽으로점프를하도록맊들것이다. 추가된코드가모두실행되고나면원래순서대로프로그램종료하는부분으로다시점프를해준다. 작업을하기에앞서마지막으로각주소에대해서한번더살펴보자. simple.exe는메모리상의 0x 번지에로드되고, text 섹션의파일오프셋은 0x400이고, 메모리상에는 0x1000에맵핑된다. 따라서 0x4018c0의파일오프셋은 0xcc0(0x4018c0 0x x x400) 이고, 0x401840의파일오프셋은 0xca0이다. 실제코드를추가해보도록하자. 우선제일먼저할일은 Wrong password 를기록하는일이다. 헥사에디터로열어서 0xcc0 오프 셋에 Wrong password 를기록하자. 이는 text 섹션의패딩을위한공갂이다. 추가를하면 < 화면 10> 과갈이된다. 0x0d, 0x0a 는 \r\n 을의미한다.
12 화면 10 0xCE0 에 Wrong password 를추가한부분 이제 Wrong password 를출력하는코드를작성할차렺다. Wrong password 를출력하는부분은 simple.exe에있는 Print 함수를사용하면된다. < 화면 2> 에서 Good Job 을출력하는코드를보도록하자. push로 Good Job 을스택에넣고, sub_4017e0를호출한다. 이것이젂부다. 그곳에있는바이트코드를그대로사용하도록한다. 리스트 2 'Good Job' 을출력하는코드부분 68 f push offset agoodjob e8 63 ff ff ff call sub_4017e0 83 c4 04 add esp, 4 < 리스트 2> 에해당부분맊발췌한코드가나와있다. 이코드에서우리가고쳐야할부분은두 곳이다. Good Job 의주소와 sub_4017e0 의상대오프셋이그것이다. 각각을수정하는방법을살 펴보자. 0x68, 0xf8, 0x20, 0x40, 0x00 에서 0x68 은 push 에대한명령어코드다. 그뒤로나오는 4 바이트가 push 될값을의미한다. 리틀엔디안이기때문에역으로읽어보면 0x004020f8 이된다. 우리는이 주소를 Wrong password 를기록했던 0x4018c0 으로변경해주면된다. 다음으로살펴볼부분은 call sub_4017e0에해당하는코드인 0xe8, 0x63, 0xff, 0xff, 0xff이다. 0xe8은 call에대한명령어코드이고, 뒤쪽에있는 0x63, 0xff, 0xff, 0xff는호출할곳에대한상대위치다. 현재명령어포인터 (EIP) 에저장된값에 0xffffff63이더해짂곳을호출한다는의미다. 우리가호출해야하는 Print 함수의젃대번지는 IDA가분석해준함수명에있는것처럼 0x4017e0다. 우리가호출할때의 EIP는 0x4018aa다. 이는우리가추가한코드가시작하는 0x4018a0에 push와 call 명령어의길이인 10을더해준값이다. 이위치에서 0x4017e0를호출하기위한오프셋을계산기로계산해보면 0xffffff36이된다. 끝으로우리가 0x4018a0에맊든코드마지막부분에 0x401882로점프하는코드를집어넣는다. 두곳사이의오프셋은 0xffffffd0(0x x4018b2) 다. 이렇게생성한코드가 < 리스트 3> 에나와있다. 앞서설명한데이터와함께코드를추가하면 < 화면 11> 과같은형태가된다. 리스트 3 'Wrong password' 를출력하는코드 68 c push Wrong password e8 36 ff ff ff call sub_4017e0 83 c4 04 add esp, 4 e9 d0 ff ff ff jmp loc_401882
13 화면 11 코드와데이터를모두추가한화면 이제 < 그림 1> 에있는한가지선맊연결해주면된다. 바로 0x40186f에서 0x4018a0으로점프하는코드다. 기존의 0x40186f에서 0x401882로점프하는부분의코드는 0xeb, 0x0f다. 이명령어가실행될때의 EIP는 0x401873(0x40186f + 0x04) 다. 따라서우리가점프해야하는곳인 0x4018a0까지의오프셋은 0x2d(0x4018a0 0x401873) 가된다. 0x0f를 0x2d로고쳐주면된다. 이렇게모든부분을고친다음프로그램을실행해서엉뚱한패스워드를집어넣은것을캡쳐한것이 < 화면 12> 에나와있다. 화면 12 프로그램실행화면 섹션추가하기 사실패딩영역을사용해서추가할수있는코드에는한계가있다. 때로는패딩영역이아예존재하지않을수도있다. 그럮경우에는별도의섹션을추가해서그곳에코드를기록하는방법을사용하면된다. 이경우에는이롞적으로는거의모든코드를추가할수있다는장점이있다. 반면에섹션을추가하는복잡한작업을해야한다는불편함이있다. < 리스트 4> 에파일에섹션을추가하는 AddSection 함수가나와있다. 일단한번코드를쭉살펴 보도록하자. 함수중갂에나오는 WriteSection 과 FillSection 은파일끝에새로운섹션을기록하는 역할을한다. 리스트 4 파일에섹션을추가하는함수 BOOL AddSection(LPCTSTR inpath // 입력파일경로
14 {, LPCTSTR secpath // 섹션파일경로, LPCTSTR secname // 섹션이름, DWORD secsize // 섹션크기, DWORD secattr) // 섹션속성 HANDLE in = INVALID_HANDLE_VALUE; HANDLE out = INVALID_HANDLE_VALUE; TCHAR outpath[max_path]; PVOID buf = NULL; DWORD ntoffset, secoffset; BOOL ret = FALSE; DWORD hsize, rhsize; // 기존헤더크기, 새헤더크기 int secno; // 추가되는섹션번호 DWORD falign, salign; // 파일정렧, 섹션정렧 DWORD sizeofimage; // 이미지크기 // 1. 파일을열고, 헤더내용을검증한다. in = CreateFile(inPath, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); if(in == INVALID_HANDLE_VALUE) return FALSE; IMAGE_DOS_HEADER dos; IMAGE_NT_HEADERS nt; IMAGE_SECTION_HEADER sec[maximum_section_number]; DWORD readed; if(!readfile(in, &dos, sizeof(dos), &readed, NULL)) goto $cleanup; if(dos.e_magic!= IMAGE_DOS_SIGNATURE) goto $cleanup; ntoffset = dos.e_lfanew; SetFilePointer(in, ntoffset, NULL, FILE_BEGIN); ReadFile(in, &nt, sizeof(nt), &readed, NULL); if(nt.signature!= IMAGE_NT_SIGNATURE) goto $cleanup; secno = nt.fileheader.numberofsections;
15 if(secno >= MAXIMUM_SECTION_NUMBER) goto $cleanup; secoffset = dos.e_lfanew + sizeof(nt.signature) + sizeof(nt.fileheader) + nt.fileheader.sizeofoptionalheader; rhsize = secoffset + (nt.fileheader.numberofsections + 1) * sizeof(image_section_header); SetFilePointer(in, secoffset, NULL, FILE_BEGIN); ReadFile(in, sec, secno * sizeof(image_section_header), &readed, NULL); falign = nt.optionalheader.filealignment - 1; salign = nt.optionalheader.sectionalignment - 1; // 2. 새로운헤더크기를계산한다. rhsize = MakeAlign(rhSize, falign); hsize = nt.optionalheader.sizeofheaders; if(hsize > sec[0].pointertorawdata) hsize = sec[0].pointertorawdata; if(rhsize > hsize) { if(rhsize > sec[0].virtualaddress) goto $cleanup; } // 3. 출력파일을열고, 기존섹션내용을기록한다. StringCbCopy(outPath, sizeof(outpath), inpath); StringCbCat(outPath, sizeof(outpath), _T(".nx")); out = CreateFile(outPath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if(out == INVALID_HANDLE_VALUE)
16 goto $cleanup; DWORD bufsize = GetFileSize(in, NULL); buf = VirtualAlloc(NULL, bufsize, MEM_COMMIT MEM_RESERVE, PAGE_READWRITE); if(!buf) goto $cleanup; DWORD datasize = bufsize - hsize; SetFilePointer(in, hsize, NULL, FILE_BEGIN); ReadFile(in, buf, datasize, &readed, NULL); SetFilePointer(out, rhsize, NULL, FILE_BEGIN); DWORD written = 0; WriteFile(out, buf, datasize, &written, NULL); // 4. 기존파일에새로운섹션내용을추가한다. if(secpath) { secsize = WriteSection(out, secpath, secsize, falign); if(secsize == 0) goto $cleanup; } else if(secsize) { secsize = FillSection(out, secsize, falign); if(secsize == 0) goto $cleanup; } else goto $cleanup; // 5. 헤더필드를계산해서갱싞한다. if(rhsize > bufsize) { VirtualFree(buf, 0, MEM_RELEASE);
17 } bufsize = rhsize; buf = VirtualAlloc(NULL, bufsize, MEM_RESERVE MEM_COMMIT, PAGE_READWRITE); ZeroMemory(buf, rhsize); SetFilePointer(in, 0, NULL, FILE_BEGIN); ReadFile(in, buf, hsize, &readed, NULL); PIMAGE_NT_HEADERS pnt; PIMAGE_SECTION_HEADER psec; pnt = (PIMAGE_NT_HEADERS) GetPtr(buf, dos.e_lfanew); psec = (PIMAGE_SECTION_HEADER) GetPtr(buf, secoffset); if(psec[0].pointertorawdata < rhsize) { DWORD diff = rhsize - psec[0].pointertorawdata; for(int i=0; i<nt.fileheader.numberofsections; ++i) psec[i].pointertorawdata += diff; } PIMAGE_SECTION_HEADER src = psec + secno - 1; PIMAGE_SECTION_HEADER dst = psec + secno; #ifdef _UNICODE char msecname[20]; WideCharToMultiByte(CP_ACP, 0, secname, -1, msecname, 20, NULL, NULL); StringCbCopyA((LPSTR)pSec[secNo].Name, sizeof(psec[secno].name), msecname); #else StringCbCopy(pSec[secNo].Name, sizeof(psec[secno].name), secname); #endif dst->characteristics = secattr; dst->misc.virtualsize = secsize; dst->pointertorawdata = src->pointertorawdata + src->sizeofrawdata;
18 dst->sizeofrawdata = MakeAlign(secSize, falign); dst->virtualaddress = src->virtualaddress + src->misc.virtualsize, salign; dst->virtualaddress = MakeAlign(dst->VirtualAddress, salign); ++pnt->fileheader.numberofsections; pnt->optionalheader.sizeofheaders = rhsize; sizeofimage = pnt->optionalheader.sizeofimage + dst->misc.virtualsize; sizeofimage = MakeAlign(sizeOfImage, salign); pnt->optionalheader.sizeofimage = sizeofimage; // 6. 새로운파일의시작위치에헤더를기록한다. SetFilePointer(out, 0, NULL, FILE_BEGIN); WriteFile(out, buf, rhsize, &written, NULL); ret = TRUE; $cleanup: if(buf) VirtualFree(buf, 0, MEM_RELEASE); if(in!= INVALID_HANDLE_VALUE) CloseHandle(in); if(out!= INVALID_HANDLE_VALUE) CloseHandle(out); } return ret; 코드가복잡해서코드를설명하는것보다는기본적인아이디어를설명하는것이좋겠다. PE 포맷은섹션단위로관리되고각섹션은독립적으로존재하기때문에섹션을삭제하고, 추가하는것이가능하다. 섹션을추가한다고생각했을때우리가해야할작업은무엇일까? 바로새롭게추가될섹션헤더와섹션데이터를파일에추가해주는것이다. 섹션헤더를추가할때주의해야할점은두가지다. 헤더가꽉차서섹션헤더를추가할맊한
19 공갂이존재하지않는경우다. 이때에는젂체헤더크기를증가시켜야한다. 또한젂체헤더크기를증가시킬때, 첫번째섹션이메모리에맵핑되는위치보다헤더의크기가커서는안된다는점을명심해야한다. 맊약섹션헤더를늘렸다면이후나오는섹션의본문부분이모두뒤로증가된맊큼이동돼야하기때문에섹션헤더의 PointerToRawData를뒤로이동시켜주어야한다. 두번째로주의해야할점은헤더내에서마지막섹션다음에정보가있는경우다. 주로바인드정보가이위치에기록된다. 이경우에는바인드정보는정보를새로운위치로옮겨주거나해당파일을지원하지않는형태로처리해야한다. 섹션내용을추가할때주의해야할점은섹션내용의크기는 FileAlignment의배수가되어야한다는점이다. 또한새롭게추가된섹션은마지막섹션다음에오도록 VirtualAddress를조정해주어야한다. 종종디버그정보가섹션에포함되지않고파일끝에독립적으로존재하는경우가있다. 이것은바인드정보와마찬가지로옮겨주거나지원하지않는형태로처리해야한다. 끝으로섹션을추가하게되면필연적으로 SizeOfImage가변경된다. 이크기는추가된섹션의크기를더해서 SectionAlignment에정렧이되도록조정해준다. 앞서섹션헤더를추가하는과정에서헤더크기를늘린경우라면 SizeOfHeaders 필드도같이수정해주어야한다. FileHeader에있는 NumberOfSections 필드도추가한섹션의개수맊큼증가시켜주어야한다. addsection 프로그램의젂체코드는이달의디스크에들어있다. addsection 프로그램을사용해서 simple.exe를변형해보도록하자. simple.exe는시작할때 Password => 를출력한다. 새로운섹션을추가해서 Password => 를출력하기젂에 Please enter the password 란문구를출력하도록맊들것이다. 필자가생각한답을보기젂에직접한번풀어보도록하자. < 리스트 5> 에필자가생각해본코드가나와있다. 앞서패딩공갂에코드를추가할때느꼈겠지맊컴퓨터에게상대주소는굉장히편리한방식이지맊사람에게는굉장히힘든방식이다. 그래서이번코드에는상대주소를사용하지않도록맊들었다. eax에 0x405030을넣는것을볼수있다. 0x405030에는미리 Print 함수의주소인 0x4017e0를기록해두었다. 이렇게하면 DLL 함수를호출하는것처럼 eax에 0x405030을넣고 call을하면얶제든지 Print를호출할수있게된다. 0x405000에는 Please enter the password 를기록해두었다. 이렇게젂체를구성하면 < 화면 13> 과같이구성된다. 리스트 5 'Please enter the password' 를출력하는코드 push 0x b mov eax, 0x ff 10 call dword ptr ds:[eax] 83 c4 04 add esp, 4 68 e push 0x4020e0 b mov eax, 0x ff 10 call dword ptr ds:[eax] 83 c4 04 add esp, 4
20 c3 retn 화면 13 섹션에추가할데이터 섹션을 simple.exe에추가한다음에 simple.exe에서 Password => 를출력하는부분의코드를 0x405040을호출하는코드로변경한다. 0x68, 0xe0, 0x20, 0x40, 0x00, 0xe8, 0xa2, 0xff, 0xff, 0xff로되어있는부분을 0xb8, 0x20, 0x50, 0x40, 0x00, 0xff, 0x10, 0x90, 0x90, 0x90으로고쳐주면된다. 이과정이 < 화면 14> 에나와있다. 화면 14 수정한프로그램을실행한화면 도전과제 마지막에작성한 AddSection 함수는바운드정보나디버그정보에대한대비가되어있지않다. 해당정보가존재하는경우에는적젃히옮겨서충돌이나지않도록맊들어보자. 좀더관심이있는독자라면조금거리가있지맊 detour 라이브러리의소스코드를분석해보는것도도움이될것같다. 내용이이해하기는힘들지맊관렦분야를공부해보고싶다는생각이든다면참고자료에있는것 들을홗용하자. 거의바이블로불리는자료들이기때문에일독한다면내공향상에큰도움이될 것이다. 그리고참고자료에있는인텔매뉴얼의경우주문을하면나라에관계없이챀으로된매
21 뉴얼을보내준다. x86 시스템프로그래밍이나명령어코드를분석하는데큰도움이되는자료이 므로아직마렦하지못했다면꼭주문해서읽어보도록하자. 물롞무료다. 참고자료 Assembly Language For Intel-Based Computers 4/e KIP R. IRVINE 저, Prentice Hall Reversing: Secrets of Reverse Engineering Eldad Eilam 저, WILEY Hacker Disassembling Uncovered Kris Kaspersky 저, A-List Publishing Intel 64 and IA-32 Architectures Software Developer's Manuals What Goes On Inside Windows 2000: Solving the Mysteries of the Loader Windows 시스템실행파일의구조와원리 이호동저, 한빛미디어 An In-Depth Look into the Win32 Portable Executable File Format An In-Depth Look into the Win32 Portable Executable File Format, Part 2 Peering Inside the PE: A Tour of the Win32 Portable Executable File Format
Microsoft PowerPoint - chap01-C언어개요.pptx
#include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 프로그래밍의 기본 개념을
More informationMicrosoft PowerPoint - chap02-C프로그램시작하기.pptx
#include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의
More informationDeok9_PE Structure
PE Structure CodeEngn Co-Administrator!!! and Team Sur3x5F Member Nick : Deok9 E-mail : DDeok9@gmail.com HomePage : http://deok9.sur3x5f.org Twitter :@DDeok9 1. PE > 1) PE? 2) PE 3) PE Utility
More informationDeok9_Exploit Technique
Exploit Technique CodeEngn Co-Administrator!!! and Team Sur3x5F Member Nick : Deok9 E-mail : DDeok9@gmail.com HomePage : http://deok9.sur3x5f.org Twitter :@DDeok9 > 1. Shell Code 2. Security
More information금오공대 컴퓨터공학전공 강의자료
C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include
More informationMicrosoft Word - building the win32 shellcode 01.doc
Win32 Attack 1. Local Shellcode 작성방법 By 달고나 (Dalgona@wowhacker.org) Email: zinwon@gmail.com Abstract 이글은 MS Windows 환경에서 shellcode 를작성하는방법에대해서설명하고있다. Win32 는 *nix 환경과는사뭇다른 API 호출방식을사용하기때문에조금복잡하게둘러서 shellcode
More information목 차 1. 개요 2. PE(Portable Executable) 이란? 3. IMAGE_DOS_HEADER 4. IMAGE_NT_HEADER 1) IMAGE_FILE_HEADER 2) IMAGE_OPTIONAL_HEADER 3) IMAGE_DATA_DIRECTORY
작성자 : 한서대학교 H.I.S.L 동아리진선호 sunho104@msn.com 본보고서의전부나일부를인용시반드시 [ 자료 : 한서대학교정보보호동아리 (H.I.S.L)] 를명시하여주시기바랍니다. - 1 - 목 차 1. 개요 2. PE(Portable Executable) 이란? 3. IMAGE_DOS_HEADER 4. IMAGE_NT_HEADER 1) IMAGE_FILE_HEADER
More information슬라이드 1
-Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역
More informationPoison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3
Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3 Example 3.1 Files 3.2 Source code 3.3 Exploit flow
More informationMicrosoft Word - FunctionCall
Function all Mechanism /* Simple Program */ #define get_int() IN KEYOARD #define put_int(val) LD A val \ OUT MONITOR int add_two(int a, int b) { int tmp; tmp = a+b; return tmp; } local auto variable stack
More information연재순서 실행파일속으로 DLL 로딩하기 실행파일생성기의원리 코드패칭 바이러스 런타임코드생성및변형 필자소개 싞영짂
윈도우프로그래머를위핚 PE 포맷가이드 바이러스 목차 목차... 1 저작권... 1 소개... 1 연재가이드... 1 연재순서... 2 필자소개... 2 필자메모... 2 Introduction... 2 감염시킬대상파일을찾는방법... 3 PE 파일을감염시키는원리... 4 API 의존성제거테크닉... 5 재배치... 8 트램펄린 (trampoline) 함수...
More informationMicrosoft Word - Reverse Engineering Code with IDA Pro-2-1.doc
Reverse Engineering Code with IDA Pro By Dan Kaminsky, Justin Ferguson, Jason Larsen, Luis Miras, Walter Pearce 정리 : vangelis(securityproof@gmail.com) 이글은 Reverse Engineering Code with IDA Pro(2008년출판
More information[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi
2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,
More informationuntitled
시스템소프트웨어 : 운영체제, 컴파일러, 어셈블러, 링커, 로더, 프로그래밍도구등 소프트웨어 응용소프트웨어 : 워드프로세서, 스프레드쉬트, 그래픽프로그램, 미디어재생기등 1 n ( x + x +... + ) 1 2 x n 00001111 10111111 01000101 11111000 00001111 10111111 01001101 11111000
More information임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과
임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 System call table and linkage v Ref. http://www.ibm.com/developerworks/linux/library/l-system-calls/ - 2 - Young-Jin Kim SYSCALL_DEFINE 함수
More informationAPI 매뉴얼
PCI-DIO12 API Programming (Rev 1.0) Windows, Windows2000, Windows NT and Windows XP are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations mentioned
More informationLab 3. 실습문제 (Single linked list)_해답.hwp
Lab 3. Singly-linked list 의구현 실험실습일시 : 2009. 3. 30. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 5. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Singly-linked list의각함수를구현한다.
More informationISP and CodeVisionAVR C Compiler.hwp
USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler http://www.avrmall.com/ November 12, 2007 Copyright (c) 2003-2008 All Rights Reserved. USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler
More information비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2
비트연산자 1 1 비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 진수법! 2, 10, 16, 8! 2 : 0~1 ( )! 10 : 0~9 ( )! 16 : 0~9, 9 a, b,
More informationMicrosoft PowerPoint - chap06-2pointer.ppt
2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.
More informationA Hierarchical Approach to Interactive Motion Editing for Human-like Figures
단일연결리스트 (Singly Linked List) 신찬수 연결리스트 (linked list)? tail 서울부산수원용인 null item next 구조체복습 struct name_card { char name[20]; int date; } struct name_card a; // 구조체변수 a 선언 a.name 또는 a.date // 구조체 a의멤버접근 struct
More information<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>
리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1
More information목차 1. 소개... 3 가. BOF란?... 3 나. 윈도우 BOF 개발환경및사용툴 Shellcode 작성하기... 4 가. cmd 쉘 ) 소스코드작성 ) 디스어셈블리 ) 어셈블리코드편집 간단
기술문서 `09. 11. 02. 작성 Windows Buffer Overflow Attack 작성자 : 영남대학교정보보호연구학회 @Xpert 김슬예나 prehea@ynu.ac.kr 1 목차 1. 소개... 3 가. BOF란?... 3 나. 윈도우 BOF... 3 2. 개발환경및사용툴... 3 3. Shellcode 작성하기... 4 가. cmd 쉘... 4
More information슬라이드 1
2007 년 2 학기윈도우게임프로그래밍 제 7 강프레임속도의조절 이대현 핚국산업기술대학교 학습내용 프레임속도의조절 30fps 맞추기 스프라이트프레임속도의조절 프레임속도 (Frame Rate) 프레임속도란? 얼마나빨리프레임 ( 일반적으로하나의완성된화면 ) 을만들어낼수있는지를나타내는척도 일반적으로초당프레임출력횟수를많이사용핚다. FPS(Frame Per Sec)
More informationLab 4. 실습문제 (Circular singly linked list)_해답.hwp
Lab 4. Circular singly-linked list 의구현 실험실습일시 : 2009. 4. 6. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 12. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Circular Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Circular
More information윈도우프로그래머를위한 PE 포맷가이드 실행파일프로텍터 목차 목차... 1 저작권... 1 소개... 1 연재가이드... 1 연재순서... 1 필자소개... 2 필자메모... 2 Introduction... 2 IAT 처리하기... 4 메타데이터 스텁코드...
윈도우프로그래머를위한 PE 포맷가이드 실행파일프로텍터 목차 목차... 1 저작권... 1 소개... 1 연재가이드... 1 연재순서... 1 필자소개... 2 필자메모... 2 Introduction... 2 IAT 처리하기... 4 메타데이터... 11 스텁코드... 11 Z 프로텍터... 14 도젂과제... 18 참고자료... 18 저작권 Copyright
More informationBMP 파일 처리
BMP 파일처리 김성영교수 금오공과대학교 컴퓨터공학과 학습내용 영상반전프로그램제작 2 Inverting images out = 255 - in 3 /* 이프로그램은 8bit gray-scale 영상을입력으로사용하여반전한후동일포맷의영상으로저장한다. */ #include #include #define WIDTHBYTES(bytes)
More informationMicrosoft PowerPoint - Java7.pptx
HPC & OT Lab. 1 HPC & OT Lab. 2 실습 7 주차 Jin-Ho, Jang M.S. Hanyang Univ. HPC&OT Lab. jinhoyo@nate.com HPC & OT Lab. 3 Component Structure 객체 (object) 생성개념을이해한다. 외부클래스에대한접근방법을이해한다. 접근제어자 (public & private)
More informationchap 5: Trees
5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경
More informationWindows 8에서 BioStar 1 설치하기
/ 콘텐츠 테이블... PC에 BioStar 1 설치 방법... Microsoft SQL Server 2012 Express 설치하기... Running SQL 2012 Express Studio... DBSetup.exe 설정하기... BioStar 서버와 클라이언트 시작하기... 1 1 2 2 6 7 1/11 BioStar 1, Windows 8 BioStar
More information<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>
2006 년 2 학기윈도우게임프로그래밍 제 8 강프레임속도의조절 이대현 한국산업기술대학교 오늘의학습내용 프레임속도의조절 30fps 맞추기 스프라이트프레임속도의조절 프레임속도 (Frame Rate) 프레임속도란? 얼마나빨리프레임 ( 일반적으로하나의완성된화면 ) 을만들어낼수있는지를나타내는척도 일반적으로초당프레임출력횟수를많이사용한다. FPS(Frame Per Sec)
More information11장 포인터
누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리
More informationNo Slide Title
Copyright, 2017 Multimedia Lab., UOS 시스템프로그래밍 (Assembly Code and Calling Convention) Seong Jong Choi chois@uos.ac.kr Multimedia Lab. Dept. of Electrical and Computer Eng. University of Seoul Seoul, Korea
More information1. 개요 악성코드는여러분류로나누어볼수가있다. 이중일반사용자의입장에서 악성코드 라는단어보다친숙한 바이러스 가있다. 사실필자도보안을공부하기이전에는 악성코드 라는단어는아예들어보지못했고, 대신 바이러스 라는단어로모든악성코드를지칭했었다. 바이러스는악성코드분류의한종류로 스스로를
Malware Analysis Report Mad Angel 2016.09.17 By Kali-KM 1. 개요 악성코드는여러분류로나누어볼수가있다. 이중일반사용자의입장에서 악성코드 라는단어보다친숙한 바이러스 가있다. 사실필자도보안을공부하기이전에는 악성코드 라는단어는아예들어보지못했고, 대신 바이러스 라는단어로모든악성코드를지칭했었다. 바이러스는악성코드분류의한종류로
More information<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>
#include "stdafx.h" #include "Huffman.h" 1 /* 비트의부분을뽑아내는함수 */ unsigned HF::bits(unsigned x, int k, int j) return (x >> k) & ~(~0
More information<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include "QuickSort.h" 7 using namespace std; 8 9 10 Node* Queue[100]; // 추가입력된데이터를저장하기위한 Queue
More information설계란 무엇인가?
금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 6 강. 함수와배열, 포인터, 참조목차 함수와포인터 주소값의매개변수전달 주소의반환 함수와배열 배열의매개변수전달 함수와참조 참조에의한매개변수전달 참조의반환 프로그래밍연습 1 /15 6 강. 함수와배열, 포인터, 참조함수와포인터 C++ 매개변수전달방법 값에의한전달 : 변수값,
More informationPowerPoint 프레젠테이션
System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소
More informationMicrosoft PowerPoint - chap06-1Array.ppt
2010-1 학기프로그래밍입문 (1) chapter 06-1 참고자료 배열 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 배열의선언과사용 같은형태의자료형이많이필요할때배열을사용하면효과적이다. 배열의선언 배열의사용 배열과반복문 배열의초기화 유연성있게배열다루기 한빛미디어
More informationPowerPoint 프레젠테이션
실습 1 배효철 th1g@nate.com 1 목차 조건문 반복문 System.out 구구단 모양만들기 Up & Down 2 조건문 조건문의종류 If, switch If 문 조건식결과따라중괄호 { 블록을실행할지여부결정할때사용 조건식 true 또는 false값을산출할수있는연산식 boolean 변수 조건식이 true이면블록실행하고 false 이면블록실행하지않음 3
More information제목
Development Technology Seminar 작 성 자 : 고형호 이 메 일 : hyungho.ko@gmail.com 최초작성일 : 2007.01.19 최종작성일 : 2007.02.05 버 전 : 01.05 홈 피 : www.innosigma.com Goal Exception Handling 1. SEH vs. CEH Exception Handling
More information<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C4C656D70656C2D5A69762E637070>
/* */ /* LZWIN.C : Lempel-Ziv compression using Sliding Window */ /* */ #include "stdafx.h" #include "Lempel-Ziv.h" 1 /* 큐를초기화 */ void LZ::init_queue(void) front = rear = 0; /* 큐가꽉찼으면 1 을되돌림 */ int LZ::queue_full(void)
More informationMicrosoft Word - PLC제어응용-2차시.doc
과정명 PLC 제어응용차시명 2 차시. 접점명령 학습목표 1. 연산개시명령 (LOAD, LOAD NOT) 에대하여설명할수있다. 2. 직렬접속명령 (AND, AND NOT) 에대하여설명할수있다. 3. 병렬접속명령 (OR, OR NOT) 에대하여설명할수있다. 4.PLC의접점명령을가지고간단한프로그램을작성할수있다. 학습내용 1. 연산개시명령 1) 연산개시명령 (LOAD,
More informationA Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning
C Programming Practice (II) Contents 배열 문자와문자열 구조체 포인터와메모리관리 구조체 2/17 배열 (Array) (1/2) 배열 동일한자료형을가지고있으며같은이름으로참조되는변수들의집합 배열의크기는반드시상수이어야한다. type var_name[size]; 예 ) int myarray[5] 배열의원소는원소의번호를 0 부터시작하는색인을사용
More informationMicrosoft PowerPoint - additional01.ppt [호환 모드]
1.C 기반의 C++ part 1 함수 오버로딩 (overloading) 디폴트매개변수 (default parameter) 인-라인함수 (in-line function) 이름공간 (namespace) Jong Hyuk Park 함수 Jong Hyuk Park 함수오버로딩 (overloading) 함수오버로딩 (function overloading) C++ 언어에서는같은이름을가진여러개의함수를정의가능
More information연재순서 실행파읷속으로 필자소개 싞영짂 웰비아닶컴에서보안프로그래머로읷하고있다. 시스템프로그래밍에관심이많으며다수의 PC 보안프로그램개발에참여했다. 현재데브피아 Visual C++ 섹션시
윈도우프로그래머를위한 PE 포맷가이드 실행파읷속으로 목차 목차... 1 License... 1 소개... 1 연재가이드... 1 연재순서... 2 필자소개... 2 필자메모... 2 Introduction... 2 PE 포맷의젂체적읶구조... 3 DOS 헤더및스텁코드... 5 NT 헤더... 5 섹션헤더... 7 RVA와파읷오프셋... 10 익스포트정보...
More information< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>
Chap #2 펌웨어작성을위한 C 언어 I http://www.smartdisplay.co.kr 강의계획 Chap1. 강의계획및디지털논리이론 Chap2. 펌웨어작성을위한 C 언어 I Chap3. 펌웨어작성을위한 C 언어 II Chap4. AT89S52 메모리구조 Chap5. SD-52 보드구성과코드메모리프로그래밍방법 Chap6. 어드레스디코딩 ( 매핑 ) 과어셈블리어코딩방법
More informationIDA 5.x Manual 07.02.hwp
IDA 5.x Manual - Manual 01 - 영리를 목적으로 한 곳에서 배포금지 Last Update 2007. 02 이강석 / certlab@gmail.com 어셈블리어 개발자 그룹 :: 어셈러브 http://www.asmlove.co.kr - 1 - IDA Pro 는 Disassembler 프로그램입니다. 기계어로 되어있는 실행파일을 어셈블리언어
More information금오공대 컴퓨터공학전공 강의자료
C 프로그래밍프로젝트 Chap 13. 포인터와배열! 함께이해하기 2013.10.02. 오병우 컴퓨터공학과 13-1 포인터와배열의관계 Programming in C, 정재은저, 사이텍미디어. 9 장참조 ( 교재의 13-1 은읽지말것 ) 배열이름의정체 배열이름은 Compile 시의 Symbol 로서첫번째요소의주소값을나타낸다. Symbol 로서컴파일시에만유효함 실행시에는메모리에잡히지않음
More informationMicrosoft PowerPoint - ch07 - 포인터 pm0415
2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자
More information1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과
1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과 학습내용 1. Java Development Kit(JDK) 2. Java API 3. 자바프로그래밍개발도구 (Eclipse) 4. 자바프로그래밍기초 2 자바를사용하려면무엇이필요한가? 자바프로그래밍개발도구 JDK (Java Development Kit) 다운로드위치 : http://www.oracle.com/technetwork/java/javas
More informationMicrosoft PowerPoint - chap06-5 [호환 모드]
2011-1 학기프로그래밍입문 (1) chapter 06-5 참고자료 변수의영역과데이터의전달 박종혁 Tel: 970-6702 Email: jhpark1@seoultech.ac.kr h k 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- ehanbit.net 자동변수 지금까지하나의함수안에서선언한변수는자동변수이다. 사용범위는하나의함수내부이다. 생존기간은함수가호출되어실행되는동안이다.
More information<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >
10주차 문자 LCD 의인터페이스회로및구동함수 Next-Generation Networks Lab. 5. 16x2 CLCD 모듈 (HY-1602H-803) 그림 11-18 19 핀설명표 11-11 번호 분류 핀이름 레벨 (V) 기능 1 V SS or GND 0 GND 전원 2 V Power DD or V CC +5 CLCD 구동전원 3 V 0 - CLCD 명암조절
More informationAPI 매뉴얼
PCI-TC03 API Programming (Rev 1.0) Windows, Windows2000, Windows NT, Windows XP and Windows 7 are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations
More informationOCW_C언어 기초
초보프로그래머를위한 C 언어기초 2 장 : C 프로그램시작하기 2012 년 이은주 학습목표 을작성하면서 C 프로그램의구성요소 주석 (comment) 이란무엇인지알아보고, 주석을만드는방법 함수란무엇인지알아보고, C 프로그램에반드시필요한 main 함수 C 프로그램에서출력에사용되는 printf 함수 변수의개념과변수의값을입력받는데사용되는 scanf 함수 2 목차 프로그램코드
More information쉽게 풀어쓴 C 프로그래밍
누구나즐기는 C 언어콘서트 제 1 장프로그래밍소개 이번장에서학습할내용 프로그램의이해 프로그래밍언어 알고리즘 프로그램개발과정 프로그램을작성하기에앞서서중요한개념들을살펴봅니다.. 컴퓨터란? Q) 컴퓨터 (computer) 는무엇인가? A) 컴퓨터는기본적으로계산 (compute) 하는기계 Q) 컴퓨터를이용하여데이터를처리하려면반드시데이터가숫자형태이어야한다. 왜? A)
More informationINTRO Basic architecture of modern computers Basic and most used assembly instructions on x86 Installing an assembly compiler and RE tools Practice co
Basic reverse engineering on x86 This is for those who want to learn about basic reverse engineering on x86 (Feel free to use this, email me if you need a keynote version.) v0.1 SeungJin Beist Lee beist@grayhash.com
More informationSecure Programming Lecture1 : Introduction
Malware and Vulnerability Analysis Lecture1 Malware Analysis #1 Agenda 악성코드정적분석 악성코드분석 악성코드정적분석 정적분석 임의의코드또는응용프로그램을실행하지않고분석 ASCII 문자열 (ex. URL) API 리스트 Packing VT 기타등등 정적분석 : 파일식별 악성으로의심되는파일의형태식별 file
More informationPowerPoint Presentation
#include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을작성하면서 C 프로그램의구성요소에대하여알아본다.
More informationMicrosoft Word - MSOffice_WPS_analysis.doc
MS Office.WPS File Stack Overflow Exploit 분석 (http://milw0rm.com/ 에공개된 exploit 분석 ) 2008.03.03 v0.5 By Kancho ( kancholove@gmail.com, www.securityproof.net ) milw0rm.com에 2008년 2월 13일에공개된 Microsoft Office.WPS
More informationReusing Dynamic Linker For Exploitation Author : Date : 2012 / 05 / 13 Contact : Facebook : fb.me/kwonpwn
Reusing Dynamic Linker For Exploitation Author : pwn3r @ B10S @WiseGuyz Date : 2012 / 05 / 13 Contact : austinkwon2@gmail.com Facebook : fb.me/kwonpwn3r Abstract 대부분의 Unix 에선공유라이브러리를메모리에로드하고프로그램과 link
More informationFrama-C/JESSIS 사용법 소개
Frama-C 프로그램검증시스템소개 박종현 @ POSTECH PL Frama-C? C 프로그램대상정적분석도구 플러그인구조 JESSIE Wp Aorai Frama-C 커널 2 ROSAEC 2011 동계워크샵 @ 통영 JESSIE? Frama-C 연역검증플러그인 프로그램분석 검증조건추출 증명 Hoare 논리에기초한프로그램검증도구 사용법 $ frama-c jessie
More information<B1E2BCFAB9AEBCAD5FB9DABAB4B1D45F F F64746F72732E687770>
기술문서 09. 11. 3. 작성 Format String Bug 에서 dtors 우회 작성자 : 영남대학교 @Xpert 박병규 preex@ynu.ac.kr 1. 요약... 2 2. d to r 이란... 3 3. 포맷스트링... 4 4. ro o t 권한획득... 7 5. 참고자료... 1 0-1 - 1. 요약 포맷스트링버그 (Format String bug)
More information제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.
제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 이중포인터란무엇인가? 포인터배열 함수포인터 다차원배열과포인터 void 포인터 포인터는다양한용도로유용하게활용될수있습니다. 2 이중포인터
More informationOCW_C언어 기초
초보프로그래머를위한 C 언어기초 4 장 : 연산자 2012 년 이은주 학습목표 수식의개념과연산자및피연산자에대한학습 C 의알아보기 연산자의우선순위와결합방향에대하여알아보기 2 목차 연산자의기본개념 수식 연산자와피연산자 산술연산자 / 증감연산자 관계연산자 / 논리연산자 비트연산자 / 대입연산자연산자의우선순위와결합방향 조건연산자 / 형변환연산자 연산자의우선순위 연산자의결합방향
More informationPowerPoint 프레젠테이션
Chapter 10 포인터 01 포인터의기본 02 인자전달방법 03 포인터와배열 04 포인터와문자열 변수의주소를저장하는포인터에대해알아본다. 함수의인자를값과주소로전달하는방법을알아본다. 포인터와배열의관계를알아본다. 포인터와문자열의관계를알아본다. 1.1 포인터선언 포인터선언방법 자료형 * 변수명 ; int * ptr; * 연산자가하나이면 1 차원포인터 1 차원포인터는일반변수의주소를값으로가짐
More information윈도우즈프로그래밍(1)
제어문 (2) For~Next 문 윈도우즈프로그래밍 (1) ( 신흥대학교컴퓨터정보계열 ) 2/17 Contents 학습목표 프로그램에서주어진특정문장을부분을일정횟수만큼반복해서실행하는문장으로 For~Next 문등의구조를이해하고활용할수있다. 내용 For~Next 문 다중 For 문 3/17 제어문 - FOR 문 반복문 : 프로그램에서주어진특정문장들을일정한횟수만큼반복해서실행하는문장
More informationMicrosoft Word - 3부A windows 환경 IVF + visual studio.doc
Visual Studio 2005 + Intel Visual Fortran 9.1 install Intel Visual Fortran 9.1 intel Visual Fortran Compiler 9.1 만설치해서 DOS 모드에서실행할수있지만, Visual Studio 2005 의 IDE 를사용하기위해서는 Visual Studio 2005 를먼저설치후 Integration
More information설계란 무엇인가?
금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 5 강. 배열, 포인터, 참조목차 배열 포인터 C++ 메모리구조 주소연산자 포인터 포인터연산 배열과포인터 메모리동적할당 문자열 참조 1 /20 5 강. 배열, 포인터, 참조배열 배열 같은타입의변수여러개를하나의변수명으로처리 int Ary[10]; 총 10 개의변수 : Ary[0]~Ary[9]
More information학습목차 2.1 다차원배열이란 차원배열의주소와값의참조
- Part2- 제 2 장다차원배열이란무엇인가 학습목차 2.1 다차원배열이란 2. 2 2 차원배열의주소와값의참조 2.1 다차원배열이란 2.1 다차원배열이란 (1/14) 다차원배열 : 2 차원이상의배열을의미 1 차원배열과다차원배열의비교 1 차원배열 int array [12] 행 2 차원배열 int array [4][3] 행 열 3 차원배열 int array [2][2][3]
More informationMicrosoft PowerPoint - chap05-제어문.pptx
int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); 1 학습목표 제어문인,, 분기문에 대해 알아본다. 인 if와 switch의 사용 방법과 사용시 주의사항에 대해 알아본다.
More informationChapter 4. LISTS
6. 동치관계 (Equivalence Relations) 동치관계 reflexive, symmetric, transitive 성질을만족 "equal to"(=) 관계는동치관계임. x = x x = y 이면 y = x x = y 이고 y = z 이면 x = z 동치관계를이용하여집합 S 를 동치클래스 로분할 동일한클래스내의원소 x, y 에대해서는 x y 관계성립
More informationMicrosoft Word - src.doc
IPTV 서비스탐색및콘텐츠가이드 RI 시스템운용매뉴얼 목차 1. 서버설정방법... 5 1.1. 서비스탐색서버설정... 5 1.2. 컨텐츠가이드서버설정... 6 2. 서버운용방법... 7 2.1. 서비스탐색서버운용... 7 2.1.1. 서비스가이드서버실행... 7 2.1.2. 서비스가이드정보확인... 8 2.1.3. 서비스가이드정보추가... 9 2.1.4. 서비스가이드정보삭제...
More informationJAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각
JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.
More information11장 포인터
Dynamic Memory and Linked List 1 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것 메모리의크기는프로그램이시작하기전에결정 int i, j; int buffer[80]; char name[] = data structure"; 처음에결정된크기보다더큰입력이들어온다면처리하지못함
More informationC 프로그래밍 언어 입문 C 프로그래밍 언어 입문 김명호저 숭실대학교 출판국 머리말..... C, C++, Java, Fortran, Python, Ruby,.. C. C 1972. 40 C.. C. 1999 C99. C99. C. C. C., kmh ssu.ac.kr.. ,. 2013 12 Contents 1장 프로그래밍 시작 1.1 C 10 1.2 12
More information<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4>
쉽게풀어쓴 C 언어 Express 제 2 장프로그램개발과정 통합개발환경 통합개발환경 (IDE: integrated development environment) 에디터 + 컴파일러 + 디버거 Visual C++: 이클립스 (eclipse): Dev-C++: 마이크로소프트제작 오픈소스프로젝트 오픈소스프로젝트 통합개발환경의종류 비주얼 C++(Visual C++)
More informationThe Pocket Guide to TCP/IP Sockets: C Version
인터넷프로토콜 5 장 데이터송수신 (3) 1 파일전송메시지구성예제 ( 고정크기메시지 ) 전송방식 : 고정크기 ( 바이너리전송 ) 필요한전송정보 파일이름 ( 최대 255 자 => 255byte 의메모리공간필요 ) 파일크기 (4byte 의경우최대 4GB 크기의파일처리가능 ) 파일내용 ( 가변길이, 0~4GB 크기 ) 메시지구성 FileName (255bytes)
More informationMicrosoft PowerPoint - es-arduino-lecture-03
임베디드시스템개론 : Arduino 활용 Lecture #3: Button Input & FND Control 2012. 3. 25 by 김영주 강의목차 디지털입력 Button switch 입력 Button Debounce 7-Segment FND : 직접제어 7-Segment FND : IC 제어 2 디지털입력 : Switch 입력 (1) 실습목표 아두이노디지털입력처리실습
More information02.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
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 language Assembly code Change permissions(seteuid())
More information버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습
앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습니다. 여러분모두 Windows 에서 hex editor(hex dump, hex viewer) 라는것을사용해보셨을겁니다. 바로바이너리파일을 16 진수
More informationMicrosoft Word - Reversing Engineering Code with IDA Pro-4-1.doc
Reverse Engineering Code with IDA Pro By Dan Kaminsky, Justin Ferguson, Jason Larsen, Luis Miras, Walter Pearce 정리 : vangelis(securityproof@gmail.com) 이글은 Reverse Engineering Code with IDA Pro(2008년출판
More informationChapter ...
Chapter 4 프로세서 (4.9절, 4.12절, 4.13절) Contents 4.1 소개 4.2 논리 설계 기초 4.3 데이터패스 설계 4.4 단순한 구현 방법 4.5 파이프라이닝 개요*** 4.6 파이프라이닝 데이터패스 및 제어*** 4.7 데이터 해저드: 포워딩 vs. 스톨링*** 4.8 제어 해저드*** 4.9 예외 처리*** 4.10 명령어 수준
More informationadfasdfasfdasfasfadf
C 4.5 Source code Pt.3 ISL / 강한솔 2019-04-10 Index Tree structure Build.h Tree.h St-thresh.h 2 Tree structure *Concpets : Node, Branch, Leaf, Subtree, Attribute, Attribute Value, Class Play, Don't Play.
More informationChapter #01 Subject
Device Driver March 24, 2004 Kim, ki-hyeon 목차 1. 인터럽트처리복습 1. 인터럽트복습 입력검출방법 인터럽트방식, 폴링 (polling) 방식 인터럽트서비스등록함수 ( 커널에등록 ) int request_irq(unsigned int irq, void(*handler)(int,void*,struct pt_regs*), unsigned
More informationMicrosoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100
2015-1 프로그래밍언어 9. 연결형리스트, Stack, Queue 2015 년 5 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) 연결리스트 (Linked List) 연결리스트연산 Stack
More information슬라이드 1
정적메모리할당 (Static memory allocation) 일반적으로프로그램의실행에필요한메모리 ( 변수, 배열, 객체등 ) 는컴파일과정에서결정되고, 실행파일이메모리에로드될때할당되며, 종료후에반환됨 동적메모리할당 (Dynamic memory allocation) 프로그램의실행중에필요한메모리를할당받아사용하고, 사용이끝나면반환함 - 메모리를프로그램이직접관리해야함
More informationMicrosoft Word - PE Infection ? How to Inject a dll.doc
Black- out Frenzy [ B] (F) Security Researcher Center B0Frenzy.freehostia.com PE Infection How to Inject a dll www.mihanit.net Thank you to my friends who help me in this research (K053,Heli, L U C I F
More informationChap 6: Graphs
5. 작업네트워크 (Activity Networks) 작업 (Activity) 부분프로젝트 (divide and conquer) 각각의작업들이완료되어야전체프로젝트가성공적으로완료 두가지종류의네트워크 Activity on Vertex (AOV) Networks Activity on Edge (AOE) Networks 6 장. 그래프 (Page 1) 5.1 AOV
More informationA Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning
C Programming Practice (I) Contents 변수와상수 블록과변수의범위 수식과연산자 제어문과반복문 문자와문자열 배열, 포인터, 메모리관리 구조체 디버거 (gdb) 사용법 2/17 Reference The C Programming language, Brian W. Kernighan, Dennis M. Ritchie, Prentice-Hall
More informationMicrosoft Word - Static analysis of Shellcode.doc
Static analysis of Shellcode By By Maarten Van Horenbeeck 2008.09.03 2008.09.03 본문서에서는악성코드에서사용하는난독화되어있는쉘코드 를분석하는방법에대한 Maarten Van Horenbeeck 의글을번역 한것이다. Hacking Group OVERTIME OVERTIME force
More informationhlogin2
0x02. Stack Corruption off-limit Kernel Stack libc Heap BSS Data Code off-limit Kernel Kernel : OS Stack libc Heap BSS Data Code Stack : libc : Heap : BSS, Data : bss Code : off-limit Kernel Kernel : OS
More informationThe Pocket Guide to TCP/IP Sockets: C Version
얇지만얇지않은 TCP/IP 소켓프로그래밍 C 2 판 4 장 UDP 소켓 제 4 장 UDP 소켓 4.1 UDP 클라이언트 4.2 UDP 서버 4.3 UDP 소켓을이용한데이터송싞및수싞 4.4 UDP 소켓의연결 UDP 소켓의특징 UDP 소켓의특성 싞뢰할수없는데이터젂송방식 목적지에정확하게젂송된다는보장이없음. 별도의처리필요 비연결지향적, 순서바뀌는것이가능 흐름제어 (flow
More informationPowerPoint 프레젠테이션
DEVELOPMENT ENVIRONMENT 2 MAKE Jo, Heeseung MAKE Definition make is utility to maintain groups of programs Object If some file is modified, make detects it and update files related with modified one 2
More informationPowerPoint 프레젠테이션
Network Programming Jo, Heeseung Network 실습 네트워크프로그래밍 멀리떨어져있는호스트들이서로데이터를주고받을수있도록프로그램을구현하는것 파일과는달리데이터를주고받을대상이멀리떨어져있기때문에소프트웨어차원에서호스트들간에연결을해주는장치가필요 이러한기능을해주는장치로소켓이라는인터페이스를많이사용 소켓프로그래밍이란용어와네트워크프로그래밍이랑용어가같은의미로사용
More information호출 (calling) 의예술 윈도우프로그래밍테크닉 호출 (calling) 의예술 목차 목차... 1 License... 1 소개... 1 연재가이드... 1 필자소개... 2 필자메모... 2 Introduction... 2 함수호출규약 (calling convent
윈도우프로그래밍테크닉 목차 목차... 1 License... 1 소개... 1 연재가이드... 1 필자소개... 2 필자메모... 2 Introduction... 2 함수호출규약 (calling convention)... 3 cdecl 호출규약... 4 stdcall 호출규약... 4 fastcall 호출규약... 5 thiscall 호출규약... 6 x64
More informationPowerPoint Template
BoF 원정대서비스 목차 환경구성 http://www.hackerschool.org/hs_boards/zboard.php?id=hs_notice&no=1170881885 전용게시판 http://www.hackerschool.org/hs_boards/zboard.php?id=bof_fellowship Putty War game 2 LOB 란? 해커스쿨에서제공하는
More informationgdb 사용법 Debugging Debug라는말은 bug를없앤다는말이다. Bug란, 컴퓨터프로그램상의논리적오류를말하며, 이것을찾아해결하는과정이바로, debugging이다. 초기컴퓨터들은실제벌레가컴퓨터에들어가서오작동을일으키는경우가있었다고하며, 여기서 debug 이라는말이
gdb 사용법 Debugging Debug라는말은 bug를없앤다는말이다. Bug란, 컴퓨터프로그램상의논리적오류를말하며, 이것을찾아해결하는과정이바로, debugging이다. 초기컴퓨터들은실제벌레가컴퓨터에들어가서오작동을일으키는경우가있었다고하며, 여기서 debug 이라는말이나왔다한다. Debugging을하는가장원초적방법은프로그램소스를눈으로따라가며, 머리로실행시켜논리적오류를찾아내는것이다.
More informationMicrosoft PowerPoint - chap04-연산자.pptx
int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); } 1 학습목표 수식의 개념과 연산자, 피연산자에 대해서 알아본다. C의 를 알아본다. 연산자의 우선 순위와 결합 방향에
More informationPowerPoint 프레젠테이션
Development Environment 2 Jo, Heeseung make make Definition make is utility to maintain groups of programs Object If some file is modified, make detects it and update files related with modified one It
More information