The front line has a netizen called me to help crack a control. Use dotfuscator confused, strings also encrypt this form IL_2B19: LDSTR BYTEARRAY (9F FA 9A FC 9E Fe 8B 00 6e 02 71 04) // ..... ... NQIL_2B1E: Call string a $ PST06000001 (String)
The protection method of .NET software is nothing more than the limit time, limited access to IP, with license key, and the copyright is displayed. Limit time or IP is the easiest to get it, no matter whether it is confused, he wants to call Framework. Things, and the things in the framework can't be confused, so find the words of DateTime, Request, get it. If you use Key, it is easy to track, at least he exposes a class to receive Key. If the control is checked Throw an exception when illegally use, is a more stupid approach, because .NET will provide a call stack when it will make me track. Display copyright tips and the characters are confused (not confused. , Lookup is what he never works like a formal version. The only thing that is difficult to fell is INTERSOFT WebGrid.Net 3.5 because he uses Remotesoft Protector to handle. This protector does not place the confusing device, he is .NET The code is made into Win32 mirror, only reserves the metadata. Break the controlled control and the dense Win32 program is as difficult, I don't have this kind of thing. Of course, I have a small software, because it is too expensive, To be a Trial version of a Chart control this time, he left a touch of lightprints on the copyright copyright when rendering the chart. It is necessary to break from his confused string function, it is String a $ PST06000001 (STRING). To write a reverse compiler, use the anti-compiler to confine this function: private static string a (string a_0) {char [] chs = new char [(uint) A_0.Length]; int i = 732379897; For (int J = 0; j <(int) chs.length; j ) {char ch = a_0.Chars (j); Byte B1 = (Byte) (CH & '/ U00FF' ^ i ); byte B2 = (BYTE) (CH >> '/ b' ^ i ); CHS [J] = (Ushort) (B2 << 8 | B1);} return string.intern (new string (chs));} first eye It seems that it seems to be very difficult. Confusion process actually and XOR OR, there are two intermediate variables, then mix together ... but this algorithm must be reversible, or how can he be encrypted then Decrypt. Sure enough, look at it, there are many places that are scared. Original and or always not reversible, you can affirm the relevant operations are waste: the first sentence byt E B1 = (Byte) (CH & '/ U00FF' ^ i ); B1 is an 8-bit integer, so CH & FF will not change anything, so it can be simplified as (BYTE) (CH ^ i ) second sentence byte B2 = (Byte) (CHTE) (CH >> '/ b' ^ i ); did not see anything wrong, CH is 16-bit, the right shift 8 bits may affect the third sentence CHS [J] = (USHORT) (B2) << 8 | b1); again, B2 is 8, right shift 8 is 0, 0 | B1 is B1 good, the simplified function is Private Static String A (String a_0) {char [ ] chs = new char [(uint) A_0.LENGTH]; INT I = 732379897; for (int J = 0; j <(int) chs.length; j ) {char ch = a_0.Chars (j); chs [ J] = (byte) (CH ^ i ); i ;} return string.intern (new string (chs));}