snapchat閱後即焚實現分析
最近主打閱後即焚的snapchat似乎又火了起來,估值已經達到100億美元了。閱後即焚這個功能看上去挺神祕的樣子,我們來分析一下它到底是怎麼實現的吧。
通過wireshark抓包,發現全部都是SSL包,無法解密,但是至少可以確定這個app全程使用https進行通訊。另外APP還對HTTPS程式碼做了某些處理,使得fiddler的證書劫持功能也無法正常使用,那就只有再次祭上netbeans了。
通過apkIDE搜尋"https"字串,因為一般來說會註冊一個https的Scheme。在找到的位置下斷點,就可以跟蹤到https使用的URL了。不過這裡第二個https連結並不是直接走這裡的程式碼,需要單步跟過去才會找到。
下面直接講下它的網路和儲存過程吧。
一.登入過程獲取auth_token
通過如下URL來進行登入,並獲取auth_token
https://feelinsonice-hrd.appspot.com/loq/login
它會返回一個包含auth_token的json
二.接收照片過程
接收照片的過程比較多一點,會分下幾個步驟
1.https://feelinsonice-hrd.appspot.com/loq/all_updates
得到類似如下的未讀資訊
"snap": {
"sn":"teamsnapchat",
"t": 7,
"timer":7,
"id":"882091414483730340r",
"st":1,
"m": 1,
"ts":1414483730340,
"sts":1414483730340
【"zipped":true】
}
zipped是可選項,表示檔案被壓縮過
獲取到有未取訊息後,在對話方塊裡顯示“點選載入”,提示使用者有新閱後即焚訊息可讀
2.使用者點選“點選載入”後,觸發的行為
1)構造一個類似的如下URL,下載該點選對應的檔案到記憶體
https://feelinsonice-hrd.appspot.com/ph/blob?id=795436414647955780r&username=shsjsjsjshsxxxx×tamp=1414650012732&req_token=630010c93a89ceb579c2bd79f659d518efc9b763521c4d0537b7dab777392277
id就是上面loq/all_updates獲取的未讀id, username也是loq/all_updates返回的json中的內容,表示來自哪個好友,timestamp是本地時間戳,req_token是本地通過auth_token和timestamp再加上本地固定key,進行SHA-256加密後的串,可用於服務端認證及防篡改校驗
生成演算法,如下函式
public static String a(String authToken, String timestamp) {
String v0 = "iEk21fuwZApXlz93750dmW22pw389dPwOk" + authToken;
String v1 = timestamp + "iEk21fuwZApXlz93750dmW22pw389dPwOk";
MessageDigest v2 = MessageDigest.getInstance("SHA-256");
v2.update(v0.getBytes("UTF-8"));
String v3 = new String(RequestAuthorization.a(v2.digest()));
v2.update(v1.getBytes("UTF-8"));
String v2_1 = new String(RequestAuthorization.a(v2.digest()));
v1 = "";
int v0_1 = 0;
label_26:
if(v0_1 <"0001110111101110001111010101111011010001001110011000110001000110".length()){
int v4 ="0001110111101110001111010101111011010001001110011000110001000110".charAt(v0_1);
StringBuilder v5 = new StringBuilder().append(v1);
char v1_1 = v4 == 0x30 ? v3.charAt(v0_1) : v2_1.charAt(v0_1);
v1 = v5.append(v1_1).toString();
++v0_1;
goto label_26;
}
return v1;
}
2)對下載後的記憶體使用固定的key進行aes解密,這個key的值為:M02cnQ51Ji97vwT4,這一步進行解密後,記憶體中的內容是以明文存在的。
3)本地生成一個隨機key,重新對解密後的檔案進行aes加密,並儲存為檔案,同時將key儲存起來:
照片檔案儲存名字如下所示: /data/data/com.snapchat.android/cache/received_image_snaps/h1a81hurcs00h-XXXXXXXXXXXXXXXXXXX.jpg.nomedia
XXX為可變數字
視訊檔案儲存名字如下所示:
/mnt/sdcard/Android/data/com.snapchat.android/cache/received_video_snaps/sesrh_dlw21-XXXXXXXXXXXX.mp4.nomedia
載入完成後,閱後即焚的資料就以這樣的一個加密檔案形式存在,此時“點選載入"按鈕變成了“按住檢視”,一直到使用者看完照片,這裡的URL都是可以訪問的
3.使用者點選“按住檢視”後,使用儲存的KEY對加密檔案進行解密,並顯示出來,然後刪除本地檔案,並向服務端傳送該照片或視訊對的id,通知該id已讀,服務端會使上一步使用的URL失效,同時通知此圖片或視訊的客戶端,此訊息已讀。
通過上面的分析可知,閱後即焚的圖片在記憶體中被AES解密後,是明文存在的,只要在這一步將該記憶體儲存為檔案,就可以將閱後即焚圖片扣出來了。因此閱後即焚功能相對而言還是比較脆弱的。
相關推薦
snapchat閱後即焚實現分析
最近主打閱後即焚的snapchat似乎又火了起來,估值已經達到100億美元了。閱後即焚這個功能看上去挺神祕的樣子,我們來分析一下它到底是怎麼實現的吧。 通過wireshark抓包,發現全部都是SSL包,無法解密,但是至少可以確定這個app全程使用http
產品分析 閱後即焚的產品價值
近些天來,發現“閱後即焚”這個功能的實現很火,不懂這個技術的實現是怎麼辦到的就上網查閱了一些資料。 縱觀天朝有關閱後即焚技術的APP,知乎上有使用者做出以下回答: 作者:安司小密 來源:知乎 SNAPCHAT的火爆帶
騰訊入股Snap,能救“閱後即焚”的命嗎?
騰訊互聯網社交的強大包容性,讓各種社交形式都能有著較多的受眾群體。普適性極廣的QQ、微信、“臉譜”;專攻陌生人社交的陌陌;讓人們發布意見的微博……當然也少不了“閱後即焚”類的社交應用。這其中,Snapchat是眾多“閱後即焚”應用中的老大。但在今年3月份上市以來,Snapchat的表現一直不盡人意,波動非常大
最霸氣的程式設計師辭職理由,閱後即焚!
一年之計在於春,新的一年大家都會有新的期盼。職場員工期盼新的一年薪水上漲、職級調高,個人成長邁上
閱後即焚,火得一塌糊塗
保持做“硬漢”,Snapchat不為30億折腰 30億美元,關於一個成立不到3年的公司就像天上失落了餡餅。但是,snapchat結合開創人兼CEO,年僅23歲的埃文·斯皮格爾說:“感謝,我們不要!” 2013年11月14日,“閱後即焚”照片分享使用Snapcha
Linux下百度雲盤怎麼用,操作簡單,還不限速,最後竟然還能看閱後即瞎全集
說好的要下載資料集進行論文復現的,所以沒有百度雲盤怎麼能行。 我們今天的目的就是在Linux下弄好百度雲盤,然後下載我雲盤裡的閱後即瞎視訊。 首先開啟新增元件。 然後找網盤助手安裝。 之後網頁雲盤會變成這個樣。 匯出下載選文字。 回到終端安裝這個。 sudo apt install ar
“悅後即焚”!這是一場關於CIO下半場的大討論,你來嗎?
關注ITValue,檢視企業級市場最新鮮、最具價值的報道! CIO是美國30年前針對
ThreadPoolExecutor的應用和實現分析(中)—— 任務處理相關源碼分析
stateless 自身 tran als row exce 繼承 break attribute 轉自:http://www.tuicool.com/articles/rmqYjq 前面一篇文章從Executors中的工廠方法入手,已經對ThreadPoolExecuto
OC對象之旅 weak弱引用實現分析
interface anywhere function address target Runtime源碼分析帶你了解OC實現過程。其中參考了大量的大神的代碼以及文獻裏面也有個人的見解歡迎拍磚歡迎交流。兩種常見使用場景/// [email protected]/* */ XX :
Java的LockSupport.park()實現分析(轉載)
兩個 這也 his access 需要 tracking orm return 指令 LockSupport類是Java6(JSR166-JUC)引入的一個類,提供了基本的線程同步原語。LockSupport實際上是調用了Unsafe類裏的函數,歸結到Unsafe裏,只有
後臺數據管理分析報告.V.1.1
博客園 app 創建 後臺 作業 連接數據庫 博客 項目 分析 後臺數據管理分析報告 負責人:姜敏 合夥人:任小風、賀麗霞 項目分析目標 1.項目目標:把APP後臺建造完成 2.課上留的作業完成並放在博客園 3.要創建並連接數據庫 4.在R中讀出後臺數據管理分析報告.V.1
Java集合排序功能實現分析
需要 基本 eas elong rst length 查看 fin after Java如何實現集合的排序? - 本文以對Student對象集合為例進行排序Java通過Collections.sort(List<Student> stuList)和Collect
window.onload和JQuery中$(function(){})的區別即其實現原理
當前 blog 原理 image 改變 argument 原生js cti state 一、區別 window.onload是在DOM樹加載完成之後(DOM樹加載完不代表全部資源加載完,例如圖片,音頻和視頻等還沒加載)執行的。 在Jquery中$(function(){ }
Django的models實現分析
創建 優雅 __init__ python面向對 test object類 meta lin wid 1 引子 1.1 神奇的Django中的models 我們先來看一段在Django項目中常用的代碼: 設置數據庫models代碼: class S
Redis實現分布式鎖原理與實現分析
數據表 防止 中一 csdn 訂單 not 產生 www 整體 一、關於分布式鎖 關於分布式鎖,可能絕大部分人都會或多或少涉及到。 我舉二個例子: 場景一:從前端界面發起一筆支付請求,如果前端沒有做防重處理,那麽可能在某一個時刻會有二筆一樣的單子同時到達系統後臺。 場
數據結構-堆 接口定義與實現分析(詳細註釋與圖解)
info 獲取 init ret targe 動態 函數 target 用戶自定義函數 如果想了解堆的概念,可以點擊此處查看前面關於堆的定義的隨筆。 堆的操作接口包括初始化堆、銷毀堆、向堆中插入元素、從堆頂移除元素、堆的結點個數。 我們用heap來命名一個堆。下面是對以上接
ntelliJ IDEA2017 + tomcat 即改即生效 實現熱部署
com 親測 es2015 down 設置 技術 ima clas left 1.點擊idea中tomcat設置 2.點擊deployment查看Deploy at the server startup 中tomcat每次所運行的包是 xxxx:war
MySQL 多表查詢實現分析
OS 是你 例子 dump table 多表查詢 一個 ont 由於 1、查看第一個表 mytable 的內容: mysql> select * from mytable; +----------+------+------------+-------
SylixOS中ARM架構的MMU實現分析
SylixOS ARM MMU 1. 理論知識 1.1 快表(TLB)與頁表 在虛擬頁式存儲管理中設置了快表(TLB),用於保存正在運行進程頁表的子集,通常快表存放在高速緩沖存儲器(Cache)中。而頁表存放在內存中,並通過特殊功能寄存器(TTB)等告知系統頁表存儲在內存中的基址。 1.2 一