簡體   English   中英

簽名以保護JAR免受逆向工程

[英]Signing for protecting the JAR from reverse-engineering

我正在考慮如何保護JAR免受逆向工程。

(問題1):

如果JAR是通過簽名簽名的,那么簽名是否可以保護JAR? 如果不是,那么簽名的目的是什么?

(問題2):

可以通過平台簽名對Android APK進行簽名,並且無法從APK本身提取平台簽名。

從這個角度來看,我認為簽名可以用來保護某些東西。 但是,為什么即使它受平台簽名保護,我們也可以反編譯它呢?

考慮一下自己用筆寫的簽名。 簽署一張紙會使紙上的內容以某種方式無法閱讀嗎?

否:它只是給閱讀本文的人一個表明它是由您撰寫的指示(或您同意其內容,或其他)。

簽名罐子也是如此:所做的所有工作都會向人們表明您(或您有權使用簽名的人)產生了該罐子,以便其他人無法更改罐子內容並將其顯示為“真實” 。

簽名不會幫助您停止逆向工程。

如果JAR是通過簽名簽名的,那么簽名是否可以保護JAR? 如果不是,那么簽名的目的是什么?

如果您簽訂合同,是否可以防止任何相關方違反合同? 不,不是。 簽名只是(理論上)可以合法識別您身份的東西。

這就是簽署軟件的全部要點:告訴軟件用戶:“這是我的交付,您可以信任它,因為已經簽署了它(其他人都不能更改它)”。

簽名並不能保護您的內容不受逆向工程的影響。 它們僅對您的內容用戶有用,因為可以“確定”他們確實在使用您的內容,而不是第三方偽造的東西,僅聲稱是您的交付內容。

唯一的保護措施是查看對JAR文件內容的混淆 有用於該目的的工具(尤其是在Android上)。 但是,對Java的混淆並不完全完美。 例如參見這里

如果JAR是通過簽名簽名的,那么簽名是否可以保護JAR? 如果不是,那么簽名的目的是什么?

正如其他人指出的那樣,它可以防止其他人以您的名字/品牌分發自己的代碼副本。 例如,假設您編寫了一個計算器並在github上發布了一個已簽名的字節碼,那么我將無法編寫自己的字節碼並聲明(除非被發現它是一個錯誤的字節碼,除非我找到了對其進行簽名的密鑰,該密鑰本身非常非常...非常不可能),它是您的計算器的副本。

但是,為什么即使它受平台簽名保護,我們也可以反編譯它呢?

因為,這不會阻止我們進行反編譯。 我們可以從這樣的APK中獲取源代碼,但是,我們不能喜歡將自己的任意代碼放在自己的位置,而讓其他人相信它與您的相同。

簡而言之,簽名是代碼來源和真實性的證明,僅此而已。

編輯:

為什么我們不能從APK中提取原始簽名? 為什么不可能呢?

因為簽名是哈希,所以使用加密哈希函數和只有您持有的密鑰(稱為私鑰)和公用密鑰(可以免費獲得)生成。 由於該私鑰與您同在,並假設您使用了強大的加密哈希函數,因此試圖模擬該私鑰的人通過直接嘗試所有可能的散列來找到該私鑰將花費大量時間,通常這是唯一的除非您有一個聰明的解決方法來找到密鑰,否則可能的方法。 公鑰是公開可用的,用於驗證簽名的真實性。

我們可以使用這種機制來保護我們的JAR嗎?

取決於您要保護的內容。 如果是其他人的模仿,則可以,只要他們不以某種方式偶然發現鑰匙,就可以。 顯而易見,逆向工程是不利的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM