C # -Anwendung mit OllyDebug knacken

Ich würde gerne wissen, ob es eine Möglichkeit gibt, eine C # Windows-Anwendung mit OllyDebug zu knacken. Ich habe einfach meine eigene CrackMe-Anwendung mit Visual C # 2010 Express geschrieben. Wenn ich es mit OllyDebug öffne und den ASM-Code nach Bedarf ändere, gibt es in OllyDebug keine Option "In ausführbare Datei kopieren", da meinem Registrierungsformularfenster dynamisch der Operator "new" zugewiesen wird (was meines Erachtens der Funktionsaufruf "VirtualAlloc ()" ist im Debugger). Obwohl ich in der Lage bin, ASM-Code zu ändern (was einfach KEINE JE-Sprünge sind), kann ich meine .exe-Datei nicht mit geknacktem Code speichern. OllyDbg "sieht" den Code in einem Datensegment, das nicht existiert, wenn das Die Anwendung wird gestartet und nur dynamisch zugewiesen. Kann mir jemand bei dem Problem helfen? Ich denke, dass das Ändern von * .exe mit mindestens 2 Ansätzen möglich sein sollte:

1) Gehen Sie mit OllyDbg tiefer in den Code ein und finden Sie den Ort, an dem sich der tatsächliche Code vor der Zuweisung befindet (weil die neue Instanz von RegistrationForm nicht auf magische Weise aus dem Raum kommt, oder?)

2) Wenn es die schnelle Erstellung von Anwendungen in VS Express ermöglicht und nicht zu viel komplizierten Code erfordert, verwenden Sie statische Aufrufe, sodass jedes Mal, wenn Sie auf "Registrieren" klicken, dasselbe RegistrationForm-Fenster angezeigt wird (das sich im Codeabschnitt der Anwendung befindet und daher wird in OllyDbg änderbar sein).

Es ist in Ordnung, darauf hinzuweisen, wie Code umgeschrieben werden kann, und es einfach zu halten, dieselbe Instanz von RegistrationForm (Singleton?) Zuzuweisen. Ich muss nur die * .exe-Datei knacken und speichern, neu starten und alle Daten eingeben, um die Registrierung abzuschließen.

Hier ist der Code der MyCrackMe-Klasse mit der Main () -Methode:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MyCrackMe {
    class MyCrackMe {
        public static void Main() {
            MyForm mainWindow = new MyForm();
            System.Windows.Forms.Application.Run(mainWindow);
        }
    }
}

Hauptfenster Klasse:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace MyCrackMe {
    public partial class MyForm : Form {
        public MyForm() {
            InitializeComponent();
        }

        private void exitToolStripMenuItem_Click(object sender, EventArgs e) {
            Application.Exit();
        }

        private void aboutToolStripMenuItem_Click(object sender, EventArgs e) {
            MessageBox.Show("All rights reserved", "Message");
        }

        private void registerToolStripMenuItem_Click(object sender, EventArgs e) {
            RegistrationForm registrationForm = new RegistrationForm();
            registrationForm.Show();
        }
    }
}

Anmeldeformular Klasse:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace MyCrackMe {
    public partial class RegistrationForm : Form {
        // Use DllImport to import the Win32 MessageBox function.

        [DllImport("user32.dll", EntryPoint = "MessageBoxA", CharSet = CharSet.Ansi)]
        public static extern int MsgBox(int hWnd, String text, String caption, uint type);

        public RegistrationForm() {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e) {
            if (textBox1.Text == "lincoln" && textBox2.Text == "12345") {
                MsgBox(0, "Registration completed successfully!", "Registration Message", 0);
            } else {
                MsgBox(0, "Registration failed", "Message", 0);
            }
        }
    }
}

Hier ist ein OllyDbg-Screenshot und eine Meldung, die beim Festlegen von Haltepunkten angezeigt werden

Antworten auf die Frage(2)

Ihre Antwort auf die Frage