본 글은 연구목적으로 작성된 글이며 불법적 용도로 사용을 금합니다


1. 들어가며

카카오톡은 국내에서 가장 널리 사용되는 메신저로, PC 버전에서는 대화 기록을 EDB(Extensible Database) 파일 형태로 저장합니다.
하지만 이 파일은 SQLite 기반이지만 AES 암호화되어 있어 일반적인 방법으로는 접근이 어렵습니다.

본 글에서는 카카오톡 EDB 파일의 구조와 복호화 방법, 그리고 삭제된 메시지 복구 및 미디어 파일 분석 방법을 소개합니다.

[참고 논문] 윈도우 환경에서 카카오톡 데이터 복호화 및 아티팩트 분석 연구

Journal of The Korea Institute of Information Security & Cryptology
VOL.33, NO.1, Feb. 2023


2. 카카오톡 EDB 파일의 구조

카카오톡 EDB 파일이란?

  • 역할: 카카오톡 PC 버전은 대화 기록을 chatLogs_{chatId}.edb 파일에 저장합니다.
  • 특징: SQLite 기반이지만 AES 알고리즘으로 암호화되어 있어 직접 조회가 불가능합니다.

파일의 위치

Windows 환경에서 EDB 파일은 다음 경로에 저장됩니다:

여기서 {userDir}은 각 사용자별 고유 디렉토리이며, {chatId}는 특정 채팅방을 식별하는 값입니다.


3. 카카오톡 EDB 파일 복호화 과정

카카오톡 PC 버전은 데이터베이스 파일을 AES-128-CBC 방식으로 암호화합니다.
이를 해독하려면 사용자의 하드웨어 정보(디스크 정보) 및 계정 정보를 이용해 복호화 키를 생성해야 합니다.

3.1. 암호화 키 생성 과정

카카오톡 EDB 파일은 사용자의 하드웨어 정보를 기반으로 한 키를 사용하여 AES 암호화됩니다.
따라서 키를 생성하기 위해서는 UUID, 하드디스크 모델명, 시리얼 번호가 필요합니다.

이러한 정보를 결합하여 Pragma 값을 생성합니다.
이 과정은 논문에서 다음과 같이 설명하고 있습니다

하드 코딩된 바이트 배열을 키로 하여, UUID와 ModelName, SerialNumber를 연접한 결과에 AES 암호화를 수행한다.
위 결과에 대해 SHA512 해싱 수행 후, Base64 인코딩을 수행하면 Pragma가 생성된다.

edb 복호화 pragma 생성
edb 복호화 pragma 생성

이를 코드로 구현하면 다음과 같습니다:

3.2. Key 및 IV 생성

생성된 Pragma 값과 userId를 결합하여 AES 키와 IV를 생성합니다.
이 과정은 다음과 같이 진행됩니다:

Pragma와 userId를 512바이트가 될 때까지 반복하여 연접한 후 MD5 해싱을 수행하면 Key가 생성된다.
생성된 Key에 대해 Base64 인코딩 후 MD5 해싱을 수행하면 IV가 생성된다.

카카오톡 edb 복호화 key, iv 생성
key, iv 생성

이를 코드로 구현하면 다음과 같습니다:


4. 카카오톡 EDB 데이터 복호화

생성된 키와 IV를 사용하여 카카오톡 EDB 파일을 복호화합니다.
논문에서는 다음과 같이 설명하고 있습니다:

생성한 key, iv 쌍을 이용하여 페이지 크기인 4,096바이트 별로 AES 복호화를 수행한다.

카카오톡 복호화 방안
복호화 방안

이를 코드로 구현하면 다음과 같습니다:


5. 복호화 실행 예시


6. 마무리 및 다음글에 대한 예고편

본 글에서는 카카오톡 PC 버전의 EDB 파일을 복호화하는 방법에 대하여 소개했습니다.
다음 글에서는 uuid, modelName, serialNumber 등을 확인하는 방법과 모든 것들을 다 조합하여 복호화에 성공한 EDB 파일을 sqLite browser 프로그램을 활용하여 내부 구조를 살펴보는 부분(채팅방 목록, 채팅내용, 대화방에 첨부된 이미지 파일)까지 작성해 보도록 하겠습니다.

  • 하드코딩된 바이트배열은 kakaotalk.exe 파일에 대한 리버스엔지니어링 등이 필요한 부분으로 공개적으로 자세하게 설명드리기는 어렵습니다.

⚠️ 주의사항: 본인의 데이터가 아니라면 복호화를 시도하지 말아야 하며, 법적 문제를 유의해야 합니다.


이 글은 chatGPT 4o 버전에 해당 논문을 인식시켜 기본 글의 구조를 작성하고 논문을 기초로 만든 코드를 결합시켜 만든 글입니다.

글을 읽으시면서 궁금한 내용이나 정보교류를 원하시는 경우 댓글로 남겨주시면 확인 후 답변 드리겠습니다

21 thoughts on “카카오톡 PC에 저장된 암호화된 대화내용 보는 방법(EDB 파일 복호화) #1”
  1. 안녕하세요.
    자바 개발자인데 처음으로 파이썬하면서 VS Code툴쓰면서 파이썬 설치하고 포스팅보면서 과정 따라가고 있습니다.

    코드에서 하드코딩된 바이트배열을 확인할 수 있는 방법이 궁금합니다.
    도움 받을수 있을까요?
    도움주신다면 정말 감사하겠습니다!!

  2. 안녕하세요. 현재 VS Code에서 파이썬을 설치하고 과정을 따라가고 있습니다.

    현재 실행 중인 코드에서 하드코딩된 바이트배열을 확인할 수 있는 방법이 궁금합니다. 이에 대한 도움을 주실 수 있을까요?

    도움을 주신다면 정말 감사하겠습니다.

  3. 저도 하드코딩된 바이트 배열 확인 할 수 있는 방법 궁금합니다. 여기서 막히네요.

  4. 안녕하세요. 좋은 정뷰 감사합니다.
    하드코딩된 바이트배열 확인할 수 있는 방법이 궁금합니다. 이 부분에서 막히네요.

  5. 하드코딩된 바이트 배열을 확인하는 방법이 궁금합니다.
    도움 주시면 감사하겠습니다.

    즐거운 하루되세요.

  6. 안녕하세요. 포스팅하신 글을 따라 실행해보고 있는데요.

    다 모르겠는데.. 하드코딩된 바이트배열에 대해선 어떻게 찾아야할지 감이 안와 도움을 요청 드리고자 합니다.
    찾는 방법이 있으면 가르침 부탁드립니다.

  7. 안녕하세요. 올려주신 글 보고 따라해보고 있는 개발자입니다.
    혼자서 이것저것 해봤는데 바이트배열 찾기가 도저히 안돼서 댓글 남깁니다..
    도움주시면 정말 감사하겠습니다!

  8. 저도 하드코딩된 배열을 알아보고싶습니다만 도무지 방법을 못찾겠네요 ㅜㅜ 지푸라기라도 잡고싶은 심정으로 요청댓글 한번 남겨봅니다 ㅜㅜ 부탁드립니다!!!!

  9. 안녕하세요. 작성해주신 글을 보고 파이썬으로 작업해보고 있습니다.
    ‘하드코딩된 바이트배열’ 추출하는 방법이 궁금합니다.
    가르쳐주시면 감사하겠습니다.

  10. 제가 댓글을 남겼었는데 승인이 필요하다는 내용을 본 것 같은데 그것도 사라져서 다시 남깁니다!
    저도 다른 분들과 마찬가지로 하드코딩된 128비트 키를 얻어보려고 디버그 툴로 중단점을 따라가면서 얻어보려고 노력해봤고.. 우회까지 해봤는데 별다른 방법을 찾지 못해서 도움을 얻고자 댓글을 남깁니다!! 부탁드립니다!!!!

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다