рдХреИрд╕реЗ рдХрд░реЗрдВ NET.Reflector рдХреЛ рдмреЗрд╡рдХреВрдл

рдЖрдЬ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдХреИрд╕реЗ obfuscators NET.eflector рдЬреИрд╕реА deobfuscation рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рд╕реЗ рд╡рд┐рдзрд┐ рдХреЛрдб рдЫрд┐рдкрд╛рддреЗ рд╣реИрдВред рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рдорд┐рд▓реА (рдореИрдВрдиреЗ рдЦрд░рд╛рдм рдЦреЛрдЬ рдХреА рд╣реЛ рд╕рдХрддреА рд╣реИ) рдФрд░ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЦреБрдж рдереЛрдбрд╝рд╛ рд╢реЛрдз рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдХрдЯреМрддреА рдХреЗ рддрд╣рдд, рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдиреЛрдЯред рдирдореВрдирд╛ рдХреЛрдб рдореЗрдВ, Mono.Cecil рдФрд░ рдХреЛрдб рдкреАрдврд╝реА рдХрд╛ рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рд▓реЗрдЦ рдкрдврд╝рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ ред







рд╕рд┐рджреНрдзрд╛рдВрдд рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ MSIL рдЕрдиреБрджреЗрд╢ рдХреЛрдб рдХреЛ рдПрдХ рдпрд╛ рджреЛ рдмрд╛рдЗрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдирдУрдкреА рдирд┐рд░реНрджреЗрд╢ рдХреЛ 0x00 рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 65,536 рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред рдлрд┐рд▓рд╣рд╛рд▓, рдЗрд╕ рд╕реНрдерд╛рди рдореЗрдВ рд╕реЗ рдХреБрдЫ рдкрд░ рдорд╛рдиреНрдп MSIL рдЕрдиреБрджреЗрд╢ рдХреЛрдб рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВред JIT рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдЧрд▓рдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред NET.Reflector, рдПрдХ рдЧрд▓рдд рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдЯрдХрд░рд╛рдХрд░, рд╡рд┐рдзрд┐ рдХреЛрдб рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ "рдЕрдорд╛рдиреНрдп рд╡рд┐рдзрд┐ рдирд┐рдХрд╛рдп" рд╕рдВрджреЗрд╢ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред



рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдЧрд▓рдд рдирд┐рд░реНрджреЗрд╢ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рддрд╛рдХрд┐ рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдпрд╣ рд╕рдВрдХреНрд░рдордг рди рд╣реЛ рд╕рдХреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдмрд┐рдирд╛ рд╢рд░реНрдд рдХреВрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



goto MethodCode; //    MethodCode: //   
      
      







рдкрд░рд╛рд╡рд░реНрддрдХ рдХреЛрдб рдХреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдФрд░ рдЬрдм рдПрдХ рдЦрд░рд╛рдм рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдЧрд╛, рддреЛ рдпрд╣ рдареЛрдХрд░ рдЦрд╛рдПрдЧрд╛ рдФрд░ рд╡рд┐рдзрд┐ рдЖрдЧреЗ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд╣реАрдВ рдХрд░реЗрдЧреАред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдареАрдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЦрд░рд╛рдм рдирд┐рд░реНрджреЗрд╢ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдХрднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдпрд╣ рдорд╛рдорд▓рд╛ рдХреБрдЫ рдЗрд╕ рддрдереНрдп рд╕реЗ рдЬрдЯрд┐рд▓ рд╣реИ рдХрд┐ Mono.Cecil рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдмреБрд░рд╛ рдирд┐рд░реНрджреЗрд╢ рдбрд╛рд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛ - рд╕рднреА рдорд╛рдиреНрдп рдХреЛрдб рдПрдХ рдЧрдгрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рдорд╛рдирдХ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдЬреЛрдбрд╝ рдирд╣реАрдВ рд╕рдХрддреЗред рдмреЗрд╢рдХ, рдЖрдк рд╣рдореЗрд╢рд╛ Mono.Cecil рдХреЗ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд▓рд╛рдн рдПрдХ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдкреНрд░рдгрд╛рд▓реА рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдПрдХ рдорд╛рдирдХ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдкрд░ рдХрд╛рдо рдХрд░реЗред Mono.Cecil рдХреЗ рд╕реНрд░реЛрддреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рдЖрдзреЗ рдШрдВрдЯреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдХреИрд╕реЗ рдЧрд▓рдд рдирд┐рд░реНрджреЗрд╢ 0x0024 рдбрд╛рд▓рд╛ рдЬрд╛рдП рддрд╛рдХрд┐ Mono.Cecil рдиреЗ рдЗрд╕реЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдФрд░ рдЕрдкрд╡рд╛рдж рди рдлреЗрдВрдХреЗред рдЖрдЗрдП рдХреЛрдб рдХреЛ рджреЗрдЦреЗрдВ:



 static void ProtectMethod(string path, string methodName) { var assembly = AssemblyDefinition.ReadAssembly(path); foreach (var typeDef in assembly.MainModule.Types) { foreach (var method in typeDef.Methods) { if (method.Name == methodName) { var ilProc = method.Body.GetILProcessor(); //   internal    OpCode var constructor = typeof(OpCode).GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic, null, new Type[] { typeof(int), typeof(int) }, null); //  Mono.Cecil     -     4-(int) ,       8 ,        MSIL . ,        8   2 .       OpCode,      .        ,       , Mono.Cecil        Exception,       . int x = 0xff << 0 | //   IL  0x24 << 8 | //   IL  0x00 << 16 | (byte) FlowControl.Next << 24; //       ,    ,  Mono.Cecil     int y = (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push0 << 24; var badOpCode = (OpCode) constructor.Invoke(new object[] {x, y}); //    Instruction badInstruction = Instruction.Create(badOpCode); Instruction firstInstruction = ilProc.Body.Instructions[0]; //         ilProc.InsertBefore(firstInstruction, Instruction.Create(OpCodes.Br_S, firstInstruction)); //        ilProc.InsertBefore(firstInstruction, badInstruction); } } } assembly.Write(path); }
      
      







рд╣рдорд╛рд░реА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреА рдХреБрдЫ рд╡рд┐рдзрд┐ рдкрд░ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдЬрд┐рд╕реЗ рд╣рдо рджреЗрдЦрдиреЗ рд╕реЗ рдмрдЪрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ



рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рд╡рд┐рдзрд┐:

рдЫрд╡рд┐

рдЫрд╡рд┐



рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рдж рдкрд░рд╛рд╡рд░реНрддрдХ рдореЗрдВ рд╡рд┐рдзрд┐:

рдЫрд╡рд┐

рдЫрд╡рд┐



рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рдж, рдЖрд╡реЗрджрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред



рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдЖрдкрддреНрддрд┐ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ (рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА), рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рд╣реА рдЬрд╛рдирдХрд╛рд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдХреЛрдб рдХреЛ рджреЗрдЦрдиреЗ рд╕реЗ рдмрдЪрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЬрд╛рдирдХрд╛рд░реА рд╣реА рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред



All Articles