이 영역을 누르면 첫 페이지로 이동
포렌식 & 개발 이야기 - Forensics & Development 블로그의 첫 페이지로 이동

포렌식 & 개발 이야기 - Forensics & Development

페이지 맨 위로 올라가기

포렌식 & 개발 이야기 - Forensics & Development

Pental - Forensics / iOS / Windows / Android / Kakaotalk / Telegram / Etc

[포렌식] 아이폰 카카오톡 복호화 분석 및 구현

  • 2025.06.29 12:30
  • Forensics/Iphone Forensics
글 작성자: pental

본 글은 언제든지 비공개 되거나, 삭제될수 있음을 미리 알려드립니다. (뭐,, 카카오톡 본사에서 글 내려라 하지 않는 이상 없어지진 않지 않을까...?)

모바일 메신저는 디지털 포렌식에서 핵심적인 증거원이지만, 대부분의 앱은 사용자 프라이버시 보호를 위해 메시지 데이터베이스에 암호화를 적용한다. 본 분석에서는 iOS 기반 카카오톡 앱에서의 암호화 방식과 그 복호화 가능성에 대해 다룬다. Message.sqlite 파일을 중심으로 접근하며, 관련 선행 사례 및 실험 결과를 종합하였다.

아이폰 카카오톡 포렌식의 경우 이미 많은 상용도구에서 진행되고 있다. 예를 들어 MD-RED, Magnet Axiom, BelkaSoft Evidence X 등,, 하지만 아래 논문에서와 같이, 일부 상용도구에서는 데이터의 양이 많아지거나, 일부 오류로 인해 제대로 복호화 및 분석이 되지 않는 경우가 존재한다.

참고한 논문을 먼저 소개한다.

https://www.dbpia.co.kr/journal/articleDetail?nodeId=NODE12194019

 

iOS 환경에서 카카오톡 데이터 복호화 및 아티팩트 분석 연구 | DBpia

김도현, 김병욱, 양영욱, 장홍준 | 디지털콘텐츠학회논문지 | 2025.5

www.dbpia.co.kr

https://www.kci.go.kr/kciportal/ci/sereArticleSearch/ciSereArtiView.kci?sereArticleSearchBean.artiId=ART003204555

 

iOS 환경에서 카카오톡 데이터 복호화 및 아티팩트 분석 연구

메신저 대화 데이터는 사용자 기기에 암호화된 형태로 저장되며, 디지털 포렌식에서 중요한 증거로 활용된다. 특히 카카오톡 대화를 분석하려면 데이터베이스 파일을 추출한 후 복호화해야 한

www.kci.go.kr

 

논문을 바탕으로 분석을 진행하며, 분석한 내용에 대해서 포스팅한다.
먼저 아이폰 포렌식의 경우 FFS(Full Filesystem) 덤프가 거의 불가능 하기 때문에, Logical Backup을 통한 분석을 진행한다.

Logical Backup의 경우 아이툰즈를 사용하였으며, 아이튠즈를 통한 백업 경로는 다음과 같다.

OS Path
Windows /Users/(username)/AppData/Roaming/Apple Computer/MobileSync/Backup/
mac OS ~/Library/Application Support/MobileSync/Backup/

필자의 경우 맥을 통해 백업을 진행하였기 때문에, mac OS 경로를 통해서 백업본을 확인한다.

본 논문에서는 전체 데이터 백업을 통하여 데이터에 접근 하며, 암∙복호화 과정을 알고리즘으로 구현한다.

iOS용 카카오톡 데이터의 저장 경로는 표와 같다. 대화 내역 등 주요 정보는 모두 데이터베이스에 저장되어 있으며, 주고받은 멀티미디어 파일은 사용자별 디렉터리에 저장된다. 이는 그림과 같이 모두 암호화된 상태로 저장되어 있다.

Name Path
Message database /AppDomain-com.iwilab.KakaoTalk/Librar y/PrivateDocuments/Message.sqlite
Talk database /AppDomain-com.iwilab.KakaoTalk/Librar y/PrivateDocuments/Talk.sqlite
Multimedia file /AppDomain-com.iwilab.KakaoTalk/Librar y/Library/PrivateDocuments/chat/[ChatID] /[Image FileName]

 

Manifest.db 파일에서 Kakaotalk 메시지 데이터베이스 파일의 위치를 확인 할 수 있다.

아이튠즈를 이용한 백업은 hash 값을 사용한 파일명을 사용한다. 따라서 위에서 발견된 파일 이름을 바탕으로 백업 된 파일에서 메시지 데이터베이스 파일을 확인한다.

추출된 파일을 SQLite Viewer를 통해 확인하면 암호화 된 메시지 들을 확인 할 수 있다.

🔐 암호화된 메시지 구조 이해

✅ iOS 카카오톡은 전체 DB가 아닌 개별 메시지 단위로 암호화

기존 Windows/macOS 환경과 달리, iOS 카카오톡에서는 전체 데이터베이스가 암호화되지 않는다. 대신, 메시지 한 줄 한 줄이 개별적으로 암호화되어 저장된다.

✅ 복호화를 위한 핵심 요소는 아래와 같다.

  • userId: 사용자 고유 식별자
  • HMAC: 해시 기반 메시지 인증 코드
  • XOR: 두 해시값을 비트 연산하여 키 생성
  • AES-CBC: 최종 복호화에 사용되는 블록 암호 알고리즘

복호화 로직 단계는 다음과 같다.

Input : key, iv, userId, encMessage
Output : decMessage

1. userId를 16바이트로 패딩 ('\0' 문자 추가)
2. key, iv는 하드코딩된 바이트 배열
3. First ← HMAC(key, userId + 고정 문자열)
4. Second ← HMAC(key, userId + 고정 문자열)
5. DerivedKey ← XOR(First + Second)[:32]
6. AES CBC 모드로 복호화기 생성
7. 암호화된 메시지 Base64 디코딩
8. AES 복호화 후 패딩 제거

요소설명

HMAC SHA-256 기반 해시 + 비밀 키
XOR 두 HMAC 값을 XOR 연산
AES-CBC 고정된 IV와 파생 키로 블록 단위 복호화
Base64 메시지는 Base64로 인코딩되어 저장됨

 

📁 Talk.sqlite 구조 및 UserID 추출

복호화를 위해서는 카카오톡 소유자의 userId가 필요하다. 이를 확인하기 위한 쿼리는 다음과 같다.

SELECT ZID, ZNICKNAME, COUNT(*) AS Count 
FROM ZUSER 
GROUP BY ZID 
ORDER BY Count DESC 
LIMIT 1;

 

지금까지 나온 알고리즘을 통해 파이썬 코드를 작성하면 다음과 같다.

def ios_humantime(temp) :
    unix = datetime(1970, 1, 1)  # UTC
    cocoa = datetime(2001, 1, 1)  # UTC
    delta = cocoa - unix  # timedelta instance
    timestamp = datetime.fromtimestamp(int(temp)) + delta
    time = (timestamp.strftime('%Y-%m-%d %H:%M:%S'))
    return time
def calcHash(msg):
    first  = hmac.new(key, msg,   hashlib.sha1).digest()
    second = hmac.new(key, first, hashlib.sha1).digest()
    return bytes(map(lambda x: x[0] ^ x[1], zip(first, second)))
def deriveKey(userId):
    userId = str(userId) + '\0' * 16
    userId = userId[:16].encode('utf-8')
    first  = calcHash(userId + b'\x00\x00\x00\x01')
    second = calcHash(userId + b'\x00\x00\x00\x02')
    return (first + second)[:32]
def decrypt(userId, msg):
    try :
        encoder = AES.new(deriveKey(userId), AES.MODE_CBC, iv)
        return decrypted[:-decrypted[-1]].decode('utf-8')
    except :
        pass

논문에서 소개한 내용을 바탕으로 파이썬 코드를 작성하여, 복호화를 진행해본다.

 

아마 이를 잘 활용한다면 삭제된 메시지, 나간 채팅 방 들도 포렌식 가능한 것으로 보인다. 하지만 시간이 없으니 여기서 글을 마쳐야징 ㅎ

지금까지 카카오톡 분석과 관련하여 작성한 글 목록이다.

https://blog.system32.kr/304

 

[포렌식] 윈도우 카카오톡 데이터베이스 복호화 분석 및 구현 #1

본 글은 언제든지 비공개 되거나, 삭제될수 있음을 미리 알려드립니다. (뭐,, 카카오톡 본사에서 글 내려라 하지 않는 이상 없어지진 않지 않을까...?) 이 글은 여러 논문을 참조하여 분석 및 구현

blog.system32.kr

https://blog.system32.kr/305

 

[포렌식] 윈도우 카카오톡 데이터베이스 복호화 분석 및 구현 #2

#1 에서는 윈도우 카카오톡 데이터 베이스 복호화 분석을 진행했다. #2 에서는 자동화 하는 기능을 소개하려고 한다. 일단 Pragma를 생성하기 위해서 레지스트리에 접근해야하지 않는가? def get_pragm

blog.system32.kr

https://blog.system32.kr/331

 

카카오톡 포렌식 도구 개발 - Windows, iOS, Android, Mac 운영체제 카카오톡 디비 복호화

오랜만에 블로그에 글을 작성하는것 같네요,,아마 전체적으로 만드는데 1년 정도 걸린것 같은데, 개발된 프로그램에 대해 살짝 소개해보려고 합니다.먼저 목적은 아직 상용 포렌식 도구에서 안

blog.system32.kr

 

저작자표시 비영리 (새창열림)

'Forensics > Iphone Forensics' 카테고리의 다른 글

[25년 5월] 아이폰 1110 오류 / 무한 사과 / 저장공간 꽉참 데이터 복구 해결건  (0) 2025.05.24
[25년 5월] 아이폰 1110 오류 - 데이터 복구 성공 / 아이폰 무한 사과 해결  (1) 2025.05.11
아이폰 1110 오류 해결 및 무한 부팅 증상 해결 + 데이터 복구 성공  (0) 2024.10.24
iPhone 오류 1110: 문제 해결과 데이터 복구 여정  (0) 2024.10.24
아이폰 1110 오류 해결 / 아이폰 15Pro & 13Pro / 무한 부팅 증상 오류 해결  (0) 2024.07.09

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [25년 5월] 아이폰 1110 오류 / 무한 사과 / 저장공간 꽉참 데이터 복구 해결건

    [25년 5월] 아이폰 1110 오류 / 무한 사과 / 저장공간 꽉참 데이터 복구 해결건

    2025.05.24
  • [25년 5월] 아이폰 1110 오류 - 데이터 복구 성공 / 아이폰 무한 사과 해결

    [25년 5월] 아이폰 1110 오류 - 데이터 복구 성공 / 아이폰 무한 사과 해결

    2025.05.11
  • 아이폰 1110 오류 해결 및 무한 부팅 증상 해결 + 데이터 복구 성공

    아이폰 1110 오류 해결 및 무한 부팅 증상 해결 + 데이터 복구 성공

    2024.10.24
  • iPhone 오류 1110: 문제 해결과 데이터 복구 여정

    iPhone 오류 1110: 문제 해결과 데이터 복구 여정

    2024.10.24
다른 글 더 둘러보기

정보

포렌식 & 개발 이야기 - Forensics & Development 블로그의 첫 페이지로 이동

포렌식 & 개발 이야기 - Forensics & Development

  • 포렌식 & 개발 이야기 - Forensics & Development의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

카테고리

  • Category (467) N
    • Forensics (106) N
      • Magnet AXIOM (28)
      • Digital Forensics Informati.. (9)
      • Iphone Forensics (25) N
      • DFC (7)
      • 디지털포렌식전문가2급 자격증 (10)
      • FTK ACE 자격증 (7)
    • 이것저것 (7)
      • Ubuntu (6)
      • 디스코드 봇 (4)
      • Volatility GUI (2)
    • CTF (32)
      • NEWSECU (14)
      • CTF-d (5)
      • Puzzel - Network Forensics (2)
      • Security Traps (2)
      • system32.kr (5)
      • HMCTF (4)
    • Programming (274) N
      • C (10)
      • Python (11)
      • 백준 (220) N
      • 프로그래머스 (32)
    • 그냥 개발 및 잡담 (16)
      • Docker (2)
      • Google Cloud (3)
      • OS 개발 (3)
    • Best of Best (20)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • 포렌식
  • Forensics
  • 파이썬
  • 프로그래머스
  • 백준
  • pental
  • 디지털포렌식
  • axiom
  • 전체 보기…

정보

pental의 포렌식 & 개발 이야기 - Forensics & Development

포렌식 & 개발 이야기 - Forensics & Development

pental

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © pental.

티스토리툴바