특정 호스트 환경의 WeChat 데이터베이스를 크래킹하여 채팅 기록을 얻습니다.
wechaty
와 같은 WeChat 봇을 사용하는 경우 각 실시간 메시지만 연결할 수 있으며 전체 채팅 기록을 얻을 수는 없습니다.
그러나 wechaty
의 프레임워크와 채팅 기록을 얻기 위한 API 내에서는 가능할 수도 있습니다.
WeChat 채팅 기록은 데이터베이스에 저장되므로 데이터베이스 관점에서 얻을 수 있습니다.
WeChat 채팅 기록은 암호화를 지원하고 열려면 비밀 키가 필요한 sqlite
데이터베이스인 sqlcipher
에 저장되므로 먼저 데이터베이스의 비밀 키를 얻어야 합니다.
MacOS를 예로 들면, 일부 역방향 메소드( dtrace
)를 사용하여 프로그램의 데이터베이스 활동을 연결할 수 있습니다. 데이터베이스를 여는 프로그램에는 키 읽기가 포함되므로 이 읽기 작업을 구문 분석하여 일반 텍스트 비밀 키를 얻을 수 있습니다.
이론적으로는 모든 플랫폼, 특히 안드로이드, 윈도우 등의 플랫폼에서 구현이 가능하다. 리버스 엔지니어도 많아지고 크랙도 덜 어려울 수 있다. 하지만 내 개인 메인 컴퓨터는 Mac/iOS이기 때문에 호환성을 고려하지 않았다. 당분간은 Windows/Android 생태계와 함께합니다.
둘째, PC 측의 엔지니어링 역량은 모바일 측의 엔지니어링 역량보다 풍부합니다. 따라서 PC 측의 혁신에 우선순위를 두는 것이 비용 효율적인 선택입니다.
현재 dtrace 스크립트와 전체 후크 로직은 MacOS WeChat 클라이언트 버전이 3.6 미만 인지 확인해야 합니다.
이전 버전의 WeChat 주소 다운로드: 이전 버전의 WeChat(Mac) |
MacOS에서는 sqlcipher를 읽고 쓸 수 있는 환경을 구성해야 합니다.
# 1. check where is your `libcrypto.a`
brew list openssl | grep libcrypto.a
# 或者 find /usr/local/Cellar -name libcrypto.a
# 2. use the libcrypto.a with openssl version >= 3
LIBCRYPTO={YOUR-libcrypto.a}
# 3. install sqlcipher
git submodule add https://github.com/sqlcipher/sqlcipher
cd sqlcipher
./configure --enable-tempstore=yes CFLAGS= " -DSQLITE_HAS_CODEC "
LDFLAGS= $LIBCRYPTO --with-crypto-lib=none
make
# need password
sudo make install
안전 모드로 들어가려면 cmd + Shift + R을 눌러야 합니다(Mac Studio에서는 전원 버튼을 길게 누르기만 하면 됩니다).
# check SIP
csrutil status
# disable SIP, need in recovery mode (hold on shift+R when rebooting)
csrutil disable
팁: 해당 버전으로 올바른 WeChat 프로그램을 실행하고 있는지 확인해야 합니다.
# comparing to `wechat-decipher-macos`, I make the script more robust.
# 由于key是固定的,也可以把输出内容持久化,只需要在命令后面加上 `> data/dbcracker.log`
pgrep -f /Applications/WeChat-3.6.0.app/Contents/MacOS/WeChat | xargs sudo core/dbcracker.d -p > .keys
Tip: 키 읽기 동작은 로그인 시 발생하므로 먼저 프로그램을 실행한 후 로그인해야 합니다.
각 데이터베이스의 저장 주소, 비밀 키, 버전 등을 얻었으므로 프로그래밍 방식으로 모든 데이터를 읽을 수 있습니다.
pysqlcipher
사용할 수 있습니다node-sqlcipher
사용할 수 있습니다.