吾愛破解 - LCG - LSG |安卓破解|病毒分析|001aa.com

 找回密碼
 注冊[Register]

QQ登錄

只需一步,快速開始

搜索
查看: 1110|回復: 4

[Android 原創] Android hwp加密文件密碼解密初探

  [復制鏈接]
樓主
xinlin 發表于 2020-5-15 23:04 回帖獎勵
        近期有幸接識了一個國外的某辦公軟件app,文檔是hwp格式,類似于word,也能用密碼加密文檔,對其加密作了初步探索,分享重在解密心得過程,不在于取得推算密碼。
        初看之下發現是一個典型的C++代碼,應該是windows代碼移置到移動app中的,虛函數比較多,因此流程的查看比較麻煩,先是動態調試,有一定的反調試功能,但都比較弱,很容易解決,后面跟蹤發覺這個office文檔中元素種類很多,讀寫文件操作也都封裝在VTable中,跟蹤有點讓人眼花。通過斷點fopen找到了hwp文件打開的位置:
        0036C68C:openHwp()   

        可以看出,初始就構造了3個C++對象。

        繼續下去,跟蹤了一下其文件結構,大致結構是一個Head,然后后面有多個body,每個body的偏移計算都不一樣,有的偏移計算要好幾個偏移尋址才能得到真實的偏移,看來如果要完整理清其格式真是一個體力活。同時可以看出多數body都沒有使用加密,償試從此開始跟蹤查看加密數據塊,但2天后沒有結果,其偏移計算太多且各種的不一樣。幸好我目標不在文件結構,這種解決方式退出。
        第一條路比較麻煩,隨之開始主要轉靜態逆向看看,想看看路徑上的C++對象有多少,便開始一個一個的還原C++對象,又搞了2天C++對象的標注,在調用路徑上的對象越來越多,分支不可控,有點頭大了,這條路也退出。
        看看吧,類似的C++對象很多:

        第3種方案重打包注入一個能hook的so,再看hook能提供有價值的線索不,調試之中已經看到其密碼是使用的是window下的wchar(2個byte表示一個字符)形式,libc中的str之類hook就沒多少意義,hook看起來好象能提供的價值也不大,這也是我最初沒有重視使用hook的原因。經過反復hook測試,在使用正確密碼和錯誤密碼過程中考慮到hook log的不同,從這里入手也許可行,重點是看fread的log,這log里面最關鍵有一點,需要把當前文件讀位置也打印出來,這樣更好看,這是同一文件2次操作的log對比:


        很驚人的線索出來了,前面部分完全一樣,從hwp文件0x13c0開始是連續讀文件(其前面肯定是計算這個body的偏移,不用理會),可以猜想這塊10*0x40+0x10=0x290的數據應該是加密塊,fread在0x0037f137被調用,斷點在最后一塊數據讀完后,稍微跟蹤這個數據塊,就來到這里:

        002DCB5E:createZipData()
        文件偏移0x13C0開始0x290個數據即需要在此進行第一步解密,解密沒有成功或失敗的結論,是否成功依靠后面解壓來確定。

        然后再對解密數據作解壓,crc32校驗處理:
        0033CC10:inflateZipData()

        inflate是不是很熟悉,到此hwp中加密塊解密處理結束,解壓或校驗失敗會拋出異常。到此遺憾的是還沒有看到密碼的使用,再看具體的解密函數。
       
        createZipData(ZStream *obj, HncStream *key, int *buf, signed int buf_len)
        key是一個C++對象,其中已經沒有直接的密碼字符了,可以肯定密碼已經處理變換成一張表了,進入到里面的關鍵函數:
        0034B050:decryptDataBy8Byte()

        明顯while循環中有重要信息,再進去看看:
        0034ACA0 :decryptMy1_sub2()

        這是解密最里面的算法了,似乎在引用一張表,而且不是傳入的密碼表,經過調試發現它是一張隨密碼而更新的表,這個是一個全局變量保存的,用X查看引用關系找到一個未曾逆向過的函數,還在向里面寫:
        0034B100:encryptKey_sub6()

        只需要向上找一級調用, 調試一下調用參數,很明顯這就是我們要找的密碼表生成函數,其中生成了2張表,一張表放到C++對象中,一張放到全局變量保存,解密時這兩張表都要使用。
       
        0034B408:getEncryptKey(const wchar_t *pwd, int mode)

        同時也看到第2個參數在控制使用哪種加密方式,不過到此我收到的這個hwp文件解密過程就全部找到了,初步目的也達到了,寫了一個簡單的驗證app,對提取的相關代碼作了測試,初步證明代碼能生成正確的密碼表,并解密hwp文件加密塊,不過我也偷懶了一下沒有將相關inflate加入測試app中。hwp文件及相關測試代碼一并獻上,只是代碼沒有規范整理,期望看了的朋友別罵我,目的達到就不想多花時間了,以后有時間再分析文件結構,分析密碼看看是否可直接找回,暴力破密只能是最后選擇。
        最后,謝謝參觀,這個因為是業余搞的,不是很認真可能有誤,第一次在破解發貼,請指正!
        吐槽一下,怎么沒有預覽功能,都不知有沒有錯誤之筆!

HwpTest.zip (104.07 KB, 下載次數: 13)

免費評分

參與人數 6威望 +2 吾愛幣 +105 熱心值 +5 收起 理由
leonqp1030 + 1 用心討論,共獲提升!
縈默A + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
獨行風云 + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
gaosld + 1 + 1 熱心回復!
qtfreet00 + 2 + 100 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
dreamlivemeng + 1 + 1 鼓勵轉貼優秀軟件安全工具和文檔!

查看全部評分

發帖前要善用論壇搜索时时彩平台功能,那里可能會有你要找的答案或者已經有人發布過相同內容了,請勿重復發帖。

沙發
chenjingyes 發表于 2020-5-19 15:08
寫的很好,圖有點模糊
3#
xixicoco 發表于 2020-5-20 00:04
4#
Light紫星 發表于 2020-5-21 11:18
5#
乳酸菌 發表于 2020-5-21 16:09
頂上!論壇有你更精彩!
您需要登錄后才可以回帖 登錄 | 注冊[Register]

本版積分規則 警告:本版塊禁止灌水或回復與主題無關內容,違者重罰!

快速回復 收藏帖子 返回列表 搜索

RSS訂閱|小黑屋|聯系我們|吾愛破解 - LCG - LSG ( )

GMT+8, 2020-5-25 09:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回復 返回頂部 返回列表
时时彩平台官网-欢迎您 时时彩平台注册-爱问知识人 时时彩平台app-互动百科 时时彩平台投注-百科词条 超级快三-搜霸天下 时时彩平台邀请码-即可搜索 时时彩平台开户-新浪爱彩 彩神大发快三-一定牛 彩神大发快三官网-360云盘 彩神大发快三注册-百度耨米