CN101980160A - 一种.net程序加密后的执行方法 - Google Patents

一种.net程序加密后的执行方法 Download PDF

Info

Publication number
CN101980160A
CN101980160A CN2010105232539A CN201010523253A CN101980160A CN 101980160 A CN101980160 A CN 101980160A CN 2010105232539 A CN2010105232539 A CN 2010105232539A CN 201010523253 A CN201010523253 A CN 201010523253A CN 101980160 A CN101980160 A CN 101980160A
Authority
CN
China
Prior art keywords
module
program
encrypted
net
file
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2010105232539A
Other languages
English (en)
Other versions
CN101980160B (zh
Inventor
陆舟
于华章
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Feitian Technologies Co Ltd
Original Assignee
Beijing Feitian Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Feitian Technologies Co Ltd filed Critical Beijing Feitian Technologies Co Ltd
Priority to CN2010105232539A priority Critical patent/CN101980160B/zh
Publication of CN101980160A publication Critical patent/CN101980160A/zh
Priority to PCT/CN2011/081217 priority patent/WO2012055343A1/zh
Priority to US13/824,418 priority patent/US8996882B2/en
Application granted granted Critical
Publication of CN101980160B publication Critical patent/CN101980160B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Storage Device Security (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明提供了一种.NET程序加密后的执行方法,操作***为.NET程序进程分配进程地址空间,并将PE文件分别映射到进程地址空间中,.NET程序进程运行后,判断当前运行的程序模块是否加密,对加密的程序模块进行解密后继续运行.NET程序进程,如果当前程序模块调用了子程序模块,继续判断子程序模块是否加密,如果子程序模块被加密则进行解密操作,继续运行.NET程序进程,通过这种方法,可以使得将.NET程序中分模块进行加密管理,提高了对.NET软件保护的功能多样化。

Description

一种.NET程序加密后的执行方法
技术领域
本发明涉及信息安全领域,尤其涉及一种.NET程序加密后的执行方法。
背景技术
.NET是微软的新一代技术平台,是全新的基于互联网的跨语言软件开发平台,顺应了当今软件工业分布式计算、面向组件、企业级应用、软件服务化和以Web为中心等大趋势。.NET并非开发语言,但是在.NET开发平台上可以支持多门开发语言,如C#语言、C++、Visual Basic、Jscript等。
在.NET技术发展的推动下,使用.NET技术的软件也越来越多,同时在利益的驱使下,.NET程序正版软件遭遇破解也越来越多,.NET程序软件的保护成为了一个难点,现有技术中对.NET软件的保护,往往是对编译后的.NET程序进行保护,这种方法容易遭到破解。
并且,在现有技术中对.NET程序的保护是整体的保护,这样对软件开发公司造成了很多的不便,例如,软件公司在出售给客户软件时,通常都是根据功能的多少制定价格,客户如果只选择某些功能,则软件公司在出售软件时,还需要修改软件,将未定制的功能模块进行删除,当客户较多时,就需要反复的修改软件,在出售进行管理时也很麻烦。
由上可知,现有技术的缺点是,对编译后的.NET程序进行保护,容易遭到破解,并且对程序整体进行加密,不方便对软件进行管理。
发明内容
一种.NET程序加密后的执行方法,其特征在于,所述方法包括:
操作***加载HOOK引擎和.NET内核,启动.NET程序进程,开始运行.NET程序模块;
HOOK引擎判断当前的程序模块是否被加密;
如果所述当前的程序模块被加密,调用解密模块解密所述当前的程序模块,实时编译并执行所述当前的程序模块,所述HOOK引擎判断所述当前的程序模块是否调用了子程序模块;
如果调用了子程序模块,获取所述子程序模块,并判断所述子程序模块是否被加密;
如果所述子程序模块被加密,调用解密模块解密所述子程序模块,实时编译并执行所述子程序模块,所述.NET程序进程继续运行,调用其他程序模块,返回执行HOOK引擎判断当前的程序模块是否被加密的操作;
如果所述子程序模块没有被加密,实时编译并执行所述子程序模块,所述.NET程序进程继续运行,调用其他程序模块,返回执行HOOK引擎判断当前的程序模块是否被加密的操作;
如果没有调用子程序模块,所述.NET程序进程继续运行,调用其他程序模块,返回执行HOOK引擎判断当前的程序模块是否被加密的操作;
如果所述当前的程序模块没有被加密,实时编译并执行所述当前的程序模块,所述.NET程序进程继续运行,调用其他程序模块,返回执行HOOK引擎判断当前的程序模块是否被加密的操作。
优选地,所述HOOK引擎判断当前的程序模块是否被加密,当所述当前的程序模块没有被加密时,所述方法还包括:
实时编译执行所述当前的程序模块,所述.NET程序进程继续运行,调用其他程序模块,返回执行HOOK引擎判断当前的程序模块是否被加密的操作。
优选地,所述启动.NET程序进程前,所述方法还包括:
操作***为所述.NET程序进程创建一个进程地址空间,并将所述.NET程序进程引用的PE文件映射到所述进程地址空间里。
优选地,所述HOOK引擎判断当前的程序模块是否被加密之前,所述方法还包括:
所述HOOK引擎将在.NET程序进程开始之前,调用操作***的API遍历所述.NET程序的进程空间中所有的程序模块并判断所述程序模块是否被加密,获取被加密的程序模块的PE文件在进程空间的起始地址。
相应地,所述判断所述程序模块是否被加密,具体包括:
判断当前程序模块所对应的PE文件的第9个字节对应的数据是否为0x00,如果是,则当前程序模块未加密,否则,当前程序模块是加密的。
优选地,所述调用解密模块解密所述当前的程序模块,具体包括:
所述HOOK引擎监视所述.NET程序进程,当判断当前的程序模块为被加密的程序模块时,所述HOOK引擎***一条跳转指令,使所述.NET程序发生跳转,跳转到所述HOOK引擎指定的解密模块,执行解密程序。
优选地,所述开始运行.NET程序模块前,所述方法还包括:
对所述.NET程序的程序模块进行加密,具体的为对PE文件中的元数据进行加密处理,包括对元数据按预定的规则进行混淆、加入垃圾数据,并对指定函数的IL代码使用约定的密钥和算法进行加密。
相应地,所述执行解密程序,具体包括:
按预定的规则还原元数据,去除垃圾数据,使用约定的密钥和算法解密IL代码。
优选地,所述获取所述子程序模块,具体包括:
定位所述子程序模块的PE文件在进程空间的起始地址;
调用操作***的API遍历当前进程的所有模块,查找所述子程序模块,获取所述子程序模块信息。
相应地,所述定位所述子程序模块的PE文件在进程空间的起始地址,具体的包括:
从所述子程序模块的起始地址向前对齐到0x1000的整数倍的地址;
所述HOOK引擎从所述对齐后的地址向前递减0x1000进行遍历;
判断当前遍历到的地址是否是PE文件的起始地址,如果是PE文件的起始地址,则获取所述地址;否则继续向前递减0x1000遍历。
相应地,所述判断当前遍历到的地址是否是PE文件的起始地址,具体包括:
从所述当前遍历到的地址读取两个字节的数据,若读取到的数据为0x5a4d,则从0x5a4d后跳过0x003a个字节,读取4个字节数据,并将这4个字节数据转换为小端存储方式,以所述转换后的数据作为偏移量,从所述当前遍历到的地址向后偏移,如果得到的数据为0x5045,则所述当前遍历到的地址为PE文件的起始地址,否则,所述当前遍历到的地址不是PE文件的起始地址。
优选地,所述查找所述子程序模块,具体包括:
定位所述子程序模块的PE文件在所述进程空间映射的起始地址,所述HOOK引擎调用操作***的API遍历所述进程空间的所有程序模块,查找所述PE文件在所述进程空间映射的起始地址所对应的具体程序模块。
本发明的有益效果是:通过本发明所提供的方法,解决了编译后的程序容易被破解的缺点,在对.NET程序进行保护时,可以对.NET程序分模块进行保护,增加了对软件保护的便捷性。
附图说明
图1为本发明具体实施例1中一种.NET程序加密后的执行方法流程图;
图2为本发明具体实施例1中PE文件的结构示意图;
图3为本发明具体实施例1中.NET程序模块在进程地址空间中的结构图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
实施例1
参见图1,本发明实施例提供了一种.NET程序加密后的执行方法,该方法包括:
步骤101,操作***加载.NET内核,启动.NET进程,开始运行.NET程序模块,并加载HOOK引擎;
.NET编译器将高级程序语言编写的.NET程序编译成为中间语言(IL,intermediate language)代码,然后将IL代码打包在PE(Portable Executable,可移植可执行)文件中,PE文件是Windows中可执行文件的格式,Windows中后缀名为.exe文件、.dll文件都是PE文件,PE文件由Dos头(DOS_HEADER)、NT头(NT_HEADER)、元数据(MetaData)、公钥(Public Key)、IL代码(IL code)等部分组成,其中IL代码存在于元数据中,PE文件的结构如图2所示;
其中,IL代码是不能够被直接执行的,它需要.NET平台中的CLR(公用语言运行时,Common Language Runtime)中的实时(JIT,just in time)编译器来进一步地将IL代码编译成为计算机可以直接执行的机器语言,CLR是.NET程序的运行环境,它是一种多语言执行环境,支持众多的数据类型和语言特性。
在本发明实施例中,一个.NET进程中包含有多个程序模块,即需要引用多个PE文件,各个程序模块之间可以相互调用,被其它程序模块调用的程序模块也可以称之为子程序模块,上述程序模块包括exe文件和dll文件;.NET编译器将每个程序模块编译成IL代码后,将每一个程序模块的IL代码和元数据打包成为一个PE文件。
操作***为.NET进程创建一个进程地址空间,并将该.NET进程所引用的PE文件映射到进程地址空间里,其中每个PE文件所占用的地址空间为0x1000(4K)的整数倍,例如,所有32位应用程序都有4GB的进程地址空间(32位地址最多可以映射4GB的内存)。对于Microsoft Windows操作***,应用程序可以访问2GB的进程地址空间,称为用户模式虚拟地址空间。应用程序拥有的所有模块(exe和dll)都共享同一个用户模式虚拟地址空间。
HOOK(钩子)引擎,若在.NET程序中的某一指定的程序模块执行之前需要执行其它特定操作时,则HOOK引擎在该程序模块之前***一条跳转指令,例如通过修改某个模块虚拟地址空间的某段指令为JMPxxxxxxxx的形式,以安插回调函数从而添加附加功能。
当.NET程序执行到该指定的程序模块时,程序会发生跳转,该指定的程序模块的执行被拦截,跳转到HOOK引擎所***的跳转指令指向的HOOK子程序(回调函数),执行完该回调函数后顺序执行该被拦截的程序模块之后的其它程序模块。
步骤102,HOOK引擎判断当前的程序模块是否是被加密,如果当前的程序模块是被加密的,则执行步骤103;否则,实时编译执行该程序模块,之后,.NET程序继续运行,顺序执行其它程序模块;
在本发明实施例中,HOOK引擎将会在.NET程序的进程开始之前,调用***的API(Application Programming Interface,应用程序编程接口)遍历该.NET程序的进程空间中所有的程序模块,遍历后可以得到所有被加密的程序模块,并获取被加密的程序模块的PE文件在进程空间的起始地址;
在本实施例中,判断该.NET程序的进程空间中的程序模块是否被加密的方法,具体为:判断当前程序模块所对应的PE文件的第9个字节即PE文件偏移为0x00000008h处对应的数据是否为0x00,如果是,则当前程序模块的PE文件是未加密的,否则,当前程序模块的PE文件是加密的。
在PE文件中,使用字段IMAGE_DOS_HEADER->e_crlc来标识PE文件是否为加密的,具体为PE文件的第9字节,当HOOK引擎枚举完所有.NET程序的程序模块时,通过判断所有.NET程序的程序模块对应的PE文件的第9字节来判断所述.NET程序的程序模块是否为加密的。
例如,提供如下一个被加密的PE文件:
00000000h:4D 5A 90 00 03 00 01 00 04 00 00 00 FF FF 00 00
00000010h:B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00
00000020h:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000030h:00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00
...
00000080h:50 45 00 00 4C 01 03 00 92 38 84 45 00 00 00 00
00000090h:00 00 00 00 E0 00 0E 01 0B 01 06 00 00 04 00 00
00000098h:0B 01 06 00 00 04 00 00 00 04 00 00 00 00 00 00
000000a8h:FE 22 00 00 00 20 00 00 00 40 00 00 00 00 40 00
000000b8h:00 20 00 00 00 02 00 00 04 00 00 00 00 00 00 00
000000c8h:04 00 00 00 00 00 00 00 00 80 00 00 00 02 00 00
...
00003098h:01 00 00 06 05 00 00 06 08 00 00 06 03 00 00 00
................
在第一行中,00000000h表示偏移地址,4D 5A 90 00 03 00 01 00 04 00 0000 FF FF 00 00为PE文件中的具体数据,且为此PE文件的前16字节数据,PE文件数据以16进制方式表示,以下各行数据皆同,由于数据过长,只取部分数据对本发明进行说明。
在上述PE文件中,第9个字节为0x04,因此当前PE文件中是经过加密的,即当前程序模块是经过加密的。
在本实施例中,对程序模块的加密不是对PE文件整体上进行加密,而是对PE文件中的元数据进行处理,包括:对元数据按预定的规则进行混淆、加入垃圾数据,并对指定函数的IL代码使用约定的密钥和算法进行加密;
HOOK引擎在.NET程序的进程开始之后监视该进程,当HOOK引擎监测到.NET程序执行到被加密的程序模块时,HOOK引擎将***一条跳转指令,使.NET程序发生跳转,跳转到HOOK引擎指定的解密程序,执行该解密程序。
通过调用***的API可以获取当前进程所有的程序模块的列表,以及相应程序模块的信息,包括:程序模块的PE文件在进程地址空间中的起始地址、程序模块是否被加密等。
步骤103,通过HOOK引擎调用解密模块解密当前的程序模块,并实时编译执行该程序模块;
当进程运行到被加密的程序模块时,HOOK引擎对该被加密的程序模块进行拦截,根据HOOK引擎***的跳转指令,跳转到HOOK引擎指定的解密程序模块,调用指定的解密程序模块对该被加密的程序模块进行解密,然后,.NET内核实时编译执行该解密后的程序模块。
与步骤102中对程序模块的加密过程相反,对程序模块的解密过程具体为:按预定的规则还原元数据,去除垃圾数据,使用约定的密钥和算法解密IL代码。
步骤104,判断当前的程序模块是否调用了子程序模块,如果当前的程序模块调用了子程序模块,执行步骤105;否则,.NET程序继续运行,调用其它程序模块;
当.NET内核实时编译执行上述解密后的程序模块时,若发现该程序模块还对其它程序模块进行了调用,其中,被调用的其他程序模块为子程序模块,获取该子程序模块在进程空间的起始地址,然后执行步骤105。
步骤105,定位该子程序模块的PE文件在进程空间映射的起始地址;
.NET内核根据该子程序模块的起始地址来定位其PE文件在进程空间的起始地址,方法具体如下:
1)对齐4K边界,即从该子程序模块的起始地址向前对齐到0x1000的整数倍的地址;
其中,4K边界为偏移地址是0x1000的整数倍的地址。
例如,假设当前子程序模块的起始地址0x40100E,为对齐4K边界后得到0x401000。
2)HOOK引擎从对齐后的地址开始向前递减0x1000遍历;
由上述例子,当前子程序模块的起始地址对齐4K边界后为0x401000,递减0x1000后得到0x400000。
3)判断当前遍历到的地址是否是PE文件的起始地址,如果是PE文件的起始地址,则获取该地址;否则继续向前递减0x1000遍历。
PE文件中包括Dos头、PE特征以及元数据(MetaData)三个部分,其中,Dos头标识与PE特征的值是固定的,读取Dos头标识与PE特征的方法具体为:
●PE文件的前两个字节为Dos头标识,Dos头标识具体为0x5a4d;
●从Dos头标识后开始跳过0x003a个字节后的4个字节数据为PE特征相对于该PE文件起始地址的相对偏移地址;在PE文件中,PE特征的相对偏移地址的格式为大端存储方式,即低字节存储在高地址处、高字节存储在低地址处,因此,从Dos头标识后开始跳过0x003a个字节后读取的数据为0x80000000时,PE特征的相对偏移地址实际为0x00000080;
●根据PE特征相对于该PE文件起始地址的相对偏移地址0x00000080定位PE特征,定位得到PE特征0x5045。
因此,可以根据Dos头标识和PE特征判断是否是PE文件;
相应地,在本发明实施例中,判断当前遍历到的地址是否是PE文件的起始地址的方法具体为:
从当前地址开始读取两个字节数据,若读取到的数据的值为0x5a4d,则从0x5a4d后跳过0x003a个字节,读取4个字节数据,并将这4个字节数据转换为小端存储方式(即低字节存储在低地址处、高字节存储在高地址处),以转换后的数据为相对于当前的4K边界相对偏移地址进行定位,定位读取到的数据若是0x5045,则证明当前遍历到的地址是PE文件的起始地址。
继续上述例子,判断地址0x400000是否是PE文件的起始地址,如果是,则获取该地址0x400000,执行步骤106,如果不是,则将当前地址向前继续递减0x1000,判断将当前地址递减后得到的地址是否为PE文件的起始地址,直到找到PE文件的起始地址为止。
步骤106.调用***的API遍历当前进程的所有程序模块,查找该子程序模块;
HOOK引擎调用***的API遍历当前进程空间的所有程序模块,查找在步骤105中所获取的PE文件起始地址所对应的具体程序模块。
例如,以图3为例进行说明,图3举例描述了一个内存空间中.NET进程地址空间,Windows的进程模块映射遵循1K对齐的边界,所以在进程的地址空间对齐1K进行搜索,可以遍历出所述.Net程序进程加载的所有程序模块的首地址。
步骤107,获取该子程序模块的具体信息,根据获取到的子程序模块具体信息可知该子程序模块是否被加密,若该子程序模块是被加密的,则执行步骤108,否则,执行步骤109;
HOOK引擎通过***的API遍历到子程序模块后,获取该子程序模块的是否被加密的信息,如果该子程序模块是被加密的,则执行步骤108,否则,执行步骤109。
具体地,检查PE文件的第9个字节,若该字节的值为0x00,则表示该子程序模块是被加密的,否则没有被加密。
步骤108,调用解密程序模块解密该子程序模块;
步骤109,实时编译执行子程序模块。
实时编译执行子程序模块,然后该.NET程序的进程继续运行,调用其它程序模块。
通过本实施例所提供的方法,可以使得在对.NET程序进行加密保护时,分模块进行加密,便于进行保护。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (12)

1.一种.NET程序加密后的执行方法,其特征在于,所述方法包括:
操作***加载HOOK引擎和.NET内核,启动.NET程序进程,开始运行.NET程序模块;
HOOK引擎判断当前的程序模块是否被加密;
如果所述当前的程序模块被加密,调用解密模块解密所述当前的程序模块,实时编译并执行所述当前的程序模块,所述HOOK引擎判断所述当前的程序模块是否调用了子程序模块;
如果调用了子程序模块,获取所述子程序模块,并判断所述子程序模块是否被加密;
如果所述子程序模块被加密,调用解密模块解密所述子程序模块,实时编译并执行所述子程序模块,所述.NET程序进程继续运行,调用其他程序模块,返回执行HOOK引擎判断当前的程序模块是否被加密的操作;
如果所述子程序模块没有被加密,实时编译并执行所述子程序模块,所述.NET程序进程继续运行,调用其他程序模块,返回执行HOOK引擎判断当前的程序模块是否被加密的操作;
如果没有调用子程序模块,所述.NET程序进程继续运行,调用其他程序模块,返回执行HOOK引擎判断当前的程序模块是否被加密的操作;
如果所述当前的程序模块没有被加密,实时编译并执行所述当前的程序模块,所述.NET程序进程继续运行,调用其他程序模块,返回执行HOOK引擎判断当前的程序模块是否被加密的操作。
2.如权利要求1中所述的方法,其特征在于,所述HOOK引擎判断当前的程序模块是否被加密,当所述当前的程序模块没有被加密时,所述方法还包括:
实时编译执行所述当前的程序模块,所述.NET程序进程继续运行,调用其他程序模块,返回执行HOOK引擎判断当前的程序模块是否被加密的操作。
3.如权利要求1中所述的方法,其特征在于,所述启动.NET程序进程前,所述方法还包括:
操作***为所述.NET程序进程创建一个进程地址空间,并将所述.NET程序进程引用的PE文件映射到所述进程地址空间里。
4.如权利要求1中所述的方法,其特征在于,所述HOOK引擎判断当前的程序模块是否被加密之前,所述方法还包括:
所述HOOK引擎将在.NET程序进程开始之前,调用操作***的API遍历所述.NET程序的进程空间中所有的程序模块并判断所述程序模块是否被加密,获取被加密的程序模块的PE文件在进程空间的起始地址。
5.如权利要求4中所述的方法,其特征在于,所述判断所述程序模块是否被加密,具体包括:
判断当前程序模块所对应的PE文件的第9个字节对应的数据是否为0x00,如果是,则当前程序模块未加密,否则,当前程序模块是加密的。
6.如权利要求1中所述的方法,其特征在于,所述调用解密模块解密所述当前的程序模块,具体包括:
所述HOOK引擎监视所述.NET程序进程,当判断当前的程序模块为被加密的程序模块时,所述HOOK引擎***一条跳转指令,使所述.NET程序发生跳转,跳转到所述HOOK引擎指定的解密模块,执行解密程序。
7.如权利要求1中所述的方法,其特征在于,所述开始运行.NET程序模块前,所述方法还包括:
对所述.NET程序的程序模块进行加密,具体的为对PE文件中的元数据进行加密处理,包括对元数据按预定的规则进行混淆、加入垃圾数据,并对指定函数的IL代码使用约定的密钥和算法进行加密。
8.如权利要求6或7中所述的方法,其特征在于,所述执行解密程序,具体包括:
按预定的规则还原元数据,去除垃圾数据,使用约定的密钥和算法解密IL代码。
9.如权利要求1中所述的方法,所述获取所述子程序模块,具体包括:
定位所述子程序模块的PE文件在进程空间的起始地址;
调用操作***的API遍历当前进程的所有模块,查找所述子程序模块,获取所述子程序模块信息。
10.如权利要求9中所述的方法,所述定位所述子程序模块的PE文件在进程空间的起始地址,具体的包括:
从所述子程序模块的起始地址向前对齐到0x1000的整数倍的地址;
所述HOOK引擎从所述对齐后的地址向前递减0x1000进行遍历;
判断当前遍历到的地址是否是PE文件的起始地址,如果是PE文件的起始地址,则获取所述地址;否则继续向前递减0x1000遍历。
11.如权利要求10中所述的方法,所述判断当前遍历到的地址是否是PE文件的起始地址,具体包括:
从所述当前遍历到的地址读取两个字节的数据,若读取到的数据为0x5a4d,则从0x5a4d后跳过0x003a个字节,读取4个字节数据,并将这4个字节数据转换为小端存储方式,以所述转换后的数据作为偏移量,从所述当前遍历到的地址向后偏移,如果得到的数据为0x5045,则所述当前遍历到的地址为PE文件的起始地址,否则,所述当前遍历到的地址不是PE文件的起始地址。
12.如权利要求9中所述的方法,其特征在于,所述查找所述子程序模块,具体包括:
定位所述子程序模块的PE文件在所述进程空间映射的起始地址,所述HOOK引擎调用操作***的API遍历所述进程空间的所有程序模块,查找所述PE文件在所述进程空间映射的起始地址所对应的具体程序模块。
CN2010105232539A 2010-10-28 2010-10-28 一种.net程序加密后的执行方法 Expired - Fee Related CN101980160B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN2010105232539A CN101980160B (zh) 2010-10-28 2010-10-28 一种.net程序加密后的执行方法
PCT/CN2011/081217 WO2012055343A1 (zh) 2010-10-28 2011-10-25 一种.net程序加密后的执行方法
US13/824,418 US8996882B2 (en) 2010-10-28 2011-10-25 Execution method of .NET program after encryption

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2010105232539A CN101980160B (zh) 2010-10-28 2010-10-28 一种.net程序加密后的执行方法

Publications (2)

Publication Number Publication Date
CN101980160A true CN101980160A (zh) 2011-02-23
CN101980160B CN101980160B (zh) 2013-02-13

Family

ID=43600664

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2010105232539A Expired - Fee Related CN101980160B (zh) 2010-10-28 2010-10-28 一种.net程序加密后的执行方法

Country Status (3)

Country Link
US (1) US8996882B2 (zh)
CN (1) CN101980160B (zh)
WO (1) WO2012055343A1 (zh)

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2012055343A1 (zh) * 2010-10-28 2012-05-03 飞天诚信科技股份有限公司 一种.net程序加密后的执行方法
CN102831361A (zh) * 2012-08-14 2012-12-19 游艺春秋网络科技(北京)有限公司 服务器防泄漏***
CN102831343A (zh) * 2012-07-27 2012-12-19 北京奇虎科技有限公司 一种目标程序处理方法、处理装置及云端服务设备
CN103324870A (zh) * 2013-07-01 2013-09-25 飞天诚信科技股份有限公司 一种Java程序的保护方法
CN103324481A (zh) * 2013-06-26 2013-09-25 网宿科技股份有限公司 通过汇编实现代码混淆的编译方法和***
CN103745141A (zh) * 2013-12-02 2014-04-23 上海斐讯数据通信技术有限公司 智能终端android***中防止应用程序反编译的方法
CN104077523A (zh) * 2014-06-25 2014-10-01 珠海市君天电子科技有限公司 对软件进行处理的方法和装置
CN107341373A (zh) * 2017-06-30 2017-11-10 北京深思数盾科技股份有限公司 一种可执行程序的保护方法及装置
CN107423586A (zh) * 2017-07-31 2017-12-01 北京深思数盾科技股份有限公司 软件保护方法和软件保护装置
CN112434265A (zh) * 2020-11-27 2021-03-02 北京深思数盾科技股份有限公司 一种程序代码的保护方法、装置及存储介质

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8812269B1 (en) 2004-12-13 2014-08-19 The Mathworks, Inc. Dynamic range assessment in block diagram systems
US8855981B2 (en) * 2004-12-13 2014-10-07 The Mathworks, Inc. Tools for system-level design environments
US20140007117A1 (en) * 2012-06-13 2014-01-02 Bluebox Methods and apparatus for modifying software applications
WO2015113052A1 (en) * 2014-01-27 2015-07-30 Webroot Inc. Detecting and preventing execution of software exploits
US10127018B2 (en) * 2016-03-30 2018-11-13 Qualcomm Incorporated Dynamic addition of code in shared libraries
US11190505B2 (en) * 2016-07-12 2021-11-30 Patrick Tardif Password card hinting system
US11941109B2 (en) * 2021-12-21 2024-03-26 Cyberark Software Ltd. Customizable and dynamically mutable operating systems

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101101622A (zh) * 2007-07-10 2008-01-09 北京鼎信高科信息技术有限公司 一种构造透明编码环境的方法
JP2008134821A (ja) * 2006-11-28 2008-06-12 Fuji Xerox Co Ltd 電子ファイル処理プログラムおよび情報処理装置
CN101246536A (zh) * 2008-03-06 2008-08-20 北京鼎信高科信息技术有限公司 基于进程监控对计算机文件进行加解密的方法
CN101441689A (zh) * 2007-11-23 2009-05-27 杨筑平 登录保护方法

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4027482B2 (ja) * 1997-12-24 2007-12-26 富士通株式会社 暗号復元を行う翻訳装置およびその方法
GB0017478D0 (en) * 2000-07-18 2000-08-30 Bit Arts Ltd Computer software installation
DE50111786D1 (de) * 2000-12-15 2007-02-15 Siemens Ag Verschlüsselung von Steuerungsprogrammen
AR042599A1 (es) * 2002-11-19 2005-06-29 Schiavoni Juan Jose Metodo de proteccion de programas y equipo para realizarlo
US20050171910A1 (en) * 2004-02-02 2005-08-04 Chuan-Yu Wu Method for integrating enterprise collaborative operations in product lifecycle management and system thereof
CN100474253C (zh) * 2007-11-22 2009-04-01 北京飞天诚信科技有限公司 .Net程序保护方法及装置
US20100146589A1 (en) * 2007-12-21 2010-06-10 Drivesentry Inc. System and method to secure a computer system by selective control of write access to a data storage medium
WO2010025318A2 (en) 2008-08-28 2010-03-04 Motorola, Inc. Encrypting a unique cryptographic entity
CN101980160B (zh) * 2010-10-28 2013-02-13 飞天诚信科技股份有限公司 一种.net程序加密后的执行方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008134821A (ja) * 2006-11-28 2008-06-12 Fuji Xerox Co Ltd 電子ファイル処理プログラムおよび情報処理装置
CN101101622A (zh) * 2007-07-10 2008-01-09 北京鼎信高科信息技术有限公司 一种构造透明编码环境的方法
CN101441689A (zh) * 2007-11-23 2009-05-27 杨筑平 登录保护方法
CN101246536A (zh) * 2008-03-06 2008-08-20 北京鼎信高科信息技术有限公司 基于进程监控对计算机文件进行加解密的方法

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2012055343A1 (zh) * 2010-10-28 2012-05-03 飞天诚信科技股份有限公司 一种.net程序加密后的执行方法
CN102831343A (zh) * 2012-07-27 2012-12-19 北京奇虎科技有限公司 一种目标程序处理方法、处理装置及云端服务设备
CN102831343B (zh) * 2012-07-27 2015-06-17 北京奇虎科技有限公司 一种目标程序处理方法、处理装置及云端服务设备
CN102831361A (zh) * 2012-08-14 2012-12-19 游艺春秋网络科技(北京)有限公司 服务器防泄漏***
CN103324481B (zh) * 2013-06-26 2016-08-31 网宿科技股份有限公司 通过汇编实现代码混淆的编译方法和***
CN103324481A (zh) * 2013-06-26 2013-09-25 网宿科技股份有限公司 通过汇编实现代码混淆的编译方法和***
CN103324870A (zh) * 2013-07-01 2013-09-25 飞天诚信科技股份有限公司 一种Java程序的保护方法
CN103745141A (zh) * 2013-12-02 2014-04-23 上海斐讯数据通信技术有限公司 智能终端android***中防止应用程序反编译的方法
CN104077523A (zh) * 2014-06-25 2014-10-01 珠海市君天电子科技有限公司 对软件进行处理的方法和装置
CN107341373A (zh) * 2017-06-30 2017-11-10 北京深思数盾科技股份有限公司 一种可执行程序的保护方法及装置
CN107341373B (zh) * 2017-06-30 2018-12-18 北京深思数盾科技股份有限公司 一种可执行程序的保护方法及装置
CN107423586A (zh) * 2017-07-31 2017-12-01 北京深思数盾科技股份有限公司 软件保护方法和软件保护装置
CN112434265A (zh) * 2020-11-27 2021-03-02 北京深思数盾科技股份有限公司 一种程序代码的保护方法、装置及存储介质

Also Published As

Publication number Publication date
WO2012055343A1 (zh) 2012-05-03
US8996882B2 (en) 2015-03-31
CN101980160B (zh) 2013-02-13
US20130198527A1 (en) 2013-08-01

Similar Documents

Publication Publication Date Title
CN101980160B (zh) 一种.net程序加密后的执行方法
CN106778103B (zh) 一种安卓应用程序防逆向破解的加固方法、***及解密方法
US8745406B2 (en) Program executable image encryption
JP6815385B2 (ja) アプリケーションのコード難読化のためのシステムおよび方法
EP1410150B1 (en) Protecting software applications against software piracy
US7383443B2 (en) System and method for obfuscating code using instruction replacement scheme
CN100419626C (zh) 执行以面向对象语言制作的应用程序的执行装置
CN108932406A (zh) 虚拟化软件保护方法和装置
US20160364707A1 (en) Potentate: A Cryptography-Obfuscating, Self-Policing, Pervasive Distribution System For Digital Content
US20060130128A1 (en) Process for compiling and executing software applications in a multi-processor environment
US20090138863A1 (en) Method And Apparatus For Protecting .NET Programs
CN102043932A (zh) 一种防止Java程序被反编译的方法
Arzt et al. Instrumenting android and java applications as easy as abc
US20130283396A1 (en) System and method for limiting execution of software to authorized users
CN109784007A (zh) 一种字节码加密的方法、字节码解密的方法及终端
US10311217B2 (en) Application piracy prevention with secure enclave protection of automatically modularized functions
WO2016201853A1 (zh) 加解密功能的实现方法、装置及服务器
US20050044534A1 (en) Debugging and application that employs rights-managed content
KR20110013193A (ko) 저장장치를 이용한 권리객체 관리 시스템 및 방법, 그 drm서버 및 호스트 단말, 이를 위한 기록매체
CN113626773B (zh) 一种基于中间语言的代码保护方法
CN110597496B (zh) 应用程序的字节码文件获取方法及装置
KR101823226B1 (ko) 코드 보호 방법 및 시스템
Yang et al. Android control flow obfuscation based on dynamic entry points modification
CN109492353B (zh) 应用加固方法、装置、电子设备和存储介质
Staursky Lambda Calculus for Binary Security and Analysis

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20130213