[ASP.NET MVC] Project 생성, MVC Hello World!

Posted by 알 수 없는 사용자
2015. 6. 26. 20:25 프로그래밍/.NET

어떤 언어든지 처음 배울 때 하는 Hello World! 출력하기!

ASP.Net MVC 프로젝트를 처음 만들어보기 때문에 Hello World를 출력해 보자. 

Visual Studio 2013을 기준으로 설명할 예정이다.


[그림 1-1]

Visual Studio에서 파일 -> 새로만들기 -> 프로젝트를 선택하면 [그림1-1]화면이 나오는데 여기에서 템플릿 -> Visual C# -> 웹 -> Visual Studio 2012를 선택하면 프로젝트 목록이 나온다. 우리는 MVC프로젝트를 생성을 위해 ASP.NET MVC 4 웹 응용 프로그램을 선택하고 이름을 입력 후 확인을 클릭한다.


[그림 1-2]

프로젝트를 템플릿을 선택하는 화면이 나오는데 자신이 필요한 템플릿에 따라 선택 후 확인을 누르면 된다. 여기에서는 인터넷 응용프로그램을 선택한다.


[그림 1-3]

프로젝트를 생성하고 나면 [그림 1-3]과 같이 기본적인 폴더나 필요한 파일등을 생성해준다.

폴더를 보면 MVC패턴으로 개발할 수 있게 Controllers, Models, Views폴더로 나누어져 있다.

다른 폴더들도 용도에 맞게 개발할 수 있도록 미리 만들어져 있는 모습을 볼 수 있다.

[그림 1-3]을 보면 Controllers, Models, Views안에 파일이 미리 만들어져 있는데 이것은 템플릿을 인터넷 응용프로그램으로 선택했기 때문이다.


[그림 1-4]

프로젝트 생성은 끝났으니 컨트롤러를 추가해보자.

솔루션 탐색기에서 Controllers 폴더를 마우스오른족버튼 클릭 -> 추가 -> 컨트롤러를 선택한다.


[그림 1-5]

컨트롤러 이름을 입력하는 화면이 나오는데 컨트롤러 이름을 정할 때 Controller는 규칙처럼 사용하기 위해 Default1에 Drag되어 있다. 

Default1대신 MyFirst를 입려하여 MyFirstController를 만들어보자.


[그림 1-6]

컨트롤러를 추가하면 [그림 1-6]처럼 Index()함수가 기본적으로 생성된다. 이제 Index함수가 표시할 뷰페이지를 추가해보자.

함수 이름인 Index()에서 마우스 오른쪽 버튼을 클릭 -> 뷰 추가를 누른다.


[그림 1-7]

뷰페이지 이름을 정하고 추가를 누른다. 그러면 솔루션탐색기에서 Views폴더 밑에 MyFirst폴더가 생성되고 그 밑에 Index.cshtml이 생성된다.

Index.cshtml페이지에는 html을 작성하여 화면에 보이도록 하면된다.


위에 코드를 보면 html의 기본적인 구조인 haed, title, body와 같은 구성이 없기 때문에 이상하게 느껴질 수 있다. 

하지만 솔루션 탐색기의 Shared 폴더 밑에 _Layout.cshtml 파일에 기본 레이아웃이 정의 되어있다.

실제 Index.cshtml에서는 필요한 화면만 구성하면 된다.


[그림 1-8]

이제 모든 파일을 저장, 빌드할 후 웹브라우저에서 url입력하여 확인해보면 [그림 1-8]과 같이 Hello World MVC!!가 출력되는 것을 볼 수 있다.

뷰를 확인 하기 위해 Url입력은 첫 번째 / 다음에 컨트롤러이름인 MyFirst, 그 다음 / 뒤에 뷰이름인 Index를 입력하면 된다. 

또 다른 뷰페이지 확인방법은 솔루션 탐색기의 Views 폴더 밑에 보려고 하는 뷰 페이지를 마우스 오른쪽 버튼 클릭해보면 브라우저에서 보기항목이 잇는데

클릭하면 된다.




'프로그래밍 > .NET' 카테고리의 다른 글

[ASP.NET MVC]Dependency Injection 개념  (1309) 2015.08.02
[ASP.NET MVC] Controller에서 데이터 전달  (4) 2015.07.11
<ASP.NET> Razor  (5) 2015.05.18
<.NET> .NET FRAMEWORK 란?  (4) 2015.05.18
<ASP.NET> ASP.NET 이란?  (3) 2015.05.18

DLL Injection

Posted by 알 수 없는 사용자
2015. 6. 21. 18:38 네트워크및보안&해킹/보안&해킹

1.DLL(Dynamic Link Library) 파일이란?


먼저 Library는 함수,데이터,타입들의 여러가지 프로그래밍 요소들의 집합니다. 자주사용되는 함수를 미리 만들어서 모아놓은것을 Library라고 한다.

library는 정적링크 (Static link library) 와 동적링크(Dynamic Link) 방식이 있는데 동적링크 방식을 사용한 것이 DLL이다.


정적링크 방식을 사용하면 컴파일할때 라이브러리 코드를 실행파일에 복사하기 떄문에 한번컴파일하게되면 라이브러리파일 없이도 실행이 가능하다.


동적링크 방식을 사용하면 실행파일 실행시에 라이브러리에 실행파일이 연결된다. 실행파일에는 라이브러리에있는 함수의 정보만 포함되고 실제함수의 

코드는 복사되지 않기때문에 실행파일이 작아진다. 또 필요할때 가져다가 사용하기때문에 메모리사용에 효율적이다.


ex> 워드프로그램을 이용하여 문서작업을 할때에는 프린터를 이용하지 않기때문에 프린트관련 라이브러리는 메모리에 적재되지 않는다. 만약

사용자가 문서를 출력하고자 한다면 그때 프린트 관련 라이브러리가 메모리에 적재, 실행된다.


2. DLL Injection ? 


다른 프로세스에 특정 DLL파일을 강제로 삽입하는것.


DLL Injection의 원리는 외부에서 다른프로세스가 LoadLibrary() API를 호출하도록 하는것이기때문에 일반적인 DLL loading과 

마찬가지로 강제 삽입된 DLL의 DllMain() 함수가 실행된다.


아래 사진은 notepad.exe프로세스에 임의로 만든 DLL파일을 강제로 삽입했을때 notepade.exe 프로세스의 구조이다.

3. DLL Injection 을 사용하는 목적


    프로세스에 삽입된 DLL파일은 프로세스 메모리에 대한 정당한 접근권한을 가지기 때문에 사용자가 원하는 모든일을 수행할수 있다.

이런점을 이용 해서 버그패치,기능추가 등등 다양한곳에 이용할수 있지만 대부분 악의적인 용도(악성코드)로 사용된다.

ex> 유해 프로그램,사이트 차단프로그램 , API Hooking, 악성코드 등등


4. 구현방법


4-1 AppInit_DLLs


쉬운방법으로는 AppInit_DLLs를 이용하는 방법이 있다.

windows에서 기본으로 제공하는 레지스트리 키 중에 AppInit_DLLs 라는 것이 있는데 AppInit_DLLs 값에 인젝션을 원하는 DLL의 경로를 써주고

재부팅하면 Windows는 재부팅하면서 실행되는 모든 프로세스에 해당 DLL을 인젝션 시킨다.

이방법은 가장쉬운 방법중 하나지만 부팅시 실행되는 모든 프로세스에 해당DLL을 인젝션 시키기 때문에

DLL파일에 문제가 있다면 윈도우를 다시 설치해야할수도 있다.

실습전에 철저한 테스트가 필요하다.


 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs




4-2. CreateRemoteThread() API 이용.


아래는 인젝션 시킬 myhack.dll의 소스코드이다


myhack.cpp



DLL이 프로세스에 삽입되면 DllMain() 함수가 호출된다.

DllMain()의 내용을 보면 DLL이 로딩될때(DLL_PROCESS_ATTACH) 스레드(ThreadProc)를 실행한다.

실행된 ThreadProc()은 URLDownloadToFile() 함수를 실행해서 네이버 메인화면을 다운받는다. 


아래는 DLL파일을 프로세스에 Injection 시켜줄 프로그램과 소스코드이다.


InjDll64.exe



main에서는 두개의 함수를 호출하고있다.

함수내부에 대해 간단하게 설명하자면,


1. FindProcessID()


processName(notepade.exe)를 가지고 PID(Process ID)를 구하는 함수이다.

hSnapShot 은 프로세스의 상태를 저장하기위한 핸들러이고 

PROCESSENTRY32 는 프로세스의 정보를 저장할 구조체이다.

CreateToolhelp32Snapshot()함수는 현재 모든 프로세스의 상태를 스냅한다.

Process32First  : 첫번째 프로세스의 상태를 저장한다.

do~while 구문에서는 프로세스 이름을 현재 스냅한 프로세스의 이름과 비교하여 프로세스ID를 저장한다

Process32Next : 다음프로세스의 상태를 저장한다.

원하는 프로세스 ID를 반환하고 종료한다.


2.InjectDll()


OpenProcess()함수를 이용해 FindProcessID() 함수에서 얻어온 PID를 가지고

notepad.exe 프로세스를 제어하기위한 핸들을 구한다.

VirtualAllocEx() 함수를 이용해서 해당 프로세스의 메모리 공간에 버퍼를 할당한다. pRemoteBuf 에는 버퍼의 주소가 저장된다.

WriteProcessMemory() : 할당받은 버퍼의 주소를 이용해서 삽입할 DLL 경로를 써준다.

notepad.exe 에 로딩된 kernel32.dll 에서 LoadLibrary() 를 호출하기위해 주소를 가져와야한다.

그런데 소스코드( GetProcAddress() ) 에서는 InjectDll.exe.에 로딩된 kernel32.dll의 loadLibrary()의 주소를 가져오고있는데 

모든 프로세스에서 kernel32.dll은 같은 주소에 로딩되기 때문에 

notepad.exe에 로딩된 kernel.dll의 주소 = InjectDll.exe 에 로딩된 kernel32.dll의 주소가 된다.

마지막으로 notepad.exe가 LoadLibrary를 호출하게 하면 된다.

하지만 windows에는 그런API를 제공하지않는다.

이것을 CreateRemoteThread()로 대체할 수 있다.

(CreateRemoteThread() : 다른프로세스에게 스레드를 실행시키게 하는 함수.)

ThreadProc() 와 LoadLibrary() 는 모두 4byte의 인수값을 받고 4byte값을 리턴하는데

CreateRemoteThread() 는 이것을 보고 아이디어를 얻어서 사용되는 방법이다.

CreateRemoteThread()의 

4번째 인수에는 생성할 Thread 함수의 주소가 들어가는데

여기에 notepad.exe의 LoadLibrary()의 주소가 들어간다.

5번째 인수에는 생성된 Thread함수에 전달될 변수가 들어가야한다.

여기에 myhack.dll의 경로가 들어가게된다.

이렇게되면

CreateRemoteThread()는 notepad.exe 가 LoadLibrary() 를 호출하도록 한것이다.




참조 

 http://bhnbhn.tistory.com/186

http://www.opensource.apple.com/source/OpenSSL098/OpenSSL098-32/src/ms/tlhelp32.h

http://www.reversecore.com/

http://keybreak.tistory.com/

'네트워크및보안&해킹 > 보안&해킹' 카테고리의 다른 글

[시스템해킹]버퍼오버플로우 실습  (329) 2015.08.28
CrackMe2 문제풀이  (6) 2015.07.17
CrackMe 문제풀이 (리버싱 기초)  (6) 2015.06.08
리버스 엔지니어링  (3) 2015.06.08
버퍼오버플로우  (928) 2015.06.08

Cloud & 빅데이터

Posted by 알 수 없는 사용자
2015. 6. 21. 18:38 프로그래밍/빅데이터

1. Cloud & 빅데이터

 

2. 클라우드가 뭔가요?

 



3. 클라우드의 개념

 

4. 빅데이터가 뭔가요?

 

5. 빅데이터의 개념

 

6. 빅데이터는 어떻게 쓰이죠?

 

7. 빅데이터의 장/단점

 

8. 빅데이터의 전망

 

9. 클라우드를 이용한 빅데이터(로보캅 + 아더크리스마스)



10. 마무리


1. 안녕하세요?

신기술 동향 발표를 맡게 된 ___입니다. 제가 발표할 주제는 Cloud와 빅데이터입니다. 주제선정 기준으로는 요즘 핫하면서 널리 쓰이고 있는 아이템으로 선정했습니다.


2. 혹시 클라우드가 뭔지 아시는 분 있으신가요?! 네 클라우드는 영어로는 '구름', IT용어로는 웹상 저장장치라는 뜻이 있습니다.


3. 나의 자료 및 데이터를

하늘이 제공하는

구름에 저장한다.


4. 빅데이터 4글자만 보고 뭐가 떠오르시나요?

~~~


5. 코딩을 하기 위해서 언어에 대한 문법등을 알아야 하듯이 빅데이터를 알기 위해서는 3V를 알아야 합니다. 3V란. Volume(양), Variety(다양성), Velocity(생성 속도)를 의미합니다.

~~~~~


6. 빅데이터는 어떻게 쓰일까요?

주변에서 접하기 쉬운 분야를 들자면 쇼핑몰, 내비게이션, 의료분야 등에서 사용되고 있습니다.

~~~~~


7. 빅데이터의 장점은 정형화 되지 않은 방대하고 다양한 데이터에서 가치있는 데이터를 창출하는 데에 있고, 단점으로는 개인정보유출에 있습니다.


8. 국내/외에서 빅데이터를 압도하고 있는 기업이 뚜렷하지는 않는 추세입니다. 하지만, 그림에서도 볼 수 있듯이 시장규모는 매년 증가하고 있는 추세입니다. 관심이 있으시다면 공부해 볼만한 분야라고 생각됩니다.


9. 클라우드와 빅데이터를 활용한 예시문을 영화에서 찾아보았습니다. 로보캅이라는 영화와 아더크리스마스라는 애니메이션입니다.

~~~~~~~


10. 어떻게 발표는 재밌으셨나요??

~~~~~