지식인 QnA 펌

 

질문

decoding.exe의 0x00413f9d에 처리되지 않은 예외가 있습니다. 0xC0000005: 0x00000000 위치를 기록하는 동안 액세스 위반이 발생했습니다. 엑세스 위반이라는 것으로 실행이 안되는데요.

0x00413f9d 라는 부분은 어떻게 해석을 해야 할지와 엑세스 위반이라는 것은 무엇인지

답변 부탁드리겠습니다~(__) 

 

답변

엑세스 위반(Access Violation)은, 프로세스가 접근할 권한이 없는 메모리 영역에 접근하고자 했을 때 발생합니다.

 

윈도우는 메모리의 모든 영역을 가상메모리 페이지 단위로 관리하는데, 이 메모리 영역마다 접근 권한을 설정합니다. 이 권한은 프로세스가 가진 속성별로 관리됩니다. 크게 사용자가 만든 사용자 프로세스와, 윈도우 시스템에서 돌리는 커널 프로세스로 구분할 수 있죠. 윈도우에서 관리하는 메모리는 커널에서만 읽고 쓸수 있는 영억, 커널에서만 읽을 수 있는 영억,  사용자프로세스에서도 읽을 수 있는 영역, 사용자 프로세스가 읽고 쓸 수 있는 영역 등으로, 가상메모리 페이지에 권한이 설정되어 있습니다.

따라서 적절한 권한이 없는 프로세스가 제한된 메모리 영역에 읽고 쓰기를 시도할 때 엑세스 위반이 발생합니다. 대표적인 예로 "0xC0000005: 0x00000000 위치를 기록하는 동안 엑세스 위반이 발생했습니다"라는 예외는 0x00000000 번지, 즉 널 포인터에 대하여 쓰기를 시도했다는 뜻이죠. 0x00000000번지로 시작하는 메모리 영역은 유저 프로세스에 대해서는 읽기/쓰기가 금지된 영역입니다. 시스템 운영에 중요한 정보가 기록되어 있기 때문이죠. 따라서 사용자가 만든 프로그램이 이 위치를 접근하고자 하는 것은 이와 같은 에러를 냅니다.

에러 메시지에서, "decoding.exe의 0x00413f9d에 처리되지 않은 예외가 있습니다. 0xC0000005: 0x00000000 위치를 기록하는 동안 액세스 위반이 발생했습니다."의 0x00413f9d는, 0x00000000위치를 접근하고자 하는 명령이 수행된, 명령이 저장된 번지수입니다. 디버깅할 때 해당 번지수의 명령이 무엇인가를 살펴보면 비교적 헤메지 않고 버그를 잡을 수 있습니다.

 

답변

이런 경우는 대부분..

메모리 할당이 되지 않은 포인터(NULL Pointer)에 값을 넣었거나..

할당치를 초과하여 데이터가 입력되었을 때입니다..

 

답변

0x00413f9d 는 decoding.exe 이란 프로그램의 code 영역 주소입니다.

즉 decoding.exe의 0x00413f9d 주소에서 예외처리가 발생했다는것입니다.

프로그램은 대부분 0x00400000이 시작번지이므로

offset 0x00013f9d에서 0xc0000005 에러가 발생했다는것입니다.

 

답변

0x00413f9d는 메모리의 주소를 말하는 것으로, 동적 메모리를 할당하지 않았거나

할당항 메모리를 넘어서 접근 할 경우에 이러한 에러가 나게 됩니다.

 

int *temp;

temp[0] = 10; // 메모리 에러(할당하지 않고 사용한 경우)

 

int *temp1;

temp1 = new int [10];

temp1[15] = 10; //메모리 에러(할당은 하였지만 할당항 메모리를 넘어서 사용한 경우)

 


#해결 : http://www.androidpub.com/1215971




자바설치하고 안드로이드 설치할때 위와같은 문제가 나오면 어이가 없습니다.
분명히 설치했는데 말이죠.

문제는 자바를 설치할때 64비트용을 받으면 안돼고 그냥 윈도우즈용을 받아야합니다..

이유는 저도 모르겠지만, 그렇게 하니 해결되더군요.. 64비트를 64비트로 말하지못하고..ㅠ_ㅠ

한참 검색해도 안나와도 고생했는데.. 혹시 저와 같은 어려움에 처한 분에게 도움이 되길..^^
1. cvMemStorage 구조체에 대해 알아보자.

typedef struct CvMemStorage
{
    int signature;
    CvMemBlock* bottom;              /* First allocated block.                   */
    CvMemBlock* top;                   /* Current memory block - top of the stack. */
    struct  CvMemStorage* parent; /* We get new blocks from parent as needed. */
    int block_size;                        /* Block size.                              */
    int free_space;                       /* Remaining free space in current block.   */
}
CvMemStorage;


typedef struct CvMemBlock
{
    struct CvMemBlock*  prev;
    struct CvMemBlock*  next;
}
CvMemBlock;

2. deque

Deque = Double Ended Queue

우리말로 읽을때 발을을 "데크"라 발음한다.

Deque는 와 매우 유사하다.  데이터를 일렬로 저장하게 되며, 각 데이터에 대한 임의 접근이 가능하다. 연속적인 데이터의 끝에 요소를 추가하거나 삭제 하는 것은 constance time 즉 O(1) 이 걸린다. 또한 요소들의 중간에 데이터를 삽입하거나 삭제할 경우 linear time 즉 O(n) 의 time complexity 를 갖는다.

Deque 가 vector와 다른 가장 큰 이유는, deque는 sequence 즉 데이터들의 앞쪽에 데이터를 추가하거나 삭제하는데 있어서 constant time O(1)의 시간이 걸린다는 것이다. (*참고적으로 vector는 앞쪽에 데이터를 추가/삭재에 있어서 O(n) 의 시간이 걸린다).


3.cvFindContours - 외곽선생성

int cvFindContours( CvArr* image, CvMemStorage* storage, CvSeq** first_contour, int header_size=sizeof(CvContour), int mode=CV_RETR_LIST, int method=CV_CHAIN_APPROX_SIMPLE, CvPoint offset=cvPoint(0,0) );

 

  • 외부 Contour: 흑=>백
  • 내부 Contour: 백=>흑
image source이미지. 8-bit 1-channel.
Gray 영상도 가능(non-zero: 1, zero: 0으로 간주함).

주. 함수의 수행 과정에서 원본 이미지를 변경시킴.
storage 찾아진 contour들을 저장할 container
first_contour 결과 매개변수. 첫 번째 외부 contour의 포인터 저장
header_size 결과는 CvSeq에 저장되는데 이 때 저장될 자료구조의 크기.
- method가 CV_CHAIN_CODE이면 >= sizeof(CvChain)
- 그렇지 않으면 >= sizeof(CvContour)
mode 추출 방법
- CV_RETR_EXTERNAL: 최외부 contour만 추출
- CV_RETR_LIST: 모든 contour를 찾아 한 list에 저장 (hierachycal 구조가 아님)
- CV_RETR_CCOMP: 모든 contour를 찾아 2-level 트리 구조로 구성. top 레벨은 외부 contour, second 레벨은 내부contour(holes)
- CV_RETR_TREE: 모든 contour를 찾아 full hierachy 트리 구조 구성
- CV_RETR_RUNS: Run-type 방법으로 추출하는 듯. 자세히는 모르겠음.
method Approximation 방법 (CV_RETR_RUNS는 자체 방법을 사용하므로 이를 제외한 모든 방법에서만 사용함)
- CV_CHAIN_CODE: the Freeman chain code로 저장됨. (이걸 제외하고 나머지 method는 polygon 구조(sequences of vertices)로 저장함.
- CV_CHAIN_APPROX_NONE: 단순히 chain code를 point 구조로 변경함
- CV_CHAIN_APPROX_SIMPLE: 수평, 수직, 대각선 성분을 압축. ending point들만 남겨둠.
- CV_CHAIN_APPROX_TC89_L1, CV_CHAIN_APPROX_TC89_KCOS: Teh-Chin chain approximation 알고리즘으로 압축
- CV_LINK_RUNS: CV_RETR_LIST 모드에서만 사용됨. 자세히는 모르겠음.
offset contour 포인트들이 shift될 값 ROI 설정한 경우 좋음.
 
 

cvFindContours 함수는 이미지에서 contour를 찾은 후 contour의 갯수를 리턴

원형
int cvFindContours( CvArr* image, CvMemStorage* storage, CvSeq* first_contour,
                            int header_size=sizeof(CvContour), int mode, int mthod, CvPoint offset=cvPoint(0,0) );

패러미터
- image : 8비트 grayscale 영상만을 패러미터로 넘길 수 있다. 0이 아닌 픽셀은 1로, 0인 픽셀은 0으로 간주하여 자체적으로 2진 영상으로 처리하게 된다.

- storage : CvMemStorage 구조체의 포인터를 넘긴다. 실제로 contour 정보가 저장되는 공간이다.

- first_contour : 첫번째 최외곽 contour의 정보를 저장할 CvSeq 구조체의 포인터

- header_size : 시퀀스 헤더의 크기  ex) sizeof(CvContour)

- mode :  contour 검출 방법
  CV_RETR_EXTERNAL - 오직 최외곽 contour만을 검출한다.
  CV_RETR_LIST - 모든 contour를 검출하여 list로 저장한다.
  CV_RETR_CCOMP - 모든 contour를 검출한 후 2단계로 계층화한다.
                              상위 계층은 각 성분(component)의 외곽 경계를 나타내며 하위 계층은 성분 내부의
                              구멍(hole)을 나타낸다.
  CV_RETR_TREE - 모든 contour를 검출한 후 각 contour를 tree 형태로 구조화한다.

- moethod : approximation(생략산) 방법이다.
생략산이란 불필요한 연산량을 줄이기 위하여 모든 contour를 구하지 않고 추정
  CV_CHAIN_CODE - Freeman chain code를 사용하여 contour를 출력한다. 이것 외의 다른 모든 방법은
                            결과물을 polygon(다각형, 버텍스의 나열)로 출력한다.
  CV_CHAIN_APPROX_NONE - 모든 contour의 점을 chain code에서 point로 변환한다.
  CV_CHAIN_APPROX_SIMPLE - 가로, 세로, 대각선 으로 쪼개서 압축하며 함수는 끝점만을 출력한다.
  CV_CHAIN_APPROX_TC89_L1, CV_CHAIN_APPROX_TC89_KCOS - Teh-Chin chain approximation
                                                                                              알고리즘에 사용된다.
  CV_LINK_RUNS - 1의 수평 구획의 연결을 통해 완전히 다른 방식의 contour 검출 알고리즘을 사용한다.  
  CV_RETR_LIST 모드에서만 사용 가능하다.

- offset : 모든 contour 포인트 이동
 
예제

CvMemStorage* storage = cvCreateStorage(0); // 배열 자료형 : 점의 좌표가 들어감
CvSeq* seq = NULL; //경계 개수를 저장할 변수 선언
int numContour = cvFindContours(src, storage, &seq, sizeof(CvContour), CV_RETR_TREE,   
                                             CV_CHAIN_APPROX_SIMPLE);

[출처] cvFindContours|작성자 천재소년







// Visual Studio 2008 , OpenCV 2.1


#include "stdafx.h"
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>

int _tmain(int argc, _TCHAR* argv[])
{

 CvCapture* capture = NULL;
 IplImage * frame = 0;
 IplImage * frame_copy = 0;

 capture = cvCaptureFromFile("sample.avi");
 cvNamedWindow("reuslt", 1);

 for(;;)
 {

  if (!cvGrabFrame(capture))

   break;

  frame = cvRetrieveFrame(capture);
  if (!frame)

   break;

  cvShowImage("result", frame);
  if (cvWaitKey(33) >= 0)

   break;

 }

 cvReleaseImage(&frame_copy);
 cvReleaseCapture(&capture);
}

출처 : http://www.sensibleui.co.kr/7


image_thumb6이전 포스트에서 OpenCV 2.0과 Visual Studio 2008의 연동에 관한 글을 올렸습니다. 그런데 확인을 해보니OpenCV의 새 버전 2.1이 4월에 나왔더군요. 거기다가 여기에는 Visual Studio 2008으로 이미 컴파일된 바이너리가 따로 OpenCV-2.1.0-win32-vs2008.exe 라는 이름으로 올라와 있습니다. 이제는 CMake 설치하고 직접 소스를 컴파일하느라 시간 낭비할 필요가 없게 되었습니다. Visual Studio 2008과 OpenCV를 연동하는 설치에 대해 간결한 설명은 OpenCV 위키OpenCV 2.1.0 with Visual Studio 2008에 잘 소개되어 있습니다. 여기서는 그 기사에 몇 가지 그림을 곁들어 부연하도록 하겠습니다.

 

OpenCV 2.1 설치

현재 OpenCV 위키의 공식 사이트에 들어가자 마자 보이는 다운로드 링크는 2.0 버전입니다. 그 아래에 있는 OpenCV-2.1.0-win32-vs2008.exe를 다운로드 받도록 합니다.

image_thumb1

 

설치는 다음 버튼만 누르면 됩니다. 단, 중간 Install Options에서 OpenCV 2.1 경로 추가는 하도록 하는 것이 좋겠습니다.

image_thumb7 image_thumb8

image_thumb10

image_thumb11 image_thumb12

image_thumb13 image_thumb14

image_thumb15

 

기본 설정대로 설치를 했다면 OpenCV 2.1은 C:\OpenCV2.1에 설치가 되어 있을 것입니다.

 

Visual Studio 2008 설정

도구-옵션을 선택한 후 프로젝트 및 솔루션-VC++ 디렉터리를 선택합니다. 오른쪽 리스트 박스에서 포함 파일을 선택한 후 “C:\OpenCV2.1\include\opencv”를 추가합니다.

image_thumb19

 

그 다음으로는 라이브러리 파일을 선택해 "C:\OpenCV2.1\lib"를 추가합니다.

image_thumb21

 

소스 파일을 선택한 후 아래의 4개 폴더를 추가합니다.

  • "C:\OpenCV2.1\src\cv"
  • "C:\OpenCV2.1\src\cvaux"
  • "C:\OpenCV2.1\src\cxcore"
  • "C:\OpenCV2.1\src\highgui"

    image_thumb23 

     

    Visual Studio 2008 프로젝트 설정

    Alt-F7을 눌러 프로젝트 속성 대화상자를 호출한 후 구성 속성-링커-입력을 선택합니다.

    image_thumb24

     

    추가 종속성 부분에 "cv210.lib cxcore210.lib highgui210.lib"를 추가합니다.

    image61_thumb

     

    여기까지 하면 Visual Studio 2008에서 OpenCV 2.1을 쓸 수 있도록 설정하는 과정이 완료가 됩니다.

  • # 레포트 준비하면서 조사한 내용 공유합니다.. 틀린 정보가 있을 수 있으니 댓글 달아주세요.


    1. 서 론

    컴퓨터를 이용한 작업이 많아지면서 그에 따른 정보를 보호하기 위한 그리고 그 정보를 가져오기 위한 보이지 않는 대립이 이루어지고 있다. 그중 대표적인 기술이 암호(Cryptography)이다. 암호는 정보를 제3자가 정보를 알 수 없게 하는 방식이다. 암호는 고대에서부터 계속 되어 왔으며, 오늘날에 개개인이 하나의 암호를 가지고 있을 정도로 발전되어왔다. 여태껏 암호화 기술이 정보보호에만 당연히 사용된다는 생각을 했다.

    그래서 이 레포트에는 그 순진한 생각이 틀렸다는 것에 대해 조사해보려고 한다.

     

    (1) 암호화 기술의 악의적인 이용

     

    흔히 알고 있는 암호화기술은 개인의 정보를 ‘보호’ 하기위해서 사용되거나 특정 가치의 저작권을 ‘보호’하기위해서 또는 제품의 도용을 ‘보호’하기 위해서 사용된다고 알고 있다. 그러나 이러한 보호도 있다. 바로, 악성소프트웨어에 대한 ‘보호’ 이다. 물론 이것도 보호를 하지만, 그 보호하고자 하는 대상이 ‘보호’를 파훼하는 용도로 사용되는 것이기에 문제가 되는 것이다. 암호화 기술이 이런 용도로 사용될 줄은 생각도 못했기에 조금 더 알아보기로 한다.

     

     

     

    2. Cryptovirology 개요

     

    상대적이며 절대적인 지식의 백과사전은 아닐지라도 누구나 자유롭게 글을 쓸 수 있는 사용자 참여의 온라인 백과사전인 위키피디아에서 Cryptovirology를 정의하고 있었다. 간단히 말하면 Cryptovirology는 악성 소프트웨어에 사용되는 암호화기법의 응용프로그램의 연구이다. 조금더 쉽게 말하면 암호를 이용한 바이러스를 Cryptovirus라 부르며 이에 대한 연구를 Cryptovirology라 한다.

    사실 Cryptovirology는 일반학계에서 시작되었지만, 최근에는 악성코드 개발자들의 암호화 알고리즘을 분석하는 부분으로 까지 확대되었다. 또한, 악성코드 개발자의 암호화 기반 기술의 연구도 포함되어 있다.

    암호화는 전통적으로 방어적인 목적을 위해 사용되고 있다. 암호는 의식하지 못한 유출에 대항해 방어를 해준다. 공개키 암호방식은 의도적으로 하는 해커에 대항하기 위한 기초로 만들어 졌고, 디지털 서명 알고리즘은 위조자로부터 방어해준다. 이와 같이 Cryptovirology는 프로토콜의 오류 및 설계 취약점을 찾는 것을 넘어서, 공격보다는 방어에 사용할 수 있는 앞으로의 기술 분야이다.

    3. Cryptovirus

     

    Cryptovirus는 암호를 이용한 바이러스를 칭한다. Cryptovirus를 이용한 공격에는 블록 암호와 같은 비밀키 암호와 RSA 등의 공개키 암호가 사용된다. 비밀키 암호는 데이터의 고속 암호화에 사용되며 암호화와 복호화에 사용되는 키가 동일하며, 공개키 암호는 암호화에 사용되는 공개키와 복호화에 이용되는 개인키가 서로 다르다.

     

     

     

    (1) Cryptoviral Extortion 기법

     

    이전의 악성 코드 공격은 실패했을때 Cryptoviral Extortion은 성공했다. 이전 악성 코드로부터 Cryptovirus 구별되는 중요한 포인트는 Cryptovirus은 공개 키 암호화를 사용한다는 것이다. 트로이는 효과적으로 대칭 암호화를 사용하는 것이였다. 대칭 암호화 / 암호 해독 "키"와 호스트 시스템에 존재 쉽게 추출할 수 있습니다. 하지만, 바이러스는 공개 암호화 키가 아닌 해당 개인 암호 해독 키가 포함되어 있으므로, Cryptovirus의 경우는 해당되지 않는다.

    Cryptoviral Extortion 은 공격자와 피해자 사이에 실시되는 3개의 프로토콜이다. Cryptoviral Extortion 프로토콜은 다른 데이터 파일의 유지를 위한 데이터 파일의 추출로 설명된다. 그 프로토콜에 포함되는 암호화 체크섬은 바이러스가 공격한 이후 시간으로 부터 그 요구되는 데이타는 변하지 않음을 확인한다. 공격은 데이터를 암호화하고 그 데이터 값을 위해 보유한다. 그 프로토콜은 다음과 같다.

    0단계 - (공격자 설치 단계)는 두 개의 비대칭 키는 공격자에 의해 생성된다. 이것은 스마트 카드를 사용하여 수행할 수 있다(FIg. 1 참조). 실험에 MS CAPI와 개인 키로 두 개의 키를 만들고 텍스트 파일에 기록된 대칭 암호화 기록에 저장된다. 연습에서 해당 공개키는 Cryptovirus 로 hard-coded 되어있다.

     

    1단계 - (공격자->피해자) 공격자가 Cryptovirus를 보낸다. 후에 바이러스는 많은 호스트 컴퓨터에 활성화되고, 한 컴퓨터로의 공격을 고려한다. 바이러스가 활성화하면, 무작위 비트 생성기(3-Key triple DES key)를 사용하고, 임의의 8바이트로 벡터를 초기화한다. 그 데이터 파일에 사용된 바이러스 암호화는 cipher block chaining 암호모드이다. 그 바이러스모드는 평문을 이진 텍스트 파일로 암호문을 만든다. 바이러스가 공격자의 공개 키를 사용하여 대칭 키를 암호화 한다.그 결과 비대칭 암호문 뭉치는 피해자의 시스템에서 텍스트 파일에 기록된다. 그 평문과 대칭키는 없어진다.

    그 텍스트 파일은 데이터의 반환협상에 사용하기 위해 피해자에게 보내진다. 실제로도 바이러스는 공격자의 디지털 가명을 보낼 수 있고 피해자가 혼합 네트워크를 통해 대칭 키에 대한 지불을 종용한다.

     

    2단계 - (피해자->공격자) 만약 피해자가 몸값을 지불하고 바이러스제작자에게 텍스트파일로 된 비대칭 암호문을 전송한 경우, 개인 암호 해독 키를 사용하는 바이러스 제작자가 그 암호뭉치를 해독해서 그것에 접속 한다. 대칭키를 보인다.

     

    3단계 - (공격자-> 피해자) 바이러스 제작자가 피해자에게 대칭키등을 보냅니다. 이들은 값을 지불한 데이터를 해독합니다.

     

    다형성 바이러스의 경우도 암호를 이용하여 악성 코드 스스로를 암호화하지만 복호화에 필요한 정보가 바이러스 내에 포함되어 있다. 그러나, Cryptovirus의 경우는 복호화에 필요한 정보를 공격자만 가지고 있게 된다. 실제로 2006년 3월 사용자의 파일을 암호화하고 복호에 필요한 정보제공에 300달러를 요구하는 랜섬웨어[1]가 발견되었다. 트로이 목마 프로그램으로 Cryptovirus를 이용한 제작인지는 밝혀지지 않았다. 비록 아직까지 크게 전파되지는 않았으나 향후 이와 유사한 악성 코드에 의한 사용자 데이터의 악의적인 암호화에 대한 우려가 현실화될 가능성이 충분하다고 예상한다.

     

     

     

    (2) Ransomware

     

    미국에서 발견된 스파이웨어 등의 신종 악성 프로그램. 컴퓨터 사용자의 문서를 볼모로 잡고 돈을 요구한다고 해서‘랜섬(ransom)’이란 수식어가 붙었다. 인터넷 사용자의 컴퓨터에 잠입해 내부 문서나 스프레이시트, 그림 파일 등을 제멋대로 암호화해 열지 못하도록 만들거나 첨부된 이메일 주소로 접촉해 돈을 보내 주면 해독용 열쇠 프로그램을 전송해 준다며 금품을 요구하기도 한다.

     

     

    ① 공격자는 공개키 암호에 사용되는 공개키 y와 개인키 x를 생성하고, 공개키 y를 저 장하고 있는 바이러스를 배포한다.

    ② 바이러스가 활성화되면 블록 암호에 사용될 랜덤한 비밀키 k를 생성하고 사용자의 데이터를 비밀키 k를 세션키로 사용하여 블록 암호로 암호화 한다.

    ③ 비밀키 k를 공개키 y로 암호화한 값 c를 저장하고 비밀키 k를 삭제한다.

    ④ 공격자는 비밀키 k를 알려주는 대가를 사용자에게 요구하여 받아들여지는 경우 c를 개인키 x로 복호화하여 원래 비밀키 k를 구한후 사용자에게 전달한다.

    ⑤ 사용자는 비밀키 k를 세션키로 사용하여 블록 암호로 복호화하여 자신의 데이터를 복구한다.

     

    위와 같이 동작하는 Cryptovirus 는 랜섬웨어(Ransomeware)의 일종이며 공개키 암호를 사용하기 때문에 바이러스의 분석으로는 데이터를 복구할 방법이 전혀 없다는 특징이 있다.

     

    그렇다면 이러한 악성 소프트웨어로부터 대비를 해야한다. 1차적으로 Preventive control로 access control을 해야 한다. 2차적으로 데이터를 백업해서 그 데이터를 다시 복구할 수 있는 경우에는 그 공격은 효력이 없어진다. 3차적으로 이런 일을 대비해 “사고 대응 계획”을 미리 구축해 놓아야겠다.

     

     

     

    4. 결 론

     

    20년간 악성 프로그램은 전파속도나 기능면에서 눈부신 진화를 하는 것 같다. 디지털 컨버전스와 유비쿼터스화에 따른 환경 변화에 따라 악성 코드의 제작에도 새로운 기수로가 개념이 도입되며, 피해 범위도 컴퓨터 시스템에서 PDA,휴대폰, RFID태그 등 네트워크로 상호 연동되는 스마트 기기 절반으로 확장되고 있다. 이미 이동 단말기에 대한 모바일 바이러스의 증가속도는 PC용 악성 프로그램을 추월하였으며, PC와 PDA를 동시에 감염시키는 바이러스인 Crossover 유형도 발견되었다. 사실 이번 레포트를 하면서 Cryptovirology를 조사하지 않았다면 이런 유형의 바이러스는 알지도 못하고 언젠가 당했을 지도 모를 일이다. 인터넷에도 자료가 얼마 없을 정도로 정보가 얼마 없었다. 당연히 암호는 보호용으로 사용되지 바이러스로 사용될지 알았을까? 더군다나 그와 함께 데이터 몸값을 요구하는 사례가 늘고 있으니, 이제부터라도 이을 생각하고 개발자의 입장에서 언제나 대비를 해야겠다.

       

     

    5. 참고문헌

     

    Wiki Pedia, 「Cryptovirology」, http://en.wikipedia.org/wiki/Cryptovirology, 2010.11.08

    네이버, 「Cryptovirology」, http://blog.naver.com/juno72?Redirect=Log&logNo=120024061827, 2010.11.08

    구글, 「Cryptovirology」, www.cryptovirology.com, 2010.11.08

    네이트, 「Cryptoviral Extortion」, http://blog.paran.com/tjdgns915/14587152, 2010.11.08

    다음, 「Ransomware」, http://coinz.tistory.com/410, 2010.11.08

     

    # 레포트 준비하면서 조사한 내용 공유합니다.. 틀린 정보가 있을 수 있으니 댓글 달아주세요.

    신입 개발자를 위한 조언
    효율적으로 MSDN을 보는 방법
    출처 : 신영진 codewiz@gmail.com http://www.jiniya.net 

    윈도우 개발자를 위한 가장 기초적인, 동시에 가장 방대한 레퍼런스가 있다면 바로 MSDN일 것이다. 상당수의 고급 개발자들은 MSDN만 주어진다면 거의 모든 정보를 다 얻을 수 있다고 말하기도 한다. 하지만 아직도 초보 개발자들은 MSDN은 설치해두었지만 그 속에서 정보를 얻고 있지는 못하다. 게시판에 올린 질문에 냉소적으로 올라오는 MSDN을 참고하라는 말에 상처를 받기도 한다. 왜냐하면 정작 본인은 MSDN을 보았으나 정보를 얻지 못했기 때문이다. 이 글에서는 이러한 MSDN을 효율적으로 보는 방법에 대해서 다룰 것이다. 각 함수에 대한 정보를 보고 이해하는 방법에서부터 방대한 MSDN에서 자신이 원하는 정보를 찾기 위한 방법까지 언급할 것이다. 물론 이 과정에서 기본적인 영어 독해 실력은 필수사항이다. 

    MSDN에서 얻을 수 있는 가장 기초적인 정보는 개별 윈도우 API의 사용방법이다. 여러분이 OpenProcess의 정보를 얻고 싶다면 MSDN을 켜고 색인에서 OpenProcess를 입력하면 된다. 하지만 고민은 이 과정부터 시작된다. 검색된 OpenProcess가 너무 많기 때문이다. 일반적으로 PC에 설치되는 윈도우 운영체제에서 사용되는 OpenProcess 정보를 보고 싶다면 옆에 base라고 붙은 것을 클릭하면 된다. 

    이렇게 정보를 찾아 왔다면 MSDN은 여러분에게 OpenProcess에 대한 모든 정보를 보여줄 것이다. MSDN의 함수 설명은 총 여섯 개의 카테고리로 이루어진다. 인자 정보(Parameters), 리턴 값(Return Values), 주의 사항(Remarks), 예제 코드(Example Code), 요구 사항(Requirements), 관련 함수(See Also)가 그것이다.  

    인자 정보에서 여러분이 이해해야 할 가장 큰 정보는 각 인자의 종류다. 종류는 크게 입력(in), 출력(out), 입출력(in, out)으로 나뉜다. 입력 정보의 대표적인 형태는 OpenProcess의 첫 번째 인자와 같은 것이다. OpenProcess의 첫 번째 인자는 열고자하는 프로세스 핸들의 권한을 설정하는 값으로 설명에 있는 process access rights라고 된 부분을 클릭해서 나오는 정보를 조합해서 넘기면 된다. 출력 정보의 대표적인 형태는 GetWindowText 함수에서 찾을 수 있다. GetWindowText의 두 번째 인자는 윈도우 캡션명을 저장할 문자열 포인터다. 이 공간은 출력용 포인터로 세 번째 인자인(nMaxCount)를 저장할 수 있을 만큼의 공간을 가진 버퍼를 넘겨야 한다. 끝으로 입출력 정보의 대표적인 형태는 GetVersionEx 함수에서 찾을 수 있다. GetVersionEx 함수의 유일한 인자인 lpVersionInfo는 넘기기 전에 dwOSVersionInfoSize에 구조체 크기를 지정해 주어야 한다. 이 후 함수를 호출하면 GetVersionEx 함수는 윈도우 버전 정보를 lpVersionInfo에 담아준다. 

    리턴 값에서 인지해야 할 가장 중요한 두 가지 정보는 성공한 경우의 리턴 값과 실패한 경우의 리턴 값이다. 또한 실패한 경우에 추가적으로 실패한 원인을 찾을 수 있는 방법에 대해서도 알아두어야 한다. 대부분의 윈도우 API의 경우 GetVersionEx 함수와 같이 성공한 경우에 0이 아닌 값을, 실패한 경우에 0을 반환한다. 또한 실패한 경우에는 추가적인 실패 원인을 GetLastError를 통해서 조회할 수 있다. 종종 GetCurrentProcess와 같이 절대 실패하지 않는 함수들도 있다. 동시에 실패하지만 MSDN에는 실패에 대한 언급이 없는 GetWindowThreadProcessId와 같은 함수도 있다. GetWindowThreadPorcessId 함수는 잘못된 윈도우 핸들이 전달되면 실패하며, 실패여부는 GetLastError를 통해서 알 수 있다. 

    끝으로 각 함수에 첨부되어 있는 요구 사항 표를 살펴보는 방법에 대해서 알아보자. 요구 사항 표에는 각 함수를 호출할 수 있는 운영체제가 나와 있다. 여기서는 여러분의 제품이 지원하는 운영체제의 하한선이 존재하는 가만 확인하면 된다. Windows 98을 지원해야 하는 제품이라면 VerifyVersion 함수를 정적으로 사용하는 것은 피해야 한다. 이 함수는 Windows 2000 이상부터 사용가능하기 때문이다. 굳이 이 함수를 사용해야 한다면 GetProcAddress로 동적으로 함수 주소를 구해서 사용하는 방법을 택해야 한다. 

    이제 한 함수의 정보를 알아내는 방법에 대해서 살펴보았다. 하지만 망망대해 같은 MSDN을 탐색하는데에는 이런 방법으로는 한계가 있다. 좀더 효과적으로 다양한 정보를 한번에 살펴볼 수 있는 방법이 필요한 것이다. 이런 방법 중에 하나가 마법과 같은 버튼인 목차 동기화(Sync Contents) 버튼에 있다. OpenProcess 설명 부분에서 이 버튼을 눌러 보자. 그러면 OpenPorcess 설명이 있는 목차로 이동하게 된다. 여기서 여러 분들은 세 가지 중요한 사항을 인지해야 한다. 하나는 OpenProcess가 있는 목차의 위치다. 두 번째는 OpenProcess와 같은 단계에있는 다른 함수들에 대한 정보다. 마지막 정보는 OpenProcess 목차 부위에 있는 기술 문서(Technical Article)이다.



    출처 : 신영진 codewiz@gmail.com http://www.jiniya.net 

    2010년 9월 8일. NHN에서 주관하는 DeView 행사가 열렸습니다.
    저는 개인적으로 이런 개발자포럼(?)과 같은 행사에는 처음으로 가면서 설레는 마음과 기대가 아주 컸습니다.

    이 행사에는 "사전등록" 을 받아서 행사전에는 상당히 계획적인 면모를 볼 수 있었습니다. 저는 물론 사전등록을 하고 갔습니다.^^
    처음가보는 거라 NHN_DeView 담당 트위터에게 멘션을 날려보았죠.


    "음~ 내가 가도 되는 곳이구나" 확인을 하고 당일날 길을 나섰습니다.




    행사가 열리는 장소는 "코엑스 인터컨티넨탈 호텔"



    NHN 블로그에서 아주 친절하게 찾아오는 길을 포스트해주었습니다. 

    하지만 저와 같이 초행이신 분들은 아마 많이들 헤메셨을겁니다.
    코엑스를 통해서 가는 길은 물론이고 , 위와 같이 길따라 가도 NHN_DeView의 행사 위치를 알려주는 그 무엇도 없었습니다.

    있는건 코엑스몰을 통해서 가는 길에 있는 방해요소들.. !!

                                                    [코엑스에서 진행중이던 스타2 시연장(호텔가는 길에 메가박스쪽에 위치하고있다)]

    그렇게 길을 헤매다. 11시가 되어서 행사장에 도착할 수 있었습니다.(정말 눈물나게 반가웠어요)


    기쁜마음에 냅다 달려가 사전등록하고 왔다고 말했지만, 이미 준비한 1200개의 데뷰팩이 다 나갔다는것..
    주변에는 저말고도 많은 사람들이 사전등록하고 온사람은 뭐가 되냐며 많은 항의를 했지만, 이미 준걸 뺏어올수도 없고 참..
    NHN행사관계자가 실수를 했어요. 힘들게 찾아갔더니 정말 기분 안좋았었습니다.

    뭐 없다는 걸 어떻게 하겠어요. 강연이나 들어야지!



    밥먹기전에 한 김평철CTO의 인삿말과 김정민이사의 KEYNOTE '어떻게 하면 '건강한' 소프트웨어를 만드나' 를 듣기위해 들어갔습니다.
    TRACK A~C 방이 하나로 열려있더군요.



    3개의 TRACK을 하나로 만든 큰 무대에서 인삿말과 KEYNOTE가 발표되었습니다.

    인삿말은 늦어서 못봤고 KEYNOTE만 봤는데, 사람이 너~ 무 많아서 집중이 안돼더라고요. 특히 개발자도 아니라 대학생신분으로
    거대 프로그램을 진행하면서 생기는 처리능률등등의 하드한 내용은 알아먹을수가 없었습니다.
    중요한건 사람몸이 건강하려면 운동도하고 하듯이 소프트웨어도 마찬가지이다. 몇가지 절차에 의해 계획적으로 효율적인 방법으로 건강해진다.


    강연장 앞에서 휴식취하는(?) 공간
    점심시간에는 그야말로 인구 대이동! 하지만 저는 데뷰팩을 받지못했기때문에 식권이 없었습니다 ( ㅠ_ㅠ )
     다음 강연이라도 좋은자리에서 보자는 마음으로 밖에 나가 편의점에서 삼각김밥하나 먹고 후딱들어왔습니다.


    Track C : 한게임 사천성을 게임오븐으로 노릇노릇 구워드립니다. 덤으로 3D게임 예제까지! -성석현/정승범-


    한게임에서 출시한 IDOGAME 의 '게임오븐' 의 존재도 모르는 상태에서 들었는데, 완전 신세계를 보았다.
    이번 데뷰에서는 NHN이 여러가지 시장을 열어주었는데 IDOGAME도 그중에 하나이다.

    유저가 직접 게임을 만드는 것이다. 그것을 도와주기위한 툴은 'GAMEOVEN'을 지원해지고
    그에 필요한 서버등 인프라를 NHN에서 지원해준다.

    엄청난 시장을 보여주고있는 것이다.
    자세한것은 홈페이지 방문해서 도움받으세요 ~> 이동





    Track D : 웹사이트 제작과 운영, 네이버와 함께 하세요! - 고영수 -


    웹사이트 제작에 조금이라도 관심이 있었던 사람이라면 들어봤을만한 제로보드.
    그 제로보드가 새롭게 돌아왔습니다.

    또하나 이번 데뷰에서 느낀점!
    속칭 '재야의 은둔 고수'를 대상으로 함께 만들어 나가는 프로젝트라는 점입니다.
    이번에 소개한 XE도 보다 더 나은 환경과 기술을 제시하면서 함께 만들어 나가길 당부했습니다.

    자세한 내용은 홈페이지로 ~> 이동

    인터넷으로도 생중계가 되었죠?

    Track D : 네이버 안의 또다른 세상, 함께 만드는 네이버 소셜 앱 - 오창훈 -


    개인적으로 이번 강연을 맡으신 오창훈이란분이 말을 가장 재미있게 한거 같아요 . 제가 본 강연 중에!

    이번 강연도 역시 새로운 시장을 보여주었습니다.
    네이버에서 서비스중인 SNS인 (카페,블로그,미투데이)
    이 3개의 시장을 대상으로 APP을 팔 수 있는 시장이 열렸습니다.(이용자의 수도 어마어마하죠)
    그리고 앱을 사고파는 공간인 앱스토어를 최초로 공개! (NHN극비라는 정체모를 사이트도 보여주셨죠)

    그냥 간단히 말해 7:3 묻지도 따지지도 않고 7 을 드린답니다.

    관심이 생겼다면 앱팩토리로! ~> 이동

    엄청난 와이파이!


    이쯤되서 보니 아침밥도 안먹고 달려왔는데 삼각김밥으로만 때웠더니 배가 엄청나게 고프더군요.
    그래서 자리잡고 있던 Track D 를 아쉽지만 박차고 나와 집으로 돌아가려고 했습니다
    ※ 가보신 분들은 아시겠지만, Track A~D 까지 여러방이 있었지만 실질적으로 옮겨다니면서 보기에는 무리가 있었습니다.
        사람은 많은데 장소는 협소해서 왠만하면 다른 탐나는 강연을 포기하고 한 Track에서 자리잡고 보는 사람들이 많았죠.
        그렇지 않으면 줄서서 기다렸다가 땅바닥에 앉아서 봐야했던...ㅠㅠ

    Track D 의 모습 엄청 많죠?

    미투데이에 올라오는 글을 실시간으로 보여준 화면


    그렇게 나와서 걷는데 갑자기 저도 모르게 끌리게 Track B로 들어갔습니다. 무슨생각이였는지..

     Track B : 단 하루도 안심할 수 없게 만드는 웹 보안 위협들, 어떻게 맞설까? - 조상현 -



    JSP를 이용하여 홈페이지를 한번 만들어 본적이 있어서 그런지 SQL 이란 단어와 SELECT FROM 등 익숙한 SQL문이 보이길래 들어가봤습니다.
    애초에 저는 보안에 관심이 별로 없던사람이라(-_-;;) 계획세울때 Track B는 염두해 두지 않았는데,
    오우 , 들어보니까 기상천외한 해커들의 수법들이 아주 인상에 남았습니다.
    자동차 번호판에 SQL문을 써놓은 점( 재미있는 방법 ㅎㅎ )
    비밀번호 입력란에 " 로 시작하는 SQL문을 향한 노림수!
    SQL Injection. 그렇게 큰 기술이 아니고 사소한 빈틈을 노리는 수법이라 개발시에 조금만 주의한다면
    의연중에 가정을 만들어 두지만 않는다면 이런 사소한 것들은 막을 수 있다고 생각했습니다.

    멋있죠?

    Track D : NHN 웹플랫폼, 세상 밖으로 - 김성관 -


    마지막 강연!
    Track D를 빠져나온걸 후회하면서 들어가 바닥에 앉아서 보았습니다.
    제목이 참 궁금증을 유발시키기 않나요?
    <NHN 웹플랫폼, 세상 밖으로> 모든 강연의 제목중에 가장 간결한 제목이 아니였나 싶어요.
    아무튼 이번 강연은 개발자센터에서 진행중인 오픈소스들이 있었는데, 그곳에 또하나의 물건(!?)을 소개하는 시간이였습니다.

    nClipse, USF , XSS Filter 세상 밖으로...
    평소에 자바를 많이 하다보니 nClipse가 뭔저 눈에 들어왔습니다.
    아니나 다를까! 이클립스의 플러그인이라고 하더군요. 웹제작에 도움을 주는 플러그인이라고 합니다.
    자세한 내용은 사용자 가이드가 있는 홈페이지에! ~> 이동

    웹제작공부하다보면 많이 듣는 단어. MVC
    nClipse를 이용하요 사용할 수 있는 USF는 로직구분을 도와줘서 개발자간의 독립적인 개발을 이끌어줍니다.
    자세한 내용은 사용자 가이드가 있는 홈페이지에! ~> 이동

    그리고 직전에 들은 강연에서 웹보안에 대한 이야기를 들으면서 XSS에 대한 내용을 많이 들었는데
    바로 다음시간인 요시간에 XSS Filter를 소개해 주었습니다.
    노리고 이렇게 배치한건가봐요! 홈페이지의 결점을 보안해보실려면 이용하세요!
    자세한 내용은 사용자 가이드가 있는 홈페이지에! ~> 이동

    이번 강연에서 중요한건 이모든게 새로 시작하고 있다는 점입니다.
    NHN은 더많은 사용자와 함께 완성되길 기대하고 있는것 같더군요.^^


    개발자는 정말 배울게 너무 많은거 같아요.
    배우고 배우고 또배우고 , 배웠다 싶으면 또 나오고 또배우고. 하아..
    그래도 함께 배우자고 NHN_DeView 가 있는게 아닐까요?
    어디로 갈지몰라 정체되어있다고 생각했는데 새로운 길을. 그것도 많이 본것같아서 행복했습니다.

    처음에는 시장판 같은 행사진행때문에 기분이 안좋은게 사실이였지만.
    개발자분들의 가로줄무늬옷과 좋은 강연때문에 어느사이엔가 흠뻑취해버렸습니다.
    또오고 싶어요!!

    기발한 행사소개


    하지만...
    경품추첨이 있다는 스테프의 진행멘트를 들으면서 데뷰팩이 없는 제손을 보며 집에 돌아왔습니다....
    다음에는 마지막 폐회식까지 함께하고 싶어요. 가슴아플까봐 먼저 돌아왔습니다.
    내년에는 더욱 알차고 성숙한 데뷰가 되었으면 합니다.




    추가로 ) NHN에서 예비 멤버쉽과정을 모집하더라고요. 컴퓨터전공인 저는 아쉽게 입맛만 ...

    + Recent posts