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

[악성코드 개발](6)[페이로드 저장]

황올뱀 2026. 3. 6. 21:41

페이로드 저장하기

악성코드가 악성 행위를 하기 위해선, 명령 코드인 페이로드가 필요하다
이 페이로드를 어디에 저장할 수 있는지 봐보자.

 

.data에 저장하기

.data: 초기화된 전역변수, 정적 변수를 저장하는 공간

 

.data는 read, write가 가능하므로, 암호화된 페이로드를 작성하기에 적합하다!
    단, excute 권한은 없어서 여기서 바로 코드를 실행하면 DEP에 의해 죽는다...

 

페이로드를 전역/지역 변수로 둘 경우 저장할 수 있다!

#include <Windows.h>  
#include <stdio.h>  
// msfvenom calc shellcode  
// msfvenom -p windows/x64/exec CMD=calc.exe -f c  
// .data saved payload  
unsigned char Data_RawData[] = {  
    <대충 msfvenom으로 생성한 페이로드>
};

int main() {  
    printf("[i] Data_RawData var : 0x%p \n", Data_RawData);  
    printf("[#] Press <Enter> To Quit ...");  
    system("pause");  
    return 0;
}

 

.rdata에 저장하기

.rdata: 읽기 전용인 데이터 (상수) 저장 공간

 

오로지 read 권한만 있다...
-> 여기서 읽어서 다른 곳에서 해독하거나, 실행하는 방식으로 사용하자

 

.data 섹션에 전역변수로 페이로드를 두어 저장했다면,
.rdata에 넣기 위해선 const 키워드를 통해 상수로 바꿔주면 된다!

#include <Windows.h>  
#include <stdio.h>  
// msfvenom calc shellcode  
// msfvenom -p windows/x64/exec CMD=calc.exe -f c  
// .rdata saved payload  
const unsigned char Rdata_RawData[] = {  
    <대충 msfvenom으로 생성한 페이로드>
};

int main() {  
    printf("[i] Data_RawData var : 0x%p \n", Rdata_RawData);  
    printf("[#] Press <Enter> To Quit ...");  
    system("pause");  
    return 0;
}

 

.text에 저장하기

.text: 컴파일된 프로그램의 기계어 코드를 저장하는 공간

 

.text는 read, excute가 가능하므로, 여기서 바로 실행이 가능하다!

 

이전과 달리 컴파일러에게 직접 .text 섹션에 저장해달라고 요청해야 한다
보통 10byte 미만의 작은 페이로드를 사용할 때 유용하다.

#include <Windows.h>  
#include <stdio.h>  
# pregma section(".text")
// msfvenom calc shellcode  
// msfvenom -p windows/x64/exec CMD=calc.exe -f c  
// .text saved payload  
__declspec(allocate(".text")) const unsigned char Text_RawData[] = {  
    <대충 msfvenom으로 생성한 페이로드>
};

int main() {  
    printf("[i] Data_RawData var : 0x%p \n", Text_RawData);  
    printf("[#] Press <Enter> To Quit ...");  
    system("pause");  
    return 0;
}

 

.rsrc에 저장하기

.rsrc: 리소스 저장 공간

.data, .rdata, .text에는 큰 페이로드를 집어넣을 수 없다.
따라서 .rsrc에 페이로드를 저장하기도 한다

반응형