2010-10-08 37 views
2

我有兩個程序集。一個組件是指另一個組件。我檢查了第一個程序集的清單,發現它使用某個特定的令牌鍵引用第二個程序集。如何更改程序集的公共令牌

但我檢查了第二個程序集的標記,發現它具有不同的公共標記。所以不知何故,我錯過了正確的第二次大會。所以我想知道是否有方法可以將第二個程序集的公共令牌更改爲第一個程序集所需的公共令牌。

另外我還有另一個第二個程序集,它的公共標記= null。

回答

4

您在問:「如何僞造第二個程序集的簽名,以使第一個程序集認爲它是原創的」。除非你有一個密鑰對,用於簽署「正確的」程序集,否則你不能。所以最好的方法是要求組件的供應商提供一個正確的對。

+0

如果知道公共令牌那麼也是不可能的? – Nits 2010-10-08 09:14:29

+1

閱讀有關非對稱密碼學和簽名如何工作。您只能使用私鑰簽名。公鑰用於驗證(您不能使用公鑰簽名)。 – 2010-10-08 10:39:44

10

聽起來像你想重建第二個程序集並用不同的鍵簽名,如果你有源代碼,這很容易,所以我猜你不會這麼做?

我認爲重建第一個程序集會更容易,以便它使用第二個程序集中存在的公鑰標記來引用第二個程序集。更容易,但不是完全簡單。

我認爲你應該能夠通過運行第一個程序集到ildasm.exe,將引用上的公鑰標記更改爲第二個程序集,然後通過ilasm.exe運行結果來生成第一個新版本部件。

所涉及的步驟的粗線條...

  1. 運行ildasm.exe /out=first.il first.dll(或first.exe
  2. 編輯first.il並找到參考.assembly的extern塊second.dll
  3. 更改公共密鑰令牌
  4. 運行ilasm.exe first.il生成first.dll(或first.exe

被警告,我沒有使用這些工具很長一段時間,從未以這種方式處理公共密鑰令牌,所以你可能會添加一些自己的聰明才智。但另一方面,我想不出這種方法不起作用的原因。

+0

你能指導我怎麼做? – Nits 2010-10-08 10:09:25

+0

增加了更多細節。 – Martin 2010-10-08 16:12:00

0

從我個人的經驗來看,您可能需要更改您的應用.Net框架,以便與dll匹配。

相關問題