module Obscure

Public Class Methods

ramdomString(var_type , replace_type = 1, reference_content = nil) click to toggle source

type 1 :随机字符, 2 : 随机单词, 3 : 自定义单词替换 reference_content 原来准备替换的内容, 避免过度混淆

# File lib/codeobscure/obscure.rb, line 20
def self.ramdomString(var_type , replace_type = 1, reference_content = nil)  
  result = ""
  case replace_type 
  when 1
    result = `openssl rand -base64 64 | tr -cd 'a-zA-Z' |head -c 16`
  when 2 
    words = RandomWord.phrases.next.split /[ _]/  
    join_words = ""
    words.each_with_index do |word,index| 
      if index == 0  

        join_words += word
        if var_type == "c"
          join_words.capitalize!
        end
      else
        join_words += word.capitalize
      end
    end
    result = join_words
  when 3
    raise "c选项功能暂未实现,下一版本中加入!"
  end

  for trait in @@PROJECT_TRAIT do
    if reference_content 
      if reference_content.end_with? trait 
        result += trait
        break
      end
    end
  end

  result
end
run(root_dir,type = 'r') click to toggle source

有define重复的问题等待解决

# File lib/codeobscure/obscure.rb, line 82
def self.run(root_dir,type = 'r')

  replace_type = toTypeNumber type

  @@HEAD_FILE="#{root_dir}/codeObfuscation.h"  
  @@STRING_SYMBOL_FILE = "#{root_dir}/#{@@STRING_SYMBOL_FILE}"

  ignore_symbols = []
  ignore_path = "#{root_dir}/#{@@IGNORE_NAME}"
  if File.exist? ignore_path
    ignore_content = File.read ignore_path
    ignore_symbols = ignore_content.gsub(/\s/ , "").split ","
  end
  
  if File.exists? @@HEAD_FILE 
    `rm -f '#{@@HEAD_FILE}'` 
  end 

  date = `date`
  file = File.new @@HEAD_FILE , 'w'
  file.puts "#ifndef co_codeObfuscation_h" 
  file.puts "#define co_codeObfuscation_h" 
  file.puts "//confuse string at #{date.to_s}"

  symbol_file = File.open(@@STRING_SYMBOL_FILE).read
  symbol_file.each_line do |line|
    line_type = line.rstrip.split(":").first
    line_content = line.rstrip.split(":").last
    result = FiltSymbols.query(line_content) 
    if result.nil? || result.empty? 
      ramdom = ramdomString line_type , replace_type, line_content
      if line_type == "p"
        result = FiltSymbols.query("set#{line_content.upcase_first_letter}") 
        if result.nil? || result.empty? 
          if !ignore_symbols.include?(line_content)
            file.puts(toDefine "#{line_content}", "#{ramdom}")
            file.puts(toDefine "_#{line_content}", "_#{ramdom}")
            file.puts(toDefine "set#{line_content.upcase_first_letter}", "set#{ramdom.upcase_first_letter}")
          end
        end
      else 
          if !ignore_symbols.include?(line_content)
            file.puts(toDefine "#{line_content}", "#{ramdom}")
          end
      end
    end 
  end

  file.puts "#endif" 
  file.close

  if File.exist? @@STRING_SYMBOL_FILE
    `rm -f '#{@@STRING_SYMBOL_FILE}'`
  end
  @@HEAD_FILE
end
toDefine(from, to) click to toggle source
# File lib/codeobscure/obscure.rb, line 73
  def self.toDefine(from, to) 
    <<~Define
        #ifndef #{from}
          #define #{from} #{to}
        #endif
    Define
  end
toTypeNumber(type) click to toggle source
# File lib/codeobscure/obscure.rb, line 56
def self.toTypeNumber(type)
  result = 1
  case type
  when "r"
    result = 1
  when "w" 
    result = 2
  when "c"
    result = 3
  else
    puts "若参数不符合规则,默认切换到[r]的规则形式进行替换!".colorize(:yellow)
    result = 1
  end

  result
end