CN110413283B - Confusion method based on compiler front end, storage medium and terminal equipment - Google Patents

Confusion method based on compiler front end, storage medium and terminal equipment Download PDF

Info

Publication number
CN110413283B
CN110413283B CN201910716285.1A CN201910716285A CN110413283B CN 110413283 B CN110413283 B CN 110413283B CN 201910716285 A CN201910716285 A CN 201910716285A CN 110413283 B CN110413283 B CN 110413283B
Authority
CN
China
Prior art keywords
clause
files
branch
compiler
blank
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
CN201910716285.1A
Other languages
Chinese (zh)
Other versions
CN110413283A (en
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 Zhiyou Wang'an Technology Co ltd
Original Assignee
Beijing Zhiyou Wang'an 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 Zhiyou Wang'an Technology Co ltd filed Critical Beijing Zhiyou Wang'an Technology Co ltd
Priority to CN201910716285.1A priority Critical patent/CN110413283B/en
Publication of CN110413283A publication Critical patent/CN110413283A/en
Application granted granted Critical
Publication of CN110413283B publication Critical patent/CN110413283B/en
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • G06F8/434Pointers; Aliasing
    • 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
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

The invention discloses a confusion method based on a front end of a compiler, a storage medium and terminal equipment, wherein the method comprises the following steps: C/C++ source files are analyzed by the front end of the compiler to obtain corresponding abstract syntax trees and header files contained in the source files; traversing all nodes of the abstract syntax tree, detecting whether a clause of a compound sentence has a first clause with only a single branch or not, and inserting redundant control streams according to a detection result; creating a blank file consistent with the source file type; and outputting the header files contained in the source files into blank files according to the grammar form of the header files contained in the C/C++, and outputting the top-level statement belonging to the source files in the abstract tree into the blank files according to the correct grammar form. In this way, redundant control flows are inserted through the front end of the compiler, blank files of the same type as the source file are created, and the contents in the abstract syntax tree and the header files are rewritten into the blank files, so that the code protection capability and portability are both realized.

Description

Confusion method based on compiler front end, storage medium and terminal equipment
Technical Field
The present invention relates to the field of computer applications, and in particular, to a compiler front-end based obfuscation method, a storage medium, and a terminal device.
Background
The main stream design of the traditional static compiler is a three-section design, namely a front end, an optimizer and a rear end; the front end is used to analyze the source code, check for errors, and construct an abstract syntax tree for a particular language. The abstract syntax tree can be converted into codes in the middle layer representation form, and the optimizer and the back end run on the middle layer codes; the optimizer performs various transformations on the middle tier code to optimize the code, and the backend translates the middle tier code into platform specific machine instructions.
In the field of information security, the purpose of code confusion is to make the code more understandable, increase the difficulty of static analysis and prevent software from being analyzed in a malicious reverse direction; the insertion of redundant control flows is one of confusion methods, and by inserting redundant control flows into the control flow of a function, a cracker cannot reconstruct an original function control flow diagram by using a static analysis tool; the inserted control flow may or may not always be executed, and may or may not be executed at times.
The current C/C++ confusion technology is realized based on OLLVM, and the confusion is codes in the middle layer representation form; OLLVM (Obfuscator-LLVM) is an open source item aimed at providing a open source code obfuscation tool for LLVM, increasing the difficulty of reverse engineering by inserting redundant control streams; however, the result of OLLVM confusion can only be converted into machine instructions of a corresponding platform by the LLVM compiler, cannot be transplanted, and is less likely to be processed again by other compilers.
There is thus a need for improvements and improvements in the art.
Disclosure of Invention
The invention aims to solve the technical problem that aiming at the defects of the prior art, a confusion method, a storage medium and terminal equipment based on the front end of a compiler are provided to solve the problem that the confusion result of an OLLVM in the prior art cannot be compiled by other compilers and cannot be transplanted.
In order to solve the technical problems, the technical scheme adopted by the invention is as follows:
a compiler front-end based obfuscation method, comprising:
c or C++ source files are analyzed and processed by the front end of a compiler to obtain corresponding abstract syntax trees and header files contained in the source files;
traversing all nodes of the abstract syntax tree, detecting whether a first clause with only a single branch exists in clauses of the compound sentence, and inserting redundant control streams according to detection results;
creating a C or C++ blank file consistent with the original source file type;
and outputting the header files contained in the source files into blank files according to the grammar form of the header files contained in C or C++, and outputting the top-level statement belonging to the source files in the abstract tree into the blank files according to the correct grammar form.
The step of traversing all nodes of the abstract syntax tree, the step of detecting whether a first clause with only a single branch exists in clauses of the compound sentence, and the step of inserting redundant control flow concrete according to a detection result comprises the following steps:
if the clause of the compound sentence has a first clause with only a single branch, adding a second branch for the sentence; the content of the second branch is randomly generated or copied from a single branch and then slightly modified.
The step of traversing all nodes of the abstract syntax tree, the step of detecting whether a first clause with only a single branch exists in clauses of the compound sentence, and the step of inserting redundant control flows according to detection results further comprises the following steps:
if the first clause does not exist in the clauses of the compound sentence, randomly selecting a group of first replaced sentences which do not contain variable declarations from the clauses, and creating a second clause to replace the group of first replaced sentences.
The control expression of the second clause is an opaque predicate which is constant true, and the content of the unique single branch in the second clause is the first replaced statement.
The step of traversing all nodes of the abstract syntax tree, the step of detecting whether a first clause with only a single branch exists in clauses of the compound sentence, and the step of inserting redundant control flows according to detection results further comprises the following steps:
if the first clause does not exist in the clauses of the compound sentence, randomly selecting a group of second replaced sentences which do not contain variable declarations from the clauses, and creating a third clause with double branches to replace the group of second replaced sentences;
placing the second replaced into the second branch of the third clause, and placing the second replaced into the first branch of the third clause after slightly modifying the second replaced.
The control expression of the third clause is an opaque predicate that is constantly false.
The first clause, the second clause, or the third clause is an if statement.
A terminal device, comprising: a processor and a memory; the memory has stored thereon a computer readable program executable by the processor; the processor, when executing the computer readable program, implements the steps in a compiler front end based obfuscation method according to any of the previous claims.
A computer readable storage medium storing one or more programs executable by one or more processors to implement steps in a compiler front end based obfuscation method according to any of the above.
The beneficial effects are that: compared with the prior art, the invention provides a confusion method based on a front end of a compiler, a storage medium and terminal equipment, wherein the method comprises the following steps: c or C++ source files are analyzed and processed by the front end of a compiler to obtain corresponding abstract syntax trees and header files contained in the source files; traversing all nodes of the abstract syntax tree, detecting whether a first clause with only a single branch exists in clauses of the compound sentence, and inserting redundant control streams according to detection results; creating a C or C++ blank file consistent with the original source file type; and outputting the header files contained in the source files into blank files according to the grammar form of the header files contained in C or C++, and outputting the top-level statement belonging to the source files in the abstract tree into the blank files according to the correct grammar form. In this way, redundant control flows are inserted through the front end of the compiler, a blank file consistent with the original source file type is created, and the content in the abstract syntax tree and the header file contained in the source file are rewritten into the blank file to obtain the confusing C/C++ source code, so that the code portability is realized while the code protection capability is ensured.
Drawings
FIG. 1 is a flowchart of a preferred embodiment of a compiler front-end based obfuscation method according to the present invention.
Fig. 2 is a specific flowchart of step S200 in a first embodiment of a compiler front-end based obfuscation method according to the present invention.
Fig. 3 is a specific flowchart of step S200 in a first embodiment of a compiler front-end based obfuscation method according to the present invention.
Fig. 4 is a schematic structural diagram of a preferred embodiment of the terminal device provided by the present invention.
Detailed Description
The invention relates to a compiler front-end-based confusion method, a storage medium and a terminal device, and in order to make the purposes, technical schemes and effects of the invention clearer and more definite, the invention is further described in detail below by referring to the accompanying drawings and the embodiments. It should be understood that the specific embodiments described herein are for purposes of illustration only and are not intended to limit the scope of the invention.
As used herein, the singular forms "a", "an", "the" and "the" are intended to include the plural forms as well, unless expressly stated otherwise, as understood by those skilled in the art. It will be further understood that the terms "comprises" and/or "comprising," when used in this specification, specify the presence of stated features, integers, steps, operations, elements, and/or components, but do not preclude the presence or addition of one or more other features, integers, steps, operations, elements, components, and/or groups thereof. It will be understood that when an element is referred to as being "connected" or "coupled" to another element, it can be directly connected or coupled to the other element or intervening elements may also be present. Further, "connected" or "coupled" as used herein may include wirelessly connected or wirelessly coupled. The term "and/or" as used herein includes all or any element and all combination of one or more of the associated listed items.
It will be understood by those skilled in the art that all terms (including technical and scientific terms) used herein have the same meaning as commonly understood by one of ordinary skill in the art to which this invention belongs unless defined otherwise. It will be further understood that terms, such as those defined in commonly used dictionaries, should be interpreted as having a meaning that is consistent with their meaning in the context of the prior art and will not be interpreted in an idealized or overly formal sense unless expressly so defined herein.
The invention will be further described by the description of embodiments with reference to the accompanying drawings.
First embodiment
Referring to fig. 1, fig. 1 is a flowchart of a method for obfuscating based on a front end of a compiler, provided by the invention, the method includes:
s100, analyzing and processing the C or C++ source file by the front end of the compiler to obtain a corresponding abstract syntax tree and a header file contained in the source file.
Specifically, in the embodiment of the invention, a compiler front end analyzes and processes a C or C++ source file to obtain a corresponding abstract syntax tree, and then obtains a header file contained in the source file; and providing basic data for the following steps by using the header files contained in the abstract syntax tree and the source file obtained through analysis and processing.
S200, traversing all nodes of the abstract syntax tree, detecting whether a first clause with only a single branch exists in clauses of the compound sentence, and inserting redundant control streams according to detection results.
Specifically, traversing all nodes of the abstract syntax tree, detecting whether a single-branch statement exists in the compound statement in the abstract syntax tree, and carrying out corresponding modification on the compound statement according to a detection result so as to realize the insertion of redundant control flow. The compound statement refers to a compound statement in a function definition, and the compound statement specifically refers to a function body or other compound statements appearing in the function body.
Accordingly, referring to fig. 2, the step S200 specifically includes:
s210, if a first clause with only a single branch exists in the clauses of the compound sentence, adding a second branch to the sentence.
Specifically, the first clause is an if statement, when an if statement with only a single branch exists, an else branch (namely a second branch) is directly added into the if statement, and the content of the else is randomly generated or copied from the single branch and then slightly changed.
The step S200 further includes:
s211, if the first clause does not exist in the clauses of the compound sentence, randomly selecting a group of first replaced sentences which do not contain variable declarations from the clauses, and creating a second clause to replace the group of first replaced sentences.
Specifically, the second clause is also an if statement, when the first clause does not exist, a group of first replaced sentences which do not contain variable declarations are randomly selected from the clauses of the compound statement, and a single-branch if statement (namely the second clause) is created to replace the group of selected sentences; in particular, the control expression of the if statement (i.e., the second clause) is an opaque predicate that is constant true, and the content of the single branch that is unique in the if statement is the set of the first replaced statement. The opaque predicate is an expression, and the value of the opaque predicate can only be determined at runtime, and is difficult to statically analyze.
S300, creating a C or C++ blank file consistent with the original source file type.
Specifically, if the original source file is a C file, the blank file is a C file, and if the original source file is a c++ file, the blank file is a c++ file.
S400, outputting header files contained in the source files into blank files according to grammar forms of the header files contained in C or C++, and outputting top-level statement belonging to the source files in the abstract tree into the blank files according to correct grammar forms.
Specifically, a C or C++ blank file with the same type as the original source file is created, a header file contained in the source file is output to the blank file according to the grammar form of the header file contained in the C or C++, and a top level statement belonging to the source file in an abstract grammar tree is output to the blank file in the correct grammar form; because the C or C++ source code has stronger portability, the program after confusion processing can be compiled by various compilers at the same time, and the portability is enhanced.
The outputting of the header file into the blank file according to the syntax form of C or c++ includes: the original source file is expressed in a grammar sentence form containing the header file, and writing is also carried out in a grammar sentence form containing the header file in the blank file after confusion (for example, the original source file is: # include < stdio.h >, and the confused source file is also # include < stdio.h >); the top level declarations belonging to the source file in the abstract syntax tree are similarly written into the blank file in the original syntax form, but the content is confusing.
Second embodiment
With continued reference to fig. 1, a flowchart of a second embodiment of a compiler front-end-based obfuscation method according to the present invention includes:
s100, analyzing and processing the C or C++ source file by the front end of the compiler to obtain a corresponding abstract syntax tree and a header file contained in the source file.
S200, traversing all nodes of the abstract syntax tree, detecting whether a first clause with only a single branch exists in clauses of the compound sentence, and inserting redundant control streams according to detection results.
Accordingly, referring to fig. 3, the step S200 specifically includes:
s210, if a first clause with only a single branch exists in the clauses of the compound sentence, adding a second branch to the sentence.
Specifically, the step S200 further includes a step of another embodiment:
s211, if the first clause does not exist in the clauses of the compound sentence, randomly selecting a group of second replaced sentences which do not contain variable declarations from the clauses, and creating a third clause with double branches to replace the group of second replaced sentences;
s212, placing the second replaced into the second branch of the third clause, and placing the second replaced into the first branch of the third clause after slightly changing the second replaced.
Specifically, when a first clause does not exist in a compound sentence in the abstract syntax tree, randomly selecting a group of second replaced sentences which do not contain variable declarations, creating a double-branch third clause to replace the group of second replaced sentences, placing the group of second replaced sentences into the second branch of the third clause, and placing the changed group of second replaced sentences into the first branch of the third clause; in particular, the third clause is an if statement, the second branch of the third clause is an eles statement, and the control expression of the third clause is an opaque predicate that is constantly false. It should be noted that the opaque predicate is an expression whose value can only be determined at runtime, and is difficult to statically analyze.
S300, creating a C or C++ blank file consistent with the original source file type;
s400, outputting header files contained in the source files into blank files according to grammar forms of the header files contained in C or C++, and outputting top-level statement belonging to the source files in the abstract tree into the blank files according to correct grammar forms.
Note that the first clause, the second clause, or the third clause is an if statement, the first clause is if (expression) state, the modified form is if (expression) statment else statement, the second clause is if (expression) state, and the third clause is if (expression) statment else statement.
The technical solution of the present application is further explained below by taking if statements as examples for the first clause, the second clause and the third clause:
example one
The codes before confusion are:
Figure BDA0002154415620000081
when detecting that the clause of the compound sentence has a first clause with only a single branch (namely, the clause of the if sentence has a single branch), inserting an else branch for the if sentence.
The replaced code is specifically as follows:
Figure BDA0002154415620000082
/>
Figure BDA0002154415620000091
the second branch is inserted into the if statement as redundant control flow, so that the aim of code confusion is fulfilled.
Example two
The codes before confusion are:
Figure BDA0002154415620000092
traversing each node of the abstract tree, when detecting that the first clause with only a single branch does not exist in all the clauses of the compound sentence, randomly selecting a group of clauses without variable declaration in the compound sentence, namely 'printf (' argb is:% d\n ', b)', 'a=a+1', 'b=b+1', and 'r=a-b', and creating a second clause (here, an if sentence) to replace the group of clauses, wherein the content of the if sentence is the replaced group of clauses.
The replaced code is specifically as follows:
Figure BDA0002154415620000093
/>
Figure BDA0002154415620000101
example three
The codes before confusion are:
Figure BDA0002154415620000102
traversing each node of the abstract tree, when detecting that a first clause with only a single branch does not exist in all clauses of the compound sentence, randomly selecting a group of clauses without variable declarations in the compound sentence, namely 'b=b+1' and 'r=a-b' in the example, creating a third clause with double branches (here, if clauses), replacing the group of clauses, modifying the replaced group of clauses, putting the replaced group of clauses into the first branch of the if clause, and directly putting the replaced group of clauses into the second branch (namely, else clause) of the if clause of the first branch of the if clause; in particular, in order to enhance the confusion effect, some statements that do not have any actual influence on the program may also be inserted into the second branch.
The replaced code is specifically as follows:
Figure BDA0002154415620000111
a terminal device, comprising: a processor and a memory; the memory has stored thereon a computer readable program executable by the processor; the processor, when executing the computer readable program, implements the steps in a compiler front end based obfuscation method according to any of the previous claims.
A computer readable storage medium storing one or more programs executable by one or more processors to implement steps in a compiler front end based obfuscation method according to any of the above.
In summary, the invention modifies the composite sentence on the abstract syntax tree, inserts a plurality of redundant control flows for confusion, converts the abstract syntax tree into C or C++ source code again after modification, and outputs the C or C++ source code to the newly built C or C++ blank file, so that the developer can intuitively feel the confused result, more importantly, the C/C++ source code is obtained after confusion, can be compiled by various compilers and can be transplanted to various platforms, and the code protection can be realized while the good portability can be maintained.
The present invention also provides a computer readable storage medium storing one or more programs executable by one or more processors to implement the steps in a compiler front end based obfuscation method according to the above embodiments.
The present invention also provides a terminal device, as shown in fig. 3, comprising at least one processor (processor) 20; a display screen 21; and a memory (memory) 22, which may also include a communication interface (Communications Interface) 23 and a bus 24. Wherein the processor 20, the display 21, the memory 22 and the communication interface 23 may communicate with each other via a bus 24. The display screen 21 is configured to display a user guidance interface preset in the initial setting mode. The communication interface 23 may transmit information. The processor 20 may invoke logic instructions in the memory 22 to perform the methods of the embodiments described above.
Further, the logic instructions in the memory 22 described above may be implemented in the form of software functional units and stored in a computer readable storage medium when sold or used as a stand alone product.
The memory 22, as a computer readable storage medium, may be configured to store a software program, a computer executable program, such as program instructions or modules corresponding to the methods in the embodiments of the present disclosure. The processor 30 performs the functional applications and data processing, i.e. implements the methods of the embodiments described above, by running software programs, instructions or modules stored in the memory 22.
The memory 22 may include a storage program area that may store an operating system, at least one application program required for functions, and a storage data area; the storage data area may store data created according to the use of the terminal device, etc. In addition, the memory 22 may include high-speed random access memory, and may also include nonvolatile memory. For example, a plurality of media capable of storing program codes such as a usb disk, a removable hard disk, a Read-Only Memory (ROM), a random access Memory (Random Access Memory, RAM), a magnetic disk, or an optical disk, or a transitory storage medium may be used.
In addition, the specific processes that the storage medium and the plurality of instruction processors in the mobile terminal load and execute are described in detail in the above method, and are not stated here.
Finally, it should be noted that: the above embodiments are only for illustrating the technical solution of the present invention, and are not limiting; although the invention has been described in detail with reference to the foregoing embodiments, it will be understood by those of ordinary skill in the art that: the technical scheme described in the foregoing embodiments can be modified or some technical features thereof can be replaced by equivalents; such modifications and substitutions do not depart from the spirit and scope of the technical solutions of the embodiments of the present invention.

Claims (4)

1. A compiler front-end based obfuscation method, comprising:
c or C++ source files are analyzed and processed by the front end of a compiler to obtain corresponding abstract syntax trees and header files contained in the source files;
traversing all nodes of the abstract syntax tree, detecting whether a first clause with only a single branch exists in clauses of a compound sentence, and inserting redundant control streams according to detection results, wherein the steps comprise;
if the clause of the compound sentence has a first clause with only a single branch, adding a second branch for the clause; if the first clause does not exist in the clauses of the compound sentence, randomly selecting a group of second replaced sentences which do not contain variable declarations from the clauses, and creating a third clause with double branches to replace the group of second replaced sentences; placing the second replaced sentence into a second branch of a third clause, slightly changing the second replaced sentence, and then placing the second replaced sentence into a first branch of the third clause, wherein the first clause and the third clause are if sentences, the second branch of the third clause is eles sentences, and a control expression of the third clause is an opaque predicate with constant false;
creating a C or C++ blank file consistent with the original source file type;
and outputting the header files contained in the source files into blank files according to the grammar form of the header files contained in C or C++, and outputting the top-level statement belonging to the source files in the abstract tree into the blank files according to the correct grammar form.
2. The compiler-front-end based obfuscation method according to claim 1, wherein the contents of the second branch are randomly generated or copied from a single branch and then slightly altered.
3. A terminal device, comprising: a processor and a memory; the memory has stored thereon a computer readable program executable by the processor; the processor, when executing the computer readable program, implements the steps of the compiler front-end based obfuscation method according to any of claims 1-2.
4. A computer readable storage medium storing one or more programs executable by one or more processors to implement the steps in the compiler front end based obfuscation method according to any of claims 1-2.
CN201910716285.1A 2019-08-02 2019-08-02 Confusion method based on compiler front end, storage medium and terminal equipment Active CN110413283B (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910716285.1A CN110413283B (en) 2019-08-02 2019-08-02 Confusion method based on compiler front end, storage medium and terminal equipment

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910716285.1A CN110413283B (en) 2019-08-02 2019-08-02 Confusion method based on compiler front end, storage medium and terminal equipment

Publications (2)

Publication Number Publication Date
CN110413283A CN110413283A (en) 2019-11-05
CN110413283B true CN110413283B (en) 2023-05-30

Family

ID=68365693

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910716285.1A Active CN110413283B (en) 2019-08-02 2019-08-02 Confusion method based on compiler front end, storage medium and terminal equipment

Country Status (1)

Country Link
CN (1) CN110413283B (en)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113031930B (en) * 2019-12-24 2022-07-05 武汉斗鱼鱼乐网络科技有限公司 Source code confusion generation method and device for control flow flattening
CN113391817B (en) * 2021-06-16 2022-08-26 中国海洋大学 ANTLR 4-based header file replacement method and device

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107229848A (en) * 2017-06-12 2017-10-03 北京洋浦伟业科技发展有限公司 A kind of code reinforcement means and device
CN107632832A (en) * 2017-09-27 2018-01-26 电子科技大学 One kind obscures method towards dalvik bytecode controlling streams
CN108710787A (en) * 2018-03-26 2018-10-26 江苏通付盾信息安全技术有限公司 Code obfuscation method and device, computing device, computer storage media
CN109992935A (en) * 2019-03-15 2019-07-09 同盾控股有限公司 A kind of source code guard method and device

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8589897B2 (en) * 2008-08-26 2013-11-19 Apple Inc. System and method for branch extraction obfuscation

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107229848A (en) * 2017-06-12 2017-10-03 北京洋浦伟业科技发展有限公司 A kind of code reinforcement means and device
CN107632832A (en) * 2017-09-27 2018-01-26 电子科技大学 One kind obscures method towards dalvik bytecode controlling streams
CN108710787A (en) * 2018-03-26 2018-10-26 江苏通付盾信息安全技术有限公司 Code obfuscation method and device, computing device, computer storage media
CN109992935A (en) * 2019-03-15 2019-07-09 同盾控股有限公司 A kind of source code guard method and device

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于Clang的C++代码混潜工具设计与实现;张清泉;《中国优秀硕士学位论文全文数据库 (基础科学辑)》;20150415;第5-53页 *

Also Published As

Publication number Publication date
CN110413283A (en) 2019-11-05

Similar Documents

Publication Publication Date Title
CN112100054B (en) Data management and control oriented program static analysis method and system
US8589897B2 (en) System and method for branch extraction obfuscation
CN108614960B (en) JavaScript virtualization protection method based on front-end byte code technology
US8850414B2 (en) Direct access of language metadata
CN108139891B (en) Method and system for generating suggestions to correct undefined token errors
ES2733516T3 (en) Verification of limits at compile time for user-defined types
US20210279045A1 (en) Integrated development environment for developing and compiling query language schemas for application program interfaces
CN110569628B (en) Code obfuscation method and device, computer device and storage medium
WO1996013784A2 (en) Method and apparatus for tree data structure manipulation and translating source code from one high-level computer language to another
WO1996013784A9 (en) Method and apparatus for tree data structure manipulation and translating source code from one high-level computer language to another
US8464232B2 (en) Compiler compiler system with syntax-controlled runtime and binary application programming interfaces
CN110673852B (en) Method, system and equipment for realizing control flow flattening based on front end of compiler
CN110413283B (en) Confusion method based on compiler front end, storage medium and terminal equipment
US20140053285A1 (en) Methods for detecting plagiarism in software code and devices thereof
KR101356676B1 (en) Translating expressions in a computing environment
CN114625844B (en) Code searching method, device and equipment
Nichols et al. Structural and nominal cross-language clone detection
US8914782B2 (en) Optimization of declarative queries
JP6651974B2 (en) Information processing apparatus, compiling method and compiler program
Kabanov et al. Embedded typesafe domain specific languages for Java
US10275228B2 (en) Relaxing user-specified register constraints for improving register allocation
Bagge et al. A pretty good formatting pipeline
Aladjev et al. Extension of Mathematica system functionality
Visser Understanding software through linguistic abstraction
CN111796832A (en) Hot patch file generation method, device, equipment and storage medium

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant