.Net/Java平台比传统Win32程序更容易Hack,因为它们都编译成了中间语言。今天小试一把.Net平台exe程序hack。
步骤:
1.了解ILASM和ILDASM.
这两个程序分别是将IL文件重新打包成exe和将用.Net平台开发出的exe程序翻译成IL语言的工具,可在下面的文件夹中找到:%systemRoot%\Microsoft.NET\Framework\版本号
(1)编写一个小的exe:
(2).将exe程序反编译成IL文件
ildasm的使用方法:
C:\ildasm>ildasm /?
用法: ildasm [options] <file_name> [options]
用于输出重定向的选项:
/OUT=<file name> 直接输出到文件而不是 GUI。
/TEXT 直接输出到控制台窗口而不是 GUI。
/HTML 以 HTML 格式输出(仅在与 /OUT 选项一起使用时有效)。
/RTF 以多格式文本格式输出(仅在与 /TEXT 选项一起使用时有效)。
用于 GUI 或文件/控制台输出的选项(仅限于 EXE 和 DLL 文件):
/BYTES 将实际字节(十六进制)显示为指令注释。
/RAWEH 以原始形式显示异常处理子句。
/TOKENS 显示类和成员的元数据标记。
/SOURCE 将原始源行显示为注释。
/LINENUM 包括对原始源行的引用。
/VISIBILITY=<vis>[+<vis>...] 仅反汇编具有指定
可见性的项。(<vis> = PUB | PRI | FAM | ASM | FAA | FOA | PSC)
/PUBONLY 仅反汇编公共项(与 /VIS=PUB 相同)。
/QUOTEALLNAMES 将所有名称用单引号括起来。
/NOCA 取消输出自定义属性。
/CAVERBAL 以文字形式输出 CA blob (默认情况下为二进制形式)。
/NOBAR 取消反汇编进度栏窗口弹出。
下列选项只对文件/控制台输出有效:
用于 EXE 和 DLL 文件的选项:
/UTF8 对输出使用 UTF-8 编码(默认为 ANSI)。
/UNICODE 对输出使用 UNICODE 编码。
/NOIL 取消 IL 汇编程序代码输出。
/FORWARD 使用前向类声明。
/TYPELIST 输出完整的类型列表(以在往返过程中保留类型排序)。
/HEADERS 将文件头信息包括在输出中。
/ITEM=<class>[::<method>[(<sig>)] 只反汇编指定的项
/STATS 包括图像的统计信息。
/CLASSLIST 包括在模块中定义的类的列表。
/ALL /HEADER、/BYTES、/STATS、/CLASSLIST、/TOKENS 的组合
用于 EXE、DLL、OBJ 和 LIB 文件的选项:
/METADATA[=<specifier>] 显示元数据,其中 <specifier> 为:
MDHEADER 显示元数据头信息和大小。
HEX 显示以十六进制表示的更多内容以及字。
CSV 显示记录计数和堆大小。
UNREX 显示无法解析的外部对象。
SCHEMA 显示元数据头和架构信息。
RAW 显示原始元数据表。
HEAPS 显示原始堆。
VALIDATE 验证元数据的一致性。
仅用于 LIB 文件的选项:
/OBJECTFILE=<obj_file_name> 显示库中单个对象文件的元数据
选项的关键字为“-”或“/”,通过前三个字符识别选项
示例: ildasm /tok /byt myfile.exe /out=myfile.il
将EXE反编译成IL代码:
C:\ildasm>ildasm c:\ildasm\CSharpHacker\CSharpHacker.exe /OUT=CSharpHacker.il
C:\ildasm>
(3)打开.IL文件
文件如下:
(4)找到Hello world,修改之
(5)重新打包:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>ilasm /?
Microsoft (R) .NET Framework IL Assembler. Version 2.0.50727.42
Copyright (c) Microsoft Corporation. All rights reserved.
Usage: ilasm [Options] <sourcefile> [Options]
Options:
/NOLOGO Don't type the logo
/QUIET Don't report assembly progress
/NOAUTOINHERIT Disable inheriting from System.Object by default
/DLL Compile to .dll
/EXE Compile to .exe (default)
/PDB Create the PDB file without enabling debug info tracking
/DEBUG Disable JIT optimization, create PDB file, use sequence points f
rom PDB
/DEBUG=IMPL Disable JIT optimization, create PDB file, use implicit sequence
points
/DEBUG=OPT Enable JIT optimization, create PDB file, use implicit sequence
points
/OPTIMIZE Optimize long instructions to short
/FOLD Fold the identical method bodies into one
/CLOCK Measure and report compilation times
/RESOURCE=<res_file> Link the specified resource file (*.res)
into resulting .exe or .dll
/OUTPUT=<targetfile> Compile to file with specified name
(user must provide extension, if any)
/KEY=<keyfile> Compile with strong signature
(<keyfile> contains private key)
/KEY=@<keysource> Compile with strong signature
(<keysource> is the private key source name)
/INCLUDE=<path> Set path to search for #include'd files
/SUBSYSTEM=<int> Set Subsystem value in the NT Optional header
/FLAGS=<int> Set CLR ImageFlags value in the CLR header
/ALIGNMENT=<int> Set FileAlignment value in the NT Optional header
/BASE=<int> Set ImageBase value in the NT Optional header (max 2GB for 32-bi
t images)
/STACK=<int> Set SizeOfStackReserve value in the NT Optional header
/MDV=<version_string> Set Metadata version string
/MSV=<int>.<int> Set Metadata stream version (<major>.<minor>)
/PE64 Create a 64bit image (PE32+)
/NOCORSTUB Suppress generation of CORExeMain stub
/STRIPRELOC Indicate that no base relocations are needed
/ITANIUM Target processor: Intel Itanium
/X64 Target processor: 64bit AMD processor
/ENC=<file> Create Edit-and-Continue deltas from specified source file
Key may be '-' or '/'
Options are recognized by first 3 characters
Default source file extension is .il
Target defaults:
/PE64 => /PE64 /ITANIUM
/ITANIUM => /PE64 /ITANIUM
/X64 => /PE64 /X64
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>ilasm /exe c:\ildasm\CSharpHacker.
il /output=c:\ildasm\cSharpHacker\CSharpHacker2.exe
Microsoft (R) .NET Framework IL Assembler. Version 2.0.50727.42
Copyright (c) Microsoft Corporation. All rights reserved.
Assembling 'c:\ildasm\CSharpHacker.il' to EXE --> 'c:\ildasm\cSharpHacker\CShar
pHacker2.exe'
Source file is ANSI
Assembled method CSharpHacker.Program::Main
Assembled method CSharpHacker.Program::.ctor
Creating PE file
Emitting classes:
Class 1: CSharpHacker.Program
Emitting fields and methods:
Global
Class 1 Methods: 2;
Emitting events and properties:
Global
Class 1
Writing PE file
Operation completed successfully
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>
(6)整个工作结束。
.Net平台的exe文件hack比Win32软件反汇编后jump要容易的多。很多.Net平台的第三方插件会提供免费版,按照此思路。。。
备注:此文章仅用于个人技术研究,由此造成的法律问题,本人概不负责。