포렌식 & 개발 이야기 - Forensics & Development
-
포렌식 관련 자료
포렌식 관련 자료
-
알고리즘 문제 풀이
알고리즘 문제 풀이
-
연락쳐
연락쳐
-
디지털포렌식 전문가 2급 자격증
디지털포렌식 전문가 2급 자격증
Best Topic
-
[포렌식] 윈도우 카카오톡 데이터베이스 복호화 분석 및 구현 #1
[포렌식] 윈도우 카카오톡 데이터베이스 복호화 분석 및 구현 #1
2024.03.23본 글은 언제든지 비공개 되거나, 삭제될수 있음을 미리 알려드립니다. (뭐,, 카카오톡 본사에서 글 내려라 하지 않는 이상 없어지진 않지 않을까...?) 이 글은 여러 논문을 참조하여 분석 및 구현한것이며, 참고 문헌은 아래에서 확인 할 수 있다. 분석 환경 및 도구 : MacBook Air M2, Python 3.9, DB Browser for SQLite, HxD,, 등등등등 먼저 윈도우용 카카오톡 데이터베이스 복호화를 하는 이유가 무엇인가 ? 직관적인 주제이며, 가장 결과물이 잘 나올수 있는 복호화 솔루션이 아닌가! 상용 포렌식 도구들에서도 카카오톡 복호화는 어려움을 겪는 부분이라, 쉽고, 빠르게 복호화 할수 있는 방법이 뭐가 있나 고민하다 분석하게 되었음. (사실 이렇게 퍼블릭하게 코드도 공개해도.. -
[25년 1회차] 정보보안기사 동회차 합격 후기 (필기 & 실기)
[25년 1회차] 정보보안기사 동회차 합격 후기 (필기 & 실기)
2025.05.12이번 회차에 정보보안기사 필기와 실기 모두 한 번에 합격했습니다.짧게나마 제 공부 방법과 느낀 점, 그리고 소소한 팁들을 기록용으로 남겨봅니다.앞으로 준비하시는 분들께 조금이나마 도움이 되길 바랍니다1.시험 개요정보보안기사는 한국인터넷진흥원(KISA) 주관 자격증으로, 정보보안 실무 지식 + 보안관리 능력을 두루 평가합니다.필기 : 객관식 4지선다, 과목별 20문항씩 총 100문항 (과락 있음)실기 : 필답형 (보안 관련 실무 지식 + 상황 대응)시험 일정은 상·하반기로 연 3회 진행되며, 제가 응시한 회차는 2025년 1회차였습니다.2. 필기 공부법✅ 공부 기간: 약 2~3주저는 짧게 집중해서 준비하는 스타일이라, 기본 이론 + 기출 반복 중심으로 공부했습니다.이때 BOB랑 일정이 겹쳐서 책만 사두고 .. -
[포렌식] 윈도우 카카오톡 데이터베이스 복호화 분석 및 구현 #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장치의 볼륨 일련번호를 얻으려면 일련번호를 찾고 볼륨 일련 번호는 십진수로 표.. -
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년전부터 잘 안되서 핀셋으로 들어 .. -
[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.. -
[MAC] Pyinstaller을 통해 파이썬에서 맥 파일 배포 (pyqt5 + ui파일)
[MAC] Pyinstaller을 통해 파이썬에서 맥 파일 배포 (pyqt5 + ui파일)
2022.02.25패키징 도구 pyinstaller py2exe py2app py2exe는 Windows 전용이며, py2app은 mac 전용이다. 클로스 플랫폼은 아니지만 pyinstaller는 두 운영체제에서 모두 사용할 수 있다. pyinstaller는 맥에서 작성된 코드를 맥용으로만, 윈도우에서 작성된 코드를 윈도우용으로만 빌드할 수 있다. 여기에서는 pyinstaller로 ui 파일을 사용한 gui 앱을 빌드하는 과정에서 겪었던 시행착오에 대한 기록이다. pyinstaller 문법을 떼고 자신만의 앱을 작성하기 시작하면 드디어 완성된 앱을 패포하고 싶어진다. 지금까지 확인한 바에 의하면 대중적이며 안정적인 배포 유틸리티는 pyinstaller인 듯하다. 터미널용 앱이나 ui를 하드 코딩으로 만든 앱의 경우는 사용.. -
카카오톡 PC 버전 포렌식: 민사·내부 감사 맞춤 분석 서비스 의뢰 받습니다
카카오톡 PC 버전 포렌식: 민사·내부 감사 맞춤 분석 서비스 의뢰 받습니다
2024.10.24안녕하세요, 디지털 포렌식 전문가 김도현입니다. 디지털 포렌식 분야에서 다년간의 경험을 쌓아온 저는 민사 사건이나 내부 감사와 같은 상황에서 신뢰할 수 있는 디지털 증거 분석을 제공합니다.디지털 시대가 발전하면서 다양한 플랫폼에서 이루어지는 소통과 활동이 중요한 증거 자료로 활용되고 있습니다. 그중에서도 특히 카카오톡은 대한민국을 비롯한 여러 국가에서 가장 인기 있는 메신저 플랫폼 중 하나로, 개인과 단체 간의 대화, 파일 전송, 사진 공유 등 다양한 디지털 정보가 담겨 있습니다. 이러한 카카오톡의 정보를 분석하는 작업을 포렌식이라고 하는데, 특히 카카오톡 PC 버전 포렌식은 법적, 수사적 목적으로 중요한 역할을 합니다.카카오톡 PC 버전 포렌식의 필요성카카오톡은 스마트폰 기반의 메신저로 잘 알려져 있지..
알고리즘 문제 풀이
-
[골드 4] 백준 17404 - RGB거리 2 (파이썬)
[골드 4] 백준 17404 - RGB거리 2 (파이썬)
2025.06.30https://www.acmicpc.net/problem/17404풀이이 문제는 다이나믹 프로그래밍을 사용해서 최소 비용을 계싼하는 문제이다.각 집은 R(0), G(1), B(2) 중 하나의 색으로만 칠해야 하며, 이웃한 집은 같은 색이면 안된다.첫번째 집과 마지막 집도 같은 색이면 안된다.N개의 집이 있고, 각 집의 각 색상별 비용이 주어진다.즉, 첫번째 집과 마지막 집이 같은색이면 안된다는 조건 때문에 기존 RGB 거리 문제보다 살짝 까다롭다.그래서 사용한 전략은 다음과 같다.첫번째 집의 색상을 R, G, B 하나로 고정하고 시작한다. 즉 3가지 경우로 나눠서 각각 따로 계산한다.그 다음 집부터는 기존 RGB거리처럼 dp[i][j] = i번째 집을 j색으로 칠할 때의 최소 비용을 채워나간다.마지막 집.. -
[실버 4] 백준 9575 - 행운의 수 (파이썬)
[실버 4] 백준 9575 - 행운의 수 (파이썬)
2025.06.30https://www.acmicpc.net/problem/9575풀이for a in A: for b in B: for c in C:세 배열 A, B, C에서 각각 하나씩 고른다 (총 경우의 수는 N × M × K).합 sum = a + b + c가 “행운의 수”인지 판별한다:10으로 나누며 각 자릿수가 5 또는 8만 있는지 확인함.조건을 만족하면 lucky 리스트에 추가.중복 제거 후 행운의 수 개수 출력.while sum > 0: if sum % 10 not in [5, 8]: good = False break sum //= 10sum의 각 자릿수를 검사함.5 또는 8이 아닌 숫자가 있으면 good = False로 탈락.코드# 백준 9575 - 행운.. -
[골드 4] 백준 14395 - 4연산 (파이썬)
[골드 4] 백준 14395 - 4연산 (파이썬)
2025.06.29https://www.acmicpc.net/problem/14395풀이from collections import dequeS, T = map(int, input().split())visit = set()path = {}queue = deque()queue.append(S)visit.add(S)path[S] = ""입력으로 정수 S, T를 받고 BFS용 자료구조 초기화한다.visit는 중복 연산 방지를 위한 방문 집합을 생성하고, path는 각 숫자에 도달한 연산 문자열을 저장한다.while len(queue) != 0 : u = queue.popleft()BFS 반복문을 시작한다. if u * u “*” 연산을 수행해서 새로운 값이 아직 방문하지 않았고, 10억 이하이면 큐에 넣는다.또한, 연.. -
[골드 2] 백준 1507 - 궁금한 민호 (파이썬)
[골드 2] 백준 1507 - 궁금한 민호 (파이썬)
2025.06.28https://www.acmicpc.net/problem/1507풀이모든 도시 쌍 사이 최단 거리가 주어졌을 때, 최소한의 도로만으로도 그 최단 거리 정보를 유지할 수 있는지를 묻고 있다.주어진 거리 행렬은 이미 모든 쌍 최단 거리 정보를 담고 있음 (플로이드 이후 결과)어떤 도로 i-j가 다른 경로 i-k-j에 포함되어 있다면, 굳이 필요하지 않음따라서 직접 연결된 간선 중, 다른 경로로 대체 가능한 간선은 제거주요 변수dist[i][j]: 도시 i에서 j까지의 최단 거리need[i][j]: i에서 j까지 직접 연결된 간선이 필요한가 여부impossible: 삼각 부등식이 깨지는 경우 (즉, 입력이 잘못된 경우)N = int(input())dist = [list(map(int, input().split.. -
[골드 2] 백준 3109 - 빵집 (파이썬)
[골드 2] 백준 3109 - 빵집 (파이썬)
2025.06.28https://www.acmicpc.net/problem/3109풀이가스관이 있는 빵집의 왼쪽 열에서 시작해 오른쪽 열까지 파이프를 설치할 수 있는 최대 개수를 구하는 것이다.'.'은 빈 칸, 'x'는 설치 불가능한 건물파이프는 오른쪽 위 / 오른쪽 / 오른쪽 아래로만 이동 가능파이프는 겹치면 안 됨출발은 각 행의 첫 번째 열 (즉, (i, 0))def dfs(r, c): visit[r][c] = True if c == C - 1: # 오른쪽 끝 도착 return TrueDFS는 3방향 우선순위로 탐색을 진행한다.오른쪽 위 (r - 1, c + 1)오른쪽 (r, c + 1)오른쪽 아래 (r + 1, c + 1)방문한 적 없고 빈 칸이면 DFS 재귀 호출, 도착 성공하면 True .. -
[실버 2] 백준 2790 - F7 (파이썬)
[실버 2] 백준 2790 - F7 (파이썬)
2025.06.28https://www.acmicpc.net/problem/2790풀이N명의 학생이 있고 각 학생은 자신이 좋아하는 친구 수 B[i]를 갖고 있을 때, 가능한 한 많은 학생이 자신의 친구 수 조건을 만족하도록 친구를 맺도록 하는 것이다.i번 학생은 정확히 B[i]명의 친구를 갖고 싶어한다결국 이 문제는 B[i]명을 만족시키는 친구 매칭이 가능한 최대 학생 수를 구하는 것이다.이를 해결하기 위해, 학생들을 좋아하는 친구 수 기준으로 정렬하고, 뒤에서부터 만족시킬 수 있는지 확인한다.N = int(input())B = [int(input()) for _ in range(N)]B.sort()학생수와 각 학생이 원하는 친구 수 B[i]를 리스트에 저장한 뒤 오름차순 정렬한다.answer = 0max_val = 0.. -
[골드 3] 백준 25381 - ABBC (파이썬)
[골드 3] 백준 25381 - ABBC (파이썬)
2025.06.27https://www.acmicpc.net/problem/25381풀이문자열 S가 주어지며, S에서 문자 B는 한번씩만 사용할 수 있다.B앞에 A가 있으면 AB짝을 만든다.B뒤에 C가 있으면, BC 짝을 만든다.AB 또는 BC 쌍을 최대한 많이 만들어야하며, 단 하나의 B는 한번만 사용할 수 있다.B의 위치를 저장하기 위해서 다음과 같이 정의한다.queue = deque()for i in range(len(S)) : if S[i] == 'B' : queue.append(i)문자열에서 B의 인덱스 위치를 모두 deque에 저장하고, 앞뒤에서 모두 사용할 수 있게 deque를 사용한다.다음은 BC를 매칭한다. (왼쪽 → 오른쪽)for i in range(len(S)) : if S[i].. -
[골드 1] 백준 1113 - 수영장 만들기 (파이썬)
[골드 1] 백준 1113 - 수영장 만들기 (파이썬)
2025.06.26https://www.acmicpc.net/problem/1113풀이높은 정보가 주어진 N * M 격자판이 존재한다.외곽은 절대 물을 담을 수 없고, 안쪽에 고인 물의 양을 계산해야한다.물은 본의의 높이보다 낮은 곳에 채워질 수 있다.각 칸에 고일 수 있는 물의 양을 계산해서 전체 합을 출력한다.결국 BFS로 해결해야 한다고 생각된다.모든 칸을 순회하면 (i, j) 칸에 물 1단계씩 채워보며 시도한다.채웠을 때 외곽까지 닿을 수 있다면 물은 새기 때문에 그만 둔다.외곽까지 닿지 않으면 물이 고일 수 있으므로 해당 칸 높이를 올리고 answer += 1을 진행한다.이 과정을 해당 칸에서 물이 넘칠 때 까지 반복한다.BFS 탐색으로 물이 새는지 확인하기 위해서 다음과 같이 정의 했다.while True : .. -
[실버 2] 백준 13423 - Three Dots
[실버 2] 백준 13423 - Three Dots
2025.06.25https://www.acmicpc.net/problem/13423풀이다음 조건을 만족하는 수열 내 세 수 a, b, c의 개수를 찾는것이다.a b - a = c - b, 즉 등차수열 (공차 일정한 수열)정렬된 수열 A에서 두 수 A[i], A[j]를 선택하고, 공차를 구해서 등차수열의 세 번째 수 c = 2 * A[j] - A[i]가 A에 존재하는지를 판단한다.A는 정렬되어 있지만, 존재 여부를 빠르게 체크하기 위해 set으로도 관리한다.a 코드# 백준 13423 - Three Dots# 분류 : 자료구조T = int(input())for _ in range(T) : N = int(input()) A = list(map(int, input().split())) S = set(A) .. -
[골드 2] 백준 2878 - 캔디캔디 (파이썬)
[골드 2] 백준 2878 - 캔디캔디 (파이썬)
2025.06.25https://www.acmicpc.net/problem/2878풀이총 M개의 캔디를 N명의 학생에게 나눠줘야 한다.각 학생은 자신이 원하는 캔디 수가 있고, 그보다 적게 받으면 “화남 지수”가 받은 개수^2로 증가한다.M개를 어떻게 배분해야 전체 화남 지수의 합이 최소가 되도록 하는지가 문제이다.사용한 풀이 전략은 다음과 같다.1. 이분 탐색을 이용해 평균 컷 구하기학생마다 min(A[i], mid) 만큼 주는 방식을 생각한다.이 때 mid를 조절하며, 총 줄 수 있는 캔디가 M 이상이 되는 최소 mid를 찾는다.mid 이상을 주면 안 되고, 모든 학생에게 최대한 공평하게 적게 주자는 전략.2. 이분 탐색 후 배분최적의 컷 수 p를 찾았으면,모든 학생에게 min(p - 1, A[i])만큼 먼저 배분한다.. -
[실버 5] 백준 12871 - 무한 문자열 (파이썬)
[실버 5] 백준 12871 - 무한 문자열 (파이썬)
2025.06.25https://www.acmicpc.net/problem/12871풀이두 문자열 S와 T가 무한히 반복된다고 할 때, 그 두 무한 문자열이 같은지 확인하는 문제이다.S = ‘abab’이고 T = ‘ababab’면 무한히 반복하면 둘 다 “abababababab…” 같은 문자열이 된다면 1을 출력하고 아니면 0을 출력한다.결국 핵심 아이디어는 문자열의 기본 단위를 구해서 비교하는 것이다.def find_basis(s): ...find_basis함수는 문자열 s의 반복되는 최소 단위를 찾아준다.예를 들어서 abab가 들어가면 ab를 반환하고, aaaa 가 들어가면 a를 반환한다.작동 방식은 다음과 같다.문자열 길이의 약수들을 기준으로 자른다.해당 길이로 자른 모든 조각이 동일한지 확인한다.동일하면 그것.. -
[실버 1] 백준 1141 - 접두사 (파이썬)
[실버 1] 백준 1141 - 접두사 (파이썬)
2025.06.24https://www.acmicpc.net/problem/1141풀이이 문제는 주어진 문자열들 중 다른 문자열의 접두사가 아닌 문자열의 개수를 세는 것이다.N = int(input())S = [input() for _ in range(N)]S = list(set(S)) # 중복 제거먼저 문자열 개수 N을 입력받고, 문자열 리스트 S를 구성한 뒤 set()을 이용해 중복 문자열을 제거한다.prefix = [False] * Nprefix[i]는 S[i]가 다른 문자열의 접두사인지 여부를 저장하는 배열이다.for i in range(len(S)) : for j in range(len(S)) : if i == j : continue if len(S[i]) >.. -
[골드 4] 백준 16120 - PPAP (파이썬)
[골드 4] 백준 16120 - PPAP (파이썬)
2025.06.23https://www.acmicpc.net/problem/16120풀이문자열이 PPAP 규칙에 따라서 만들어졌는지 판별하는 문제이다.기본적인 규칙은 PPAP는 P로 줄일 수 있다.PPPAP는 PPAP + P → PP가 되지 않으므로 올바른 형태가 아니다.줄이고 줄이다가 마지막에 P 하나만 남으면 PPAP 문자열이라고 한다.S = input()stack = []입력 문자열 S를 한글자씩 처리할 것이며, 처리 중간 결과를 저장하기 위해서 스택을 사용한다.for i in range(len(S)) : stack.append(S[i])입력 문자열의 각 문자를 stack에 순차적으로 쌓는다.while len(stack) >= 4 and "".join(stack[-4:]) == "PPAP" : for _ .. -
[골드 3] 백준 1670 - 정상 회담 2 (파이썬)
[골드 3] 백준 1670 - 정상 회담 2 (파이썬)
2025.06.22https://www.acmicpc.net/problem/1670풀이사람 수는 짝수 N이고, 각 사람은 한 명과만 악수할 수 있으며, 악수 선이 교차하지 않아야 한다.이는 DP로 해결할 수 있으며, 다음 점화식을 따른다.이 문제는 카탈란 수(Catalan Number) 문제 유형의 대표적인 예다.핵심은 다음과 같다N명의 정상 중 한 명을 기준으로 짝을 지었을 때, 남은 좌우 인원들도 각각 교차 없이 짝을 지어야 한다.이를 이용하면 DP 점화식을 다음과 같이 세울 수 있다.D[0] = 1 # 아무도 없을 때는 1가지 (아무것도 안 하는 경우)D[2] = 1 # 두 명이 있을 때는 1가지D[n] = D[0]*D[n-2] + D[2]*D[n-4] + D[4]*D[n-6] + ... + D[n-2]*D[0].. -
[실버 1] 백준 12849 - 본대 산책 (파이썬)
[실버 1] 백준 12849 - 본대 산책 (파이썬)
2025.06.21https://www.acmicpc.net/problem/12849풀이총 8개의 장소(0~7번 정점)로 구성된 캠퍼스가 있고, 하루에 1분씩 이동할 수 있음.이동 가능한 경로는 문제에서 고정되어 있음 (총 12개 간선)0번에서 시작해 정확히 D분 뒤 다시 0번에 도착할 수 있는 모든 경로의 수를 구하는 문제.단, 결과는 10^9 + 7로 나눈 나머지를 출력.adj = [[] for _ in range(8)]edge = [ ... ] # 문제에서 주어진 12개 간선for a, b in edge: adj[a].append(b) adj[b].append(a)먼저 인접 리스트를 정의하고, adj[i]는 i번 정점에서 갈 수 있는 이웃 정점을 리스트로 담고 있다.양방향 그래프이므로 adj[a].app.. -
[골드 5] 백준 2591 - 숫자카드 (파이썬)
[골드 5] 백준 2591 - 숫자카드 (파이썬)
2025.06.20https://www.acmicpc.net/problem/2591풀이34까지의 숫자 카드가 있을 때, 주어진 숫자 문자열 S를 한 자리 또는 두 자리 숫자로 쪼개어 카드 조합을 만드는 방법의 수를 구하는 문제이다. 단, 앞자리가 0이면 안 되고, 두 자리 수는 134 사이의 유효한 카드 번호여야 한다.D[i]: 문자열 S의 앞에서 i자리까지 만들 수 있는 카드 조합 수점화식한 자리 수 (S[i-1])가 '0'이 아니면 D[i] += D[i-1]두 자리 수 (S[i-2:i])가 '10' ~ '34' 범위에 속하면 D[i] += D[i-2]S = input()D = [0] * (len(S) + 1) # D[0] ~ D[len(S)]D[0] = 1 # 빈 문자열은 1가지 방법 (기저 조건)for i in .. -
[실버 1] 백준 1446 - 지름길 (파이썬)
[실버 1] 백준 1446 - 지름길 (파이썬)
2025.05.27https://www.acmicpc.net/problem/1446풀이일반 도로는 i → i+1로 이동하면서 1km가 걸린다.지름길은 입력으로 주어지며 (a, b, c)의 의미는 a → b로 가는 지름길이 있고, 길이는 c이다.목표는 0 → D까지 가는 데 걸리는 최단 거리를 구하는 것.N, D = map(int, input().split())adj = [[] for _ in range(D + 1)]D까지의 거리이므로 정점은 0부터 D까지 총 D + 1개이다.adj[i]는 정점 i에서 갈 수 있는 목적지, 비용 리스트이다.for _ in range(N): a, b, c = map(int, input().split()) if b 지름길 정보는 b가 D보다 큰 경우 무의미하므로 무시하며, 지름길은 .. -
[골드 3] 백준 1937 - 욕심쟁이 판다 (파이썬)
[골드 3] 백준 1937 - 욕심쟁이 판다 (파이썬)
2025.05.26https://www.acmicpc.net/problem/1937풀이N×N 크기의 숲이 있다.각 칸에는 대나무가 자라고 있고, 숫자는 대나무의 양이다.판다는 현재 위치보다 더 많은 양의 대나무가 있는 칸으로만 이동할 수 있다.상하좌우로 이동 가능하다.판다는 최대한 많은 날을 살아야 하므로, 이동할 수 있는 경로 중 가장 긴 경로의 길이를 구해야 한다.풀이 아이디어특정 위치 (r, c)에서 시작해 이동할 수 있는 최대 경로를 구한다.이미 계산한 값은 cache[r][c]에 저장해 중복 호출을 방지한다 (메모이제이션).결국 각 칸에서 출발했을 때의 최대 이동일수 중 최댓값이 정답이다.N = int(input())F = [list(map(int, input().split())) for _ in range(N).. -
[골드 3] 백준 1613 - 역사 (파이썬)
[골드 3] 백준 1613 - 역사 (파이썬)
2025.05.25https://www.acmicpc.net/problem/1613풀이N: 사건 개수 (노드 수), K: 사건 간 전후관계의 개수 (방향 그래프 간선)각 입력 (a, b)는 a 사건이 b 사건보다 먼저 일어났음을 의미 → 단방향 간선S개의 질문: a와 b 중 누가 먼저인지 판단먼저 입력 처리 및 인접리스트를 구현한다.adj = [[] for _ in range(N)]for _ in range(K): a, b = map(int, input().split()) a -= 1 b -= 1 adj[a].append(b)방향 그래프 형태로 인접 리스트를 구성한다.모든 정점에서 BFS를 돌려 도달 가능한 노드를 기록한다.visit = [[False] * N for _ in range(N)]for .. -
[실버 2] 백준 1058 - 친구 (파이썬)
[실버 2] 백준 1058 - 친구 (파이썬)
2025.05.24https://www.acmicpc.net/problem/1058풀이사람 수 N명각 사람이 다른 사람과 친구인지 여부가 Y 또는 N으로 주어짐직접 친구이거나 친구의 친구(2-친구)까지를 포함해 가장 많은 친구 수를 가지는 사람을 찾아 그 수를 출력접근 방법각 사람을 기준으로 BFS 수행거리가 1 또는 2인 사람 수를 세면 된다 (자기 자신은 제외)각 사람마다 세서 그 중 최대값을 구함조금 생각해야하는 부분dist[j] visit 배열과 dist 배열을 통해 BFS 방문 여부 및 거리 체크N = int(input())F = [input() for _ in range(N)]N은 사람수 F[i]는 i번째 사람의 친구 관계 문자열을 나타낸다.visit = [False] * Ndist = [-1] * Nqueue..
지금까지 올라온 글들
-
[포렌식] 아이폰 카카오톡 복호화 분석 및 구현
[포렌식] 아이폰 카카오톡 복호화 분석 및 구현
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 보안, 기업 감사, 법무 분야 종사..