本文概述

如果你认为WinForms .NET应用程序从一开始就是安全的并且无法读取源代码, 那么让我告诉你你错了。任何人都可以使用将可执行文件作为输入的反编译器, 并尝试创建高级源文件(应用程序的源代码)。建议在发布应用程序之前, 使用一些反编译工具对生成的可执行文件进行反编译, 以检查代码上的安全漏洞。除了检查可能的安全漏洞外, 如果你继承了没有文档或注释的应用程序, 那么查看带有反编译器的编译代码的行为可能非常有用。

如果你出于任何原因愿意反编译.NET程序集, 我们建议你使用ILSpy项目。 ILSpy是反编译器, 与Jadx(APK反编译器)的工作方式相同, 但是它不反编译Java, 而是反编译C#。 ILSpy是开源.NET程序集浏览器和反编译器。该反编译器最知名的功能是:

装配浏览

IL拆卸

支持C#5.0″异步”

反编译为C#

支持lambda和”收益率回报”

显示XML文档

反编译成VB

节省资源

将反编译的程序集另存为.csproj

搜索类型/方法/属性(子字符串)

基于超链接的类型/方法/属性导航

基本/派生类型导航

导航历史

BAML到XAML反编译器

将程序集另存为C#项目

查找字段/方法的用法

可通过插件(MEF)扩展

装配清单

在本文中, 你将了解在计算机上下载ILSpy以及反编译Visual Studio生成的可执行文件以最终查看其源代码的难易程度。

1.下载ILSpy二进制文件

没有官方的安装程序, ILSpy是便携式的。 ILSpy的二进制文件可以通过Github的”发行版”区域中的项目发行版获得, 也可以通过单击官方网站上的”下载二进制文件”来获得。压缩包包含截止日期的11个文件(1个可执行文件, 9个动态链接库和一个配置文件):

下载后, 你可以通过可执行文件使用ILSpy, 它不是命令行工具, 因为它包含GUI。

2.从WinForms应用程序反编译可执行文件

不要混为一谈, 我们将使用C#中的Visual Studio来反编译我们自己制作的应用程序之一。在我们的示例项目中, 我们将以最不安全的方式为唯一用户公开一个简单的登录表单:

凭证模型存储在源代码中的变量中, 这显然是安全缺陷。通过if语句, 我们将检查用户单击登录按钮时用户是否知道凭据。我们的应用程序的源代码如下:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

namespace Sandbox

{

public partial class Form1 : Form

{

public string globalUsername = "Batman";

public string globalPassword = "batmobil";

public Form1()

{

InitializeComponent();

}

private void Form1_Load(object sender, EventArgs e)

{

}

private void button1_Click(object sender, EventArgs e)

{

string username = textBox1.Text;

string password = textBox2.Text;

if(username == globalUsername && password == globalPassword)

{

MessageBox.Show("Login granted, awesome !");

}

else

{

MessageBox.Show("Login denied, check your credentials !");

}

}

}

}

现在, 我们将编译(构建解决方案)我们的项目, 以便在项目的bin / Debug文件夹中生成其二进制文件:

构建解决方案项目将更新调试二进制文件, 你可以在bin / Debug文件夹中找到应用程序的可执行文件, 例如C:\ Users \ me \ Documents \ visual studio 2017 \ Projects \ \ bin \ Debug。打开ILSpy, 在菜单栏中单击”文件”, 然后选择”打开”。文件浏览器将启动, 并允许你选择一个程序集, 在此示例中, 该程序集位于我们项目的Debug文件夹中:

选择可执行文件后, ILSpy将开始反编译过程, 并将所选文件作为项目添加到树形视图中。在那里, 你将能够探索文件和源代码的结构和资源。在我们的示例中, 我们有一个单一的表单, 即Form1, 可以通过ILSpy轻松查看:

你看对吗? ILSpy能够获取我们初始应用程序的源代码, 并且我们可以看到WinForms项目的”很棒的登录”算法。反编译显然也适用于非调试版本。

反编译愉快!

ILSpy可以反编译c语言,如何使用ILSpy反编译.NET Framework程序集(读取其源代码)相关推荐

  1. ios上编译c语言的app,iOS App编译流程

    三大编译器详解GCC / Clang / LLVM 传统的编译器通常分为三个部分,前端(frontEnd),优化器(Optimizer)和后端(backEnd).在编译过程中,前端主要负责词法和语法分 ...

  2. 红帽子怎么vi编译c语言,在RedHat5.3上编译和配置Vim

    今天忽然发现我的虚拟机红帽子5.3上居然没有Vim,晕~~ 唉,要用的时候一点都不方便,没办法,重新下个源代码来编译一个吧~~ 下载的地址很容易找到啦,最新的是7.3: ftp://ftp.vim.o ...

  3. 编译性语言和解释性语言的区别

    编译性语言和解释性语言的区别 1.编译性语言 (1)只须编译一次就可以把源代码编译成机器语言,后面的执行无须重新编译,直接使用之前的编译结果就可以:因此其执行的效率比较高: (2)编译性语言代表:C. ...

  4. ILSpy可以反编译c语言,ILSpy反编译工具的使用

    本文导读:ILSpy反编译工具的使用.不过,ILspy需要在电脑上安装.NET Framework 4.0.ILspy可以将一个dll文件转换为C#或VB语言.ILspy对于单个文件可以保存为.cs文 ...

  5. android 反编译替换资源文件,[求助]想替换微信5.0的一个语言包,但是反编译资源文件出现错误。...

    想为微信5.0中替换进去一个少数民族语言包,但是反编译时出现大量以下类似的错误,而且无法正确回编译,试过了基本所有apktool的版本都无法解决,无奈只能求助各位前辈,请告知解决此问题的方法或思路.谢 ...

  6. 什么是pyc文件,把python的py文件编译成pyc文件,把pyc文件反编译成py文件。以及python编译的如何设置不生成pyc文件

    文章目录 1 什么是pyc文件 1.1 什么是pyc文件 1.2 pyc文件是怎么生成的,有什么好处 2 把python的py文件编译成pyc文件 2.1 使用python内置库py_compile把 ...

  7. Python语言是解释性语言还是编译性语言?

    1.Python语言是解释性语言还是编译性语言? Python语言是先编译再解释的语言.Python 在解释源程序时分为两步: 1:将源码转为字节码 2:将字节码转换为机器码 pyc 文件是由 Pyt ...

  8. vs配置编译c语言,为 VSCode 配置 C 语言编译环境

    1. 前提条件 安装 VSCode 以及 MinGW 安装好 VSCode 中的 C/C++ 扩展 [图片上传失败...(image-e93c7c-1606314000230)] PS: 我建议使用 ...

  9. ubuntu java反编译,[原创]Ubuntu下简单配置反编译工具以及其开发环境

    0x0:前言 个人电脑重新换了下系统,Ubuntu14.04,刚好需要配置下android的反编译环境,这里简单记录一下,以供有需要的朋友参考. 其实最简单的,只需要apktool就可以了,不过有编码 ...

  10. 解释性的语言vs编译性语言

    计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序. 翻译的方式有两种,一个是编译,一个是解释.两种方式只是翻译的时间不同.编译型语 ...

最新文章

  1. Java 事件适配器 Adapter
  2. python框架flask系列(2),Python的Web框架之Flask(2)
  3. Java工具类--雪花算法生成全局唯一ID
  4. qq数据泄露_真良心,腾讯这个app竟然能查账号泄露
  5. centos7 DNS服务器搭建
  6. ipv6正则表达式 java,用正则表达式解析IPv4跟IPv6地址字符串
  7. java中找不到javax包_logstash 找不到 java 环境
  8. 句柄泄漏与应用程序体验查找服务(AELookupSvc)
  9. ASP.NET中的TextBox下划线
  10. springboot前台页面写Java代码,接收后台数据,SpringBoot整合Thymeleaf的使用,实现非ajax请求后台的数据实现和遍历效果,以及数据的页面展示
  11. 开源纯C#工控网关+组态软件
  12. ERP的模块流程/组织架构和其他基础知识
  13. 高颜值:Redis官方可视化工具,功能强大!
  14. python-matplotlib绘图 -应用subplots_adjust()方法解决图表与画布的间距问题
  15. html 网页公式编辑软件,LaTeX 公式编辑器网页版
  16. 元搜索推荐:比比猫!(马丁编辑)
  17. 2022年全球市场柠檬酸酯总体规模、主要生产商、主要地区、产品和应用细分研究报告
  18. autojs教程:贝壳赚app脚本代码
  19. 领域泛化(Domain Generalization)
  20. R329开发板根目录 ls 命令文件和文件名乱码其他目录不乱码问题解决

热门文章

  1. FeiQ(飞秋)更新用户列表的原理
  2. 车联网相关知识点整理
  3. 安卓期末大作业(AndroidStudio开发),日记本app,代码注释详细,能正常运行
  4. Pycharm 主题设置和修改
  5. ios android 宏,iOS常用宏定义
  6. 论文降重,你都用了什么奇特的方法?
  7. 股票历史数据下载梳理汇总(一)
  8. python 颜色调整(饼状图)
  9. Android原生开发学习笔记(java)
  10. csgo手机上看demo_《CSGO》观看游戏DEMO方法 怎么观看游戏DEMO