本教程带你怎么使用调试、逆向.net的神器dnSpy,将给出一个简单的示例程序,并完整地介绍如何逆向,让你快速入门。
需要咱们先下载dnSpy.net软件,由于百家号不支持外连,可以去魔方资源网(MOFANGMALL.COM)下载,也可以直接百度搜索dnSpy,我的版本目录结构如下:
示例程序
编写一个winform的登录程序, LoginTest.exe,输入正确的账号密码之后,跳转到主界面,否则提示账号密码错误。
登录主界面 登录错误提示 登录成功后进入主界面 loginFrm源码:
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;namespace LoginTest{public partial class loginFrm : Form{public loginFrm(){InitializeComponent();}public static string UserName = "";public static string PassWord = "";private void login_btn_Click(object sender, EventArgs e){if (txtUserName.Text.Trim() == ""){MessageBox.Show("请输入账号后,再提交!");return;}if (txtPassWord.Text.Trim() == ""){MessageBox.Show("请输入密码后,再提交!");return;}UserName = txtUserName.Text.Trim();PassWord = txtPassWord.Text.Trim();if (UserName == "sword" && PassWord == "123456"){MainForm mainFrm = new MainForm();//创建一个新页面mainFrm.Show();//显示新页面this.Hide();//隐藏当前页面}else {MessageBox.Show("账号密码错误!");return;}}private void button1_Click(object sender, EventArgs e){txtUserName.Text = "";txtPassWord.Text = "";}}}
mainForm源码:
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;namespace LoginTest{public partial class MainForm : Form{private string UserName = "";private string password = "";public MainForm(){InitializeComponent();UserName = loginFrm.UserName;password = loginFrm.PassWord;lbl_Username.Text = "用户名:" + UserName;lbl_Password.Text = "密 码:" + password;}}}
当我们忘记了账号密码,或者这个程序我们本来就不知道密码,那该怎么办呢?
不怕,我们直接来改造它,运行LoginTest.exe。
启动 dnSpy,[文件]->[打开],找到 LoginTest.exe 打开,dnSpy 会自动反编译,可以直接打开反编译后的源码:
反编译LoginTest.exe 在源码上右键修改,改成如下代码(右键可以看到断点等其他调试功能,可以像VS等IDE一样调试)
修改源代码 重新编译后,[文件]->[全部保存] 保存成新的可执行文件(可以看到重新编译后注释的代码全部被优化掉了)
保存反编译后为ModifyLoginTest.exe 运行逆向修改后的程序 ModifyLoginTest.exe。
输入修改后的账号密码 主界面变为修改后的账号密码 是不是很简单?
如需本文源码及工具可以直接联系我。