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