Giter Club home page Giter Club logo

code-obfuscation's Introduction

code-obfuscation

Build Status

A code obfuscation tool for iOS.

Because I turned to Swift, the code-obfuscation won't be updated any more. And I am coding Swift Obfuscator that based on Swift Syntax and Structured Editing Library.

Pre-setting

  • Copy the directory Obfuscation-Objective-C File.xctemplate to /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/File Templates/Source, like below order:

    sudo cp -r Obfuscation-Objective-C\ File.xctemplate/ /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/File\ Templates/Source

    Now, you can create obfuscation files in your projects. You might try to create them in your project, and then you will get 3 files.

  • Copy the file CO-Features.h to your project if you need the blow macro Features.

How to Use

Execute the order ./CodeObfuscation-release or ./CodeObfuscation-debug at your root path of your project.

Also set the shell script at you Xcode project to exectue it. Also see Features.

You could copy the program obfuse-code for iOS platform.

Obfuscation Syntax

  • Add macro CO_CONFUSION_CLASS after keyword @interface and before classname. It tags the class is added to obfuscation task. e.g.

    @interface CO_CONFUSION_CLASS COTemplateFile : NSObject
    @end
  • Also modify the category by CO_CONFUSION_CATEGORY. And the macro CO_CONFUSION_CATEGORY must be before category-name at bracket e.g.

    @interface NSString (CO_CONFUSION_CATEGORY abcde)
    @end
  • Add macro CO_CONFUSION_PROPERTY before a property-name declared. It tags the property is added to obfuscation task. e.g.

    @interface CO_CONFUSION_CLASS COTemplateFile : NSObject
    
    @property (nonatomic, strong) NSString * CO_CONFUSION_PROPERTY prop1;
    @property CGFloat CO_CONFUSION_PROPERTY prop2;
    
    @end
  • Add macro CO_CONFUSION_METHOD before a method head of declare or implementation. It tags the method is added to obfuscation task. e.g.

    // .h
    @interface CO_CONFUSION_CLASS COTemplateFile : NSObject
    
    CO_CONFUSION_METHOD
    - (void)makeFoo:(NSString *)foo1 arg2:(NSInteger)arg2;
    
    CO_CONFUSION_METHOD
    - (instancetype)initWithArg1:(CGFloat)arg, ...;
    
    @end
    
    // .m or .mm
    @implementation COTemplateFile
    
    CO_CONFUSION_METHOD
    - (void)_private:(NSString *)arg1 method:(float)arg2 scanned:(BOOL)scanned
    {
        ;
    }
    
    @end
  • Add macro CO_CONFUSION_PROTOCOL before a method head of declare or implementation. It tags the method is added to obfuscation task. e.g.

    @protocol CO_CONFUSION_PROTOCOL COProtocol <NSObject>
    
    @property (nonatomic, strong) id CO_CONFUSION_PROPERTY aVar;
    
    CO_CONFUSION_METHOD
    - (BOOL)doSome:(NSString *)task withYou:(id)you another:(id)someWho;
    
    @end

    Property and method are same to CO_CONFUSION_PROPERTY and CO_CONFUSION_METHOD.

Features

  • Support commands. (You can alse obtain these from command: -h or -help)

    -id string

    ​ The directory of info.plist. Default is current executed path. (default ".")

    -offset int

    ​ The offset of obfuscation. Default is 0.

    -db string

    ​ The directory of obfuscation database. Default is current executed path. (default ".")

    -root string

    ​ The directory of project file or what you want to start. Default is current executed path. (default ".")

    -super

    ​ Check the user-class' names which have been entranced obfuscation whether their super classes exist or not. If exists, will info a warning. For strict option, will check all of classes of iOS Kits.

    -strict

    ​ See -super.

    -st

    ​ Strengthen the obfuscation. Default is true. (default true)

    -version

    ​ Get the program supported iOS SDK version.

    -q string

    ​ Query the method whether exist or not.

  • Output origin-name: obfuscation map into database. Its structure like:

    database-structure

    Use the SQL to search real name:

    SELECT real
    FROM JSONModel_coh
    WHERE fake = 'AAAAA_$_S97Gcom_placeholder_com_s_p'
    	AND type = 'method'
    -- Output: toJSONStringWithKeys
  • Use the macro CO_NAME to obtain the class name on runtime if the class name has been obfused. The 'CO_NAME' always return correct name even If the class name has not been obfused.

  • Use the macro CO_PROPERTY_SET or CO_PROPERTY_SET_TYPE to help your write setter of property which is added to obfuscation task. e.g.

    // Assume there is a NSString property named fullpath at Foo class.
    CO_PROPERTY_SET(fullpath, Fullpath, Foo)
    {
      // Use macro _ or CO_VAR_NAME get the synthesis variable.
      if (![_(fullpath) isEqualToString:fullpath]) {
    	_(fullpath) = fulpath;
    	// TODO other things... 
      }
    }
    
    // If you want not to use class name
    CO_PROPERTY_SET_TYPE(fullpath, Fullpath, NSString*)
    {
      // Some codes...
    }
  • Use CO_PROPERTY_GET to synthesis getter method.

  • Use CO_VAR_NAME to obtain synthsis variable. It looks like a little long, you can use _ to do if available.

Notice

  • CO_CONFUSION_CLASS and CO_CONFUSION_CATEGORY is a prerequisite for CO_CONFUSION_PROPERTY and CO_CONFUSION_METHOD.
  • COULD NOT use the code-obfuscation if your code contains runtime code. Unless you can control it.
  • [IMPORTANT] The obfuscator works with macro. So if a target label was obfuscated with the same name of another API and your code used it. That would cause a compile error under release model. For example, class Foo has a property named length and been obfuscated, if you invoke it and then use NSString's length property in a code block with Foo.length. The property length word of NSString will be replaced with Foo's obfuscation in release model.

License

The MIT License.

code-obfuscation's People

Contributors

cuitche avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

code-obfuscation's Issues

怎么编译啊。

编译报错,,mac teamid 没有。

能否发一个release的,直接包含 ./code0bfuscation 可执行文件的

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.