我想知道是否有办法用OllyDebug破解C#Windows应用程序。我用Visual C#2010 Express编写了一个简单的CrackMe应用程序。当我用OllyDebug打开它并根据需要修改ASM代码时,没有"复制到可执行文件" OllyDebug中的选项,因为我的注册表单窗口是动态分配的" new"运算符(我相信,调试器中的VirtualAlloc()函数调用)。虽然我能够修改ASM代码(这只是NOP和JE跳转),但是我无法用破解的代码保存我的.exe文件,看起来像OllyDbg"看到"数据段中的代码在应用程序启动时不存在且仅动态分配。 任何人都可以帮我解决这个问题吗?我认为至少有两种方法可以修改* .exe:
1)使用OllyDbg深入挖掘代码并找到分配前实际代码所在的位置(因为RegistrationForm的新实例不会神奇地超出空间,是吗?)
2)如果它允许在VS Express中快速创建应用程序并且不需要太多复杂的代码,请使用静态调用,以便每次单击"注册"显示相同的RegistrationForm窗口(它将保存在应用程序的代码部分,因此可以在OllyDbg中修改)。
可以指出如何重写代码并保持简单分配RegistrationForm(singleton?)的相同实例。我唯一需要的是破解和保存* .exe,重新启动并填写任何数据以完成注册"。
以下是使用Main()方法的MyCrackMe类的代码:
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屏幕截图和消息
答案 0 :(得分:8)
更新:dnSpy可能最适合此目的。
.NET正在使用IL字节码,在运行应用程序时会将其编译为本机指令,因此它在.NET VM中运行,类似于java。你现在用olly做的就是自己调试框架,而不是你的JIT生成的本机代码。 (你想要的,如果我理解你的话)。据我所知,保存已修补的.NET应用程序并不适用于olly。但是,还有其他解决方案来操纵/观察MSIL代码。
PEBrowse也可以调试JIT生成的本机代码!
您可能也对这些论文感兴趣:
Stackexchange网络有一个专门用于reverse engineering的网站,请加入我们那里:)可能已经有answer的问题。
答案 1 :(得分:0)
我记得在这个软件中有补丁选项。 你需要激活补丁功能。 我希望现在能够奏效。 我正在做同样的事情