DLL或exe破解步骤

原文转载于:点击打开链接

如果装了vs的话,可以在开始菜单中直接打开 Visual Studio 2008 命令提示

 \

Ildasm.exe:将dll  、 exe编译为IL文件  (在命令行中输入Ildasm即可运行程序)

ilasm.exe:将IL文件编译回dll或exe  (这个需要在命令行输入命令,没有可视化界面)

UltraEdit/NotePad++  : 文本处理工具

Reflector.exe/ILSpy  : 反编译工具 (百度一下,最好找破解版的)

 

二  步骤

1、采用 Reflector.exe/ILSpy  打开需要破解的Dll ;分析并找到 需要调整的程序段

2、采用Ildasm.exe 将 dll 编译为 IL文件

3、采用UltraEdit/NotePad++   打开IL文件 (找到对应的IL 代码,并将其修改)

4、删除强名publickey 块

5、采用ilasm.exe 将IL 文件编译回为 dll  (如: ilasm /dll /resource=f:\mytest.res  f:\mytest.il )


附(一):ildasm和ilasm命令的使用

修改.net程序集

使用ildasm命令将程序集转换为il
ildasm [DLLPATH] /output=[OUTPUTPATH]

在Reflector中把需要修改的方法拷贝到使用VS新建的一个项目的类中,通过添加引用,使这个方法能正常编译成功,然后就可以根据需要修改代码,然后编译该新建的项目,也使用ildasm命令将其发编译,然后在记事本中打开该发编译il文件,查找到该方法,然后拷贝该方法替换源程序集反编译il文件,最后使用ilasm命令将il文件编译为dll,使用reflector打开新编译的dll,看看修改结果。

举例:
原始dll App_Code.dll中GBO类中方法AddTopNewsToAllData有逻辑错误,需要修改
[操作之前先备份一下该程序集]
使用ildasm命令反编译ildasm d:\\App_Code.dll /output=d:\\App_Code\\App_Code.il
然后在App_Code目录下会产生
App_Code.ilApp_Code.res这两个文件

打开VS,新建一个类库项目
在Class1类中将该方法源码从Reflector中拷贝过来,通过添加相应的引用,使该方法能正常编译。根据需要修改该方法的逻辑,然后将编译后的该项目dll ClassLibrary1.dll 使用ildasm命令反编译
ildasm d:\\ClassLibrary1.dll /output=d:\\ClassLibrary1\\ClassLibrary1.il
使用记事本打开ClassLibrary1.il找到方法的定义地方
.method public hidebysig static class [mscorlib]System.Collections.Generic.List`1<class [BuildNet.Core]BuildNet.Core.Model.News> 
          AddTopNewsToAllData(int32 ID,
                              class [mscorlib]System.Collections.Generic.List`1<class [BuildNet.Core]BuildNet.Core.Model.News> nslst,
                              int32 flag) cil managed
  {
……
} // end of method RW::AddTopNewsToAllData

拷贝覆盖App_Code.il中该方法的定义,保存修改,然后使用ilasm重新编译为新的dll
ilasm d:\\App_Code\App_Code.il /dll /output=d:\\App_Code\App_Code.dll

最后使用Reflector查看d:\\App_Code\App_Code.dll就可以看到是否修改成功

附(二):IL文件修改入门篇

IL文件修改入门篇

================================== 
Object: 
   掌握简单的IL文件处理知识 
   能够熟练运用ildasm,ilasm工具 
================================== 
1.编写简单的hello.cs

2.编译源代码
csc hello.cs

3.反编译hello.exe,命令如下: 
ildasm hello.exe /out=hello.il

4.打开hello.il文件,找到下面语句 
IL_0000:  ldstr      "Hello World!" 
修改为 
IL_0000:  ldstr      "Hello World! A Cracked Version." 
保存文件。

5.编译il文件 
ilasm /res:hello.res hello.il /out:hellocracked.exe 
--------------------------------------------------------

Microsoft (R) .NET Framework IL Assembler.  Version 1.1.4322.573 
Copyright (C) Microsoft Corporation 1998-2002. All rights reserved. 
Assembling 'hello.il' , no listing file, to EXE --> 'hellocracked.exe' 
Source file is ANSI

Assembled method HelloWorld::Main 
Assembled method HelloWorld::.ctor 
Creating PE file

Emitting members: 
Global 
Class 1 Methods: 2; 
Writing PE file 
Operation completed successfully

----------------------------------------------------------- 
成功编译。

5.运行hellocracked.exe,结果如下: 
Hello World! A Cracked Version.


OK。

 

IL文件修改提高篇 
================================== 
Object: 
   熟悉强名字签名之后的代码处理 
================================== 
1.修改hello.cs文件,加入强名字属性代码 
[assembly:AssemblyKeyFileAttribute("key.snk")] 
[assembly:AssemblyDelaySignAttribute(false)]

2.生成强名字对,这就是一个典型的RSA应用 
sn -k key.snk

3.编译hello.cs文件 
csc hello.cs

4.反编译hello.exe,命令如下: 
ildasm hello.exe /out=hello.il

5.打开hello.il文件,找到下面语句 
IL_0000:  ldstr      "Hello World!" 
修改为 
IL_0000:  ldstr      "Hello World! A Cracked Version." 
保存文件。

5.编译il文件 
ilasm /res:hello.res hello.il /out:hellocracked.exe 
--------------------------------------------------------

Microsoft (R) .NET Framework IL Assembler.  Version 1.1.4322.573 
Copyright (C) Microsoft Corporation 1998-2002. All rights reserved. 
Assembling 'hello.il' , no listing file, to EXE --> 'hellocracked.exe' 
Source file is ANSI

Assembled method HelloWorld::Main 
Assembled method HelloWorld::.ctor 
Creating PE file

Emitting members: 
Global 
Class 1 Methods: 2; 
Writing PE file 
Operation completed successfully

----------------------------------------------------------- 
成功编译。

5.运行hellocracked.exe,结果如下:

Unhandled Exception: System.IO.FileLoadException: Strong name validation failed 
for assembly 'hellocracked.exe'. 
File name: "hellocracked.exe"

出现错误,原因是因为签名的代码被修改了,这是在破解时通常会遇到的,下面来介绍如何纠正该错误。

[方法A] 
6.1.1、重新生成exe文件 
ilasm /res:hello.res hello.il /out:hellocracked_resign.exe

6.1.2、因为我们有RSA keypair,所以可以重新签名程序,但是在破解时,是不知道签名的RSA keypair的,而且根据RSA算法,破解的可能性几乎不可能的。 
sn -R hellocracked_resign.exe key.snk 
----------------------------------------------------------- 
Microsoft (R) .NET Framework 强名称实用工具版本 1.1.4322.573 
Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.

成功地对程序集“hellocracked_resign.exe”进行了重新签名 
----------------------------------------------------------- 
6.1.3、重新运行hellocracked_resign.exe,OK 
Hello World! A Cracked Version.

[方法B] 
6.2.1、删除IL文件中的如下内容,保存文件 
.publickey = (00 24 00 00 04 80 00 00 94 00 00 00 06 02 00 00   // .$.............. 
                00 24 00 00 52 53 41 31 00 04 00 00 01 00 01 00   // .$..RSA1........ 
                3B B2 D0 F9 DA 7E 55 B2 50 40 6B CF EB 20 F6 67   // ;....~U.P@k.. .g 
                E7 D6 AF 65 32 4F 6D 21 5D 91 53 0B 04 C7 E2 15   // ...e2Om!].S..... 
                F0 6A EE 38 F8 74 DB 22 34 F9 A1 B5 16 C1 04 66   // .j.8.t."4......f 
                B7 0B A8 36 49 9E 8A 71 E1 D1 26 AB A2 78 4E 3A   // ...6I..q..&..xN: 
                8B 71 8C 7F 4D 54 22 28 5F 1F 8D DE 6C 96 EC 22   // .q..MT"(_...l.." 
                34 8A 35 3F 95 0A F4 F4 7F B7 8C F5 5D F4 CB 54   // 4.5?........]..T 
                92 94 DD 5E D5 0D 20 12 7F B1 9B 15 7F 0E FB 2A   // ...^.. ........* 
                76 5F 45 3D 20 2C E2 6D FE 55 72 30 49 76 28 FE ) // v_E= ,.m.Ur0Iv(.

6.2.2 重新生成exe文件 
ilasm /res:hello.res hello.il /out:hellocracked_nosign.exe

6.2.3 重新运行hellocracked_nosign.exe,OK 
Hello World! A Cracked Version. 
因为删除了签名信息,所以代码仍然可以正常执行,就这是破解时通常所用的方法。

如果你能够看懂IL代码,基本上就可以做你想做的任何修改了。


附(三)在il文件中搜索中文关键字:

中文在il文件中是以unicode编码形式存在,如果要根据中文关键字在il文件中查找,则需要先将中文转换为unicode字符。

1、将要转换的中文关键字写进新建的text文件,并以unicode类型保存;

2、用HxD打开刚建的txt文件(HxD下载地址:http://www.onlinedown.net/soft/1259.htm);

3、复制中文关键字对应的unicode编码(注意:前面两个字节是 Bom,手工忽视就好了,如HxD打开的内容为FF FE F7 8B 48 51 E8 6C 8C 51,实际的内容为F7 8B 48 51 E8 6C 8C 51);

4、在il文件中搜索对应的unicode字符

  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 将.NET DLLEXE合并是一种将DLL(动态链接库)和EXE(可执行文件)文件进行合并的技术。这种合并可以实现.NET应用程序的简化和优化。 通过合并DLLEXE文件,可以将应用程序的所有依赖项包含在一个单独的可执行文件中,而不需要额外的DLL文件。这种合并有以下几个优点: 1. 简化部署:合并后的文件可以更容易地进行部署和分发,因为只需要一个文件即可。 2. 提高性能:合并后的文件可以减少程序的启动时间和加载时间,因为不再需要在运行时从外部DLL加载代码和资源。 3. 防止依赖关系冲突:合并后的文件可以避免由于不同版本的DLL之间存在冲突而导致的问题。所有必需的代码和资源都包含在一个文件中,可以确保它们之间的兼容性。 4. 保护源代码:合并后的文件可以更好地保护.NET应用程序的源代码,因为它们将不再以可访问的DLL形式存在。 要实现DLLEXE的合并,可以使用一些工具或技术,如ILMerge、Costura.Fody等。这些工具可以将DLLEXE文件合并成一个单独的可执行文件。可以在构建过程中使用这些工具,或者手动执行它们来完成合并操作。 总而言之,将.NET DLLEXE合并可以简化部署,提高性能,避免依赖关系冲突,并保护源代码。这是一个优化和改进.NET应用程序的有效方法。 ### 回答2: 将.NET DLLEXE合并是指将DLL文件与EXE文件合并为一个单独的可执行文件。这种操作主要有两个目的:减少文件数量和简化部署过程。 首先,通过将DLLEXE合并为一个文件,可以减少文件数量。原本,一个应用程序可能需要依赖多个DLL文件才能正常运行,这样就导致了文件过多的问题,给文件的管理和部署带来了一定的困扰。而将DLLEXE合并为一个文件后,就避免了这个问题,只需要一个文件就能完整地运行应用程序,简化了文件的管理和维护。 其次,将DLLEXE合并为一个文件还能简化部署过程。在原本的情况下,需要将DLL文件与EXE文件分开部署,并且还需要将DLL文件正确地放置在应用程序的搜索路径中,否则应用程序无法找到所需的DLL文件,导致运行失败。而合并后的文件就不存在这个问题,只需要将一个文件部署到目标系统中即可,无需额外的配置和指定搜索路径。 但需要注意的是,合并DLLEXE也有一些潜在的问题。首先,合并后的文件体积会比原来的文件大,这会增加程序的加载时间和磁盘占用空间。其次,如果需要更新DLL文件,合并后的文件就需要重新打包和部署,而不像原来的方式只需要替换对应的DLL文件即可。 综上所述,将.NET DLLEXE合并为一个文件可以减少文件数量和简化部署过程,但也带来了一些潜在的问题需要考虑。根据具体情况,可以选择是否进行合并。 ### 回答3: 将.NET的dll(动态链接库)和exe(可执行文件)合并是通过使用ILMerge工具来实现的。ILMerge是一个独立的命令行工具,用于将多个.NET程序集合并为单个程序集。 使用ILMerge合并dllexe可以有以下几个好处: 1. 减少部署的文件数量:将多个dll合并为一个dll,或者将多个dllexe合并为一个exe,可以减少需要部署的文件数量,简化部署过程。 2. 提高应用程序的运行效率:合并dllexe可以减少程序的加载时间和启动时间,提高应用程序的运行效率。 3. 避免版本冲突:将不同版本的dll合并为一个程序集,可以避免版本冲突问题,确保程序能够正确加载所需的函数和方法。 4. 保护源代码:合并dllexe可以将源代码打包到一个文件中,使得源代码不容易被反编译或者修改。 使用ILMerge合并dllexe步骤如下: 1. 下载并安装ILMerge工具。 2. 打开命令行工具,进入到ILMerge的安装目录。 3. 使用以下命令进行合并操作: `ILMerge.exe /out:MergedAssembly.exe PrimaryAssembly.exe SecondaryAssembly.dll` 其中,MergedAssembly.exe是合并后生成的新的exe文件名,PrimaryAssembly.exe是主程序集的文件名,SecondaryAssembly.dll是次要程序集的文件名。 4. 执行命令后,ILMerge将会合并指定的程序集,生成一个新的exe文件。 5. 使用合并后的新的exe文件进行部署和运行。 需要注意的是,合并dllexe可能会导致一些依赖关系和引用路径的问题,因此在进行合并操作前,需要仔细检查和解决这些问题,确保程序能够正确运行。此外,合并dllexe可能会使得调试和更新程序变得更加困难,因此在合并前需要权衡利弊,选择合适的方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值