Взломать приложение C # с OllyDebug
Я хотел бы знать, есть ли способ взломать приложение C # Windows с OllyDebug. У меня есть простое мое собственное приложение CrackMe, написанное на Visual C # 2010 Express. Когда я открываю его с помощью OllyDebug и изменяю код ASM по мере необходимости, в OllyDebug отсутствует опция «Копировать в исполняемый файл», поскольку мое окно регистрационной формы динамически выделяется оператором «new» (то есть, я полагаю, вызовом функции VirtualAlloc () в отладчике). Хотя я могу изменить код ASM (который просто выполняет NOP JE), я не могу сохранить файл .exe с взломанным кодом, похоже, что OllyDbg «видит» код в сегменте данных, который не существует, когда приложение запускается и только динамически распределяется. Может кто-нибудь помочь мне с проблемой? Я думаю, что изменение * .exe должно быть возможно по крайней мере с двумя подходами:
1) Погрузитесь глубже в код с помощью OllyDbg и найдите место, где хранится актуальный код перед выделением (потому что новый экземпляр RegistrationForm волшебным образом не выходит из пространства, не так ли?)
2) Если это позволяет быстро создавать приложения в VS Express и не требует слишком сложного кода, используйте статические вызовы, чтобы при каждом нажатии «Регистрация» отображалось одно и то же окно RegistrationForm (которое будет сохраняться в разделе кода приложения и, следовательно, будет изменяемым в OllyDbg).
Будет нормально указать, как переписать код и упростить выделение того же экземпляра RegistrationForm (singleton?). Единственное, что мне нужно, это взломать и сохранить * .exe, перезапустить и заполнить любые данные для «полной регистрации».
Вот код класса MyCrackMe с методом Main ():
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);
}
}
}
Класс главного окна:
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();
}
}
}
Форма регистрации класса:
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);
}
}
}
}
Вот скриншот OllyDbg и сообщение, которое появляется при установке точек останова