Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C#
  4. Intellectual Property Protection BEYOND OBSFUCATION

Intellectual Property Protection BEYOND OBSFUCATION

Scheduled Pinned Locked Moved C#
csharpcomdesignquestion
24 Posts 2 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • G Glen Harvy 0

    Send me your test program and I'll NR it for you. I thought the demo output was pretty descriptive - it only obfuscated half your code. Xenocode only obfuscates 10% of the code and only hides 50% of strings in demo mode.

    Glen Harvy

    M Offline
    M Offline
    mike montagne
    wrote on last edited by
    #14

    No can send the demo, but I sure do appreciate the offer. I can't get a rise out of Denis. I surely would like to know what's going on here. I have the settings tweaked that should be protecting output. I would think NR would like to show that off in demo mode. This stuff is simple. It shouldn't be a big deal.

    G 1 Reply Last reply
    0
    • M mike montagne

      No can send the demo, but I sure do appreciate the offer. I can't get a rise out of Denis. I surely would like to know what's going on here. I have the settings tweaked that should be protecting output. I would think NR would like to show that off in demo mode. This stuff is simple. It shouldn't be a big deal.

      G Offline
      G Offline
      Glen Harvy 0
      wrote on last edited by
      #15

      I dunno where you are but Denis probably isn't even at work yet - he is in Germany. I don't want to do their technical support but if you send me the .nrpoj file I can glance over that and see if there are any obvious setup problems. Cheers,

      Glen Harvy

      M 2 Replies Last reply
      0
      • G Glen Harvy 0

        I dunno where you are but Denis probably isn't even at work yet - he is in Germany. I don't want to do their technical support but if you send me the .nrpoj file I can glance over that and see if there are any obvious setup problems. Cheers,

        Glen Harvy

        M Offline
        M Offline
        mike montagne
        wrote on last edited by
        #16

        I think my first mail should have caught him. Thanks again for the offer again. Maybe you might want to do a little beta *installation* testing for a free license when I get this rolling? That should be more fun. Just for the heck of it I looked things over again and decided to turn Compact Framework compatibility off. (I guess I was stupid to think the option meant extended versatility.) So now when I protect, I get this (different) message string: Step 1 [Examining] : Successful Step 2 [Protection Layer 1] : Successful Step 3 [Protection Layer 2] : Successful Step 4 [Resign Assembly] : Successful .NET Assembly Successfully Protected New Protected Version Of Your .NET Assembly Created In: C:\VS2005\N\GC\obj\Release\GCControls_N_Secure\GCControls_N.dll Please Only Ship Your Protected Assembly Together With 'GCControls_N_nat.dll' ----- What do you know. That's the first I saw a *nat.dll, and *nat.dll cannot be disassembled. Nor does my GCControls_N.dll seem to have but a little information in it now -- and not much at that. I don't know what to make of the resource multiplication yet. We have grown from a 60K library to two libraries, one being 67K and the other (*nat.dll) being a whopping 212. Ouch. I expect that means ultimate distributables will be bloated that much. I am a happier camper however with the arfie dog part barking. Researching what I can do with a license scheme. I think the cleanest thing will be to do as you have -- write your own.

        G 1 Reply Last reply
        0
        • G Glen Harvy 0

          I dunno where you are but Denis probably isn't even at work yet - he is in Germany. I don't want to do their technical support but if you send me the .nrpoj file I can glance over that and see if there are any obvious setup problems. Cheers,

          Glen Harvy

          M Offline
          M Offline
          mike montagne
          wrote on last edited by
          #17

          Wow. Pretty interesting content in *nat.dll, including a string, "This program must be run under Win32" I wonder if that has anything to do with the 64-bit behavior. In any case, some of the widely spaced strings have me wondering what I'm looking at here (in Notepad). Have you looked at this stuff?

          G 1 Reply Last reply
          0
          • M mike montagne

            I think my first mail should have caught him. Thanks again for the offer again. Maybe you might want to do a little beta *installation* testing for a free license when I get this rolling? That should be more fun. Just for the heck of it I looked things over again and decided to turn Compact Framework compatibility off. (I guess I was stupid to think the option meant extended versatility.) So now when I protect, I get this (different) message string: Step 1 [Examining] : Successful Step 2 [Protection Layer 1] : Successful Step 3 [Protection Layer 2] : Successful Step 4 [Resign Assembly] : Successful .NET Assembly Successfully Protected New Protected Version Of Your .NET Assembly Created In: C:\VS2005\N\GC\obj\Release\GCControls_N_Secure\GCControls_N.dll Please Only Ship Your Protected Assembly Together With 'GCControls_N_nat.dll' ----- What do you know. That's the first I saw a *nat.dll, and *nat.dll cannot be disassembled. Nor does my GCControls_N.dll seem to have but a little information in it now -- and not much at that. I don't know what to make of the resource multiplication yet. We have grown from a 60K library to two libraries, one being 67K and the other (*nat.dll) being a whopping 212. Ouch. I expect that means ultimate distributables will be bloated that much. I am a happier camper however with the arfie dog part barking. Researching what I can do with a license scheme. I think the cleanest thing will be to do as you have -- write your own.

            G Offline
            G Offline
            Glen Harvy 0
            wrote on last edited by
            #18

            There ya go - it worked. I have compression turned on and the .exe that I distribute is 791k verses about 1.8 meg for the executable and three included dll's.

            Glen Harvy

            1 Reply Last reply
            0
            • M mike montagne

              Wow. Pretty interesting content in *nat.dll, including a string, "This program must be run under Win32" I wonder if that has anything to do with the 64-bit behavior. In any case, some of the widely spaced strings have me wondering what I'm looking at here (in Notepad). Have you looked at this stuff?

              G Offline
              G Offline
              Glen Harvy 0
              wrote on last edited by
              #19

              That's interesting - perhaps NR will explain it. I haven't bothered with looking at theend result - just as long as no one can easily de-obfuscate it I'm happy.

              Glen Harvy

              1 Reply Last reply
              0
              • G Glen Harvy 0

                Let's break this discussion into two sections - Obfuscation and Licencing. Licencing: From what I can tell the SDK allows you to customize the licence file but not much else. I don't see how any of those customizations can be practically used in determining whether your program works or not. I have not examined the SDK or made any use of it but it may be possible for your program to read the licence file and do something based on the content of that file. You either accept the licencing options NR provides or you don't. BTW: In my testing, the licencing options did work and I was very impressed. I think you must be doing something wrong if it's not working for you :(. My program and it's licencing are linked to the Club's Name. The licence code is generated by the combination of the Club's name and a secret word hardcoded into my program. The 30 day trial period is also "hardcoded" into my program. If the local Womens Association :) have a hacker with heaps of time and the knowledge then I guess I've lost a sale :|. My registration company is ShareIt and they generate the keys by using their key generator software which I have also NR'ed so the all important secret word is obfuscated even to them. In your scenario I don't see how you can use the NR licencing module without using HID.exe. Obfuscation: I tried to run various de-obfuscators on my NR'ed program, ILDasm etc on the output without success. In other words - it works for me :) Cheers,

                Glen Harvy

                M Offline
                M Offline
                mike montagne
                wrote on last edited by
                #20

                Similarly, I studied .NET licensing classes last night, and it's not really clear just how I'll want to go about writing a licensing scheme -- whether to use file I/O classes. From what I see in the .Net SDK documentation, our license must be marked with a *.LIC extension. The name of the file must be the fully qualified name, including the namespace, of the class with the file name extension .LIC. For example: Namespace1.Class1.LIC This is not the case for the NR license (.license), so the NR system must be proprietary. That's OK with me -- it may be a much better thing to do, because I find the VS .Net SDK documentation quite ambiguous too. For instance, The content of the license file should contain the following text string: "myClassName is a licensed component." myClassName is the fully qualified name of the class. For example: "Namespace1.Class1 is a licensed component." Personally, I read this stuff and ask myself what it can mean to anyone. I want to know how this string, "Namespace1.Class1 is a licensed component." is processed. You would suppose that if it is removed or altered that this invalidates the license, but how and why -- and what alternate processes take over then? By the time you have deciphered all the cryptic documentation an unexplained issues (by costly experimentation), you can have far too much time in a small bit of functionality. A crux of the design issues is splitting the design time behavior and runtime behavior of distributables. The documentation seems to suggest this happens, but not how. You return a validation value by overriding a method. Unfortunately, I don't see the path as being very clear here either. Like you, I most appreciate the fact that the NR licensing scheme will be hidden by a process beyond obsfucation -- and that is presently the deciding factor in the fork I'm going to take here, especially as I have now heard from Denis, and he's agreed to let me help him improve NR's documentation. My thinking is that I'll get my job done faster with more direct help, and that if we can improve the documentation, it may be very clear what to do with what my intuition tells me is the most promising way to distribute commercial .Net assemblies which require (or benefit from) intellectual property protection. I'll read your other posts now, but will report back in the next few days if I can, on what progress Denis and I have made with his documentation. This should be interesting. m

                G 1 Reply Last reply
                0
                • M mike montagne

                  Similarly, I studied .NET licensing classes last night, and it's not really clear just how I'll want to go about writing a licensing scheme -- whether to use file I/O classes. From what I see in the .Net SDK documentation, our license must be marked with a *.LIC extension. The name of the file must be the fully qualified name, including the namespace, of the class with the file name extension .LIC. For example: Namespace1.Class1.LIC This is not the case for the NR license (.license), so the NR system must be proprietary. That's OK with me -- it may be a much better thing to do, because I find the VS .Net SDK documentation quite ambiguous too. For instance, The content of the license file should contain the following text string: "myClassName is a licensed component." myClassName is the fully qualified name of the class. For example: "Namespace1.Class1 is a licensed component." Personally, I read this stuff and ask myself what it can mean to anyone. I want to know how this string, "Namespace1.Class1 is a licensed component." is processed. You would suppose that if it is removed or altered that this invalidates the license, but how and why -- and what alternate processes take over then? By the time you have deciphered all the cryptic documentation an unexplained issues (by costly experimentation), you can have far too much time in a small bit of functionality. A crux of the design issues is splitting the design time behavior and runtime behavior of distributables. The documentation seems to suggest this happens, but not how. You return a validation value by overriding a method. Unfortunately, I don't see the path as being very clear here either. Like you, I most appreciate the fact that the NR licensing scheme will be hidden by a process beyond obsfucation -- and that is presently the deciding factor in the fork I'm going to take here, especially as I have now heard from Denis, and he's agreed to let me help him improve NR's documentation. My thinking is that I'll get my job done faster with more direct help, and that if we can improve the documentation, it may be very clear what to do with what my intuition tells me is the most promising way to distribute commercial .Net assemblies which require (or benefit from) intellectual property protection. I'll read your other posts now, but will report back in the next few days if I can, on what progress Denis and I have made with his documentation. This should be interesting. m

                  G Offline
                  G Offline
                  Glen Harvy 0
                  wrote on last edited by
                  #21

                  You should move this topic to a new Subject and see if anyone else can help you as well. I didn't know that there was a licencing method in the .Net SDK until you mentioned it. I wrote all my own code which, being obfuscated :) is good enough for my program and it's target market. I did find this interesting [^] which may assist you. There may even be sources available to you on codeproject! Good luck.

                  Glen Harvy

                  M 3 Replies Last reply
                  0
                  • G Glen Harvy 0

                    You should move this topic to a new Subject and see if anyone else can help you as well. I didn't know that there was a licencing method in the .Net SDK until you mentioned it. I wrote all my own code which, being obfuscated :) is good enough for my program and it's target market. I did find this interesting [^] which may assist you. There may even be sources available to you on codeproject! Good luck.

                    Glen Harvy

                    M Offline
                    M Offline
                    mike montagne
                    wrote on last edited by
                    #22

                    Denis and I are working on this together now, but I'll look at your link in a second here.

                    1 Reply Last reply
                    0
                    • G Glen Harvy 0

                      You should move this topic to a new Subject and see if anyone else can help you as well. I didn't know that there was a licencing method in the .Net SDK until you mentioned it. I wrote all my own code which, being obfuscated :) is good enough for my program and it's target market. I did find this interesting [^] which may assist you. There may even be sources available to you on codeproject! Good luck.

                      Glen Harvy

                      M Offline
                      M Offline
                      mike montagne
                      wrote on last edited by
                      #23

                      Hey, great article. He says, "While I believe that for completeness I should describe how you use LicFileLicenseProvider, I also believe that anyone serious about licensing their software will most likely avoid such a simple scheme in favor of their own, more creative schemes, one of which I'll introduce to you after describing LicFileLicenseProvider." I was pretty quickly convinced of as much last night as I explored the "documentation." THANKS A BUNCH!

                      1 Reply Last reply
                      0
                      • G Glen Harvy 0

                        You should move this topic to a new Subject and see if anyone else can help you as well. I didn't know that there was a licencing method in the .Net SDK until you mentioned it. I wrote all my own code which, being obfuscated :) is good enough for my program and it's target market. I did find this interesting [^] which may assist you. There may even be sources available to you on codeproject! Good luck.

                        Glen Harvy

                        M Offline
                        M Offline
                        mike montagne
                        wrote on last edited by
                        #24

                        Denis and I are hashing out some ideas about licensing. Hopefully we will come up with a boilerplate which will solve issues right out of the box.

                        1 Reply Last reply
                        0
                        Reply
                        • Reply as topic
                        Log in to reply
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes


                        • Login

                        • Don't have an account? Register

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • Categories
                        • Recent
                        • Tags
                        • Popular
                        • World
                        • Users
                        • Groups