codeobscure 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5280318924268adfa05016a9ac84654b231b502e
4
- data.tar.gz: 5821fa3ac42f11135432ea2b11aadd936b3f5017
3
+ metadata.gz: 34b0c0a649a9f5f5e7d0fa859ce85847806365f1
4
+ data.tar.gz: b864a37fff7c401365b62bd2e7dca0fa9024a552
5
5
  SHA512:
6
- metadata.gz: 14411a14420422957836b6ff2a4a8d3ff942a3810bac5b55673ee4f217fe67fa7d08aa4c14611f2f247f9146b59458b4055937114e62ebfc4482ae0673036c50
7
- data.tar.gz: 9ff4ffff5627331a039676051b9a18fb46aafc106f26d619f6ecfec066fea7c2b47e3fe7e0b58001f585871721cb200ba344411177e0cd7159bd75a175fd3a36
6
+ metadata.gz: 8bb470a8c3c72af243c2b34d68466b9f7d42ff83b904d8a17a186f11b166638204fd94ca825eae87bba223e048f1c203b479bb8c55466cdae511d225ac08d870
7
+ data.tar.gz: 2d9aa9786f3a42c90d89c482ba4e2c00ec26d3ce2731ae921f857eea76a744951eae09c65201ff886a573d2c095d5bae3a9482a85b3d91f2388c7e715e794628
data/lib/codeobscure.rb CHANGED
@@ -42,6 +42,10 @@ module Codeobscure
42
42
  options[:ignore] = v
43
43
  end
44
44
 
45
+ opts.on("-t", "--type replaceType", "obscure type = [r,w,c] ,r: random w: random words c: custom replace rule") do |v|
46
+ options[:type] = v
47
+ end
48
+
45
49
  end.parse!
46
50
 
47
51
  if options[:reset]
@@ -86,7 +90,7 @@ module Codeobscure
86
90
  if File.exist? xpj_path
87
91
  root_dir = xpj_path.split("/")[0...-1].join "/"
88
92
  FuncList.genFuncList root_dir , "all", true, fetch_types
89
- header_file = Obscure.run root_dir
93
+ header_file = Obscure.run root_dir , options[:type]
90
94
  project = Xcodeproj::Project.open xpj_path
91
95
  project_name = xpj_path.split("/").last
92
96
  main_group = project.main_group
@@ -2,6 +2,7 @@ require_relative "funclist.rb"
2
2
  require 'sqlite3'
3
3
  require "colorize"
4
4
  module FiltSymbols
5
+ @@db = nil
5
6
  @@filt_db_path = "#{File.expand_path '../../..', __FILE__}/filtSymbols"
6
7
  @@table_name = "symbols"
7
8
  @@key_words = ["interface","NSInteger","BOOL","Class","free","M_PI_2","abort","change","top","bottom","NSUIntegerMax","intoString"]
@@ -1,5 +1,7 @@
1
1
  module FuncList
2
2
 
3
+ require_relative "filtSymbols.rb"
4
+
3
5
  @@func_regex = /\s*(\w+)\s*:\s*\(\s*\w*\s*\s*\w+\s*\*?\s*\)\s*\w+\s*/
4
6
  @@func_simple_regex = /\s*[-\+]\s*\(\s*\w+\s*\*?\)\s*(\w+)\s*;*/
5
7
  @@hcls_regex = /@interface\s+(\w+)\s*/
@@ -7,6 +9,8 @@ module FuncList
7
9
  @@property_regex = /\s*@property\s*\(.*?getter=(\w+).*?\)\s*\w+\s*\*?\s*\w+\s*.*;/
8
10
  @@property_regex2 = /\s*@property\s*\(.*?\)\s*\w+\s*\*?\s*(\w+)\s*.*;/
9
11
  @@property_regex3 = /\s*@property\s*\(.*?\)\s*\w+\s*<.*>\s*\*?\s*(\w+)\s*.*;/
12
+ @@value_for_key_filte_regex = /\[\w*\s+setValue\s*:\s*.*\s* forKey\s*:\s*@\"(.*)\"\]/
13
+ @@class_from_str_regex = /NSClassFromString\(\s*@"(\w+)"\s*\)/
10
14
 
11
15
  def self.to_utf8(str)
12
16
  str = str.force_encoding('UTF-8')
@@ -96,6 +100,30 @@ module FuncList
96
100
  end
97
101
  end
98
102
  end
103
+
104
+ #---------------记录可能引起崩溃的字段----------------
105
+ str.scan @@value_for_key_filte_regex do |curr_match|
106
+ md = Regexp.last_match
107
+ whole_match = md[0]
108
+ captures = md.captures
109
+
110
+ captures.each do |capture|
111
+ FiltSymbols.insertValue capture
112
+ p "过滤的[setValue forkey]数据:#{capture}"
113
+ end
114
+ end
115
+
116
+
117
+ str.scan @@class_from_str_regex do |curr_match|
118
+ md = Regexp.last_match
119
+ whole_match = md[0]
120
+ captures = md.captures
121
+
122
+ captures.each do |capture|
123
+ FiltSymbols.insertValue capture
124
+ p "过滤的[NSClassFromString]数据:#{capture}"
125
+ end
126
+ end
99
127
 
100
128
  results
101
129
  end
@@ -1,5 +1,6 @@
1
1
  require_relative 'filtsymbols.rb'
2
2
  require 'sqlite3'
3
+ require 'random_word'
3
4
 
4
5
  class String
5
6
  def upcase_first_letter
@@ -11,13 +12,56 @@ module Obscure
11
12
 
12
13
  @@STRING_SYMBOL_FILE="func.list"
13
14
  @@IGNORE_NAME="ignoresymbols"
15
+
16
+ #type 1 :随机字符, 2 : 随机单词, 3 : 自定义单词替换
17
+ def self.ramdomString(var_type , replace_type = 1)
18
+ result = ""
19
+ case replace_type
20
+ when 1
21
+ result = `openssl rand -base64 64 | tr -cd 'a-zA-Z' |head -c 16`
22
+ when 2
23
+ words = RandomWord.phrases.next.split /[ _]/
24
+ join_words = ""
25
+ words.each_with_index do |word,index|
26
+ if index == 0
27
+
28
+ join_words += word
29
+ if var_type == "c"
30
+ join_words.capitalize!
31
+ end
32
+ else
33
+ join_words += word.capitalize
34
+ end
35
+ end
36
+ result = join_words
37
+ when 3
38
+ raise "c选项功能暂未实现,下一版本中加入!"
39
+ end
14
40
 
15
- def self.ramdomString
16
- `openssl rand -base64 64 | tr -cd 'a-zA-Z' |head -c 16`
41
+
42
+ result
43
+ end
44
+
45
+ def self.toTypeNumber(type)
46
+ result = 1
47
+ case type
48
+ when "r"
49
+ result = 1
50
+ when "w"
51
+ result = 2
52
+ when "c"
53
+ result = 3
54
+ else
55
+ raise "该参数不符合!"
56
+ end
57
+
58
+ result
17
59
  end
18
60
 
19
61
  #有define重复的问题等待解决
20
- def self.run(root_dir)
62
+ def self.run(root_dir,type = 'r')
63
+
64
+ replace_type = toTypeNumber type
21
65
 
22
66
  @@HEAD_FILE="#{root_dir}/codeObfuscation.h"
23
67
  @@STRING_SYMBOL_FILE = "#{root_dir}/#{@@STRING_SYMBOL_FILE}"
@@ -39,14 +83,13 @@ module Obscure
39
83
  file.puts "#define co_codeObfuscation_h"
40
84
  file.puts "//confuse string at #{date.to_s}"
41
85
 
42
- #beginTransition
43
86
  symbol_file = File.open(@@STRING_SYMBOL_FILE).read
44
87
  symbol_file.each_line do |line|
45
88
  line_type = line.rstrip.split(":").first
46
89
  line_content = line.rstrip.split(":").last
47
90
  result = FiltSymbols.query(line_content)
48
91
  if result.nil? || result.empty?
49
- ramdom = ramdomString
92
+ ramdom = ramdomString line_type , replace_type
50
93
  if line_type == "p"
51
94
  result = FiltSymbols.query("set#{line_content.upcase_first_letter}")
52
95
  if result.nil? || result.empty?
@@ -1,3 +1,3 @@
1
1
  module Codeobscure
2
- VERSION = "0.1.4"
2
+ VERSION = "0.1.5"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codeobscure
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - kaich
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-05 00:00:00.000000000 Z
11
+ date: 2016-08-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -100,6 +100,20 @@ dependencies:
100
100
  - - ">="
101
101
  - !ruby/object:Gem::Version
102
102
  version: '0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: random-word
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :runtime
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
103
117
  description: Code Obscure Tool.You can use it simplely
104
118
  email:
105
119
  - chengkai1853@163.com