내가 만든 바이러스를 잡아보자
(악성코드 개발일지 10에서 이어짐)
바이러스 분석 (local_shellcode_injection.c)

지난번에 드디어 뭔가 악성코드라고 할 수 있는 것을 만들었다!
(물론 calc.exe를 실행하는 쉘코드가 아니라 reverse shell 같은 걸 넣으면 진짜 악성이 되고...)
조금 더 분석하자면
- 자체 실행형: .exe 파일을 클릭해서 직접 실행시켜줘야 한다.
- dropper: 페이로드를 가지고 있다가 타겟의 메모리에 drop한다
- local injector: 다른 프로그램이 아닌 자신이 실행된 프로세스에 injection한다.
이걸 어케 잡느냐가 문제인데...
저번처럼 파일 전체의 해시로 잡는 방법도 있겠으나, 만약 악성코드의 문자열 하나라도 바뀌면 무용지물이 될 것이다...
이번에는 사용된 페이로드의 시그니처를 잡아 탐지해보자!
시그니처 백신 만들기
대부분의 쉘코드들은 FC 48 83 E4 F0으로 시작한다고 한다
플래그 초기화 및 스택 정렬
따라서 이걸 시그니처로 잡으면 좋을 것 같다.
그리고 내 쉘코드 기능인 calc.exe를 탐지한다면?
local_shellcode_injection만의 탐지기가 완성된다!
단순하게 read byte 모드로 exe 바이너리를 긁어온 후,
in으로 안에 시그니처 바이트가 존재하는지만 탐지하면 된다
def scan_exe_for_signature(file_path):
signature_shellcode = b"\xfc\x48\x83\xe4\xf0" # 쉘코드 시그니처
signature_calc = b"calc.exe\x00" # calc 시그니처
print(f"[*] scanning... {file_path}")
try:
with open(file_path, 'rb') as f:
file_data = f.read()
found = False
if signature_shellcode in file_data:
print("[!] detected!: shellcode pattern")
found = True
if signature_calc in file_data:
print("[!] detected!: calc.exe")
found = True
if not found:
print("[-] safe: no signature")
except FileNotFoundError:
print("[-] error: no file")
except Exception as e:
print(f"[-] error with {e}")
if __name__ == "__main__":
target_exe = "../z_malware/Malware_dev.exe"
scan_exe_for_signature(target_exe)
(치료부분은 안넣음)
실제로 파일을 탐지하게 시키면 잘 잡아준다!

모든 자료는 여기에
https://github.com/VeryBigsilver/malware-vaccine/tree/main/4_signature
반응형
'악성코드와 백신 > 백신 개발일지' 카테고리의 다른 글
| [백신 개발](7)[레지스트리 키 치료] (0) | 2026.03.20 |
|---|---|
| [백신 개발](6)[Import table을 이용한 탐지] (0) | 2026.03.17 |
| [백신 개발](4)[바이러스 db] (0) | 2026.03.05 |
| [백신 개발](3)[EICAR 변종 탐지] (0) | 2026.03.04 |
| [백신 개발](2)[EICAR test file] (0) | 2026.03.03 |