Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 22989|Απάντηση: 1

[Φόρμα Win] Το .net/c# χρησιμοποιεί ισχυρές υπογραφές για να προστατεύσει τα δικά του DLL από πλαστογράφηση

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 19/10/2017 5:31:40 μ.μ. | | | |
Πώς εγγυάται μια εφαρμογή .net/c# ότι το καλούμενο dll δεν θα αντικατασταθεί από πλαστογραφία;
https://www.itsvse.com/thread-4173-1-1.html
(Πηγή: Αρχιτέκτονας)

Την τελευταία φορά, δοκιμάσαμε ότι το dll μπορεί να σφυρηλατηθεί από άλλους και να εκτελεστεί, πώς να το αποτρέψουμε;



Εισαγωγή υπογραφής:
Μια υπογραφή συγκρότησης (γνωστή και ως υπογραφή ισχυρού ονόματος) δίνει σε μια εφαρμογή ή ένα στοιχείο μια μοναδική ταυτότητα που μπορεί να χρησιμοποιήσει άλλο λογισμικό για να αναγνωρίσει και να αναφέρει ρητά την εφαρμογή ή το στοιχείο. Ένα ισχυρό όνομα αποτελείται από το απλό όνομα κειμένου της συνέλευσης, τον αριθμό έκδοσης, τις τοπικές πληροφορίες (εάν παρέχονται) και ένα ζεύγος δημόσιου/ιδιωτικού κλειδιού.

Για παράδειγμα, η ισχυρή ονομασία επιτρέπει στους συντάκτες και τους διαχειριστές εφαρμογών να καθορίσουν την ακριβή έκδοση μιας υπηρεσίας που θα χρησιμοποιηθεί από κοινόχρηστα στοιχεία. Αυτό επιτρέπει σε διαφορετικές εφαρμογές να καθορίζουν διαφορετικές εκδόσεις χωρίς να επηρεάζουν άλλες. Μπορείτε επίσης να χρησιμοποιήσετε το ισχυρό όνομα του στοιχείου ως αποδεικτικό ασφαλείας για να δημιουργήσετε μια σχέση αξιοπιστίας μεταξύ των δύο στοιχείων.

Για να υπογράψετε έντονα μια συνέλευση, δεν χρειάζεται να υπογράψετε ένα ψηφιακό πιστοποιητικό με αγορασμένο κωδικό, μπορείτε να δημιουργήσετε ένα αρχείο SNK με το εργαλείο sn που παρέχεται από το .NET και μπορείτε να εγγυηθείτε την υπογραφή της συναρμολόγησής σας αποθηκεύοντας αυτό το αρχείο.

Ωστόσο, μια ισχυρή υπογραφή για μια συγκρότηση δεν είναι το ίδιο με μια ψηφιακή υπογραφή για ένα εκτελέσιμο αρχείο (ακόμα και αν η συγκρότηση είναι αρχείο exe). Και το MSDN λέει ξεκάθαρα ότι τα αρχεία exe δεν πρέπει να είναι έντονα υπογεγραμμένα (αν και το έκανα). Μια ψηφιακή υπογραφή για ένα αρχείο είναι στην πραγματικότητα η επισύναψη μιας υπογραφής σε οποιοδήποτε αρχείο σε επίπεδο συστήματος αρχείων, λέγοντας στο λειτουργικό σύστημα ποιος είναι ο εκδότης αυτού του αρχείου. Στο παράθυρο διαλόγου ιδιοτήτων του αρχείου, μπορείτε να δείτε την καρτέλα "Ψηφιακές υπογραφές".


Υπογράφουμε έντονα το dll και στη συνέχεια το καλούμε με ένα πρόγραμμα, το οποίο μπορεί να εκτελεστεί κανονικά, ως εξής:


Τι γίνεται αν, αντικαταστήσουμε το dll με ένα σφυρήλατο dll; Δοκιμάστε το και βρείτε ότι η εκτέλεση είναι σφάλμα, το οποίο μπορεί να αποτρέψει αποτελεσματικά την πλαστογράφηση του καλούντος dll (Το δοκίμασα, τροποποίησα τον υπογεγραμμένο κώδικα dll και μετά τον αναδημιούργησα και η εφαρμογή μπορεί επίσης να κληθεί κανονικά, αρκεί το πρόγραμμα να είναι σωστά υπογεγραμμένο!!

Το σφάλμα έχει ως εξής:

Για περισσότερες πληροφορίες σχετικά με τον εντοπισμό σφαλμάτων κλήσεων σε πραγματικό χρόνο (JIT) αντί για αυτό το παράθυρο διαλόγου,
Δείτε το τέλος αυτού του μηνύματος.

Ασυνήθιστο κείμενο **************
System.IO.FileLoadException: 未能加载文件或程序集“dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)
Όνομα αρχείου: "dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e"
   In TestDll.Form1.button1_Click_1 (Αποστολέας αντικειμένου, EventArgs e)
   In System.Windows.Forms.Control.OnClick(EventArgs e)
   In System.Windows.Forms.Button.OnClick(EventArgs e)
   In System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   Στο System.Windows.Forms.Control.WmMouseUp(Message& m, κουμπί MouseButton, Int32 κλικ)
   Στο System.Windows.Forms.Control.WndProc(Message& m)
   Στο System.Windows.Forms.ButtonBase.WndProc(Message& m)
   Στο System.Windows.Forms.Button.WndProc(Message& m)
   Στο System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   Στο System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   Στο System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Προειδοποίηση: Η καταγραφή βιβλιοδεσίας συναρμολόγησης είναι απενεργοποιημένη.
Για να ενεργοποιήσετε την καταγραφή αποτυχιών σύνδεσης συναρμολόγησης, ορίστε την τιμή μητρώου [HKLM\Software\Microsoft\Fusion!" Το EnableLog (DWORD) έχει οριστεί σε 1.
Σημείωση: Θα υπάρξουν ορισμένες ποινές απόδοσης που σχετίζονται με την καταγραφή αποτυχίας δέσμευσης συναρμολόγησης.
Για να απενεργοποιήσετε αυτήν τη δυνατότητα, καταργήστε την τιμή μητρώου [HKLM\Software\Microsoft\Fusion!] EnableLog]。



Φορτωμένα συγκροτήματα **************
Μσκορλίμπ
    Έκδοση συναρμολόγησης: 4.0.0.0
    Έκδοση Win32: 4.7.2098.0 Δημιουργήθηκε από: NET47REL1LAST
    Βασικός κώδικας: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
TestDll
    Έκδοση συναρμολόγησης: 1.0.0.0
    Έκδοση Win32: 1.0.0.0
    Βασικός κώδικας: file:///C:/Users/itsvse_pc/Desktop/dllForm/TestDll/bin/Debug/TestDll.exe
----------------------------------------
Σύστημα.Windows.Φόρμες
    Έκδοση συναρμολόγησης: 4.0.0.0
    Έκδοση Win32: 4.7.2094.0 Δημιουργήθηκε από: NET47REL1LAST
    Βασικός κώδικας: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
Σύστημα
    Έκδοση συναρμολόγησης: 4.0.0.0
    Έκδοση Win32: 4.7.2093.0 Δημιουργήθηκε από: NET47REL1LAST
    Βασικός κώδικας: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
Σύστημα.Σχέδιο
    Έκδοση συναρμολόγησης: 4.0.0.0
    Έκδοση Win32: 4.7.2046.0 Δημιουργήθηκε από: NET47REL1
    Βασικός κώδικας: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
Σύστημα.Διαμόρφωση
    Έκδοση συναρμολόγησης: 4.0.0.0
    Έκδοση Win32: 4.7.2046.0 Δημιουργήθηκε από: NET47REL1
    Βασικός κώδικας: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
Σύστημα.Πυρήνας
    Έκδοση συναρμολόγησης: 4.0.0.0
    Έκδοση Win32: 4.7.2098.0 Δημιουργήθηκε από: NET47REL1LAST
    Βασικός κώδικας: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
Σύστημα.Xml
    Έκδοση συναρμολόγησης: 4.0.0.0
    Έκδοση Win32: 4.7.2046.0 Δημιουργήθηκε από: NET47REL1
    Βασικός κώδικας: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.Windows.Forms.resources
    Έκδοση συναρμολόγησης: 4.0.0.0
    Έκδοση Win32: 4.7.2046.0 Δημιουργήθηκε από: NET47REL1
    Βασικός κώδικας: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------
mscorlib.πόροι
    Έκδοση συναρμολόγησης: 4.0.0.0
    Έκδοση Win32: 4.7.2046.0 Δημιουργήθηκε από: NET47REL1
    Βασικός κώδικας: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/mscorlib.resources.dll
----------------------------------------

Εντοπισμός σφαλμάτων JIT **************
Για να ενεργοποιήσετε τον εντοπισμό σφαλμάτων σε πραγματικό χρόνο (JIT),
Πρέπει να οριστεί στην ενότητα system.windows.forms του αρχείου .config (machine.config) της εφαρμογής ή του υπολογιστή
jitΤιμή εντοπισμού σφαλμάτων.
Πρέπει επίσης να είναι ενεργοποιημένη κατά τη μεταγλώττιση της εφαρμογής
Εντοπισμός σφαλμάτων.

Για παράδειγμα:

<configuration>
    <system.windows.forms jitDebugging="true" />
</configuration>

Τυχόν ανεπίλυτες εξαιρέσεις μετά την ενεργοποίηση του εντοπισμού σφαλμάτων JIT
θα σταλεί στο πρόγραμμα εντοπισμού σφαλμάτων JIT που είναι εγγεγραμμένο σε αυτό το μηχάνημα,
Αντί να το χειρίζεται αυτός ο διάλογος.







Προηγούμενος:Πώς εγγυάται μια εφαρμογή .net/c# ότι το καλούμενο dll δεν θα αντικατασταθεί από πλαστογραφία;
Επόμενος:fsadf{:1_2:}
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com