Alfred插件-搜索微信聯(lián)系人

為什么做這件事

現(xiàn)在無論工作、生活,通訊工具都是用的微信。尤其工作時,每天重復著大量以下動作:“鼠標點擊打開微信 - 鍵盤搜索好友 - 選擇并發(fā)起聊天”。所以就想能不能改進一下效率。

思路就是把流程化的固定步驟使用腳本自動化,具體實現(xiàn)思路有兩種:
1. 綁定快捷鍵,觸發(fā)快捷鍵后則執(zhí)行:打開微信并發(fā)起微信的搜索
2. 使用Alfred,在Alfred中搜索出微信好友并發(fā)起回話

其中思路1的方式,實現(xiàn)較為簡單。下面重要分享思路2的方式。

效果預覽

效果展示

特性

  • 支持搜索聯(lián)系人
  • 支持搜索微信群
  • 支持模糊匹配:中文、拼音、簡拼
  • 快捷打開聊天對話窗口

下載地址

https://github.com/skefy/Wechat-Workflow-for-Alfred


以下為原理解釋

流程

原理圖

實現(xiàn)

1. 獲取微信數(shù)據(jù)庫密碼

這部分是整個工作的難點,因為微信的數(shù)據(jù)庫是加密的。要想獲取密碼,需要逆向技術,幸好在網(wǎng)上找到了一篇相關文章。 文章鏈接: 點擊查看

  • 其中利用到lldb,可能要安裝 Xcode 才可以。
  • 微信2.3.16 和 2.3.17 版本測試成功,可以成功獲取微信數(shù)據(jù)庫密碼。
    (未來新版本中可能會失效,若有更好的獲取密碼方式的同學,請通知我。)

獲取密碼過程如下:

  1. 重新打開微信(停在掃碼登錄界面)
  2. 在終端輸入命令行:
lldb -p $(pgrep WeChat)
  1. 上面命令會進入到 lldb 中,在lldb中輸入:
br set -n sqlite3_key
  1. 輸入字母 “c”, 回車
  2. 手機掃碼登錄微信
  3. 打開終端,繼續(xù)在lldb中輸入:
memory read --size 1 --format x --count 32 $rsi

得到如下結(jié)果

0x000000000000: 0xab 0xab 0xab 0xab 0xab 0xab 0xab 0xab
0x000000000008: 0xab 0xab 0xab 0xab 0xab 0xab 0xab 0xab
0x000000000010: 0xab 0xab 0xab 0xab 0xab 0xab 0xab 0xab
0x000000000018: 0xab 0xab 0xab 0xab 0xab 0xab 0xab 0xab

把左邊的第1列忽略,只復制右邊的8列。然后把里面的“0x”、空格、換行都刪除,得到一個完整的64位字符串。這個就是最后的結(jié)果了。

2. 讀取數(shù)據(jù)庫

數(shù)據(jù)庫路徑如下

  • 聯(lián)系人:~/Library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/2.0b4.0.9/xxxxxxxx/Contact/wccontact_new2.db
  • 微信群:~/Library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/2.0b4.0.9/xxxxxxxx/Group/group_new.db

注意:要把路徑中的xxxxxxxx,是一個串隨機數(shù),每個設備下都不一樣。

數(shù)據(jù)庫讀取方式

# python先安裝pysqlcipher庫
# 好像只支持python2
from pysqlcipher import dbapi2 as sqlite

# wx_db_file_path 是微信加密數(shù)據(jù)路徑
conn = sqlite.connect(wx_db_file_path)
c = conn.cursor()
# 以下固定參數(shù)設置
c.execute( "PRAGMA cipher_page_size = 1024;" )
c.execute( "PRAGMA cipher_use_hmac = OFF;" )
c.execute( "PRAGMA kdf_iter = 4000;" )
# DB_KEY為數(shù)據(jù)庫密碼
c.execute( "PRAGMA key = " + DB_KEY + ";" )
try:
        # 創(chuàng)建一個新的數(shù)據(jù)庫,密碼設置為空。
        c.execute( "ATTACH DATABASE \'" + decrypted_file + "\' AS groupdecrypted KEY '';" )
        # 導出微信的數(shù)據(jù)庫數(shù)據(jù)到新的數(shù)據(jù)庫
        c.execute( "SELECT sqlcipher_export('groupdecrypted');" )
        c.execute( "DETACH DATABASE groupdecrypted;" )
        c.close()
except:
        c.close()

3. Automator 操作微信

Automator可以說是Mac下的一個效率殺器,利用它可以做很多事情。編程語音支持 AppleScript 和 JavaScript,這里使用 JavaScript,因為AppleScript的語法使用起來太不習慣了。

var app = Application('微信')
var SystemEvents = Application('System Events');

if( app.running() ){
    app.activate()
    wx = SystemEvents.processes['微信'];
    
    // 等待微信程序的窗口創(chuàng)建完成
    if (wx.windows[0].exists() == false){
         delay(0.1)
    }
    
   // 把微信的搜索框設置成focused狀態(tài)
    wx.windows[0].splitterGroups[0].textFields[0].focused = true
    while (wx.windows[0].splitterGroups[0].scrollAreas.length == 1 ){
        delay(0.1)
    }

    delay(0.3)
    // 微信的搜索框輸入要搜索的內(nèi)容
    wx.windows[0].splitterGroups[0].textFields[0].value = "用戶昵稱"

    delay(0.5)
    // 輸入回車
    var using = [];
    SystemEvents.keyCode(36, {using: using});
}

Automator 和 APP UI 交互時,推薦一個神器:UI Browser ,可以幫忙分析 APP 的 UI 元素。UI Browser 官網(wǎng)

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Swift版本點擊這里歡迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh閱讀 26,180評論 7 249
  • 車水馬龍 工廠轟鳴 白日的滾滾浪潮 跌進夜的漩渦 蟋蟀歡歌 蛙鳴一片 另類的歌喉 月華輝灑 瑩白的世界 星光...
    暮瀟瀟閱讀 2,261評論 57 74
  • 經(jīng)過近一年多來的自我覺知、自我覺察,我的夢境變得越來越有意思了。 過幾天老爸老媽要到我這里來,這次我沒有以...
    luccy99閱讀 333評論 0 0
  • 愛垂首 少女羞澀 癡情流淚 花瓣片片散去 風捧在手,郵寄 可惜……可惜…… 花依然三十年前俏佳人 我已直不起腰 駝...
    忠志_3d7b閱讀 178評論 0 2
  • 1 我叫清明,是個小和尚,打小就和師傅住在一起,名字是師傅起的,字也是師傅教的,做飯也是師傅教的,好吧,基本上那些...
    蜃言閱讀 1,037評論 16 9

友情鏈接更多精彩內(nèi)容