CN103514027B - 一种增强软件保护易用性的方法 - Google Patents

一种增强软件保护易用性的方法 Download PDF

Info

Publication number
CN103514027B
CN103514027B CN201310284247.6A CN201310284247A CN103514027B CN 103514027 B CN103514027 B CN 103514027B CN 201310284247 A CN201310284247 A CN 201310284247A CN 103514027 B CN103514027 B CN 103514027B
Authority
CN
China
Prior art keywords
virtual machine
file
function
symbol
variable
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.)
Active
Application number
CN201310284247.6A
Other languages
English (en)
Other versions
CN103514027A (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 Senseshield Technology Co Ltd
Original Assignee
Beijing Senseshield Technology 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 Senseshield Technology Co Ltd filed Critical Beijing Senseshield Technology Co Ltd
Priority to CN201310284247.6A priority Critical patent/CN103514027B/zh
Publication of CN103514027A publication Critical patent/CN103514027A/zh
Application granted granted Critical
Publication of CN103514027B publication Critical patent/CN103514027B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明公开了一种提高虚拟机软件保护方式的易用性的方法,包括:A. 利用与虚拟机匹配的编译器将源代码编译为虚拟指令文件;B. 构造目标文件;C. 添加对虚拟机和虚拟指令的引用。本方法对源代码进行转换,生成软件开发工具在链接时可直接利用的文件,虚拟机用户可以按照函数或类的定义直接调用被保护代码,即用户调用一个被保护的函数或类时和调用未被保护的函数或类方法相同,无需额外编写代码,能增强虚拟机保护方法的易用性,减少调用被保护代码的繁琐工作。

Description

一种增强软件保护易用性的方法
技术领域
本发明涉及软件版权保护技术,特别涉及一种增强软件保护易用性的方法。
背景技术
虚拟机(Virtual Machine,简称VM),指通过软件模拟硬件系统功能,VMWare就是一种虚拟机。许多解释性语言,如Java、LUA也是虚拟机。一个虚拟机引擎由编译器、解释器和VPU Context(虚拟CPU环境)组成,再配上一个或多个指令系统。使用虚拟机是实现软件版权保护的一种有效方法。该方法将要保护的软件代码转换成一种特定形式或架构的虚拟指令,虚拟指令在目标计算机上不能直接执行,而必须由虚拟机解释执行。由于虚拟机解释执行的速度较慢,大型软件为保证效率不能将全部代码转换为虚拟指令,而是一部分关键代码转换为虚拟指令,需要时再通过虚拟机执行虚拟指令。
现有的直接对源代码进行转换的虚拟机使用较为繁琐。一般是由程序员针对被保护代码专门编制一段程序,一般包括三个步骤:输入参数处理、调用虚拟机和输出参数处理。例如LUA是一种脚本语言,利用解释器执行程序,LUA提供了C代码与LUA进行交互的函数集——“C API”。当利用C语言调用一个LUA的函数时,需要利用“C API”将所有函数参数按顺序放入堆栈中,然后调用解释器执行程序,最后按顺序从堆栈中取出计算结果。该方法对不同的代码需要编制不同的程序,不具备通用性;要求严格得对参数进行处理,且不能发挥编译器对参数的检查功能,因而易出错,难调试。
此外,COFF(Common Object File Format,通用对象文件格式)是一种很流行的对象文件格式。比如,Visual Studio编译器所产生的目标文件(*.obj)就是这种格式。其它的编译器,如GCC(GNU Compiler Collection)、ICL(Intel C/C++ Compiler)、VectorC,也使用这种格式的目标文件。不仅仅是C/C++,很多其它语言也使用这种格式的对象文件。
COFF文件的整体结构如下:
File Header
Optional Header
Section Header 1
Section Header n
Section Data
Relocation Directives
Line Numbers
Symbol Table
String Table
因此,COFF文件一共有8种数据,自上而下分别为:
1. 文件头(File Header)
2. 可选头(Optional Header)
3. 段落头(Section Header)
4. 段落数据(Section Data)
5. 重定位表(Relocation Directives)
6. 行号表(Line Numbers)
7. 符号表(Symbol Table)
8. 字符串表(String Table)
其中,除了段落头可以有多个节(因为可以有多个段落)以外,其它的所有类型的节最多只能有一个。
文件头:COFF文件的头,它用来保存COFF文件的基本信息,如文件标识,各个表的位置等等。
可选头:在目标文件中,基本上都没有这个头;但在其它的文件中(如:可执行文件)这个段用来保存在文件头中没有描述到的信息。
段落头:用来描述段落信息,每个段落都有一个段落头来描述。段落的数目在文件头中会指出。
段落数据:通常是COFF文件中最大的数据段,每个段落真正的数据就保存在这个位置。
重定位表:通常只存在于目标文件中,用来描述COFF文件中符号的重定位信息。
符号表:用来保存COFF文件中所用到的所有符号的信息,连接多个COFF文件时,这个表帮助我们重定位符号。调试程序时也要用到它。
字符串表:用来保存字符串的。符号表是以记录的形式来描述符号信息的,但它只为符号名称留置了8个字符的空间,在现在的程序中,一个符号名动不动就数十个字符,8个字符空间的不够,因此需将这些名称存在字符串表中。而符号表中只记录这些字符串的位置。
发明内容
一般的软件开发工具对源代码的处理如图1所示,先由编译器将各源代码文件编译并生成目标文件,再由将各目标文件和库文件链接生成可执行程序。
背景技术所述的一般方法相当于将要保护的源代码替换成程序员编制的调用虚拟机的代码,而本发明提供的一种提高虚拟机软件保护方式的易用性的方法如图2所示(假设源代码为要保护的代码)。本发明方法先调用与虚拟机匹配的编译器将源代码编译为虚拟指令文件,再根据虚拟指令文件生成目标文件,该目标文件中包含源代码中的变量和函数,包含符号表、重定位表等链接器需要的信息,包含对虚拟机的引用、对虚拟指令的引用。
本发明所述方法可自动,具有通用性,无需程序员针对被保护代码编制专门的程序,从而提高虚拟机保护方式的易用性。本发明提供一种通过虚拟机增强软件保护易用性的方法,其特征在于,所述方法包括如下步骤:
步骤1:利用与虚拟机匹配的编译器将源代码编译为虚拟指令文件;
步骤2:根据虚拟指令文件构造目标文件;
步骤3:在目标文件中添加对虚拟机和虚拟指令的引用。
根据本发明的一个方面,在步骤2中,进一步包括:
构造本地函数、变量;
按目标文件格式要求构造源代码中涉及的函数、变量的符号,并使本地定义的各符号分别指向其实体;
构造函数、变量的重定位信息。
根据本发明的一个方面,在步骤2中,进一步包括:所述构造本地函数,包括构造跳转到虚拟机入口函数的跳转指令,以及构造虚拟机所需参数;所述构造变量,包括将变量的初始数据添加到文件中。
根据本发明的一个方面,在步骤3中,进一步包括:设定虚拟机入口函数符号使符号指向虚拟机入口函数,以及设定虚拟指令符号,并使所述虚拟指令符号指向对应的虚拟指令。
根据本发明的一个方面,在对面向对象编程语言程序进行保护时,在步骤3之后,还包括:构造全局变量构造与析构函数。
根据本发明的一个方面,在对允许将全局变量初始化为变量的程序进行保护时,还包括:构造初始化函数列表。
根据本发明的一个方面,还包括:设置目标文件格式需要的其他信息。
根据本发明的一个方面,还包括:输出目标文件。
与现有技术相比,本发明具有以下有益效果:本方法生成软件开发工具在链接时可直接利用的文件,虚拟机用户可以用使用函数或类的方法直接调用被保护代码,即用户调用一个被保护的函数或类时和调用未被保护的函数或类方法相同,无需做额外处理,增强虚拟机保护方法的易用性。
附图说明
图1为软件开发工具生成可执行程序的示意图。
图2为应用本发明方法时生成可执行程序的示意图。
图3为本发明方法的实施例一的示意图。
图4为本发明方法的实施例二的示意图。
具体实施方式
下面结合附图对本发明的实施例进行详细说明。
根据本发明的一个方面,本发明的方法包括:
A. 调用与虚拟机匹配的编译器将源代码编译为虚拟指令文件。其中,由于虚拟机应有与之匹配的编译器,否则不能应用,而且本发明并非针对编译器,加之本领域的技术人员能够实现与虚拟机匹配的编译器,因此本文不再对编译器进行详细描述。
B. 根据虚拟指令文件构造目标文件;
C. 在目标文件中添加对虚拟机和虚拟指令的引用;
其中,B步骤中还可进一步包括以下内容:
B1. 构造本地函数、变量的实体。对函数而言,需要构造跳转到虚拟机入口函数的跳转指令,构造虚拟机需要的参数。对变量而言,需要将变量的初始数据添加到文件中。
B2. 按目标文件格式要求构造源代码中涉及的函数、变量的符号,并使本地定义的各符号分别指向其实体。
B3. 构造函数、变量的重定位信息。
B4. 在对面向对象编程语言程序进行保护时,还包括:构造全局变量构造与析构函数;一般面向对象编程语言如C语言没有构造与析构函数,对用类似语言的程序进行保护时,可不包括本步骤。
B5. 在对允许将全局变量初始化为变量的程序进行保护时,还包括:构造初始化函数列表;一般面向对象编程语言如C语言不支持将全局变量初始化为变量,对用类似语言的程序进行保护时,可不包括本步骤。
其中,C步骤还可进一步包括以下内容:
C1. 设定虚拟机入口函数符号使符号指向虚拟机入口函数。
C2. 设定虚拟指令符号,并使该符号指向对应的虚拟指令。
以下提供具体实施例,以便更明确地理解和适用本发明:
实施例一:
以C语言编写的example.c文件中包含以下代码:
static int number;
extern int GetParameter();
int GetSum(int a)
{
return GetParameter() + number + a;
}
软件运行环境为32位x86平台,操作系统为32位windows xp。
上述example.c文件编译为虚拟指令后其目标文件为ELF格式的example.o,虚拟机的入口函数为EnterVm,要求的参数为虚拟指令地址、重定位表。
本实施例的目标是构造一个COFF格式的目标文件——example.obj,其中包含GetSum函数及COFF格式要求的信息。
在软件开发工具(如Visual Studio 6.0)加入该目标文件(example.obj),用户在编程时就可以直接调用GetSum函数。
其中,ELF格式简介如下:
ELF = Executable and Linkable Format,可执行连接格式,是UNIX系统实验室(USL)作为应用程序二进制接口(Application Binary Interface,ABI)而开发和发布的。
ELF头位于文件的开始,描述了该文件的组织情况。sections保存着object文件的信息,较为常见的section包括指令,数据,符号表,字符串表,重定位信息等等。section头表(section header table)包含了描述文件sections的信息。每个section在这个表中有一个入口;每个入口给出了该section的名字,大小,等等信息。各部分分布如下表所示:
Elf header
Program header table
section1
……
section n
section header table
本例提供的方法包括如下步骤:
1. 利用现有的虚拟机编译器将源代码(example.c)编译为虚拟指令文件(example.o)。
2. 构造本地定义的函数、变量。根据本发明的一个实施例,构造函数具体包括:
1)添加虚拟指令符号(虚拟指令包含在虚拟指令文件example.o中);
2)添加虚拟机入口函数符号;
3)添加函数符号及函数体;
4)对虚拟机入口函数地址和虚拟指令地址进行重定位。
构造变量具体包括:
1)添加变量符号;
2)添加数据。
根据本发明的一个具体实施例,作为示例,添加过程示例代码如下所示,但是其不对本发明的内容作为限定,其它任何编程语言、代码均可实现类似功能的限定的内容都应视为本发明的范围之内:
#include <vector>
using namespace std;
//COFF文件中的符号
struct CoffSymbol
{
char Name[8];
int Value;
short SectionNumber;
short Type;
char StorageClass;
char NumberOfAuxSymbols;
};
//COFF文件中的重定位项
struct CoffRelocation {
int VirtualAddress;
int SymbolTableIndex;
short Type;
};
class COFF
{
public:
void createFunction(const char* name, const char* vmCode,int vmCodeSize)
{
//1. 添加虚拟指令符号
char vmCodeName[64]; //虚拟指令符号名
strcpy(vmCodeName, "vmCode_");
strcat(vmCodeName, name);
int vmCodeI = addSymbol(vmCodeName, 0, 0, 0); //添加虚拟指令符号
//2. 添加虚拟机入口函数符号
int enterVm = addSymbol("enterVm", 0, 0, 0x20);
//3. 添加函数符号及函数体
int func = addSymbol(name, 0, 0, 0x20); //添加函数符号
struct FunctionBody
{
char Jmp; //跳转指令xE9
unsigned enterVm; //虚拟机入口函数地址
void* vmCode; //虚拟指令地址
};
FunctionBody funcBody;
funcBody.Jmp = 0xE9;
funcBody.enterVm = 0;
funcBody.vmCode = 0;
memcpy(text, &funcBody, sizeof(funcBody)); //添加函数体
//4. 对虚拟机入口函数地址和虚拟指令地址进行重定位
addRelocation(enterVm, 0, textSize + 1); //重定位虚拟机入口函数地址
addRelocation(vmCodeI, 0, textSize + 5);//重定位虚拟指令地址
textSize += sizeof(funcBody);
}
void createVarible(const char* name, const char* var, intvarSize)
{
char varName[64]; //变量符号名
strcpy(varName, "var_");
strcat(varName, name);
int varI = addSymbol(varName, 0, textSize, 0); //添加变量符号
memcpy(data, var, varSize); //将变量添加到数据段
dataSize += varSize;
}
void createRelocations(
const char* relocation, int relSize,
const char* vmCode, int codeSize,
const char* elfSymbol, int symbolSize);
protected:
//添加符号
int addSymbol(const char* name, unsigned secIndex, unsignedoffset, int type)
{
CoffSymbol sym;
sym.NumberOfAuxSymbols = 0;
strcpy(sym.Name, name); //符号名长度大于8时不能直接拷贝,应按照COFF格式处理,此处简化处理。
sym.Type = type;
sym.Value = offset;
sym.StorageClass = 2;
sym.SectionNumber = secIndex + 1;//section numberone based,从开始
unsigned index = symbols.size();
symbols.push_back(sym);
return index;
}
//添加重定位项
void addRelocation(unsigned symIndex, unsigned secIndex,unsigned offset)
{
CoffRelocation rel;
rel.Type = 6;
rel.VirtualAddress = offset;
rel.SymbolTableIndex = symIndex;
relocations.push_back(rel);
}
//获取ELF符号的名字,按ELF文件格式根据sym->st_name查找即可,省略其实现
const char* GetELFSymbolName(ElfSymbol* sym);
char* text; //代码段数据
int textSize; //代码段大小
char* data; //数据段数据
int dataSize; //数据段大小
vector<CoffSymbol> symbols; //符号
vector<CoffRelocation> relocations; //重定位
};
以上代码中COFF::createFunction为构造函数, COFF::createVarible为构造变量。
3. 构造重定位信息,该信息包含虚拟指令文件中包含的所有符号和虚拟内存地址。包括:1)添加虚拟指令文件中的重定位表;2)添加虚拟指令;3)添加并定位虚拟指令符号;4)添加重定位项。根据本重定位表虚拟机可对虚拟指令中需要重定位的地方进行重定位。
根据本发明的一个具体实施例,作为示例,本步骤的示例代码如下所示,但是其不对本发明的内容作为限定,其它任何编程语言、代码均可实现类似功能的限定的内容都应视为本发明的范围之内:
void COFF::createRelocations(
const char* relocation, int relSize,
const char* vmCode, int codeSize,
const char* elfSymbol, int symbolSize)
{
addSymbol("_Relocation", 0, textSize, 0); //添加重定位表的变量符号
memcpy(text, relocation, relSize); //添加重定位表
textSize += relSize;
addSymbol("_VmCode", 0, textSize, 0); //添加变量符号vmCode
memcpy(text, vmCode, codeSize); //添加虚拟指令
textSize += codeSize;
addSymbol("_SymbolAddressTable", 0, textSize, 0); //添加符号地址表的变量符号
memcpy(text, elfSymbol, symbolSize); //添加符号表
int offset = textSize;
textSize += symbolSize;
ElfSymbol* psym = (ElfSymbol*)elfSymbol;
int symSize = symbolSize/sizeof(ElfSymbol);
for (int i=0; i<symSize; ++i)
{
psym[i].st_value = 0;
//按符号名查找其索引
int j=0;
for (j=0; j<symbols.size(); ++j)
{
if (strcmp(GetELFSymbolName(&psym[i]), symbols[j].Name) == 0)
{
break;
}
}
//对符号的st_value成员进行重定位,重定位后,其值为符号所代表的内容的虚拟内存地址
addRelocation(j, 0, offset + i*sizeof(ElfSymbol) + 4);
//设定虚拟指令符号的偏置值(offset, CoffSymbol.Value)
for (j=0; j<symbols.size(); ++j)
{
char vmCodeName[64]; //虚拟指令符号名
strcpy(vmCodeName, "vmCode_");
strcat(vmCodeName, GetELFSymbolName(&psym[i]));
if (strcmp(GetELFSymbolName(&psym[i]), symbols[j].Name) == 0)
{
symbols[j].Value = offset + psym[i].st_value;
break;
}
}
}
}
4. 设置COFF文件格式需要的其他信息,如文件头等。
5. 输出目标文件(example.obj)。
完成以上步骤后,将example.obj加入到Visual Studio 6.0的工程中,在该工程的任何源代码文件中只要声明“extern int GetSum(int a);”即可直接调用函数GetSum。
实施例二:
本实施例提供的方法包括如下步骤:
根据本发明的一个具体实施例,作为示例,该方法步骤的示例代码如下所示,但是其不对本发明的内容作为限定,其它任何编程语言、代码均可实现类似功能的限定的内容都应视为本发明的范围之内。以C++语言编写的example.hpp文件中包含以下代码:
#include <stdio.h>
class ConDestruction
{
public:
ConDestruction()
{
printf("构造函数\n");
}
~ConDestruction()
{
printf("析构函数\n");
}
};
ConDestruction cd;
软件运行环境为32位x86平台,操作系统为32位windows xp,example.hpp文件编译为虚拟指令后其目标文件为example.o,虚拟机的入口函数为EnterVm,要求的参数为虚拟指令地址、重定位表。
本实施例的目标是构造一个COFF格式的目标文件,具体为example.obj,其中包含类Example及COFF格式要求的其他信息。只要向软件开发工具(如Visual Studio 6.0)指定加入该目标文件,用户在编程时就可以直接调用类Example。本例提供的方法包括如下步骤:
1. 利用现有的虚拟机编译器将源代码(example.c)编译为虚拟指令文件(example.o)。
2. 构造本地定义的函数、变量。构造函数具体包括:1)添加虚拟指令符号(虚拟指令包含在虚拟指令文件example.o中);2)添加虚拟机入口函数符号;3)添加函数符号及函数体;4)对虚拟机入口函数地址和虚拟指令地址进行重定位。构造变量具体包括:1)添加变量符号;2)添加数据。本步骤与实施例一中的步骤2相似。
3. 构造重定位信息。该信息包含虚拟指令文件中包含的所有符号和虚拟内存地址。包括:1)添加虚拟指令文件中的重定位表;2)添加虚拟指令;3)添加并定位虚拟指令符号;4)添加重定位项。根据本重定位表虚拟机可对虚拟指令中需要重定位的地方进行重定位。本步骤与实施例一中的步骤2相似。
4. 如有全局变量则构造“.text$yc”段和“.text$yd”段。注意:全局变量的构造函数需要在入口函数(一般是main函数)之前执行,而其析构函数要在入口函数之后执行。在微软的COFF目标文件中,对于每一个全局变量都会构造一个“.text$yc”段,该段包含一个函数执行构造函数对变量进行初始化;还会构造一个“.text$yd”段,该段包含一个函数执行析构函数。
具体包括:1)构造section header(其中,由于其属于COFF格式的技术常识,因此本文不再赘述细节);2)构造函数体;3)对函数体进行重定位。步骤2)和步骤3)与前文步骤2中相似,区别在于步骤2)函数体中调用的函数不是”EnterVM”而是构造函数,而步骤3)需要重定位的是全局变量的地址。
5.在“.CRT$XCU”段中构造初始化函数列表。该列表包含所有“.text$yc”段的首地址(每个“.text$yc”段相当于一个初始化函数),该列表中的每一个函数都会被链接器链接到入口函数之前执行,从而实现对所有全局变量的构造。具体包括三个步骤,对于步骤4中构造每一个“.text$yc”段,执行步骤2)和步骤3):1)构造section header;2)添加数据(4个字节,全为0);3)重定位到“.text$yc”段的首地址。
6.设置COFF文件格式需要的其他信息,如文件头等。
7. 输出目标文件(example.obj)。
完成以上步骤后,只要用户将example.obj加入到Visual Studio 6.0的工程中,在该工程的任何源代码文件中只要使用#include包含example.hpp文件即可直接使用类Example。
以上实施例仅为本发明的示例性实施例,不用于限制本发明,本发明的保护范围由权利要求书限定。本领域技术人员可以在本发明的实质和保护范围内,对本发明做出各种修改或等同替换,这种修改或等同替换也应视为落在本发明的保护范围内。

Claims (7)

1.一种通过虚拟机增强软件保护易用性的方法,其特征在于,所述方法包括如下步骤:
步骤1:利用与虚拟机匹配的编译器将源代码编译为虚拟指令文件;
步骤2:根据虚拟指令文件构造目标文件;
步骤3:在目标文件中添加对虚拟机和虚拟指令的引用;
在步骤2中,进一步包括:
构造本地函数、变量;
按目标文件格式要求构造源代码中涉及的函数、变量的符号,并使本地定义的各符号分别指向其实体;
构造函数、变量的重定位信息。
2.根据权利要求1所述的方法,其特征在于,在步骤2中,进一步包括:所述构造本地函数,包括构造跳转到虚拟机入口函数的跳转指令,以及构造虚拟机所需参数;所述构造变量,包括将变量的初始数据添加到文件中。
3.根据权利要求1所述的方法,其特征在于,在步骤3中,进一步包括:设定虚拟机入口函数符号使符号指向虚拟机入口函数,以及设定虚拟指令符号,并使所述虚拟指令符号指向对应的虚拟指令。
4.根据权利要求1所述的方法,其特征在于,在对面向对象编程语言程序进行保护时,在步骤3之后,还包括:构造全局变量构造与析构函数。
5.根据权利要求4所述的方法,其特征在于,在对允许将全局变量初始化为变量的程序进行保护时,还包括:构造初始化函数列表。
6.根据权利要求1或5所述的方法,其特征在于,还包括:设置目标文件格式需要的其他信息。
7.根据权利要求6所述的方法,其特征在于,还包括:输出目标文件。
CN201310284247.6A 2013-11-12 2013-11-12 一种增强软件保护易用性的方法 Active CN103514027B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310284247.6A CN103514027B (zh) 2013-11-12 2013-11-12 一种增强软件保护易用性的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310284247.6A CN103514027B (zh) 2013-11-12 2013-11-12 一种增强软件保护易用性的方法

Publications (2)

Publication Number Publication Date
CN103514027A CN103514027A (zh) 2014-01-15
CN103514027B true CN103514027B (zh) 2017-04-26

Family

ID=49896801

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310284247.6A Active CN103514027B (zh) 2013-11-12 2013-11-12 一种增强软件保护易用性的方法

Country Status (1)

Country Link
CN (1) CN103514027B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103886095B (zh) * 2014-04-03 2017-10-24 北京深思数盾科技股份有限公司 跨平台目标文件复用方法
CN106096338B (zh) * 2016-06-07 2018-11-23 西北大学 一种具有数据流混淆的虚拟化软件保护方法
CN106250124B (zh) * 2016-07-25 2020-01-21 百富计算机技术(深圳)有限公司 功能模块跨平台运行的实现方法和装置
CN109918081B (zh) * 2019-03-01 2022-06-03 中安智联未来有限公司 一种编译方法及编译器
CN111767116B (zh) * 2020-06-03 2023-09-05 江苏中科重德智能科技有限公司 面向机械臂程序开发编程语言的虚拟机及对汇编文件的运行方法
CN116302150B (zh) * 2022-09-08 2024-02-13 科东(广州)软件科技有限公司 hypervisor自启动程序生成方法和操作系统启动方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101030241A (zh) * 2007-04-10 2007-09-05 北京飞天诚信科技有限公司 基于Keil C51的软件保护开发的方法和系统
CN101216775A (zh) * 2008-01-03 2008-07-09 北京深思洛克数据保护中心 一种软件程序的保护方法、装置及系统
CN103065069A (zh) * 2013-01-28 2013-04-24 电子科技大学 一种基于壳技术的软件保护方法
CN103186730A (zh) * 2013-03-26 2013-07-03 北京深思数盾科技有限公司 保护.net软件安全的方法和设备

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8732811B2 (en) * 2011-03-28 2014-05-20 Canon Kabushiki Kaisha Systems and methods for implementing security services

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101030241A (zh) * 2007-04-10 2007-09-05 北京飞天诚信科技有限公司 基于Keil C51的软件保护开发的方法和系统
CN101216775A (zh) * 2008-01-03 2008-07-09 北京深思洛克数据保护中心 一种软件程序的保护方法、装置及系统
CN103065069A (zh) * 2013-01-28 2013-04-24 电子科技大学 一种基于壳技术的软件保护方法
CN103186730A (zh) * 2013-03-26 2013-07-03 北京深思数盾科技有限公司 保护.net软件安全的方法和设备

Also Published As

Publication number Publication date
CN103514027A (zh) 2014-01-15

Similar Documents

Publication Publication Date Title
CN103514027B (zh) 一种增强软件保护易用性的方法
Morandat et al. Evaluating the design of the R language: Objects and functions for data analysis
CN108681457B (zh) 基于代码下沉与残码解释的Android应用程序保护方法
CN108932406B (zh) 虚拟化软件保护方法和装置
Van Emmerik Static single assignment for decompilation
CN108614960B (zh) 一种基于前端字节码技术的JavaScript虚拟化保护方法
Sharif et al. Automatic reverse engineering of malware emulators
US11966727B2 (en) Load module compiler
US8156482B2 (en) System and method for efficiently generating native code calls from byte code in virtual machines
CN109918903B (zh) 一种基于llvm编译器的程序非控制数据攻击防护方法
Baker et al. Runtime aspect weaving through metaprogramming
US20040230958A1 (en) Compiler and software product for compiling intermediate language bytecodes into Java bytecodes
CN110245467B (zh) 基于Dex2C与LLVM的Android应用程序保护方法
Yadavalli et al. Raising binaries to LLVM IR with MCTOLL (WIP paper)
Nu1L Team Reverse engineering
Kang Function call interception techniques
US7316011B1 (en) Memory reduction for object-oriented compilers
Kroustek et al. Advanced preprocessing of binary executable files and its usage in retargetable decompilation
Tröger Specification-driven dynamic binary translation
CN114707124B (zh) 基于代码虚拟化的.net平台代码保护方法和系统
Cao et al. WRTester: Differential Testing of WebAssembly Runtimes via Semantic-aware Binary Generation
Kågström et al. Cibyl: an environment for language diversity on mobile devices
Mishra et al. libmask: Protecting Browser JIT Engines from the Devil in the Constants
Collberg et al. Sandmark algorithms
Boschman Performing transformations on. NET intermediate language code

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information

Address after: 100872 room 1706, building 59, Zhongguancun street, Haidian District, Beijing

Applicant after: BEIJING SENSESHIELD TECHNOLOGY Co.,Ltd.

Address before: 100872 room 1706, building 59, Zhongguancun street, Haidian District, Beijing

Applicant before: BEIJING SHENSI SHUDUN TECHNOLOGY Co.,Ltd.

COR Change of bibliographic data
CB02 Change of applicant information

Address after: 100193 Beijing, Haidian District, East West Road, No. 10, East Hospital, building No. 5, floor 5, layer 510

Applicant after: BEIJING SENSESHIELD TECHNOLOGY Co.,Ltd.

Address before: 100872 room 1706, building 59, Zhongguancun street, Haidian District, Beijing

Applicant before: BEIJING SENSESHIELD TECHNOLOGY Co.,Ltd.

COR Change of bibliographic data
GR01 Patent grant
GR01 Patent grant
CP01 Change in the name or title of a patent holder
CP01 Change in the name or title of a patent holder

Address after: 100193 5th floor 510, No. 5 Building, East Yard, No. 10 Wangdong Road, Northwest Haidian District, Beijing

Patentee after: Beijing Shendun Technology Co.,Ltd.

Address before: 100193 5th floor 510, No. 5 Building, East Yard, No. 10 Wangdong Road, Northwest Haidian District, Beijing

Patentee before: BEIJING SENSESHIELD TECHNOLOGY Co.,Ltd.