Compiler and method of compiling source code thereof

By generating intermediate code and obfuscating it through the compiler's front-end processing module, combined with back-end processing and remote symbol cache table management by the package manager, the risk of application code being disassembled or decompiled during the compilation process is resolved, thus achieving code security protection.

CN114064052BActive Publication Date: 2025-11-07ALIPAY (HANGZHOU) INFORMATION TECH CO LTD
View PDF 4 Cites 0 Cited by

Patent Information

Application Number
CN202111397985.2
Authority / Receiving Office
CN · China
Patent Type
Patents(China)
Current Assignee / Owner
Filing Date
2021-11-23
Publication Date
2025-11-07
Estimated Expiration
2041-11-23

AI Technical Summary

Technical Problem

Existing technologies struggle to effectively prevent the application's executable code from being disassembled or decompiled during the compilation process, leading to information leakage.

Method used

A compiler is provided that generates intermediate code through a front-end processing module and obfuscates the code with a code obfuscator, and generates executable code in conjunction with a back-end processing module. It manages function symbols using inter-process communication and a remote symbol cache table of a package manager to ensure the effectiveness of code obfuscation and executability.

Benefits of technology

It achieves effective obfuscation of application code during compilation, improves code security, prevents reverse engineering by static analysis tools, and protects the application's execution logic from being illegally stolen.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure CN114064052B_ABST
    Figure CN114064052B_ABST
Patent Text Reader

Abstract

The embodiment of the present specification provides a compiler and a method for compiling source code. The compiler comprises: a front-end processing module, configured to generate a first intermediate code corresponding to the source code according to the source code, and output the first intermediate code to a code obfuscator; the code obfuscator, configured to perform code obfuscation on the first intermediate code received thereby; and a back-end processing module, configured to generate executable code according to the first intermediate code after code obfuscation.
Need to check novelty before this filing date? Find Prior Art

Description

TECHNICAL FIELD

[0001] One or more embodiments of the present specification relate to the field of computers, and in particular, to a compiler and a method for compiling source code thereof. BACKGROUND

[0002] Security protection of an application is one of the key research contents in the field of computer security. In order to avoid intruders from using various static analysis tools to disassemble or decompile the executable code of the application, and obtain the execution logic of the application to illegally steal relevant information, code obfuscation needs to be implemented on the code of the application. SUMMARY

[0003] One or more embodiments of the present specification provide a compiler and a method for compiling source code thereof.

[0004] In a first aspect, a compiler is provided, comprising: a front-end processing module configured to generate a first intermediate code corresponding to a source code and output the first intermediate code to a code obfuscator; the code obfuscator configured to perform code obfuscation on the first intermediate code received thereby; and a back-end processing module configured to generate executable code according to the first intermediate code after code obfuscation.

[0005] In a possible implementation, the front-end processing module comprises: a preprocessing unit configured to generate a second function symbol corresponding to a first function symbol in the source code and perform replacement processing on the first function symbol in the source code by using the second function symbol; a compilation processing unit configured to generate a second intermediate code according to the source code processed by the preprocessing unit; and an optimization processing unit configured to perform optimization processing on the second intermediate code to generate the first intermediate code.

[0006] In a possible implementation, the preprocessing unit is further configured to generate, for the first function symbol, indication information indicating whether a function identified by the first function symbol is contained in the source code; and the code obfuscator is specifically configured to perform code obfuscation on the first intermediate code according to the indication information.

[0007] In a possible implementation, the code obfuscator is configured to determine, for the second function symbol in the first intermediate code, whether a function identified by the second function symbol is contained in the first intermediate code according to the indication information; and when the function identified by the second function symbol is contained in the first intermediate code, perform code obfuscation on the second function symbol in the first intermediate code.

[0008] In a possible implementation, the code obfuscator is further configured to, when the first intermediate code contains a function identified by the second function symbol, send the second function symbol to a package manager through inter-process communication, so that the package manager adds the second function symbol to a remote function symbol cache table maintained by the package manager for a project to which the source code belongs.

[0009] In a possible implementation, the code obfuscator is further configured to, when the first intermediate code does not contain a function identified by the second function symbol, send a query request containing the first function symbol to a package manager through inter-process communication, so that the package manager returns a query result, where the query result is used to indicate whether the second function symbol is included in a remote symbol cache table maintained by the package manager for a project to which the source code belongs; and when the second function symbol is included in the remote symbol cache table, code obfuscation is performed on the second function symbol in the first intermediate code.

[0010] In a possible implementation, the source code is written based on a Rust programming language.

[0011] In a second aspect, a method for compiling source code by using a compiler is provided, including: generating, by the compiler, first intermediate code corresponding to the source code according to the source code; performing, by the compiler, code obfuscation on the first intermediate code; and generating, by the compiler, executable code according to the first intermediate code after the code obfuscation.

[0012] In a possible implementation, the method further includes: generating, by the compiler, a second function symbol corresponding to a first function symbol in the source code, and replacing the first function symbol in the source code with the second function symbol; generating, by the compiler, second intermediate code according to the source code after the replacement; and performing, by the compiler, optimization processing on the second intermediate code to generate the first intermediate code.

[0013] In a possible implementation, the method further includes: generating, by the compiler, indication information corresponding to the first function symbol, where the indication information is used to indicate whether a function identified by the first function symbol is included in the source code; and performing, by the compiler, code obfuscation on the first intermediate code according to the indication information.

[0014] In a possible implementation, the method further includes: when the first intermediate code contains a function identified by the second function symbol, sending the second function symbol to a package manager through inter-process communication, so that the package manager adds the second function symbol to a remote function symbol cache table maintained by the package manager for a project to which the source code belongs.

[0015] In a possible implementation, the compiler code obfuscates the first intermediate code according to the indication information, including: the compiler determining, according to the indication information, whether the first intermediate code contains a function identified by the second function symbol; and the compiler code obfuscating the second function symbol in the first intermediate code when the first intermediate code contains the function identified by the second function symbol.

[0016] In a possible implementation, the compiler code obfuscates the first intermediate code according to the indication information, and further including: when the first intermediate code does not contain the function identified by the second function symbol, the compiler sending, to a package manager, a query request containing the first function symbol through inter-process communication, so that the package manager returns a query result, where the query result is used to indicate whether the second function symbol is included in a remote symbol cache table maintained by the package manager for a project to which the source code belongs; and the compiler code obfuscating the second function symbol in the first intermediate code when the remote symbol cache table contains the second function symbol.

[0017] In a possible implementation, the source code is written based on a Rust programming language.

[0018] In a third aspect, a computer readable storage medium is provided, and the computer readable storage medium stores a computer program / instruction. When the computer program / instruction is executed in a computing device, the computing device performs the method according to any one of the first aspect.

[0019] In a fourth aspect, a computing device is provided, including a memory and a processor. The memory stores a computer program / instruction, and the processor executes the computer program / instruction to implement the method according to any one of the first aspect.

[0020] By the method and the device provided in one or more embodiments of the present specification, the compiler can perform code obfuscation simultaneously in the process of compiling the source code. BRIEF DESCRIPTION OF DRAWINGS

[0021] In order to more clearly illustrate the technical solutions of the embodiments of the present specification, the following will briefly introduce the drawings needed to be used in the embodiment description. Obviously, the drawings in the following description are only some embodiments of the present specification, and those skilled in the art can obtain other drawings according to these drawings without any creative effort.

[0022] Figure 1A schematic diagram of a compiler provided in an embodiment of the present specification;

[0023] Figure 2 A schematic diagram of a technical scenario to which a technical solution provided in an embodiment of the present specification is applicable;

[0024] Figure 3 A schematic diagram of another compiler provided in an embodiment of the present specification;

[0025] Figure 4 A flowchart of a method for compiling source code using a compiler provided in an embodiment of the present specification. DETAILED DESCRIPTION

[0026] The various non-limiting embodiments provided in the present specification will be described in detail below with reference to the accompanying drawings.

[0027] Code obfuscation (Obfuscated code) is the act of transforming the code of a computer program into a form that is functionally equivalent but more difficult to read and understand. In some code obfuscation techniques, code obfuscation and compilation of the code of an application need to be implemented in stages, for example, code obfuscation needs to be implemented on the source code of the application first, and then the compiler is used to compile the source code that has been code obfuscated, the code obfuscation stage and the compilation stage are independent of each other.

[0028] An embodiment of the present specification provides a compiler and a method for compiling source code thereof, the compiler can simultaneously perform code obfuscation in the process of compiling the source code.

[0029] Figure 1 A schematic diagram of a compiler provided in an embodiment of the present specification. As shown in Figure 1 the compiler includes at least a front-end processing module 101, a code obfuscator 103, and a back-end processing module 105. The front-end processing module 101 is configured to generate a first intermediate code corresponding to the source code of the application according to the source code of the application, and output the first intermediate code to the code obfuscator; the code obfuscator 103 is configured to perform code obfuscation on the first intermediate code received thereby; and the back-end processing module 105 is configured to generate executable code according to the first intermediate code that has been code obfuscated.

[0030] Taking the Rust programming language as an example, as shown in Figure 2As shown, the package manager Cargo can create a corresponding project ZN, and the project ZN can include a plurality of compilable units Crate, such as Crate A and Crate B; a plurality of code files corresponding to a plurality of functions can be included in a single compilable unit, such as the code file corresponding to function A1 in Crate A, and the code file corresponding to function B1 and function B2 in Crate B. The foregoing source code can be a single compilable unit under a project created by the package manager, such as Crate A or Crate B under the project ZN; the functions in the Crate as source code can call the functions in other Crates, such as function B2 in Crate B can call function A1 in Crate A, and similarly, the functions in the Crate as source code can be called by the functions in other Crates under the project to which the Crate belongs. Correspondingly, when the compiler compiles Crate A, the corresponding executable code A can be generated, which can be an executable file of an application program or a library file allowing other Crates under the project ZN to be linked, and the executable code A includes the implementation of function A1; when the compiler compiles Crate B, the corresponding executable code B can be generated, which can be an executable file of an application program or a library file allowing other Crates under the project ZN to be linked, and the executable code B includes the implementations of function A1, function B1, and function B2.

[0031] In a possible implementation, as shown in Figure 3 The front-end processing module 101 can specifically include a preprocessing unit 1011, a compilation processing unit 1013, and an optimization processing unit 1015, and the like.

[0032] In order to ensure the uniqueness of the named entities in the source code, the preprocessing unit 1011 can generate a new function symbol corresponding to a function symbol in the source code, such as by adding a prefix to the function symbol. For example, a code file belonging to Crate A includes function A1 identified by function symbol “A1”, and Crate A includes function symbol “A1”; at this time, the preprocessing unit 1011 can generate a second function symbol “ZN_A_A1” corresponding to the first function symbol “A1” by adding a prefix through the mangle component, so as to ensure that other functions under Crate A or functions belonging to other Crates under the project ZN can accurately call function A1.

[0033] Correspondingly, the preprocessing unit 1011 can output the processed source code to the compiling processing unit 1013; the compiling processing unit 1013 can compile the received source code to generate second intermediate code and output the second intermediate code to the optimization processing unit 1015; the optimization processing unit 1015 can perform optimization processing on the received second intermediate code to generate first intermediate code. Specifically, the optimization processing unit 1015 can implement an LLVM Optimizer based on a framework system of a Low Level Virtual Machine (LLVM) for an architecture compiler, which can be used to optimize compile-time, link-time, run-time, idle-time, etc.

[0034] In a possible implementation, the front-end processing module 101 can further include a rule checking unit, which can perform corresponding rule checking on the second intermediate code output by the compiling processing unit 1013, for example, find and correct syntax errors in the second intermediate code, and output the second intermediate code after completing the rule checking to the optimization processing unit 1015 for optimization processing.

[0035] In a possible implementation, the preprocessing unit 1011 can further generate corresponding indication information for the first function symbol in the source code, where the indication information is used to indicate whether the function identified by the first function symbol is included in the source code. For example, for the function symbol “A1” in Crate A, the preprocessing unit 1011 can further generate corresponding indication information “local”, which is used to indicate that Crate A already includes the function identified by the function symbol “A1”.

[0036] Correspondingly, the code obfuscator 103 can perform code obfuscation on the first intermediate code output by the optimization processing unit 1015 according to the indication information generated by the preprocessing unit 1011. More specifically, the code obfuscator 103 can determine, according to the indication information, whether the first intermediate code includes the function identified by the second function symbol, and when the first intermediate code includes the function identified by the second function symbol, perform code obfuscation on the second function symbol in the first intermediate code. For example, the code obfuscator 103 can know, according to the indication information “local” corresponding to the first function symbol “A1”, that Crate A includes the function identified by the function symbol “A1”; since the function symbol “A1” corresponds to the function symbol “ZN_A_A1”, the code obfuscator 103 can determine that the first code file includes the function identified by the function symbol “ZN_A_A1” as the second function symbol.

[0037] It can be understood that when the intermediate code output by the optimizer 1015 contains a function identified by a certain function symbol, code obfuscation of the function symbol does not affect the accurate compilation and subsequent use of the intermediate code.

[0038] In a possible implementation, the package manager can maintain a remote function symbol cache table for the project it creates. For each Crate of the project ZN, after the second function symbol corresponding to the function symbol of each function contained in the Crate is generated by the function name generation component, the second function symbol can be stored in the remote symbol cache table.

[0039] In other words, when the code obfuscator 103 contains a function identified by the second function symbol in the first intermediate code, the code obfuscator 103 can send the second function symbol to the package manager through inter-process communication, so that the package manager adds the second function symbol to the remote function symbol cache table maintained by the package manager for the project to which the source code belongs. For example, when the source code is Crate A under the project ZN, the function symbol "ZN_A_A1" as the second function symbol can be stored in the remote symbol cache table maintained by Cargo for the project ZN. In this way, it is beneficial for the compiler to complete the compilation of the source code into executable code, and the executable code is linked as a library file by other Crates in the project.

[0040] Correspondingly, when the code obfuscator 103 does not contain a function identified by the second function symbol in the first intermediate code, the code obfuscator 103 can send a query request containing the second function symbol to the package manager through inter-process communication, so that the package manager returns a query result. The query result is used to indicate whether the second function symbol is included in the remote symbol cache table maintained by the package manager for the project to which the source code belongs. When the second function symbol is included in the remote symbol cache table, the first function symbol is code-obfuscated. It should be noted that when the second function symbol is included in the remote symbol cache table, it indicates that the function identified by the first function symbol in other Crates under the project ZN has been code-obfuscated. At this time, the code obfuscator obfuscates the second function symbol in the intermediate code, which does not affect the normal linkage of the executable code generated subsequently to the library file compiled by other Crates under the project ZN.

[0041] For example, since function B2 needs to call function A1, Crate A needs to be compiled first and then Crate B in terms of the compiling order of Crate A and Crate B. As described above, during the process of compiling Crate A, the compiler can code-mix the function symbol "ZN_A_A1" corresponding to function symbol A1, and store the function symbol "ZN_A_A1" into the remote symbol table maintained by Cargo for the project ZN. When Crate B is compiled by the compiler as source code, the function B also contains the function symbol "A1", and the compiler determines that Crate B does not contain the function identified by function "A1" according to the indication information generated by the compiler for function symbol A1, so as to know that the first intermediate code corresponding to Crate B also does not contain the function identified by function symbol "ZN_A_A1". However, the compiler can continue to query the remote symbol table maintained by Cargo for the project ZN through inter-process communication to find that the function symbol "ZN_A_A1" is contained in the remote symbol table, and the compiler knows that the function symbol "ZN_A_A1" has been code-mixed when compiling the library file expected to be linked by Crate B, and the code-mixing of the function symbol "ZN_A_A1" in the first intermediate code corresponding to Crate B will not affect the accurate linking of the corresponding library file in the subsequent process.

[0042] It should be noted that the code-mixer 103 can not only implement the code-mixing of the intermediate code output by the front-end processing module 101 in various manners of the foregoing examples, but also implement the code-mixing of the intermediate code output by the front-end processing module 101 in other strategies, for example, code-mixing the variables, structures and the like in the intermediate code output by the front-end processing module 101 according to a preconfigured mapping rule; for example, replacing some instruction fragments in the intermediate code output by the front-end processing module 101 with other instruction fragments with the same function.

[0043] It should be noted that the back-end processing module 105 can specifically convert the intermediate code processed by the code-mixer into a Common Object File Format based on a corresponding instruction set, for example, based on the instruction set of an ARM or X86 architecture processor, and the converted file is also referred to as an OBJ file; the back-end processing module can then link the OBJ file with the library file that needs to be linked to obtain executable code.

[0044] Based on the same concept as the compiler in each of the foregoing embodiments, the present specification embodiment also provides a method for compiling source code by using a compiler. As shown in FIG. 10, the method comprises the following steps. Figure 4As shown, the method can include: step 401, the compiler generates a first intermediate code corresponding to the source code according to the source code; step 403, the compiler performs code obfuscation on the first intermediate code; and step 405, the compiler generates executable code according to the first intermediate code after the code obfuscation.

[0045] In a possible implementation, the compiler generates a first intermediate code corresponding to the source code, including: the compiler generates a second function symbol corresponding to a first function symbol in the source code, and replaces the first function symbol in the source code with the second function symbol; the compiler generates a second intermediate code according to the source code after the replacement; and the compiler performs optimization processing on the second intermediate code to generate the first intermediate code.

[0046] In a possible implementation, the method further includes: the compiler generates, for the first function symbol, indication information indicating whether the source code contains a function identified by the first function symbol; and the compiler performs code obfuscation on the first intermediate code according to the indication information.

[0047] In a possible implementation, the method further includes: when the first intermediate code contains a function identified by the second function symbol, the compiler sends the second function symbol to the package manager through inter-process communication, so that the package manager adds the second function symbol to a remote function symbol cache table maintained by the package manager for a project to which the source code belongs.

[0048] In a possible implementation, the compiler performs code obfuscation on the first intermediate code according to the indication information, including: the compiler determines, for the second function symbol in the first intermediate code, whether the first intermediate code contains a function identified by the second function symbol according to the indication information; and when the first intermediate code contains the function identified by the second function symbol, the compiler performs code obfuscation on the second function symbol in the first intermediate code.

[0049] In a possible implementation, the compiler performs code obfuscation on the first intermediate code according to the indication information, and further includes: when the first intermediate code does not contain the function identified by the second function symbol, the compiler sends a query request containing the first function symbol to the package manager through inter-process communication, so that the package manager returns a query result, where the query result is used to indicate whether the second function symbol is included in a remote symbol cache table maintained by the package manager for a project to which the source code belongs; and when the remote symbol cache table includes the second function symbol, the compiler performs code obfuscation on the second function symbol in the first intermediate code.

[0050] In a possible implementation, the source code is written based on a Rust programming language.

[0051] Those skilled in the art should be aware that, in the one or more examples described above, the functions described in the specification can be implemented in hardware, software, firmware or any combination thereof. When implemented in software, the computer program corresponding to the functions can be stored in a computer readable medium or transmitted as one or more instructions or codes on the computer readable medium, so that the computer program is executed by a computer to implement the method described in any one of the embodiments of the specification.

[0052] The embodiments of the specification further provide a computer readable storage medium, which stores a computer program / instruction, when the computer program / instruction is executed in a computing device, the computing device executes the method for compiling source code by using a compiler provided in any one of the embodiments of the specification.

[0053] The embodiments of the specification further provide a computing device, which comprises a memory and a processor, the memory stores executable code, and the processor executes the executable code to implement the method for compiling source code by using a compiler provided in any one of the embodiments of the specification.

[0054] Each of the embodiments in the specification is described in a progressive manner, and the same and similar parts in each of the embodiments can be referred to each other, and the difference of each of the embodiments is mainly described in each of the embodiments. Especially for the method embodiments, since the method embodiments are basically similar to the compiler provided in other embodiments, for example, the method steps can be implemented by a specific function module of the compiler provided in other embodiments. Therefore, the method embodiments are described relatively simply, and the related parts can be referred to the part of the compiler provided in the related embodiments.

[0055] The above describes specific embodiments of the specification. Other embodiments are within the scope of the appended claims. In some cases, the acts or steps recited in the claims can be performed in a different order than the order in which they are recited and still achieve desirable results. In addition, the processes depicted in the figures do not necessarily require the particular order shown, or sequential order, to achieve the desired results. In certain implementations, multitasking and parallel processing can be advantageous.

[0056] The above specific embodiments further describe the purpose, technical solutions and beneficial effects of the present application. It should be understood that the above description is only a specific embodiment of the present application, and is not used to limit the protection scope of the present application. Any modification, equivalent replacement, improvement, etc. made on the basis of the technical solutions of the present application shall be included in the protection scope of the present application.

Claims

1. A compiler, comprising: a front-end processing module configured to generate a first intermediate code corresponding to a source code and output the first intermediate code to a code obfuscator, the source code being a single compilable unit under a compilation project created by a package manager; wherein the front-end processing module comprises: a pre-processing unit configured to generate a second function symbol corresponding to a first function symbol in the source code, the second function symbol comprising the first function symbol and prefix information, the prefix information comprising identification information of the compilation project and identification information of a target compilable unit, the target compilable unit being a compilable unit to which a function identified by the first function symbol belongs, replace the first function symbol in the source code with the second function symbol, and generate indication information for the first function symbol, the indication information indicating whether the source code contains the function identified by the first function symbol; a compilation processing unit configured to generate a second intermediate code according to the source code processed by the pre-processing unit; an optimization processing unit configured to perform optimization processing on the second intermediate code to generate the first intermediate code; the code obfuscator configured to perform code obfuscation on the first intermediate code received thereby according to the indication information; and a back-end processing module configured to generate executable code according to the first intermediate code after code obfuscation.

2. The compiler of claim 1, wherein, the code obfuscator is configured to determine, for the second function symbol in the first intermediate code, whether the first intermediate code contains the function identified by the second function symbol according to the indication information, and perform code obfuscation on the second function symbol in the first intermediate code when the first intermediate code contains the function identified by the second function symbol. the code obfuscator is further configured to, when the first intermediate code contains the function identified by the second function symbol, send the second function symbol to the package manager through inter-process communication, so that the package manager adds the second function symbol to a remote function symbol cache table maintained by the package manager for a project to which the source code belongs.

3. The compiler of claim 1, wherein, the code obfuscator is further configured to, when the first intermediate code does not contain the function identified by the second function symbol, send a query request containing the first function symbol to the package manager through inter-process communication, so that the package manager returns a query result indicating whether the second function symbol is included in a remote symbol cache table maintained by the package manager for the project to which the source code belongs; 4. The compiler of claim 1, wherein, when the remote symbol cache table contains the second function symbol, the code obfuscator performs code obfuscation on the second function symbol in the first intermediate code. 5.The compiler of any one of claims 1-4, wherein the source code is written in Rust programming language. 6.A method for compiling a source code by a compiler, comprising: generating, by the compiler, a first intermediate code corresponding to a source code, the source code being a single compilable unit under a compilation project created by a package manager; ​ The compiler generates the first intermediate code according to the source code, including: the compiler generates a second function symbol corresponding to a first function symbol in the source code, the second function symbol including the first function symbol and prefix information, the prefix information including identification information of the compilation project and identification information of a target compilable unit, the target compilable unit being a compilable unit to which a function identified by the first function symbol belongs, replacing the first function symbol in the source code with the second function symbol, and generating indication information for the first function symbol, indicating whether the source code includes the function identified by the first function symbol; the compiler generates a second intermediate code according to the source code after the replacement; and the compiler optimizes the second intermediate code to generate the first intermediate code. The compiler performs code obfuscation on the first intermediate code according to the indication information. The compiler generates executable code according to the first intermediate code after code obfuscation.

7. The method of claim 6, wherein, The method further includes: when the first intermediate code includes the function identified by the second function symbol, the compiler sends the second function symbol to a package manager through inter-process communication, so that the package manager adds the second function symbol to a remote function symbol cache table maintained by the package manager for a project to which the source code belongs.

8. The method of claim 6, wherein, The compiler performs code obfuscation on the first intermediate code according to the indication information, including: the compiler determines whether the first intermediate code includes the function identified by the second function symbol according to the indication information for the second function symbol in the first intermediate code; and when the first intermediate code includes the function identified by the second function symbol, the compiler performs code obfuscation on the second function symbol in the first intermediate code.

9. The method of claim 8, wherein, The compiler performs code obfuscation on the first intermediate code according to the indication information, further including: when the first intermediate code does not include the function identified by the second function symbol, the compiler sends a query request including the first function symbol to a package manager through inter-process communication, so that the package manager returns a query result indicating whether the second function symbol is included in a remote symbol cache table maintained by the package manager for a project to which the source code belongs; and when the remote symbol cache table includes the second function symbol, the compiler performs code obfuscation on the second function symbol in the first intermediate code.

10. The method of any one of claims 6-9, wherein the source code is written in a Rust programming language.

11. A computer-readable storage medium having stored thereon a computer program, which, when executed in a computing device, causes the computing device to perform the method of any one of claims 6-10.

12. A computing device comprising a memory having a computer program stored therein and a processor, wherein the processor, when executing the computer program, implements the method of any one of claims 6-10.

Citation Information

Patent Citations

  • Code obfuscation method and code running method and device

    CN107038354A

  • A program control flow obfuscation method and device based on LLVM

    CN109784010A

  • Source code processing method and device, storage medium and electronic equipment

    CN110058861A

  • Code obfuscation method and device, equipment and storage medium

    CN111143790A