CN103678961A - Code dynamic generating method - Google Patents

Code dynamic generating method Download PDF

Info

Publication number
CN103678961A
CN103678961A CN201310549772.6A CN201310549772A CN103678961A CN 103678961 A CN103678961 A CN 103678961A CN 201310549772 A CN201310549772 A CN 201310549772A CN 103678961 A CN103678961 A CN 103678961A
Authority
CN
China
Prior art keywords
code
script
function
random
object code
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201310549772.6A
Other languages
Chinese (zh)
Other versions
CN103678961B (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 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 CN201310549772.6A priority Critical patent/CN103678961B/en
Publication of CN103678961A publication Critical patent/CN103678961A/en
Application granted granted Critical
Publication of CN103678961B publication Critical patent/CN103678961B/en
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/572Secure firmware programming, e.g. of basic input output system [BIOS]

Landscapes

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

Abstract

The invention discloses a code dynamic generating method. The code dynamic generating method comprises the following steps of selecting a source code, decomposing the source code into a sequence of multiple sections of basic operations, replacing all the sections of the basic operations by using corresponding functions and parameters in scripting languages to obtain converted scripts, carrying out compilation on the converted scripts to generate template programs, running the template programs, and calling all the scripting functions in sequence, wherein when the scripting functions are called, implementation modes of the scripting functions are selected randomly to run the scripting functions, and thus first target codes are generated; mixing modes are selected randomly, the first target codes are mixed, and thus second target code snippets are generated; the second target code snippets are spliced into second target codes. According to the code dynamic generating method, the position and the content of target codes are not fixed any more, cracking difficulty is increased, and safety is improved.

Description

The method that code dynamically generates
Technical field
The present invention relates to software protection field, relate in particular to a kind of method that code dynamically generates.
Background technology
In prior art, the generation step of code is: source program=> compiling=> object code, and this generation method has two features:
1, code position is fixed, and has stronger corresponding relation between object code and source program, and for example the code position in file destination in general same source file is also adjacent.And object code inside has dependence, as function call, access global variable etc., by mechanism such as reorientations, solve dependence.
2, code content is fixed, and with the repeatedly compiling under equivalent environment of a source code, the object code of generation is basic identical.
Above two features, are disadvantageous for software protection, and cracker is easily by position and the reverse function of deriving software of dependence, and the logical inverse by object code is to the logic of releasing source program.Especially for the protected software product of robotization, generally need in protected program, inject the distinctive runtime code of protection instrument, as deciphering, hook, reduce certain tables of data, explain virtual code etc.These codes are protected program if static generation is reinjected, thereby because position, content duplicate, causes general solution, cracks all programs of being protected by this instrument that once just can crack.
Summary of the invention
Technical matters to be solved by this invention is that a kind of method that provides code dynamically to generate, no longer fixes the position of object code and content, thereby increase, cracks difficulty, has improved security.
In order to solve the problems of the technologies described above, the invention provides a kind of method that code dynamically generates, comprise the following steps:
S1: choose source code;
S2: the sequence that described source code is decomposed into multistage basic operation;
S3: with function corresponding in script and each section of basic operation of parameter replacement to obtain the script through conversion;
S4: the described script through conversion is compiled, generate masterplate program;
S5: operation masterplate program, each script function is sequentially called, wherein, when calling each script function, chooses at random the implementation of this script function and moves this script function and generate first object code;
S6: choose at random and obscure mode, first object code is obscured, generate the second object code fragment;
S7: be the second object code by the second object code fragment assembly.
As preferably, step S1 is specially the key code of manually choosing in source code.
As preferably, step S2 specifically comprises source code is done to grammatical analysis, to all operations node in syntax tree, according to precedence of operator rule, finds corresponding script function and carries out stipulations, thereby described source code is decomposed into the sequence of multistage basic operation.
As preferably, the script in step S3 comprises higher level lanquage or custom script language.
As preferably, the described implementation in step S5 is selected from the predefined multiple implementation of called script function at random.
Fake preferably, that obscures that mode is selected from described first object code at random described in step S6 predefined multiplely obscures mode.
Compared with prior art, the beneficial effect of the method that code of the present invention dynamically generates is: by making masterplate program, masterplate program is exported first object code when operation, and this first object code has been added and obscured with randomness to obtain the second object code, position and the content of the second object code are no longer fixed, its content is also difficult to analyze because obscuring, and has increased the difficulty that cracker analyzes and cracks, and has improved security.
Accompanying drawing explanation
Fig. 1 is the schematic flow sheet of the dynamic method generating of code of embodiments of the invention;
Fig. 2 is for being applied to a schematic diagram in embodiment by the dynamic method generating of the code of embodiments of the invention.
Embodiment
The method code of embodiments of the invention dynamically being generated below in conjunction with the drawings and specific embodiments is described in further detail, but not as a limitation of the invention.
Fig. 1 is the schematic flow sheet of the dynamic method generating of code of embodiments of the invention.The method that the code of embodiments of the invention dynamically generates, comprises the following steps:
S1: choose source code;
S2: the sequence that described source code is decomposed into multistage basic operation.Can described source code be decomposed into by automatic or manual mode to the sequence of basic operation.The control transfer operations such as arithmetical operation, function call, logic branch such as described basic operation comprises and adding, subtracts, multiplication and division, and get the internal storage access operations such as address, dereference, storehouse.As the present embodiment preferred version, the implementation method of automated manner is for to do grammatical analysis to source code, to all operations node in syntax tree, according to precedence of operator rule, find corresponding script function and carry out stipulations, thereby described source code is decomposed into the sequence of multistage basic operation;
S3: with function corresponding in script and each section of basic operation of parameter replacement to obtain the script through conversion;
S4: the described script through conversion is compiled, generate masterplate program;
S5: operation masterplate program, each script function is sequentially called, wherein, when calling each script function, chooses at random the implementation of this script function and moves this script function and generate first object code;
S6: choose at random and obscure mode, first object code is obscured, generate the second object code fragment;
S7: be the second object code by the second object code fragment assembly.
Wherein:
Step S1 can be preferably the key code of manually choosing in source code, and key code is dealt with, and has simplified program runtime when having ensured code safety.
The control transfer operations such as arithmetical operation, function call, logic branch such as in step S2, described basic operation comprises and adding, subtracts, multiplication and division, and get the internal storage access operations such as address, dereference, storehouse.As the present embodiment preferred version, the implementation method of automated manner is for to do grammatical analysis to source code, to all operations node in syntax tree, according to precedence of operator rule, find corresponding script function and carry out stipulations, thereby described source code is decomposed into the sequence of multistage basic operation.As automatic analysis i+5*k, grammer seeds, the priority of operational symbol " * " is higher than "+", so " * " node (child node is " 5 " and " k ") of first stipulations grammer seeds, find the script function that " * " is corresponding, output-scr IPT_MUL (temp1,5, k), continue "+" node (child node becomes " i " and " temp1 ") in stipulations syntax tree, output-scr IPT_ADD (temp2, i, temp1).
Except by automated manner, the realization that above-mentioned implementation also can be manually, method is manual read's source code.As source code lines i=fun (); By artificial cognition, be call function and preserve two operations of rreturn value, can utilize SCRIPT_CALL and SCRIPT_MOV two this replacement of traveling far and wide.
Script in step S3 comprises higher level lanquage or custom script language, and higher level lanquage includes but not limited to C, Python, and the function of described correspondence and parameter refer to that SCRIPT_ADD represents that addition, SCRIPT_CALL representative function call etc.
In step S4, each script function in masterplate program is sequentially called, and each script function can generate a bit of random object code of obscuring, and splicing is exactly the object code of having realized the function of the source code of choosing before.Masterplate program has randomness, and described randomness refers to repeatedly move masterplate with same input, and the object code obtaining is different.Masterplate program can seen to be a kind of code that can generating code, it in function and compiler (as VMP) basic identical.Template program can be the corresponding executable program of script or one section of code.Masterplate program structure is the source code fragment of choosing to be decomposed and pass through the sequential combination of the code after other equivalent scripts are replaced.During operation, being also sequentially to carry out according to the script of storage inside, is when carrying out each script function, can select at random a kind of predefined implementation (as directly or indirectly called), then selects at random a kind of mode of obscuring, and generates final code.For example, for example in script, the content of certain a line is operation masterplate:
SCRIPT_ADD(I,J,5);
Wherein SCRIPT_ADD is an auxiliary function, is defined in the subsidiary Runtime Library of script, and its function is, to the code of output " completing add operation " in buffer zone, its realization can schematically as follows (be take C language as example):
One section of code such as unsigned SCRIPT_ADD (BYTE*buf, void*param1Addr, void*param2Addr, void*param3Addr); Therefore when operation template, SCRIPT_ADD function will be performed, and exports several bytes, as bytes such as " B8xx xx xx xx ", realizes the corresponding function of source code.
Described implementation in step S5 is selected from the predefined multiple implementation of called script function at random.The implementation of choosing at random script function in this step is through predefined, and each script function has predefined multiple implementation.As SCRIPT_CALL can adopt directly, call, the mode such as indirect call realizes, and chooses at random a kind of implementation during operation.
That described in step S6, obscures that mode is selected from described first object code at random predefined multiplely obscures mode.In this step, can adopt any existing obfuscator or mode to realize.In the object code of above-mentioned generation, a lot of common basic operations, have the predefined multiple mode of obscuring.The present embodiment obscure mode, as MOV, r32, imm (immediate is sent to 32 bit register instructions) can obscure for PUSH imm and POP r32, also can obscure for MOVrRand, imm and MOV r32, rRand (immediate is delivered to random register, then deliver to and specify register from random register), during operation, choose at random a kind of mode of obscuring, generate the second object code fragment.
Fig. 2 is for being applied to a schematic diagram in embodiment by the dynamic method generating of the code of embodiments of the invention.By an embodiment, further illustrate implementation method of the present invention below.
Choose following source code fragment (as a certain section of key code):
j=func1();
i=j+5;
func2(i);
This source code fragment is the in the situation that of general compiled, and the object code of generation is substantially fixing:
E878000000//call403250 (address of func1)
A348114000//mov[j], eax is saved in variable j by function return value
83C005//add?eax,5
A34C114000//mov[i], eax is saved in variable i by the value of j+5
50//push eax is by function parameter pop down
E8D0000000//call401170 (address of func2)
Source code fragment is decomposed into basic operation sequence, and is converted to following script:
SCRIPT_CALL(func1);
SCRIPT_MOV(i,RET_VAL);
SCRIPT_ADD(i,j,5);
SCRIPT_CALL(func2,i);
After script compile, produce following template program:
Call SCRIPT_CALL//generate with certain random fashion after the obscuring code that calls func1
Call SCRIPT_MOV//generate with certain random fashion after the obscuring code that func1 rreturn value is saved in to variable i
Call SCRIPT_ADD//generate with certain random fashion after the obscuring code that the result of i+5 is saved in to j
Call SCRIPT_CALL//generate with certain random fashion after the obscuring code that calls func2.
Operation template, produces following first object code:
C70540... // func1 address is saved in to function address table the x item
C70544... // func2 address is saved in to function address table the y item
FF15 ... // call function address table x item
89C3//rreturn value is saved in random register
891E ... the value of // random register is saved in variable i
83C307//random register +=7 (random number)
83EB02//random register-=2 (be equal to+5)
8B3E//be saved in variable j
FF36... // use direct stack accessing simulation PUSH, by parameter pop down
FF15 ... // call function address table y item.
First object code is obscured, generated the second object code fragment, the second object code fragment assembly is gone out to the second object code.This process does not repeat them here.
Above embodiment is only exemplary embodiment of the present invention, is not used in restriction the present invention, and protection scope of the present invention is defined by the claims.Those skilled in the art can make various modifications or be equal to replacement the present invention in essence of the present invention and protection domain, this modification or be equal to replacement and also should be considered as dropping in protection scope of the present invention.

Claims (6)

1. the method that code dynamically generates, is characterized in that, comprises the following steps:
S1: choose source code;
S2: the sequence that described source code is decomposed into multistage basic operation;
S3: with function corresponding in script and each section of basic operation of parameter replacement to obtain the script through conversion;
S4: the described script through conversion is compiled, generate masterplate program;
S5: operation masterplate program, each script function is sequentially called, wherein, when calling each script function, chooses at random the implementation of this script function and moves this script function and generate first object code;
S6: choose at random and obscure mode, first object code is obscured, generate the second object code fragment;
S7: be the second object code by the second object code fragment assembly.
2. the method that code according to claim 1 dynamically generates, is characterized in that, step S1 is specially the key code of manually choosing in source code.
3. the method that code according to claim 1 dynamically generates, it is characterized in that, step S2 specifically comprises source code is done to grammatical analysis, to all operations node in syntax tree, according to precedence of operator rule, find corresponding script function and carry out stipulations, thereby described source code is decomposed into the sequence of multistage basic operation.
4. the method that code according to claim 1 dynamically generates, is characterized in that, the script in step S3 comprises higher level lanquage or custom script language.
5. the method that code according to claim 1 dynamically generates, is characterized in that, the described implementation in step S5 is selected from the predefined multiple implementation of called script function at random.
6. the method that code according to claim 1 dynamically generates, is characterized in that, that obscures that mode is selected from described first object code at random described in step S6 predefined multiplely obscures mode.
CN201310549772.6A 2013-11-07 2013-11-07 The method that code dynamically generates Active CN103678961B (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310549772.6A CN103678961B (en) 2013-11-07 2013-11-07 The method that code dynamically generates

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310549772.6A CN103678961B (en) 2013-11-07 2013-11-07 The method that code dynamically generates

Publications (2)

Publication Number Publication Date
CN103678961A true CN103678961A (en) 2014-03-26
CN103678961B CN103678961B (en) 2016-07-06

Family

ID=50316489

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310549772.6A Active CN103678961B (en) 2013-11-07 2013-11-07 The method that code dynamically generates

Country Status (1)

Country Link
CN (1) CN103678961B (en)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105912379A (en) * 2016-04-01 2016-08-31 青岛海信电器股份有限公司 Management method of compiling tasks and management device for compiling tasks
CN106650340A (en) * 2016-11-16 2017-05-10 中国人民解放军国防科学技术大学 Binary software protection method by means of dynamic fine-grained code hiding and obfuscating technology
CN106951744A (en) * 2017-03-15 2017-07-14 北京深思数盾科技股份有限公司 The guard method of executable program and device
CN108376073A (en) * 2016-11-15 2018-08-07 平安科技(深圳)有限公司 A kind of test software packet generation method and terminal
CN109450906A (en) * 2018-11-20 2019-03-08 杭州安恒信息技术股份有限公司 Method and apparatus based on dynamic character collection obfuscated data
CN109656543A (en) * 2018-12-21 2019-04-19 苏州绿控传动科技股份有限公司 A kind of real time workshop method based on document keyword replacement
CN112115428A (en) * 2020-08-14 2020-12-22 咪咕文化科技有限公司 Obfuscation method and apparatus of code file, electronic device and storage medium
CN113487811A (en) * 2016-08-30 2021-10-08 Ncr公司 Secure process emulation detection

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120005758A1 (en) * 2010-07-01 2012-01-05 Aladdin Europe Gmbh Method and device for selectively protecting one of a plurality of methods of a class of an application written in an object-orientated language
CN103106356A (en) * 2013-02-01 2013-05-15 北京深思洛克软件技术股份有限公司 Method for generating code in safe environment and improving software protection intensity
CN103150493A (en) * 2013-02-28 2013-06-12 浙江中控技术股份有限公司 JavaScript code obfuscation method and device
CN103246848A (en) * 2013-03-26 2013-08-14 北京深思数盾科技有限公司 Software security protection method and equipment
CN103324481A (en) * 2013-06-26 2013-09-25 网宿科技股份有限公司 Compiling method and compiling system for obfuscating codes by means of assembly
CN103324872A (en) * 2013-07-12 2013-09-25 上海交通大学 Android application program protective method and system based on order confusion

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120005758A1 (en) * 2010-07-01 2012-01-05 Aladdin Europe Gmbh Method and device for selectively protecting one of a plurality of methods of a class of an application written in an object-orientated language
CN103106356A (en) * 2013-02-01 2013-05-15 北京深思洛克软件技术股份有限公司 Method for generating code in safe environment and improving software protection intensity
CN103150493A (en) * 2013-02-28 2013-06-12 浙江中控技术股份有限公司 JavaScript code obfuscation method and device
CN103246848A (en) * 2013-03-26 2013-08-14 北京深思数盾科技有限公司 Software security protection method and equipment
CN103324481A (en) * 2013-06-26 2013-09-25 网宿科技股份有限公司 Compiling method and compiling system for obfuscating codes by means of assembly
CN103324872A (en) * 2013-07-12 2013-09-25 上海交通大学 Android application program protective method and system based on order confusion

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
尚涛 等: "《软件防反汇编技术研究》", 《计算机应用研究》 *
李勇 等: "《目标代码混淆技术综述》", 《计算机技术与发展》 *

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105912379A (en) * 2016-04-01 2016-08-31 青岛海信电器股份有限公司 Management method of compiling tasks and management device for compiling tasks
CN105912379B (en) * 2016-04-01 2019-07-23 青岛海信电器股份有限公司 A kind of compiler task management method and compiler task managing device
CN113487811A (en) * 2016-08-30 2021-10-08 Ncr公司 Secure process emulation detection
CN108376073A (en) * 2016-11-15 2018-08-07 平安科技(深圳)有限公司 A kind of test software packet generation method and terminal
CN108376073B (en) * 2016-11-15 2021-10-12 平安科技(深圳)有限公司 Test software package generation method and terminal
CN106650340B (en) * 2016-11-16 2019-12-06 中国人民解放军国防科学技术大学 binary software protection method adopting dynamic fine-grained code hiding and obfuscating technology
CN106650340A (en) * 2016-11-16 2017-05-10 中国人民解放军国防科学技术大学 Binary software protection method by means of dynamic fine-grained code hiding and obfuscating technology
CN106951744A (en) * 2017-03-15 2017-07-14 北京深思数盾科技股份有限公司 The guard method of executable program and device
CN106951744B (en) * 2017-03-15 2019-12-13 北京深思数盾科技股份有限公司 protection method and device for executable program
CN109450906A (en) * 2018-11-20 2019-03-08 杭州安恒信息技术股份有限公司 Method and apparatus based on dynamic character collection obfuscated data
CN109656543A (en) * 2018-12-21 2019-04-19 苏州绿控传动科技股份有限公司 A kind of real time workshop method based on document keyword replacement
CN109656543B (en) * 2018-12-21 2022-03-29 苏州绿控传动科技股份有限公司 Automatic code generation method based on file keyword replacement
CN112115428A (en) * 2020-08-14 2020-12-22 咪咕文化科技有限公司 Obfuscation method and apparatus of code file, electronic device and storage medium
CN112115428B (en) * 2020-08-14 2024-04-09 咪咕文化科技有限公司 Code file confusion method, device, electronic equipment and storage medium

Also Published As

Publication number Publication date
CN103678961B (en) 2016-07-06

Similar Documents

Publication Publication Date Title
CN103678961A (en) Code dynamic generating method
CN103413075B (en) A kind of method and apparatus of protecting JAVA executable program by virtual machine
US8813047B2 (en) Yet another transformation language (YATL)
US8751823B2 (en) System and method for branch function based obfuscation
US10133560B2 (en) Link time program optimization in presence of a linker script
CN104866734B (en) A kind of guard method of DEX file and device
CN110569628B (en) Code obfuscation method and device, computer device and storage medium
RU2015121749A (en) COMPILATOR GENERATING NON-OPERATING CODE
CN104134039A (en) Virus checking and killing method, virus checking and killing client, virus checking and killing server and virus checking and killing system
CN101446905B (en) Method for compiling and compiler
Plaisted Source-to-source translation and software engineering
CN109543368B (en) Cross-platform source code virtualization protection method based on intermediate language interpreter
Paraskevopoulou et al. Compositional optimizations for CertiCoq
CN105373411A (en) On-board programming system and design method for on-board digital signal processor
CN104991810B (en) Method and processing system in automatic addition APK to Android system
US11231948B2 (en) Applying security mitigation measures for stack corruption exploitation in intermediate code files
Rahimian et al. RESource: a framework for online matching of assembly with open source code
US20180129490A1 (en) Object ordering preservation during lto link stage
Daggitt et al. Compiling higher-order specifications to SMT solvers: how to deal with rejection constructively
US20180275976A1 (en) Link time optimization in presence of a linker script using path based rules
Mandrykin et al. High-level memory model with low-level pointer cast support for Jessie intermediate language
CN113849781B (en) Go language source code confusion method, system, terminal and storage medium
CN111708543B (en) Method for reducing repetition degree of Android project codes
CN104636174B (en) Characteristic value definition and application method and system based on android system
de Souza Amorim et al. Towards Zero-Overhead Disambiguation of Deep Priority Conflicts.

Legal Events

Date Code Title Description
PB01 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
C14 Grant of patent or utility model
GR01 Patent grant
C56 Change in the name or address of the patentee
CP02 Change in the address of a patent holder

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

Patentee after: BEIJING SENSESHIELD TECHNOLOGY Co.,Ltd.

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

Patentee before: BEIJING SENSESHIELD TECHNOLOGY Co.,Ltd.

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.