我将教你如何破解.NET应用程序(只需点击3次)
⚠️免责声明: 本文仅供教育和培训之用,我们不对本文提及的技术和解释以及/或提及/提供的工具的误用承担责任,也不对基于本文信息所采取的任何行动承担责任。请将此信息用于合乎道德的目的。
我写这篇文章的原因很简单,在我们办公室(一个联合办公空间)里有很多公司使用 .NET 进行开发,有一天午餐时,我跟他们讲了我们正在做的事情,结果他们完全听不懂,原来他们根本不知道什么是反编译。
他们并不知道,借助一个简单的工具,就可以查看、复制或修改其开发过程——虽然并非所有情况下都应该担心——但对于某些人来说,业务的核心就是开发本身,显然这并没有给他们带来多少好处。
我必须说,这种情况在所有编译型语言中都会发生,但我将重点关注我们精通的 .NET。
在本文中,我将介绍反编译和逆向工程的基本概念,如果您对更复杂的内容感兴趣,请随时向我们咨询!
什么是反编译?
反编译是编译的逆过程(我要为这个绝妙的解释申请专利)。
也就是说,编译过程基本上是:
- 你编写代码
- 你按下神奇的编译按钮,它就变成了一个可执行文件/.exe/dll……(好吧,它应该……你肯定漏掉了一个分号之类的东西😪)你还会看到103个警告⚠,但如果你不睁开眼睛,你就看不到它们🤭。
流程大致如下:
反编译则恰恰相反,你有一个可执行文件,.dll,.exe……,然后使用工具(反编译器)你可以得到原始源代码。
这很简单吗🙄?
我觉得比编译容易,但我们来看看具体是怎么做的。
反编译 .NET / .NET Core 应用程序
让我们反编译一个简单的应用程序:
在这个例子中,我们将使用DnSpy。有很多类似的工具,每个工具都有其特定的优势,但 DnSpy 是反编译和调试 .NET 应用程序的最佳工具之一。
当我们编译 .NET Core 应用程序时,我们将获得编译后的文件,在 .NET Core 中,“.exe”文件是可执行文件,但它负责执行包含我们应用程序代码的“.dll”文件。
好的,接下来我们来反编译这个.dll文件:
为此,我们只需将其拖到 DnSpy 即可:
加载完成后,将显示原始源代码,我们可以对其进行处理、分析、修改、调试等。
查看源代码
应用程序反编译完成后,我们就可以像浏览自己的项目一样浏览源代码:
调试应用程序
这将有助于理解其工作原理或获取内存中的一些值。
例如,让我们在执行减法运算之前设置一个断点:
然后我们将运行该应用程序:
以下是一个简单的例子:
这项功能有时非常有用,但也可能很危险⚡。
修改代码
我们可以毫无问题地修改并重新编译该应用程序:
我们也可以使用 IL 代码来实现,但如果我们不了解 IL 代码,那将会复杂得多。
我们修改了这段简单的文字:
我们再次编译:
现在,为了保存我们修改后的应用程序,我们将执行以下操作:
我们将选择文件名、文件路径,并勾选以下选项:
我们将提交修改后的申请:
好的,这些只是简单且不重要的例子,至于用这些简单的工具能做什么,就留给你们自己去想象吧💭。
现在我们将看到其他类型的应用程序,因为.NET 中的编译方式相同,无论你使用 c#、vb、ASP、Xamarin、Blazor,一切都以相同的方式工作,那么让我们以 Blazor 应用程序为例来看一下。
使用 Blazor 反编译 Web 应用程序
现在我们已经使用 Blazor 创建了一个示例 Web 应用程序,以下是 Visual Studio 中的应用程序代码:
它基本上是一个显示天气的应用程序,我们Dotnetsafer在中间添加了内容,以便稍后可以在反编译后的应用程序中看到它,以下是该 Web 应用程序:
好的,我们再来获取代码。
首先我们将使用浏览器(哪个浏览器都无所谓),因为在加载 .NET 库来显示应用程序时,它会调用一个方法来获取这些库。
我们必须进入检查模式Ctrl + Shift + C并进入Network该部分,稍后使用Ctrl + F5.
这里是包含我们Web应用程序代码的文件:
您还可以获取应用程序使用的所有依赖项或您自己的 .net 文件。
我们下载后,用DnSpy再次打开它:
一旦我们有了反编译后的文件,我们就可以执行我在上一点中提到的所有操作。
使用 Xamarin 反编译移动应用
我们稍微提高了难度级别🧨,但操作方式仍然相同。
我们使用 Xamarin 创建了一个简单的移动设备应用程序,编译后的应用程序将具有 .APK 扩展名。
首先,我们要做的就是解压缩 APK 文件。虽然有一些工具可以做到这一点,但并非必要。对于如此简单的操作,我们可以使用WinRAR(没错,就是那个永不过期的免费软件🆓):
我们将复制文件夹中的所有文件:
文件夹内Assemblies包含所有.NET文件:
有趣的是,这些文件使用了lz4压缩,如果我们尝试用DnSpy反编译它们,就会出错:
为此,我提供了一个简单的解决方案,一个小型 Python 脚本,它可以帮助我们将所有 .NET .dll 文件解压缩。
是的,这听起来非常复杂,看来你必须是这方面的专家才行:
但这其实是一件非常简单的事情,我们不到一分钟就能完成。
解压缩 Xamarin .NET 库
如果你的电脑上没有安装 Python,请先安装它。
安装好 Python 之后(我是在VSCode终端运行的),我们继续:
安装 lz4:
python -m pip install lz4或者简单地pip install lz4
使用解压缩脚本
import lz4.block
import sys
import struct
import os
def print_usage_and_exit():
sys.exit("usage: py .\\decompressor.py target_path")
cwd = os.path.abspath(os.getcwd())
def decompress(filePath):
input_filepath = filePath
output_path = os.path.join("extracted", "");
if(not os.path.exists(output_path)):
os.mkdir(output_path)
output_filepath = os.path.join(output_path, os.path.basename(filePath))
header_expected_magic = b'XALZ'
with open(input_filepath, "rb") as xalz_file:
data = xalz_file.read()
if data[:4] != header_expected_magic:
sys.exit("The input file does not contain the expected magic bytes, aborting ...")
header_index = data[4:8]
header_uncompressed_length = struct.unpack('<I', data[8:12])[0]
payload = data[12:]
print("header index: %s" % header_index)
print("compressed payload size: %s bytes" % len(payload))
print("uncompressed length according to header: %s bytes" % header_uncompressed_length)
decompressed = lz4.block.decompress(payload, uncompressed_size=header_uncompressed_length)
with open(output_filepath, "wb") as output_file:
output_file.write(decompressed)
output_file.close()
print("result written to file")
if __name__ == "__main__":
n = 0
for file in os.listdir(cwd):
try:
if(file.endswith(".dll")):
decompress(file)
n += 1;
except:
print("failed to decompress " + os.path.basename(file))
print("\\nDecompressed ", n, " assemblies!")
该脚本的作者是 Christian Reitter,X41 D-Sec GmbH,感谢您在X41 D-Sec GmbH上发表的文章,我们对其进行了修改,使其能够解压缩目录中的所有文件。
我们将把代码复制到一个名为 的文件中decompress.py,并将其保存在与 .dll 文件相同的路径中。
解压缩所需文件:
我们将使用py .\decompressor.py .\它来解压缩目录中的所有 .dll 文件。
在这种情况下,我只对与我的应用程序对应的两个文件感兴趣。
有什么事不难呢?
现在我们已经准备好使用 DnSpy 打开这些文件了:
现在我们可以再次执行我之前提到的所有操作,步骤始终相同,只是文件的编译方式有所不同。
这适用于所有基于 .NET 的应用程序,例如使用 C# 在 Unity 中开发的游戏、虚拟现实应用程序和增强现实应用程序。
你喜欢这篇文章吗?
虽然很简单,但我认为作为入门级课程来说已经足够了,可以学到一些相关知识😊。
如果您觉得有趣,请毫不犹豫地支持我们,并在下方留言👇告诉我们您是否还想了解其他内容,例如破解、注入和其他方面。
我们可以进行一些有趣的练习,或者做任何你想在这里看到的事情。
感谢您阅读本文❤,请记住,ByteHide 将会上传有关 .NET 安全性的文章🛡。
谢谢大家的关注,希望你们学到了很多!
文章来源:https://dev.to/bytehide/i-show-you-how-to-crack-a-net-application-3-clicks-47ke




























