포렌식 & 개발 이야기 - 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,, 등등등등 먼저 윈도우용 카카오톡 데이터베이스 복호화를 하는 이유가 무엇인가 ? 직관적인 주제이며, 가장 결과물이 잘 나올수 있는 복호화 솔루션이 아닌가! 상용 포렌식 도구들에서도 카카오톡 복호화는 어려움을 겪는 부분이라, 쉽고, 빠르게 복호화 할수 있는 방법이 뭐가 있나 고민하다 분석하게 되었음. (사실 이렇게 퍼블릭하게 코드도 공개해도.. -
[디지털포렌식전문가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 등,, 하지만 아래 논문에서와 같이, 일부 상용도구에서는 데이터의 양이.. -
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.. -
[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.. -
에어팟 프로 1세대 유닛 충전 접촉불량 자가 수리 후기 (빡쎔)
에어팟 프로 1세대 유닛 충전 접촉불량 자가 수리 후기 (빡쎔)
2025.04.01무려 에어팟 프로를 산지 4년을 훌쩍 넘고 쓴지 벌써 5년 가까이 되고 있다..5년가까이 써서 그런지 유닛과 본체 사이의 충전 접점이 밀려서 들어가버렸다는점,,,접점이 안으로 들어가서 오른쪽 유닛만 충전이 잘 되지 않았다는 점,,나랑 비슷한 사람이 있었다,, 더군다나 충전 접점 불량 수리에 대한 포스팅은 별로 없었다..https://m.blog.naver.com/icaner/223137477475 에어팟 프로 충전 접촉불량 자가 수리 후기(그나마 이쁘게 뚜따하는 법)1. 이번 블로깅 내용은 에어팟프로 이어폰 충전불량 현상을 자가수리 한 내용 2. 나는 일기를 기록하듯이 ...blog.naver.com방법을 알려준 공돌아재님께 감사의 말씀을 올립니다..필자는 충전이 한 2년전부터 잘 안되서 핀셋으로 들어 .. -
[포렌식] 윈도우 카카오톡 데이터베이스 복호화 분석 및 구현 #2
[포렌식] 윈도우 카카오톡 데이터베이스 복호화 분석 및 구현 #2
2024.03.24#1 에서는 윈도우 카카오톡 데이터 베이스 복호화 분석을 진행했다. #2 에서는 자동화 하는 기능을 소개하려고 한다. 일단 Pragma를 생성하기 위해서 레지스트리에 접근해야하지 않는가? def get_pragma() : DeviceInfo_Path = "Software\Kakao\KakaoTalk\DeviceInfo" keypath = winreg.OpenKey(winreg.HKEY_CURRENT_USER, DeviceInfo_Path, 0, winreg.KEY_READ) reg_path = winreg.QueryValueEx(keypath, "Last")[0] DeviceInfo_Key_Path = DeviceInfo_Path +"\\" + reg_path keypath = winreg.OpenKey.. -
[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장치의 볼륨 일련번호를 얻으려면 일련번호를 찾고 볼륨 일련 번호는 십진수로 표.. -
[FTK ACE] FTK ACE 자격증 - #1 자격증 시험을 보기전 알아야 할 사항
[FTK ACE] FTK ACE 자격증 - #1 자격증 시험을 보기전 알아야 할 사항
2021.02.19FTK ACE 자격증 취득을 할때 준비했던것들을 알려달라는 요청이 많아 이런 글을 작성하게 되었습니다. 만약 이 글이 문제가 된다면, 바로 비공개 처리를 할것이고, 갑자기 글이 사라질수 있음을 알려드립니다. #1 자격증 시험을 보기전 알아야 할 사항 > blog.system32.kr/245 #2 시험 정보 (ACE v7) > blog.system32.kr/246 #3 기출 문제 (ACE v6, 필기) > blog.system32.kr/247 #4 기출 문제 (ACE v6, 실기) > blog.system32.kr/248 먼저 AccessData사에서 제공한 FTK ACE 자격증 취득을 위한 가이드라인은 다음과 같습니다. The AccessData Certified Examiner (ACE) credent.. -
[디지털포렌식전문가2급] 제 1장 - 컴퓨터 구조 기출문제 변형 #2
[디지털포렌식전문가2급] 제 1장 - 컴퓨터 구조 기출문제 변형 #2
2020.10.221편 : blog.system32.kr/233 2편 : blog.system32.kr/234 11번. 높은 콜록 주파수로 고속 전송을 수행하기 위해 단일 신호선을 이용한 직렬 전송이 채택되고 있다. 각 장치를 전송로에 연결하기 위해 포인트 투 포인트를 사용하는 하드디스크 인터페이스는 무엇인가? SAS PATA SCSI AGP 더보기 정답 : 1. SATA처럼 직렬 인터페이스를 가진 SCSI 인터페이스로써 기존 SCSI의 병렬구조를 SATA처럼 직렬방식으로 바꾸어 데이터 전송속도와 안정성을 대폭 증가시킨 인터페이스이다. 일반 HDD 보다 성능은 높지만, 가격이 비싸, 개인용보다는 서버용으로 많이 사용되는 추세이다. 1. Serial Attached SATA 2. Paralled ATA 3. Small Co.. -
[디지털포렌식전문가2급] 18회 실기시험 복구 기출문제 풀이
[디지털포렌식전문가2급] 18회 실기시험 복구 기출문제 풀이
2022.07.31[ 분석 도구 ]도구명버전용도FTK Imager4.5.0.3이미징 및 데이터 브라우징HxD2.5.0.0이미지 분석 및 복구NTFS Log Tracker1.71타임라인 분석KFolt1.6.33이미지 분석 1. USB에 대한 사본 이미지를 생성하시오. 이미징 하기전 논리적으로 쓰기 금지를 하기 위해 다음과 같이 진행한다. HKLM\SYSTEM\CurrentControlSet\Control\StorageDevicePolicies 에서 WriteProtect의 값을 1로 변경하고 재부팅 또는 USB를 다시 연결하면 논리적 쓰기 방지 설정이 가능하다. 논리적 쓰기 금지 설정을 마친후 다음과 같은 작업을 진행한다. 2. 손상된 파티션을 복구하고,해당 파티션의 1) 파일시스템 종류 2) 총 용량 3) 총 섹터수 4)..
지금까지 올라온 글들
-
[브론즈 2] 백준 1673 - 치킨 쿠폰 (파이썬)
[브론즈 2] 백준 1673 - 치킨 쿠폰 (파이썬)
2025.09.12https://www.acmicpc.net/problem/1673치킨 한마리를 먹으면 쿠폰을 1장 준다. 요즘도 쿠폰을 주는 치킨집이 있던가,,쿠폰 K장을 모으면 치킨 1마리로 교환할 수 있다. 처음에 가진 치킨 수 N이 주어졌을 때, 총 몇마리의 치킨을 먹을 수 있는지 구하는 문제이다.3 24 3예시로 다음과 같은 입력이 주어졌다면 분석하면 다음과 같다.처음에 3마리를 주문 했고, 쿠폰 3장을 지급 받았다. 1마리를 교환 했고, 쿠폰이 1장 남아있다. 근데 1마리를 주문하면서 쿠폰 1장을 더 받았기에, 남은 쿠폰은 2개가 되어 한마리를 더 주문할 수 있다.총 5마리를 먹을 수 있는 셈이다. 완전 부럽다.4 3 의 경우 처음에 4마리를 먹었고, 쿠폰 4장을 지급 받았다. 이 치킨 집은 3장당 한마리로 바.. -
[브론즈 2] 백준 1718 - 암호 (파이썬)
[브론즈 2] 백준 1718 - 암호 (파이썬)
2025.09.12https://www.acmicpc.net/problem/1718핵심은 평문을 주어진 KEY로 암호화한 문장을 해독하는 것인데, 여기서 중요한 포인트는 키 값에서 +1 처리를 반드시 해줘야 한다는 점이다.S = input().rstrip()KEY = input().rstrip()LONG_KEY = ""while len(LONG_KEY) 암호화할 평문 S와 키 KEY를 입력받는다.키는 평문보다 짧을 수 있기 때문에 평문의 길이에 맞게 반복해서 이어 붙인다.result = []for i in range(len(S)): if S[i] == " ": result.append(" ") else: c = ord(S[i]) - ord('a') k = ord(LONG_.. -
[브론즈 2] 백준 1592 - 영식이와 친구들 (파이썬)
[브론즈 2] 백준 1592 - 영식이와 친구들 (파이썬)
2025.09.11https://www.acmicpc.net/problem/1592총 N명의 친구들이 원형으로 앉아 있다. 공을 가진 사람이 공을 던질 때, 현재 그 사람이 받은 횟수가 홀수라면 오른쪽 L번째 있는 사람에게, 짝수라면 왼쪽으로 L번째 있는 사람에게 공을 던진다.특정 친구가 공을 M번 받으면 게임이 끝나고, 공을 총 몇 번 던졌는지 출력하는 문제이다.먼저 배열로 각 친구의 공 받은 횟수를 기록한다.N, M, L = map(int, input().split())A = [0] * N최초의 배열은 [0]으로 초기화 하였으며, N, M, L 은 map을 통해서 입력 받는다.while max_ball != M : A[index] += 1 max_ball = max(max_ball, A[index]) .. -
[브론즈 1] 백준 1524 - 세준세비 (파이썬)
[브론즈 1] 백준 1524 - 세준세비 (파이썬)
2025.09.10https://www.acmicpc.net/problem/1524 세준(S)과 세비(B)가 각각 병사를 가지고 있다. 병사들끼리 전투를 하는데, 가장 약한 병사들끼리 싸운다.전투 규칙은 다음과 같다.1. 세준의 최약체 ≥ 세비의 최약체 → 세비의 병사가 죽는다.2. 세준의 최약체 둘 중 한 쪽의 병사가 전멸할 때까지 반복한다.이 문제에서 조건에 따라서 양쪽 진영의 최약체만 비교하면 된다. 파이썬 리스트 기본 함수인 pop을 사용했으며 O(1)의 시간복잡도를 가진다.또한 정렬을 미리 해주었기 떄문에 -1 번 인덱스의 값이 항상 최약체의 값이다.아래 코드는 내가 작성하였지만 사실 이 문제는 시뮬레이션을 다 돌릴 필요가 없는 문제이다. 규칙상 세준이의 최약제 >= 세비의 최약체 라면 세비만 계속 죽기 때문이다.. -
[브론즈 2] 백준 1452 - 피시방 알바 (파이썬)
[브론즈 2] 백준 1452 - 피시방 알바 (파이썬)
2025.09.10https://www.acmicpc.net/problem/1453dp처럼 생겼지만 걍 단순한 구현문제이다.check 배열에 False로 하여 100개를 미리 만들어 두고, 각 손님을 돌면서 해당 자리에 넣고 True로 변경한다.만약 동일한 자리가 들어오게 되면 result 변수에 +1 을 하여 거절당하는 자리를 계산할 수 있다.# 백준 1453 - 피시방 알바check = [False] * 100N = int(input())A = list(map(int, input().split()))result = 0for i in A : if check[i - 1] == False : check[i - 1] = True else : result += 1print(result) -
[브론즈 2] 백준 1440 - 타임머신 (파이썬)
[브론즈 2] 백준 1440 - 타임머신 (파이썬)
2025.09.10https://www.acmicpc.net/problem/1440쉬운 구현문제중 하나이다. HH:MM:SS의 시간을 DD:DD:DD로 입력받았을때 유효한 시간의 갯수만 계싼하면 된다.단 여기서 확인해야하는 점은 시간은 1 ~ 12시까지, 분은 00 ~ 59분까지 초는 00 ~ 59초 까지만 가능하다.따라서 유효성 검증을 하는 함수를 하나 만들어줬다.def check_hour(HH) : if HH > 12 or HH = 60 : return False return Truedef check_second(SS) : if SS >= 60 : return False return True위 함수와 같이 시간과 분, 초를 각각 검증하는 함수를 작성하였고, 각 순열을 만들..
디지털포렌식
-
[포렌식] 아이폰 카카오톡 복호화 분석 및 구현
[포렌식] 아이폰 카카오톡 복호화 분석 및 구현
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..
알고리즘 문제 풀이
-
[브론즈 2] 백준 1673 - 치킨 쿠폰 (파이썬)
[브론즈 2] 백준 1673 - 치킨 쿠폰 (파이썬)
2025.09.12https://www.acmicpc.net/problem/1673치킨 한마리를 먹으면 쿠폰을 1장 준다. 요즘도 쿠폰을 주는 치킨집이 있던가,,쿠폰 K장을 모으면 치킨 1마리로 교환할 수 있다. 처음에 가진 치킨 수 N이 주어졌을 때, 총 몇마리의 치킨을 먹을 수 있는지 구하는 문제이다.3 24 3예시로 다음과 같은 입력이 주어졌다면 분석하면 다음과 같다.처음에 3마리를 주문 했고, 쿠폰 3장을 지급 받았다. 1마리를 교환 했고, 쿠폰이 1장 남아있다. 근데 1마리를 주문하면서 쿠폰 1장을 더 받았기에, 남은 쿠폰은 2개가 되어 한마리를 더 주문할 수 있다.총 5마리를 먹을 수 있는 셈이다. 완전 부럽다.4 3 의 경우 처음에 4마리를 먹었고, 쿠폰 4장을 지급 받았다. 이 치킨 집은 3장당 한마리로 바.. -
[브론즈 2] 백준 1718 - 암호 (파이썬)
[브론즈 2] 백준 1718 - 암호 (파이썬)
2025.09.12https://www.acmicpc.net/problem/1718핵심은 평문을 주어진 KEY로 암호화한 문장을 해독하는 것인데, 여기서 중요한 포인트는 키 값에서 +1 처리를 반드시 해줘야 한다는 점이다.S = input().rstrip()KEY = input().rstrip()LONG_KEY = ""while len(LONG_KEY) 암호화할 평문 S와 키 KEY를 입력받는다.키는 평문보다 짧을 수 있기 때문에 평문의 길이에 맞게 반복해서 이어 붙인다.result = []for i in range(len(S)): if S[i] == " ": result.append(" ") else: c = ord(S[i]) - ord('a') k = ord(LONG_.. -
[브론즈 2] 백준 1592 - 영식이와 친구들 (파이썬)
[브론즈 2] 백준 1592 - 영식이와 친구들 (파이썬)
2025.09.11https://www.acmicpc.net/problem/1592총 N명의 친구들이 원형으로 앉아 있다. 공을 가진 사람이 공을 던질 때, 현재 그 사람이 받은 횟수가 홀수라면 오른쪽 L번째 있는 사람에게, 짝수라면 왼쪽으로 L번째 있는 사람에게 공을 던진다.특정 친구가 공을 M번 받으면 게임이 끝나고, 공을 총 몇 번 던졌는지 출력하는 문제이다.먼저 배열로 각 친구의 공 받은 횟수를 기록한다.N, M, L = map(int, input().split())A = [0] * N최초의 배열은 [0]으로 초기화 하였으며, N, M, L 은 map을 통해서 입력 받는다.while max_ball != M : A[index] += 1 max_ball = max(max_ball, A[index]) .. -
[브론즈 1] 백준 1524 - 세준세비 (파이썬)
[브론즈 1] 백준 1524 - 세준세비 (파이썬)
2025.09.10https://www.acmicpc.net/problem/1524 세준(S)과 세비(B)가 각각 병사를 가지고 있다. 병사들끼리 전투를 하는데, 가장 약한 병사들끼리 싸운다.전투 규칙은 다음과 같다.1. 세준의 최약체 ≥ 세비의 최약체 → 세비의 병사가 죽는다.2. 세준의 최약체 둘 중 한 쪽의 병사가 전멸할 때까지 반복한다.이 문제에서 조건에 따라서 양쪽 진영의 최약체만 비교하면 된다. 파이썬 리스트 기본 함수인 pop을 사용했으며 O(1)의 시간복잡도를 가진다.또한 정렬을 미리 해주었기 떄문에 -1 번 인덱스의 값이 항상 최약체의 값이다.아래 코드는 내가 작성하였지만 사실 이 문제는 시뮬레이션을 다 돌릴 필요가 없는 문제이다. 규칙상 세준이의 최약제 >= 세비의 최약체 라면 세비만 계속 죽기 때문이다.. -
[브론즈 2] 백준 1452 - 피시방 알바 (파이썬)
[브론즈 2] 백준 1452 - 피시방 알바 (파이썬)
2025.09.10https://www.acmicpc.net/problem/1453dp처럼 생겼지만 걍 단순한 구현문제이다.check 배열에 False로 하여 100개를 미리 만들어 두고, 각 손님을 돌면서 해당 자리에 넣고 True로 변경한다.만약 동일한 자리가 들어오게 되면 result 변수에 +1 을 하여 거절당하는 자리를 계산할 수 있다.# 백준 1453 - 피시방 알바check = [False] * 100N = int(input())A = list(map(int, input().split()))result = 0for i in A : if check[i - 1] == False : check[i - 1] = True else : result += 1print(result) -
[브론즈 2] 백준 1440 - 타임머신 (파이썬)
[브론즈 2] 백준 1440 - 타임머신 (파이썬)
2025.09.10https://www.acmicpc.net/problem/1440쉬운 구현문제중 하나이다. HH:MM:SS의 시간을 DD:DD:DD로 입력받았을때 유효한 시간의 갯수만 계싼하면 된다.단 여기서 확인해야하는 점은 시간은 1 ~ 12시까지, 분은 00 ~ 59분까지 초는 00 ~ 59초 까지만 가능하다.따라서 유효성 검증을 하는 함수를 하나 만들어줬다.def check_hour(HH) : if HH > 12 or HH = 60 : return False return Truedef check_second(SS) : if SS >= 60 : return False return True위 함수와 같이 시간과 분, 초를 각각 검증하는 함수를 작성하였고, 각 순열을 만들.. -
[브론즈 2] 백준 1263 - 펫 (파이썬)
[브론즈 2] 백준 1263 - 펫 (파이썬)
2025.09.09https://www.acmicpc.net/problem/1362여러 테케가 주어지며 각 케이스는 O W로 시작한다. 0 0 이면 전체 입력이 종료된다.각 테케마다 # 0 이 주어지면 그 케이스는 끝이 난다.E x 는 체중을 빼고, F x는 체중을 더한다. 하지만 처리 도중 W 최종적으로 사망하면 RIP, 생존이고 적정 체중의 1.5배 및 2배 미만이면 :-), 그 외는 :-(을 출력하는 문제이다.# 백준 1362 - 펫import sysinput = sys.stdin.readlinedef opt(O, W) : if W > O * 0.5 and W 0) while True : DATA = input().split() op = DATA[0] weight =.. -
[브론즈 1] 백준 1356 - 유진수 (파이썬)
[브론즈 1] 백준 1356 - 유진수 (파이썬)
2025.09.09https://www.acmicpc.net/problem/1356정수 N이 주어졌을 때, 이 수가 유진수인지 판별해야한다.유진수는 어떤 수 N을 앞부분과 뒷부분으로 나누었을 때, 앞부분 각 자리수의 곱과 뒷부분 각 자리수의 곱이 같은 경우를 의미한다.예를 들어서 다음과 같다.1221 -> (12 | 21) => 1 * 2 = 2, 2 * 1 = 2 -> 즉, 유진수1236 -> (123 | 6) => 1 * 2 * 3 = 6, 6 = 6 -> 즉, 유진수1234 -> 어떤 방법으로도 곱이 같아지지 않음 -> 즉, 유진수 아님코드는 다음과 같이 작성하였다.# 백준 1356 - 유진수N = list(input())start = len(N)result = Falsefor i in range(1, start) .. -
[브론즈 2] 백준 1297 - TV 크기 (파이썬)
[브론즈 2] 백준 1297 - TV 크기 (파이썬)
2025.09.09https://www.acmicpc.net/problem/1297이 문제는 TV 대각선 길이 D와 높이, 너비의 비율 H:W 가 주어진다.실제 TV의 높이와 너비 (h, w)는 피타고라스 정리로 표현할 수 있다.여기서는 비율 관계가 성립한다. 아래 수식을 참고하자.즉, 실제 높이와 너비는 H와 W를 일정 비율로 확대한 값이다.사칙연산으로 접근하면 높이와 너비를 K배 만큼 확대한 값이라고 한다면, 다음과 같이 수식을 새울수 있다.흔히 아는 대각선 공식에 대입하면 필요한 수식은 다음과 같다.작성한 코드는 다음과 같다.# 백준 1297 - TV 크기import mathD, H, W = map(int, input().split())R = D / (H ** 2 + W ** 2) ** 0.5print(int(H *.. -
[브론즈 2] 백준 1350 - 진짜 공간 (파이썬)
[브론즈 2] 백준 1350 - 진짜 공간 (파이썬)
2025.09.09https://www.acmicpc.net/problem/1350파일 시스템을 공부하는 나에겐 재밌는 문제이다. 먼저 이 문제는 파일 시스템에서는 디스크 공간이 파일 사이즈와 항상 같지 않고, 디스크가 일정한 크기의 클러스터로 나뉘어져있고, 한 클러스터는 오직 한 파일만 이용할 수 있다고 한다.여기서 중요한것은 한 클러스터는 오직 한 파일만 이용할수 있다는 것이다.예제에서 클러스트가 512bytes이고, 600bytes의 파일을 저장하려고 한다면 두개의 클러스터에 저장하게 된다.이렇게 600 bytes의 파일을 저장하게되면 2개의 클러스터를 사용하게 된다.또 하나 중요한것은 한 클러스터에는 하나의 파일만 이용할 수 있다는 점이다.이렇게 500, 12, 100이 들어왔다면 512Bytes에 2개의 파일을 .. -
[실버 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] = ..