포렌식 & 개발 이야기 - Forensics & Development
-
포렌식 관련 자료
포렌식 관련 자료
-
알고리즘 문제 풀이
알고리즘 문제 풀이
-
연락쳐
연락쳐
-
디지털포렌식 전문가 2급 자격증
디지털포렌식 전문가 2급 자격증
Best Topic
-
[25년 1회차] 정보보안기사 동회차 합격 후기 (필기 & 실기)
[25년 1회차] 정보보안기사 동회차 합격 후기 (필기 & 실기)
2025.05.12이번 회차에 정보보안기사 필기와 실기 모두 한 번에 합격했습니다.짧게나마 제 공부 방법과 느낀 점, 그리고 소소한 팁들을 기록용으로 남겨봅니다.앞으로 준비하시는 분들께 조금이나마 도움이 되길 바랍니다1.시험 개요정보보안기사는 한국인터넷진흥원(KISA) 주관 자격증으로, 정보보안 실무 지식 + 보안관리 능력을 두루 평가합니다.필기 : 객관식 4지선다, 과목별 20문항씩 총 100문항 (과락 있음)실기 : 필답형 (보안 관련 실무 지식 + 상황 대응)시험 일정은 상·하반기로 연 3회 진행되며, 제가 응시한 회차는 2025년 1회차였습니다.2. 필기 공부법✅ 공부 기간: 약 2~3주저는 짧게 집중해서 준비하는 스타일이라, 기본 이론 + 기출 반복 중심으로 공부했습니다.이때 BOB랑 일정이 겹쳐서 책만 사두고 .. -
[포렌식] 윈도우 카카오톡 데이터베이스 복호화 분석 및 구현 #1
[포렌식] 윈도우 카카오톡 데이터베이스 복호화 분석 및 구현 #1
2024.03.23본 글은 언제든지 비공개 되거나, 삭제될수 있음을 미리 알려드립니다. (뭐,, 카카오톡 본사에서 글 내려라 하지 않는 이상 없어지진 않지 않을까...?) 이 글은 여러 논문을 참조하여 분석 및 구현한것이며, 참고 문헌은 아래에서 확인 할 수 있다. 분석 환경 및 도구 : MacBook Air M2, Python 3.9, DB Browser for SQLite, HxD,, 등등등등 먼저 윈도우용 카카오톡 데이터베이스 복호화를 하는 이유가 무엇인가 ? 직관적인 주제이며, 가장 결과물이 잘 나올수 있는 복호화 솔루션이 아닌가! 상용 포렌식 도구들에서도 카카오톡 복호화는 어려움을 겪는 부분이라, 쉽고, 빠르게 복호화 할수 있는 방법이 뭐가 있나 고민하다 분석하게 되었음. (사실 이렇게 퍼블릭하게 코드도 공개해도.. -
제 10회 디지털 범인을 찾아라 - 문제 풀이 보고서 #0 - 대회 소개 및 분석 환경
제 10회 디지털 범인을 찾아라 - 문제 풀이 보고서 #0 - 대회 소개 및 분석 환경
2025.02.03본 글은 요청시 풀이 보고서가 내려갈 수 있으며,만약 저작권 등에 위반된다면, 지체없이 댓글 또는 pental@kakao.com 으로 연락주시길 바라겠습니다.2024년 디지털 범인을 찾아라 경진대회가 열렸다.한국포렌식학회(회장 김영대)와 한국저작권보호원은 올해로 10회를 맞이하는 ‘2024 디지털 범인을 찾아라 경진대회’를 공동으로 개최한다고 밝혔다.‘디지털 범인을 찾아라 경진대회’는 디지털 포렌식 기술을 활용하여 첨단범죄 수사 역량을 강화하고, 디지털 포렌식 분야의 발전을 도모하는 것을 목적으로 한다. 이번 경진대회는 주니어 부문과 시니어 부문으로 나뉘어 진행되며, 주니어 부문은 전국 대학생 이하 학생들을 대상으로, 시니어 부문은 일반인 및 대학원생 이상 전문가를 대상으로 한다.대회 접수는 2024년 .. -
Deepfake Tutorial - 자신만의 딥페이크를 만들어 보자 (0부터 100까지)
Deepfake Tutorial - 자신만의 딥페이크를 만들어 보자 (0부터 100까지)
2021.12.16먼저 본 글을 통해서 악의적이나 불법적으로 이용할 경우, 어떠한 책임도 지지 않음을 알려드립니다. 본 글을 쓴 목적은, 예전부터 흥미를 가졌던 FaceSwap과 VoiceSwap 두개중 먼저 FaceSwap(얼굴 교체)에 대해 포스팅을 해보려고 합니다. 먼저 필자의 환경은 다음과 같습니다. OS Windows 11 x64 CPU AMD Ryzen 3700X 8-Core Processor RAM 32GB VGA NVIDIA GeForce GTX 1660 SUPER 먼저 FaceSwap 즉, Deepfake를 구현하기 위해서는 VGA와 CPU의 성능이 좋아야합니다. 딥페이크를 구현하기 이전, CUDA와 tensorflow를 설치해보도록 하겠습니다. 먼저 CUDA를 설치해줍니다. https://develope.. -
[Forensics] Windows Registry - USB 연결 흔적
[Forensics] Windows Registry - USB 연결 흔적
2020.03.26윈도우 운영체제의 경우 USB를 연결할 시 레지스트리에 기록이 남는다. HKLM\SOFTWARE\Microsoft\Windows Portable Devices\Devices Note 위 사진과 같이 연결한 장치의 시리얼 번호를 통해서 어떤 USB가 연결되었는지 확인할 수 있다. 일련 번호를 찾은 다음 FriendlyName을 찾아 USB 장치의 볼륨 이름을 가져올 수 있다. 이건 SSD가 아닐 경우에만 적용되는 경로이다. HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\EMDMgmt 시스템 드라이브가 SSD가 아닌 경우에만 키가 존재한다. 전통적으로 ReadyBoost에 가용된다. USB장치의 볼륨 일련번호를 얻으려면 일련번호를 찾고 볼륨 일련 번호는 십진수로 표.. -
[iphone] 아이폰 탈옥 가장 쉬운 방법! - Checkra1n 사용 (총정리 / 맥os 필요 X)
[iphone] 아이폰 탈옥 가장 쉬운 방법! - Checkra1n 사용 (총정리 / 맥os 필요 X)
2020.04.03오늘 아이폰 탈옥에 대해서 총정리를 해보겠습니다. 먼저 준비물입니다. 1. 아이폰(아이폰5 ~ 아이폰 X / 버전 상관 없이 가능) 2. 8기가 이상의 USB 3. 근성 먼저 필자는 아이폰6를 사용해서 탈옥을 해보도록 하겠습니다. 필자의 버전은 12.3.1 이니 참고해주세요! 본격적으로 시작해보겠습니다. 먼저 아이폰을 준비해줍니다. (전원을 켜줍니다) 우분투 OS를 받습니다. http://releases.ubuntu.com/16.04/ Ubuntu 16.04.6 LTS (Xenial Xerus) Select an image Ubuntu is distributed on two types of images described below. Desktop image The desktop image allows y.. -
에어팟 프로 1세대 유닛 충전 접촉불량 자가 수리 후기 (빡쎔)
에어팟 프로 1세대 유닛 충전 접촉불량 자가 수리 후기 (빡쎔)
2025.04.01무려 에어팟 프로를 산지 4년을 훌쩍 넘고 쓴지 벌써 5년 가까이 되고 있다..5년가까이 써서 그런지 유닛과 본체 사이의 충전 접점이 밀려서 들어가버렸다는점,,,접점이 안으로 들어가서 오른쪽 유닛만 충전이 잘 되지 않았다는 점,,나랑 비슷한 사람이 있었다,, 더군다나 충전 접점 불량 수리에 대한 포스팅은 별로 없었다..https://m.blog.naver.com/icaner/223137477475 에어팟 프로 충전 접촉불량 자가 수리 후기(그나마 이쁘게 뚜따하는 법)1. 이번 블로깅 내용은 에어팟프로 이어폰 충전불량 현상을 자가수리 한 내용 2. 나는 일기를 기록하듯이 ...blog.naver.com방법을 알려준 공돌아재님께 감사의 말씀을 올립니다..필자는 충전이 한 2년전부터 잘 안되서 핀셋으로 들어 .. -
[디지털포렌식전문가2급] 제 1장 - 컴퓨터 구조 기출문제 변형 #1
[디지털포렌식전문가2급] 제 1장 - 컴퓨터 구조 기출문제 변형 #1
2020.10.22디지털 포렌식 전문가 2급을 준비하면서 기출문제들이 별로 없다는 사실을 알게 되었고, 기출문제들을 각색해서 문제를 제작해 보려고 합니다. 아직 서툴지만 이해해주시고 봐주시면 감사하겠습니다. (저도 공부 목적입니다..) 1편 : blog.system32.kr/233 2편 : blog.system32.kr/234 1번. 컴퓨터 발전의 방향에 관한 설명으로 옳지 않은 것은 무엇인가? 통합된 환경에서 개발하는 도구가 많아지고 있는 추세이다. 저전력 소모를 위한 설계를 고려하지 않아, 전력 소모에 관한 문제가 점점 커지고 있는 추세이다. 통신을 위한 하드웨어 기능이 계속해서 향상되고 있는 추세이다. GPU 기능이 많이 사용되는 추세이다. 더보기 정답 : 2. 저전력 소모를 위한 설계가 굉장히 많아지고 있으며, 대.. -
[포렌식] 아이폰 카카오톡 복호화 분석 및 구현
[포렌식] 아이폰 카카오톡 복호화 분석 및 구현
2025.06.29본 글은 언제든지 비공개 되거나, 삭제될수 있음을 미리 알려드립니다. (뭐,, 카카오톡 본사에서 글 내려라 하지 않는 이상 없어지진 않지 않을까...?)모바일 메신저는 디지털 포렌식에서 핵심적인 증거원이지만, 대부분의 앱은 사용자 프라이버시 보호를 위해 메시지 데이터베이스에 암호화를 적용한다. 본 분석에서는 iOS 기반 카카오톡 앱에서의 암호화 방식과 그 복호화 가능성에 대해 다룬다. Message.sqlite 파일을 중심으로 접근하며, 관련 선행 사례 및 실험 결과를 종합하였다.아이폰 카카오톡 포렌식의 경우 이미 많은 상용도구에서 진행되고 있다. 예를 들어 MD-RED, Magnet Axiom, BelkaSoft Evidence X 등,, 하지만 아래 논문에서와 같이, 일부 상용도구에서는 데이터의 양이.. -
[Python] Pyinstaller Decompile (암호화되어 있는 바이너리 디컴파일)
[Python] Pyinstaller Decompile (암호화되어 있는 바이너리 디컴파일)
2021.11.02오늘은 Pyinstaller를 통해서 암호화된 바이너리 디컴파일을 해보도록하겠습니다. 먼저 아래 사진은 그냥 심심해서 만들어 놓은 트위터 자동 글쓰기 프로그램입니다. 하지만 Pyinstaller을 통해서 암호화 키를 탑재해서 컴파일을 했었지만, 암호가 기억이 안나 리버싱(?)을 통해서 디컴파일을 성공했습니다. 먼저 파일을 분해하기 위해서 pyinstallerextractor 을 사용하도록 하겠습니다. 다운로드 링크는 아래와 같습니다. https://sourceforge.net/projects/pyinstallerextractor/ PyInstaller Extractor Download PyInstaller Extractor for free. Extract contents of a Windows execu.. -
제 10회 디지털 범인을 찾아라 - 문제 풀이 보고서 #2 - 손상된 파티션 복구
제 10회 디지털 범인을 찾아라 - 문제 풀이 보고서 #2 - 손상된 파티션 복구
2025.02.03본 글은 요청시 풀이 보고서가 내려갈 수 있으며,만약 저작권 등에 위반된다면, 지체없이 댓글 또는 pental@kakao.com 으로 연락주시길 바라겠습니다.해당 블로그에서는 총 6개의 분석 섹션으로 나눠 포스팅을 할 예정이다. 각각 섹션은 다음과 같다. 현재 세션은 굵은 글씨로 표시되어 있다.1. 이미징 작업2. 손상된 파티션 복구3. 파티션 목록4. 아티팩트 분석 1. 운영체제 분석 1.1. PC 정보 분석 1.2. PC 사용자 분석 1.3. 설치된 프로그램 분석 2. 웹 아티팩트 분석 2.1. Chrome 분석 2.2. Edge 분석 2.3. Firefox 분석 3. Email 분석 4. 메신저 분석 4.1. Tel.. -
제 10회 디지털 범인을 찾아라 - 문제 풀이 보고서 #1 - 이미징 작업
제 10회 디지털 범인을 찾아라 - 문제 풀이 보고서 #1 - 이미징 작업
2025.02.03본 글은 요청시 풀이 보고서가 내려갈 수 있으며,만약 저작권 등에 위반된다면, 지체없이 댓글 또는 pental@kakao.com 으로 연락주시길 바라겠습니다.해당 블로그에서는 총 6개의 분석 섹션으로 나눠 포스팅을 할 예정이다. 각각 섹션은 다음과 같다. 현재 세션은 굵은 글씨로 표시되어 있다.1. 이미징 작업2. 손상된 파티션 복구3. 파티션 목록4. 아티팩트 분석 1. 운영체제 분석 1.1. PC 정보 분석 1.2. PC 사용자 분석 1.3. 설치된 프로그램 분석 2. 웹 아티팩트 분석 2.1. Chrome 분석 2.2. Edge 분석 2.3. Firefox 분석 3. Email 분석 4. 메신저 분석 4.1. Tel..
지금까지 올라온 글들
-
나스 서버 교체 후기 (8베이 나스, 녹투아 쿨러)
나스 서버 교체 후기 (8베이 나스, 녹투아 쿨러)
2025.08.30기존에 사용하던 서버는 미니 피씨 형태로 작기도 하고, NVME도 1개, 하드도 최대 2개밖에 장착할 수 없었다.예전에 8베이 케이스를 사둔게 아깝기도 하고 용량 확장을 위해서 다시 8베이 케이스 + D-1581 보드로 이전하는 작업을 진행했다.3년전 사놨던 8베이 나스 케이스,, 사실 한 1년 돌리고 소음이랑 발열 때문에 묵혀놨다. 근데 기존에 사용하던 서버는 SATA가 2개 뿐이라서 ㅜㅜ 어쩔수 없이 다시 서버 이전을 진행했다.기본적으로 장착되어 있는 쿨러는 80mm 쿨러 4개가 달려 있고, 4핀으로 PWM 제어가 되지 않는 모델이다. 심지어 2800RPM 으로 쉬지 않고 돌아서 잠자는 방에서 돌리기엔 문제가 있다.쿨러 4개를 모두 녹투아로 교체하자니 쿨러만 10만원이 훌쩍 넘어가는 비용,, 그래서.. -
[실버 5] 백준 11723 - 집합 (파이썬)
[실버 5] 백준 11723 - 집합 (파이썬)
2025.08.13# 백준 11723 - 집합import sysinput = lambda: sys.stdin.readline().rstrip()S = []M = int(input())for _ in range(M) : line = input().split() if len(line) > 1 : op = line[0] num = int(line[1]) if op == "add" : if num not in S : S.append(num) elif op == "remove" : if num in S : S.remove(num) elif op == "check" :.. -
백준 5522, 10178, 9295, 10569, 2921 (파이썬)
백준 5522, 10178, 9295, 10569, 2921 (파이썬)
2025.08.01# 백준 5522 - 카드 게임A = [int(input()) for _ in range(5)]print(sum(A))# 백준 10178 - 할로윈의 사탕T = int(input())for _ in range(T) : c, v = map(int, input().split()) print(f"You get {c // v} piece(s) and your dad gets {c % v} piece(s).")# 백준 9295 - 주사위T = int(input())for i in range(T) : a, b = map(int, input().split()) print(f"Case {i + 1}: {a + b}")# 백준 10569 - 다면체T = int(input())for _ in rang.. -
[실버 3] 백준 6666 - Help Me with the Game (파이썬)
[실버 3] 백준 6666 - Help Me with the Game (파이썬)
2025.07.31분류 : 구현링크 : https://www.acmicpc.net/problem/6666풀이문제집에서 이거 안풀면 꿈에서 나온다는 말이 있어서 찾아보게된 문제이며, 문제 번호부터가 6666으로 예사롭지가 않다.근데 진짜 문제도 예사롭지 않다.입력을 한번 봐보자+---+---+---+---+---+---+---+---+|.r.|:::|.b.|:q:|.k.|:::|.n.|:r:|+---+---+---+---+---+---+---+---+|:p:|.p.|:p:|.p.|:p:|.p.|:::|.p.|+---+---+---+---+---+---+---+---+|...|:::|.n.|:::|...|:::|...|:p:|+---+---+---+---+---+---+---+---+|:::|...|:::|...|:::|.... -
[골드 4] 백준 2661 - 좋은수열 (파이썬)
[골드 4] 백준 2661 - 좋은수열 (파이썬)
2025.07.30분류 : 백트래킹링크 : https://www.acmicpc.net/problem/2661풀이이 문제는 숫자 1, 2, 3 으로만 이루어지는 수열이 있으며, 임의의 길이의 인접한 두 개의 부분 수열이 동일한 것이 있으면, 그 수열은 나쁜 수열이라고 한다.좋은 수열은 인접한 두 개의 부분 수열이 동일하면 안된다. 즉 1212는 마지막 두자리 12가 반복되므로 나쁜 수열이다.길이 N의 좋은 수열 중 사전순으로 가장 앞서는 수열을 찾아야한다.def is_good(seq) : length = len(seq) for i in range(1, length // 2 + 1) : if seq[-i:] == seq[-2 * i : -i] : return False retu.. -
[yolo11] 🚗 YOLO를 활용한 차량 분류 시스템 개발기 (2) - Yolo를 통해 객체 인식하기
[yolo11] 🚗 YOLO를 활용한 차량 분류 시스템 개발기 (2) - Yolo를 통해 객체 인식하기
2025.07.29https://blog.system32.kr/567 [yolo11] 🚗 YOLO를 활용한 차량 분류 시스템 개발기 (1) - YOLO란 무엇인가? + labelme 사용법블랙박스 영상에는 단순히 사고 장면을 담는 것 이상의 수많은 정보가 들어 있다. 차량의 움직임, 주변 상호, 도로 표시, 다른 차량 정보까지 — 이것들은 모두 범죄 수사, 보험 분쟁, 운전 패턴blog.system32.kr기존글에서는 YOLO를 활용한 차량 분류 시스템 개발 - YOLO가 무엇인지, 그리고 Labelme를 사용해서 Yolo에 적합한 타임의 Dataset으로 변환하는 과정에 관해서 작성했었다.본 게시물에서는 [yolo11] 🚗 YOLO를 활용한 차량 분류 시스템 개발기 (1) - YOLO란 무엇인가? + labelme ..
디지털포렌식
-
[포렌식] 아이폰 카카오톡 복호화 분석 및 구현
[포렌식] 아이폰 카카오톡 복호화 분석 및 구현
2025.06.29본 글은 언제든지 비공개 되거나, 삭제될수 있음을 미리 알려드립니다. (뭐,, 카카오톡 본사에서 글 내려라 하지 않는 이상 없어지진 않지 않을까...?)모바일 메신저는 디지털 포렌식에서 핵심적인 증거원이지만, 대부분의 앱은 사용자 프라이버시 보호를 위해 메시지 데이터베이스에 암호화를 적용한다. 본 분석에서는 iOS 기반 카카오톡 앱에서의 암호화 방식과 그 복호화 가능성에 대해 다룬다. Message.sqlite 파일을 중심으로 접근하며, 관련 선행 사례 및 실험 결과를 종합하였다.아이폰 카카오톡 포렌식의 경우 이미 많은 상용도구에서 진행되고 있다. 예를 들어 MD-RED, Magnet Axiom, BelkaSoft Evidence X 등,, 하지만 아래 논문에서와 같이, 일부 상용도구에서는 데이터의 양이.. -
[25년 5월] 아이폰 1110 오류 / 무한 사과 / 저장공간 꽉참 데이터 복구 해결건
[25년 5월] 아이폰 1110 오류 / 무한 사과 / 저장공간 꽉참 데이터 복구 해결건
2025.05.24안녕하세요, 이번에는 1년전 저에게 맡기셨던 의뢰자분이 다시한번 연락을 주셨습니다.최근 새로운 기술 도입으로 복구률이 매우 증가하였고,이전에 의뢰하신분도 생각이 나서 바로 의뢰에 착수하였습니다.이 글은, 실제 데이터 복구 요청을 받아 작업을 진행하였습니다.해당 의뢰를 원하신다면 하단의 연락쳐로 연락주세요! 한달에는 많게는 4~5건, 여러건에 대해서 문의가 들어오고 있습니다.애플 공식 서비스센터에서는 1110 에러에 대해서는 초기화 밖에 답이 없다고 하지만,저는 의뢰자 분들의 소중한 데이터를 위해서 항상 연구 하고 있습니다.택배로 의뢰자 분의 기기를 받아보았으며, 2025년 5월 22일에 보내주셔서 5월 23일에 받아보게 되었습니다.택배가 오는 과정에서 손상이 없도록 뽁뽁이로 잘 감싸주셨습니다.외관상으로 .. -
[25년 5월] 아이폰 1110 오류 - 데이터 복구 성공 / 아이폰 무한 사과 해결
[25년 5월] 아이폰 1110 오류 - 데이터 복구 성공 / 아이폰 무한 사과 해결
2025.05.11안녕하세요, 오랜만에 아이폰 1110 오류에 관해서 블로그 포스팅을 하게 되었습니다.그동안 수많은 복구 작업을 진행했는데, 오랜만에 생각나서 포스팅을 하게 되었습니다.이 글은, 실제 데이터 복구 요청을 받아 작업을 진행하였습니다. 해당 의뢰를 원하신다면 하단에 연락쳐로 연락주세요!최대한의 합리적인 금액으로 복구 및 수리를 도와드리고 있습니다.2025년 5월 11일 기준으로 현재, 1110오류에 대해서는 대략 70~80% 복구 성공률을 장담하고 있습니다.한달에는 많게는 4~5건, 여러건에 대해서 문의가 들어오고 있습니다. 애플 공식 서비스센터에서는 1110 에러에 대해서는 초기화 밖에 답이 없다고 하지만, 저는 의뢰자 분들의 소중한 데이터를 위해서 항상 연구 하고 있습니다.택배로 의뢰자 분의 기기를 받아보.. -
디지털포렌식 전문가 2급 실기 대비 - [MBR] FAT32 MBR 복구 기초
디지털포렌식 전문가 2급 실기 대비 - [MBR] FAT32 MBR 복구 기초
2025.03.31https://pental.notion.site/2-1a095991283980ae844cf0896916ac12?pvs=74 디지털포렌식 전문가 2급 실기 대비 | Notion본 자료는 2022년에 디지털 포렌식 전문가 2급 자격을 취득한 후, 향후 수험생분들에게 도움이 되고자 직접 제작한 것입니다.pental.notion.site 노션에서도 열심히 작업중입니다.해당 게시물은 디지털 포렌식 전문가 2급 자격증 취득을 도전하시는 분들의 공부에 도움이 되도록 작성한 게시물입니다.많은 관심 부탁드리겠습니다.다운로드 링크FAT32_MBR_RECOVERY.zip먼저 주어진 ZIP 파일에서는 FAT32_MBR_RECOVERY.001 이라는 파일이 존재한다.해당 파일의 정보는 다음과 같다.FILE NAME FAT32_.. -
디지털포렌식 전문가 2급 실기 대비 - [MBR] NTFS MBR 복구 기초
디지털포렌식 전문가 2급 실기 대비 - [MBR] NTFS MBR 복구 기초
2025.03.26https://pental.notion.site/2-1a095991283980ae844cf0896916ac12?pvs=74 디지털포렌식 전문가 2급 실기 대비 | Notion본 자료는 2022년에 디지털 포렌식 전문가 2급 자격을 취득한 후, 향후 수험생분들에게 도움이 되고자 직접 제작한 것입니다.pental.notion.site노션에서도 열심히 작업중입니다.해당 게시물은 디지털 포렌식 전문가 2급 자격증 취득을 도전하시는 분들의 공부에 도움이 되도록 작성한 게시물입니다.많은 관심 부탁드리겠습니다.다운로드 링크NTFS_MBR_RECOVERY.zip먼저 주어진 ZIP 파일에서는 NTFS_MBR_RECOVERY.001 이라는 파일이 존재한다.해당 파일의 정보는 다음과 같다.FILE NAME NTFS_MBR_.. -
디지털포렌식 전문가 2급 실기 대비 - 자격증 소개
디지털포렌식 전문가 2급 실기 대비 - 자격증 소개
2025.03.26https://pental.notion.site/2-1a095991283980ae844cf0896916ac12?pvs=74 디지털포렌식 전문가 2급 실기 대비 | Notion본 자료는 2022년에 디지털 포렌식 전문가 2급 자격을 취득한 후, 향후 수험생분들에게 도움이 되고자 직접 제작한 것입니다.pental.notion.site노션에서도 작업중입니다. 많은 관심 부탁드리겠습니다.디지털포렌식 전문가 2급 자격증은?자격증 개요자격증 명칭: 디지털 포렌식 전문가 2급주관 기관: 한국포렌식학회(Korean Society of Forensic Science)목적: 디지털 증거의 수집, 분석, 보존 및 법적 절차에 대한 전문성을 검증하기 위한 자격증대상: 법률, 수사기관, IT 보안, 기업 감사, 법무 분야 종사.. -
제 10회 디지털 범인을 찾아라 - 문제 풀이 보고서 #5 타임라인 분석
제 10회 디지털 범인을 찾아라 - 문제 풀이 보고서 #5 타임라인 분석
2025.02.07본 글은 요청시 풀이 보고서가 내려갈 수 있으며,만약 저작권 등에 위반된다면, 지체없이 댓글 또는 pental@kakao.com 으로 연락주시길 바라겠습니다. 해당 블로그에서는 총 6개의 분석 섹션으로 나눠 포스팅을 할 예정이다. 각각 섹션은 다음과 같다. 현재 세션은 굵은 글씨로 표시되어 있다.1. 이미징 작업2. 손상된 파티션 복구3. 파티션 목록4. 아티팩트 분석 1. 운영체제 분석 1.1. PC 정보 분석 1.2. PC 사용자 분석 1.3. 설치된 프로그램 분석 2. 웹 아티팩트 분석 2.1. Chrome 분석 2.2. Edge 분석 2.3. Firefox 분석 3. Email 분석 4. 메신저 분석 4.1. Te.. -
제 10회 디지털 범인을 찾아라 - 문제 풀이 보고서 #4-6 안티포렌식 분석
제 10회 디지털 범인을 찾아라 - 문제 풀이 보고서 #4-6 안티포렌식 분석
2025.02.07본 글은 요청시 풀이 보고서가 내려갈 수 있으며,만약 저작권 등에 위반된다면, 지체없이 댓글 또는 pental@kakao.com 으로 연락주시길 바라겠습니다. 해당 블로그에서는 총 6개의 분석 섹션으로 나눠 포스팅을 할 예정이다. 각각 섹션은 다음과 같다. 현재 세션은 굵은 글씨로 표시되어 있다.1. 이미징 작업2. 손상된 파티션 복구3. 파티션 목록4. 아티팩트 분석 1. 운영체제 분석 1.1. PC 정보 분석 1.2. PC 사용자 분석 1.3. 설치된 프로그램 분석 2. 웹 아티팩트 분석 2.1. Chrome 분석 2.2. Edge 분석 2.3. Firefox 분석 3. Email 분석 4. 메신저 분석 4.1. Te.. -
제 10회 디지털 범인을 찾아라 - 문제 풀이 보고서 #4-5 아티팩트 분석 (음원 파일 분석)
제 10회 디지털 범인을 찾아라 - 문제 풀이 보고서 #4-5 아티팩트 분석 (음원 파일 분석)
2025.02.07본 글은 요청시 풀이 보고서가 내려갈 수 있으며,만약 저작권 등에 위반된다면, 지체없이 댓글 또는 pental@kakao.com 으로 연락주시길 바라겠습니다. 해당 블로그에서는 총 6개의 분석 섹션으로 나눠 포스팅을 할 예정이다. 각각 섹션은 다음과 같다. 현재 세션은 굵은 글씨로 표시되어 있다.1. 이미징 작업2. 손상된 파티션 복구3. 파티션 목록4. 아티팩트 분석 1. 운영체제 분석 1.1. PC 정보 분석 1.2. PC 사용자 분석 1.3. 설치된 프로그램 분석 2. 웹 아티팩트 분석 2.1. Chrome 분석 2.2. Edge 분석 2.3. Firefox 분석 3. Email 분석 4. 메신저 분석 4.1. Te.. -
제 10회 디지털 범인을 찾아라 - 문제 풀이 보고서 #4-4 아티팩트 분석 (메신저 분석)
제 10회 디지털 범인을 찾아라 - 문제 풀이 보고서 #4-4 아티팩트 분석 (메신저 분석)
2025.02.07본 글은 요청시 풀이 보고서가 내려갈 수 있으며,만약 저작권 등에 위반된다면, 지체없이 댓글 또는 pental@kakao.com 으로 연락주시길 바라겠습니다. 해당 블로그에서는 총 6개의 분석 섹션으로 나눠 포스팅을 할 예정이다. 각각 섹션은 다음과 같다. 현재 세션은 굵은 글씨로 표시되어 있다.1. 이미징 작업2. 손상된 파티션 복구3. 파티션 목록4. 아티팩트 분석 1. 운영체제 분석 1.1. PC 정보 분석 1.2. PC 사용자 분석 1.3. 설치된 프로그램 분석 2. 웹 아티팩트 분석 2.1. Chrome 분석 2.2. Edge 분석 2.3. Firefox 분석 3. Email 분석 4. 메신저 분석 4.1. Te.. -
제 10회 디지털 범인을 찾아라 - 문제 풀이 보고서 #4-3 아티팩트 분석 (이메일 분석)
제 10회 디지털 범인을 찾아라 - 문제 풀이 보고서 #4-3 아티팩트 분석 (이메일 분석)
2025.02.07본 글은 요청시 풀이 보고서가 내려갈 수 있으며,만약 저작권 등에 위반된다면, 지체없이 댓글 또는 pental@kakao.com 으로 연락주시길 바라겠습니다. 해당 블로그에서는 총 6개의 분석 섹션으로 나눠 포스팅을 할 예정이다. 각각 섹션은 다음과 같다. 현재 세션은 굵은 글씨로 표시되어 있다.1. 이미징 작업2. 손상된 파티션 복구3. 파티션 목록4. 아티팩트 분석 1. 운영체제 분석 1.1. PC 정보 분석 1.2. PC 사용자 분석 1.3. 설치된 프로그램 분석 2. 웹 아티팩트 분석 2.1. Chrome 분석 2.2. Edge 분석 2.3. Firefox 분석 3. Email 분석 4. 메신저 분석 4.1. Te.. -
제 10회 디지털 범인을 찾아라 - 문제 풀이 보고서 #4-2 아티팩트 분석 (웹 아티팩트 분석)
제 10회 디지털 범인을 찾아라 - 문제 풀이 보고서 #4-2 아티팩트 분석 (웹 아티팩트 분석)
2025.02.03본 글은 요청시 풀이 보고서가 내려갈 수 있으며,만약 저작권 등에 위반된다면, 지체없이 댓글 또는 pental@kakao.com 으로 연락주시길 바라겠습니다. 해당 블로그에서는 총 6개의 분석 섹션으로 나눠 포스팅을 할 예정이다. 각각 섹션은 다음과 같다. 현재 세션은 굵은 글씨로 표시되어 있다.1. 이미징 작업2. 손상된 파티션 복구3. 파티션 목록4. 아티팩트 분석 1. 운영체제 분석 1.1. PC 정보 분석 1.2. PC 사용자 분석 1.3. 설치된 프로그램 분석 2. 웹 아티팩트 분석 2.1. Chrome 분석 2.2. Edge 분석 2.3. Firefox 분석 3. Email 분석 4. 메신저 분석 4.1. Te..
알고리즘 문제 풀이
-
[실버 5] 백준 11723 - 집합 (파이썬)
[실버 5] 백준 11723 - 집합 (파이썬)
2025.08.13# 백준 11723 - 집합import sysinput = lambda: sys.stdin.readline().rstrip()S = []M = int(input())for _ in range(M) : line = input().split() if len(line) > 1 : op = line[0] num = int(line[1]) if op == "add" : if num not in S : S.append(num) elif op == "remove" : if num in S : S.remove(num) elif op == "check" :.. -
백준 5522, 10178, 9295, 10569, 2921 (파이썬)
백준 5522, 10178, 9295, 10569, 2921 (파이썬)
2025.08.01# 백준 5522 - 카드 게임A = [int(input()) for _ in range(5)]print(sum(A))# 백준 10178 - 할로윈의 사탕T = int(input())for _ in range(T) : c, v = map(int, input().split()) print(f"You get {c // v} piece(s) and your dad gets {c % v} piece(s).")# 백준 9295 - 주사위T = int(input())for i in range(T) : a, b = map(int, input().split()) print(f"Case {i + 1}: {a + b}")# 백준 10569 - 다면체T = int(input())for _ in rang.. -
[실버 3] 백준 6666 - Help Me with the Game (파이썬)
[실버 3] 백준 6666 - Help Me with the Game (파이썬)
2025.07.31분류 : 구현링크 : https://www.acmicpc.net/problem/6666풀이문제집에서 이거 안풀면 꿈에서 나온다는 말이 있어서 찾아보게된 문제이며, 문제 번호부터가 6666으로 예사롭지가 않다.근데 진짜 문제도 예사롭지 않다.입력을 한번 봐보자+---+---+---+---+---+---+---+---+|.r.|:::|.b.|:q:|.k.|:::|.n.|:r:|+---+---+---+---+---+---+---+---+|:p:|.p.|:p:|.p.|:p:|.p.|:::|.p.|+---+---+---+---+---+---+---+---+|...|:::|.n.|:::|...|:::|...|:p:|+---+---+---+---+---+---+---+---+|:::|...|:::|...|:::|.... -
[골드 4] 백준 2661 - 좋은수열 (파이썬)
[골드 4] 백준 2661 - 좋은수열 (파이썬)
2025.07.30분류 : 백트래킹링크 : https://www.acmicpc.net/problem/2661풀이이 문제는 숫자 1, 2, 3 으로만 이루어지는 수열이 있으며, 임의의 길이의 인접한 두 개의 부분 수열이 동일한 것이 있으면, 그 수열은 나쁜 수열이라고 한다.좋은 수열은 인접한 두 개의 부분 수열이 동일하면 안된다. 즉 1212는 마지막 두자리 12가 반복되므로 나쁜 수열이다.길이 N의 좋은 수열 중 사전순으로 가장 앞서는 수열을 찾아야한다.def is_good(seq) : length = len(seq) for i in range(1, length // 2 + 1) : if seq[-i:] == seq[-2 * i : -i] : return False retu.. -
[실버 2] 백준 11279 - 최대 힙 (파이썬)
[실버 2] 백준 11279 - 최대 힙 (파이썬)
2025.07.29분류 : 자료구조링크 : https://www.acmicpc.net/problem/11279풀이백준 1927과 비슷한 문제이다. 1927 최소 힙 문제에서는 정석대로 heap에 값을 양수로 넣었지만, 이번 문제는 최대 힙을 구하는 문제이기에, -를 붙여서 음수로 넣어주면 힙에서는 최대 힙으로 정렬되게 된다.이때 문제점은 pop 할때도 음수로 나오기에, 다시한번 -를 붙여주면, 최대 힙으로 출력 할 수 있다.코드# 백준 11729 - 최대 힙import heapqimport sysinput = sys.stdin.readlineN = int(input())heap = []for i in range(N) : x = int(input()) if x == 0 : if len(heap) > .. -
[실버 2] 백준 1927 - 최소 힙 (파이썬)
[실버 2] 백준 1927 - 최소 힙 (파이썬)
2025.07.29분류 : 자료구조링크 : https://www.acmicpc.net/problem/1927풀이힙의 기초적인 문제이다. 사실 시간초과가 나긴했는데, sys.stdin.readline을 고려하지 못했다.문제에서는 N이 최대 10만개이기 때문에 단순히 input()으로만으로는 당연히 시간 초과가 날 수 밖에 없다.문제에서 N을 입력받고, 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 X가 주어진다고 한다.X가 0이 아닌 경우에는 배열에 자연수 X를 넣고, 0이라면 배열에서 가장 작은 값을 출력하고, 그 값을 배열에서 제거하면 된다.이에 적합한 자료구조는 heap이기에 아래와 같은 코드로 작성하였다.코드# 백준 1927 - 최소 힙import heapqimport sysinput = sys.stdin.r.. -
[골드 3] 백준 16957 - 체스판 위의 공 (파이썬)
[골드 3] 백준 16957 - 체스판 위의 공 (파이썬)
2025.07.21분류 : DFS링크 : https://www.acmicpc.net/problem/16957풀이각 공이 어디로 떨어지는가가 아니라 각 골짜기로 얼마나 많은 공이 모이는가를 역방향으로 계산한다.각 칸에서 인접한 8방향 중 가장 낮은 칸으로 공이 흘러간다.그 흐름을 역방향 그래프로 만들어 두고, 실제로 공이 도달할 수 있는 최종 지점부터 시작해서, 역으로 DFS를 돌며 얼마나 많은 공이 이 칸으로 오는지 세는 방식이다.입력 처리R, C = map(int, input().split())B = [list(map(int, input().split())) for _ in range(R)]dr = [0, 0, 1, 1, 1, -1, -1, -1]dc = [1, -1, -1, 0, 1, -1, 0, 1]B[r][c]는 .. -
[실버 4] 백준 25214 - 크림 파스타 (파이썬)
[실버 4] 백준 25214 - 크림 파스타 (파이썬)
2025.07.20분류 : 다이나믹 프로그래밍링크 : https://www.acmicpc.net/problem/25214풀이각 인덱스 i에 대해, D[i]는 A[0]부터 A[i]까지의 최솟값, E[i]는 E[i-1]과 (A[i] - D[i]) 중 더 큰 값이다.즉, E[i]는 앞에서부터 지금까지의 최댓값을 유지하면서, A[i]에서 이전까지의 최솟값을 뺀 값 중 최대를 갱신한다.D = [0] * NE = [0] * ND[i]는 A[0] ~ A[i] 중 최솟값을 나타내고, E[i]는 지금까지의 A[i] - D[i] 중 최대를 나타낸다.D[0] = A[0]for i in range(1, N) : D[i] = min(D[i - 1], A[i])최솟값 갱신은 위와 같이 작성하며, D[i]는 A[0] ~ A[i]에서의 최솟값을.. -
[골드 1] 백준 1311 - 할 일 정하기 1 (파이썬)
[골드 1] 백준 1311 - 할 일 정하기 1 (파이썬)
2025.07.19분류 : 다이나믹 프로그래밍링크 : https://www.acmicpc.net/problem/1311풀이이 문제는 N * N 크기의 비용 행렬 D가 주어지고, 사람 N명에게 각각 하나의 일을 배정하는데, 각 사람마다 각 일에 대한 비용이 다르다.각 사람에게 정확히 하나의 일만, 각 일도 정확히 한 사람에게만 배정되도록 하면서 총 비용의 합을 최소화 해야한다.초기 설정cache = [[-1] * (2 ** N) for _ in range(N)]cache[x][mask]는 x번째 사람까지 할당했을 때, mask 상태에서의 최소 비용을 저장한다.기저 조건if x == 0: for i in range(N): if mask == (2 ** i): cache[x][mask] =.. -
[골드 3] 백준 7579 - 앱 (파이썬)
[골드 3] 백준 7579 - 앱 (파이썬)
2025.07.18분류 : 다이나믹 프로그래밍링크 : https://www.acmicpc.net/problem/7579풀이메모리 확보를 위해서 필요한 최소 비용을 구하는 문제다.앱 N개가 있고, 각각 메모리 m[i], 비용 c[i]를 가진다.총 확보해야 할 메모리는 M보다 크거나 같으며, 비용의 합이 최소가 되도록 하는 앱을 선택한다.DP 테이블은 다음과 같이 정의한다.D = [[0] * 10001 for _ in range(N)]D[i][j]는 i번 앱까지 고려했을 때, 비용 j 이하로 확보 가능한 최대 메모리를 나타내며, 비용 최대치가 10000이므로 열 크기를 10001로 설정한다.# D[0][i] : 첫 번째 앱만 사용할 때의 최대 메모리for i in range(c[0], 10001) : D[0][i] = .. -
[골드 5] 백준 11578 - 팀원 모집 (파이썬)
[골드 5] 백준 11578 - 팀원 모집 (파이썬)
2025.07.17분류 : 브루트포스 + 자료구조링크 : https://www.acmicpc.net/problem/11578풀이1번부터 N번까지의 문제를 모두 풀 수 있는 최소한의 팀원수를 구하는 문제이다.각 팀원은 자신이 풀 수 있는 문제 번호 리스트를 가지고 있다. 팀원은 M명이며, 문제를 모두 풀 수 있는 팀원의 최소 수를 구해야한다.A = [list(map(int, input().split()))[1:] for _ in range(M)]A = [set(a) for a in A]각 팀원이 자신이 풀 수 있는 문제 번호들을 입력받는다.list(map(int, input().split()))[1:] 에서 [1:] 부터 시작하는 이유는 첫 번째 숫자는 개수이므로 무시한다.set(a)로 변환해서 나중에 합집한 연산을 쉽게 .. -
[골드 2] 백준 2450 - 모양 정돈 (파이썬)
[골드 2] 백준 2450 - 모양 정돈 (파이썬)
2025.07.16분류 : 브루트포스링크 : https://www.acmicpc.net/problem/2450풀이배열 A에는 1, 2, 3이 섞여있으면서, 각각 모양을 나타낸다.이 배열을 구간 3개로 나누어서, 각 구간에는 한 가지 모양이 있도록 정렬해야 한다.예를 들어서 [2, 2, 1, 1, 3, 3] 과 같은 형태이다.단, 숫자들을 바꾸는 횟수를 최소화 해아한다.입력 처리는 다음과 같다.N = int(input())A = list(map(int, input().split()))A = [x - 1 for x in A] # 0, 1, 2 로 바꿈입력 배열을 x - 1을 통해서 0, 1, 2로 정규화한다.그후 각 숫자의 개수를 센다.count = [0] * 3for x in A : count[x] += 1예를 들어.. -
[플래티넘 5] 백준 1981 - 배열에서 이동 (파이썬)
[플래티넘 5] 백준 1981 - 배열에서 이동 (파이썬)
2025.07.15분류 : 이분 탐색 + BFS링크 : https://www.acmicpc.net/problem/1981풀이N x N 크기의 정수 배열 A가 주어짐(0, 0) → (N-1, N-1)까지 상하좌우로 이동 가능단, 이동하는 칸의 숫자는 어떤 [min, max] 구간에 속해야 함이때 max - min 의 최소값을 구하는 것이 목적문제 풀이 아이디어는 다음과 같다.배열의 값은 최대 200이므로 min ~ max 범위가 0~200 사이임max - min mid 값을 이분 탐색으로 줄여나가며 최소값을 찾는 방식초기 설정은 다음과 같이 진행한다.low, high = 0, 200answer = -1mid = max_val - min_val 을 이분 탐색으로 줄여 나갈 범위이다.이분 탐색을 시작한다.while low 현재.. -
[골드 5] 백준 14567 - 선수과목 (Prerequisite) (파이썬)
[골드 5] 백준 14567 - 선수과목 (Prerequisite) (파이썬)
2025.07.14분류 : 다이나믹 프로그래밍링크 : https://www.acmicpc.net/problem/14567풀이총 N개의 과목이 주어지며, M개의 선수 조건이 주어진다.모든 과목에 대해 가장 빠른 이수 학기를 출력해야한다.N, M = map(int, input().split())adj = [[] for _ in range(N)]for _ in range(M) : a, b = map(int, input().split()) a, b = a - 1, b - 1 adj[b].append(a)adj[b].append(a)는 b를 듣기 위해 a를 먼저 들어야 한다는 조건이므로, b에서 a로 역방향 간선을 저장한다.즉, b의 선수 과목들을 adj[b]에 저장한다.cache = [-1] * Ncache[i].. -
[골드 3] 백준 1719 - 택배 (파이썬)
[골드 3] 백준 1719 - 택배 (파이썬)
2025.07.13https://www.acmicpc.net/problem/1719분류 : 다익스트라링크 : https://www.acmicpc.net/problem/1719풀이이 문제는 어느 경로로 가는 것이 최단 경로인지를 알아내는 문제이다.각 도시(정점) 간의 최단 경로를 찾아야하며, 단순히 최단 거리만 출력하는 것이 아니라, 어디로 먼저 가야 하는지를 출력해야한다.즉, i → j 로 갈 때 첫번째로 가야하는 도시를 출력해야하는 것ㅇ디ㅏ.from queue import PriorityQueueN, M = map(int, input().split()) # 도시 수 N, 도로 수 Madj = [[] for _ in range(N)] # 인접 리스트# 간선 정보 입력for _ in range(M): a, .. -
[골드 5] 백준 14284 - 간선 이어가기 2 (파이썬)
[골드 5] 백준 14284 - 간선 이어가기 2 (파이썬)
2025.07.12https://www.acmicpc.net/problem/14284풀이이 문제는 조금 방향 없는 그래프, 즉 무방향 그래프가 주어지며, 정점수 N, 간선수 M이 주어진다.각 간선은 가중치를 가지며, 출발점 S에서 도착점 T까지의 최단 거리를 구하는 문제이다.이 문제에세의 핵심 알고리즘은, 단연코 다익스트라 알고리즘이라고 할 수 있다.먼저 가중치가 있는 그래프에서 하나의 시작점에서 다른 모든 정점까지의 최단 경로를 구하는 알고리즘이며, 이 문제에서는 특정 시작점에서 특정 도착점 까지의 거리만 구하면 된다.from queue import PriorityQueue우선순위 큐는 최소 거리 기준으로 정점을 꺼내기 위해서 위와 같이 사용한다.N, M = map(int, input().split())adj = [[].. -
[골드 5] 백준 17072 - 나무 위의 빗물 (파이썬)
[골드 5] 백준 17072 - 나무 위의 빗물 (파이썬)
2025.07.11https://www.acmicpc.net/problem/17073풀이이 문제는 비의 양 W가 루트 노드에 고이며, 나무는 N개의 정점으로 이루어진 트리이고, 루트 노드는 1번이다.비는 모든 리프 노드까지 동일하게 분배되며, 각 리프 노드까지 고인 빗물의 양을 구하는 문제이다.결국 이 문제를 해결하는 방법은 다음과 같다.트리는 사이클이 없는 연결 그래프이므로, DFS로 리프 노드를 쉽게 찾을 수 있다.루트에서 DFS를 돌려 리프 노드의 개수를 센다.전체 물이의 양 W를 리프 노드 개수로 나눈다.리프노드마다 동일한 양의 물이 고이기 때문이다.먼저 정점 수, 물의 양을 입력받는 인접 리스트를 생성한다.N, W = map(int, input().split())adj = [[] for _ in range(N)].. -
[골드 4] 백준 20159 - 동작 그만. 밑장 빼기냐?
[골드 4] 백준 20159 - 동작 그만. 밑장 빼기냐?
2025.07.09https://www.acmicpc.net/problem/20159풀이플레이어가 번갈아 가면서 카드를 가져간다.짝수 번째(0, 2, 4 … )는 내차례, 홀수 번째는 상대 차례이다.마지막 카드 1장을 상다 차례에서 내가 가져도록 1번의 밑장 빼기를 허용한다.최대 점수를 얻기 위해 밑장 빼기를 어느 위치에서 할지를 결정해야한다.psum0 = [0] * N # 내 차례에서의 누적합psum1 = [0] * N # 상대 차례에서의 누적합psum0[0] = A[0]psum1[0] = 0for i in range(1, N): if i % 2 == 0: # 내 차례 psum0[i] = psum0[i - 1] + A[i] psum1[i] = psum1[i - 1] else: .. -
[실버 4] 백준 29767 - 점수를 최대로 (파이썬)
[실버 4] 백준 29767 - 점수를 최대로 (파이썬)
2025.07.09https://www.acmicpc.net/problem/29767풀이길이가 N인 정수 수열 A가 주어지며, 누적합(A[0]부터 A[i]까지의 합)을 구해 전체 N개의 누적합 중 K개를 선택해서 합을 최대로 만들어야한다.N, K = map(int, input().split())A = list(map(int, input().split()))N은 원소 개수, K는 선택할 누적합 개수를 입력 받는다.psum = [0] * Npsum[0] = A[0]for i in range(1, N): psum[i] = psum[i - 1] + A[i]psum[i]는 A[0] + A[1] + … + A[i]를 의미하며, 즉, 누적합 배열을 만든다.psum.sort(reverse=True)print(sum(psum[:K].. -
[플래티넘 5] 백준 1050 - 물약 (파이썬)
[플래티넘 5] 백준 1050 - 물약 (파이썬)
2025.07.08https://www.acmicpc.net/problem/1050풀이여러개의 기초 물약은 가격이 주어지고, 일부 물약은 다른 물약들로 조합하여 만들 있다.조합은 "LOVE=A+2B" 같은 형태로 주어진다.목표: 물약 “LOVE”를 만드는데 필요한 최소 비용 계산하는 것이다.N, M = map(int, input().split())stuff = {}N은 가격이 주어진 물약 수를 나타내며, M은 조합식 수를 나타낸다.for _ in range(N) : name, cost = input().split() cost = int(cost) stuff[name] = cost가격이 주어진 물약은 딕셔너리 stuff에 저장한다.formulas = [input() for _ in range(M)]LOVE ..