Πώς εγγυάται μια εφαρμογή .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 που είναι εγγεγραμμένο σε αυτό το μηχάνημα, Αντί να το χειρίζεται αυτός ο διάλογος.
|