TIL

[TIL/정처기] 2025/04/01

21년 3회 기출 코드 정리 ✍️21-3-1-JAVA ⚙️이 코드는 싱글톤 패턴을 사용하여 Connection 객체를 한 번만 생성하고 모든 호출에서 동일한 인스턴스를 반환한다. conn1 = Connection.get();에서 \_inst가 null이므로 객체를 생성

2025년 4월 1일5min read

21년 3회 기출 코드 정리 ✍️

21-3-1-JAVA ⚙️

code
class Connection {
    private static Connection _inst = null;
    private int count = 0;
    public static Connection get(){
        if(_inst == null){
            _inst = new Connection();
            return _inst;
        }
        return _inst;
    }
    public void count(){ count++; }
    public int getCount(){ return count; } 
}

public class Test {
    public static void main(String[] args) {
        Connection conn1 = Connection.get();
        conn1.count();
        Connection conn2 = Connection.get();
        conn2.count();
        Connection conn3 = Connection.get();
        conn3.count();
        System.out.print(conn1.getCount());
    }
}

이 코드는 싱글톤 패턴을 사용하여 Connection 객체를 한 번만 생성하고 모든 호출에서 동일한 인스턴스를 반환한다. ``conn1 = Connection.get();``에서 _inst가 null이므로 객체를 생성하지만, 이후 conn2와 conn3는 _inst가 이미 존재하므로 같은 객체를 참조한다. 따라서 count()를 세 번 호출하면 count 값이 누적되어 최종 출력은 3이 된다.

21-3-7-C ⚙️

code
#include <stdio.h>

struct jsu {
    char nae[12];
    int os, db, hab, hhab;
};

int main() {
    struct jsu st[3] = {{"데이터1",95,88},{"데이터2",84,91},{"데이터3",86,75}};
    struct jsu* p;
    p = &st[0];
    (p + 1) -> hab = (p + 1) -> os + (p + 2) -> db;
    (p + 1) -> hhab = (p + 1) -> hab + p -> os + p -> db;
    printf("%d", (p + 1) -> hab + (p + 1) -> hhab);
}

이 코드는 구조체 배열 st[3]을 선언하고 포인터 p를 사용하여 배열 요소에 접근하는 방식이다. 포인터 연산 (p + 1)(p + 2)를 통해 두 번째와 세 번째 구조체를 참조하고, -> 연산자를 사용하여 구조체 멤버에 접근하고 값을 수정한다. 예를 들어, (p + 1) -> hab는 두 번째 구조체의 hab 값을 수정하며, 그 값을 다른 멤버와 연산하여 계산한다. 이를 통해 포인터 산술과 구조체 멤버 접근을 효율적으로 처리하고 있다.

21-3-9-Python ⚙️

code
x, y = 100, 200
print(x == y)

python에서는 boolean 값이 대문자로 시작한다. 따라서 False가 출력된다.

21-3-16-C ⚙️

code
#include <stdio.h>

int main() {
    int* array[3];
    int a = 12, b = 24, c = 36;
    array[0] = &a;
    array[1] = &b;
    array[2] = &c;
    printf("%d", *array[1] + **array + 1);
}

이 코드는 포인터 배열을 사용하여 정수 변수 a, b, c의 주소를 저장하고 이를 역참조하여 값을 출력한다. array[1]b의 값 24를 가져오고, arrayarray[0]이 가리키는 a의 값 12를 가져오므로, array[1] + array + 124 + 12 + 1 = 37이 되어 최종 출력은 37이 된다. 여기서 는 포인터가 가리키는 값을 참조하는 단일 역참조이며, 는 포인터 배열을 통해 이중 역참조하여 값을 가져온다는 차이가 있다.

21-3-17-JAVA ⚙️

code
public class Test {
    public static void main(String[] args) {
        int w = 3, x = 4, y = 3, z=5;
        if((w == 2 | w == y) & !(y > z) & (1 == x^y != z)){
            w = x + y;
            if(7 == x^y != w)
                System.out.println(w);
            else
                System.out.println(x);
        }
        else {
            w = y + z;
            if(7 == y^z != w)
                System.out.println(w);
            else
                System.out.println(z);
        }
    }
}

^는 XOR(배타적 논리합) 연산을 수행하는 연산자이다. 두 비트가 다를 때 1, 같을 때 0을 반환한다. XOR 연산자를 너무 오랜만에 봐서 까먹었다. 최종 출력 결과는 7.

이론 문제 포인트 ✍️

1. 다크 데이터 ✅

- Dark Data, 특정 목적을 가지고 데이터를 수집하였으나, 이후 활용되지 않고 저장만 되어있는 대량의 데이터

2. 타이포스쿼팅 ✅

- Typosquatting, 네티즌들이 사이트에 접속할 때 주소를 잘못 입력하거나 철자를 빠뜨리는 실수를 이용하기 위해 이와 유사한 유명 도메인을 미리 등록하는 것

- URL 하이재킹(Hijacking)이라고도 함

3. 스니핑 ✅

- Sniffing, 네트워크의 중간에서 남의 패킷 정보를 도청하는 해킹 유형의 하나, 수동적 공격에 해당

4. 워터링 홀 ✅

- Watering Hole, 목표 대상이 자주 방문하는 웹 사이트를 사전에 감염시켜 대상이 해당 사이트에 방문했을 때 악성 코드에 감염되게 하는 웹 기반 공격

- 감염된 PC를 기반으로 대상이 속한 조직의 중요 시스템에 접근하거나 불능으로 만드는 등의 영향력을 행사할 수 있음

5. 기타 정보 보안 관련 용어 ✅

- ``좀비(Zombie) PC``: 악성 코드에 감염되어 다른 프로그램이나 컴퓨터를 조종하도록 만들어진 컴퓨터, C&C 서버의 제어를 받아 주로 DDos 공격 등에 이용됨

- ``C&C 서버``: 해커가 원격지에서 감염된 좀비 PC에 명령을 내리고 악성코드를 제어하기 위한 용도로 사용하는 서버

- ``봇넷(Botnet)``: 악성 프로그램에 감염되어 악의적인 의도로 사용될 수 있는 다수의 컴퓨터들이 네트워크로 연결된 형태

- ``제로 데이 공격(Zero Day Attack)``: 보안 취약점이 발견되었을 때 발견된 취약점의 존재 자체가 널리 공표되기도 전에 해당 취약점을 통하여 이루어지는 보안 공격, 공격의 신속성을 의미함

- ``트로이 목마(Trojan Horse)``: 정상적인 기능을 하는 프로그램으로 위장하여 프로그램 내에 숨어 있다가 해당 프로그램이 동작할 때 활성화되어 부작용을 일으키지만 자기 복제 능력은 없음

- ``CC(Common Criteria) 인증``: 국가마다 서로 다른 정보보호시스템 평가기준을 연동하고 평가결과를 상호 인증하기 위해 제정된 정보보안 평가기준, ISO/IEC 15408에 등록된 국제 표준

- ``멀버타이징(Malvertising)``: 악성 소프트웨어를 뜻하는 멀웨어(Malware)와 광고(Advertising)의 합성어, 온라인 광고를 통해 악성코드를 유포시키는 행위를 뜻함

- ``정보공유분석센터(ISAC; Information Sharing & Analysis Center)``: 취약점 및 침해요인과 그 대응방안에 관한 정보를 제공하며, 침해사고가 발생하는 경우 실시간 경보/분석 체계를 운영하고, 금융/통신 등 분야별 정보통신기반시설을 보호하기 위한 업무를 수행하는 곳

- ``업무연속성계획(BCP; Business Continuity Planning)``: 각종 재해/장애/재난으로부터 위기관리를 기반으로 재해복구, 업무복구 및 재개, 비상계획 등의 비즈니스 연속성을 보장하기 위한 계획. RTO, RPO, 우선순위를 설정하기 위해 업무 영향 분석(BIA)을 수행함

- ``데이터 디들링(Data Diddling)``: 처리할 자료를 다른 자료와 바꿔서 처리하는 것, 입력값이나 출력값을 부정한 의도로 수정하여 잘못된 결과가 나오도록 유도하는 방식

- ``비트로커(BitLocker)``: Windows 7부터 지원되기 시작한 Windows 전용의 볼륨 암호화 기능. TPM(Trusted Platform Module)과 AES-128 알고리즘을 사용함

- ``공급망 공격(Supply Chain Attack)``: 소프트웨어 공급망에 침투하여 악성코드를 배포하는 공격, SW 빌드 및 배포 과정에 악성코드를 삽입하여 이용자들을 공격함

- ``바이러스(Virus)``: 컴퓨터의 정상적인 작동을 방해하기 위해 운영체제나 저장된 데이터에 손상을 입히는 프로그램. 자신을 복제할 수 있고, 다른 프로그램을 감염시킬 수 있음

- ``웜(Worm)``: 네트워크를 통해 연속적으로 자신을 복제하여 시스템의 부하를 높임으로써 결국 시스템을 다운시키는 바이러스의 일종. 분산 서비스 거부 공격, 버퍼 오버플로 공격, 슬래머 등이 웜 공격의 한 형태임