破解可读不可复制的 U 盘
特此聲明:本篇文章僅用于研究學習,請網友自覺,不能用于黑產。
有一種自我防護的 U 盤,只支持在 U 盤中打開查看,無法拷貝出來。對于一個熱愛自由的人來說,也許獲得里面的內容是件小事,但是打破這個規則,則是一件更有意思的事。
那么,先設定一個不以獲得內容為目的的目的:將 U 盤里面的文件拷貝出來。
通過觀察,發現幾個現象:
0.U 盤有登錄驗證機制。
1.輸入用戶名密碼在U盤自帶管理軟件中打開 U 盤后,文件視覺上可見,但復制,粘貼的系統快捷鍵無法使用了。
2.登錄驗證之前,無法在 cmd 中訪問 U 盤,文件加密狀態。
得到結論:U 盤里面的內容在登錄驗證通過之前是加密存放的,登錄成功后解密(估計是延遲解密的,因為 U 盤文件較大,如果在驗證成功后一次性將所有文件都解密,耗費時間必然較多而且并不一定會真正訪問所有文件)。打開U 盤后,U 盤管理程序向系統掛載了鍵盤鉤子,攔截了復制,粘貼鍵盤。進一步思考,必須要在登錄成功后,才有可能拿到解密后的文件。因此,我們必須打開 U 盤自帶的管理軟件登錄。
嘗試一
想一下在管理軟件中雙擊鼠標后,在 WPS 中可以正常地打開文件,說明,此時真正的文件流已經被發送給了 WPS,那么我們直接在 WPS 文件中復制出來不就可以了嗎?
然而卻發現 WPS 中,鼠標右鍵中的復制,或者復制組合鍵盤也被屏蔽了,“另存為”功能也被屏蔽了。猜測可能是 WPS 提供了接口對文檔進行保護(事實上,Office 也是這樣)。不想把問題轉化為與 WPS 的對抗賽,于是似乎只能再想辦法。
嘗試二
我們不能復制文件的原因是,復制快捷鍵被管理軟件攔截并內部消化了,沒有 post 到下一進程,解決思路是,將加入到系統中的鼠標鉤子移除掉,不攔截 ctrl+c 。這很簡單,只需要調用一個系統函數就可以了。
然而,這種方法沒有起作用,是沒有想周全。ctrl+c 原本是資源瀏覽器 (exeplorer.exe) 響應的鍵盤事件,也就是說,我們想在管理軟件中使用 ctrl+c 復制,這也得它響應了該事件才行啊!所以,我們把 ctrl+c 的鉤子移除掉,只是讓我們可以在資源瀏覽器中復制,并不能達到在U盤管理軟件中復制的目的。
嘗試三
如果文件流被傳遞給了 WPS ,那么,我們可以中途拿到文件流嗎?這可能需要去攔截進程,比較復雜。
受這個觀點的啟發,我們雖然不能攔截進程的數據,但是我們再造一個 WPS 替換掉 WPS 呢?這里說的再造一個,并非是真的寫出一個 WPS,我們只需要實現我們自己的功能:這個程序在拿到文件流后,立即寫文件,保存到我們系統中。
說到這兒,解決方法就很簡單了:寫一個程序,參數接受一個文件名,將這個文件 dump 到某個位置。之后,最關鍵的一步,將所有后綴為 .doc 的文件的默認打開方式設置為我們的這個程序。
確實,該方法起效果了,雙擊就可以復制想復制出來的文件!
這里其實還有研究,如何判斷,雙擊一個文件,傳給程序的是什么參數呢?是文件名,還是文件流?其實,僅略作思考就能得到答案:因為文件流(字節流)中可能會存在為 0 ?的字節,而程序接收輸入的,也就是 main 函數,其參數是 argv**, argc,沒有哪一個參數能說明字節流的長度,故,argv** 會被視作以 0 節尾的字符序列,而不是字節流。綜上,程序接收的參數只能是文件名了。
程序比較簡單,開源地址是:
https://github.com/juniorfans/copyOnClick
總結
以上是生活随笔為你收集整理的破解可读不可复制的 U 盘的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: struts2 2.3 升级2.5.22
- 下一篇: CommMonitor(串口监视精灵)