ctf-party 1.5.0 → 2.0.0

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
  SHA256:
3
- metadata.gz: de422839915f8e5fe2e71975678b8966aecf94edc75d4a29e7337ba80c728537
4
- data.tar.gz: 1ae611ce6ed8a42cb088c5ce27d75979f589a69413713f2165b109305a85d9c1
3
+ metadata.gz: 4d60cac63a1449a4ddc3bf3b34ab1ff58db23b62adb3f5710b7bfe4822827088
4
+ data.tar.gz: 9fdc5fdaced3468d7003865e2e334ee756f6162a7204b64d99665c6e378a7bf8
5
5
  SHA512:
6
- metadata.gz: d941c1d060a2ecec96d396b6ff0c7f692bd138b7962956dfd98b8a092c534755f965cb77e3a72fa2cfad770c71a73783c791d01dfdca835b7ef7abd42d1ef552
7
- data.tar.gz: c65a093261672e00c56eadb7d5dce1bae86a7ac41b6755a0c72e13b48ffdd967256e50dadbc74b41533d616799d1972ee737ce4fe7f0ecd2eda0227c86692aaf
6
+ metadata.gz: 4212f6d4908cf82c3921b581424109c05d3bdd06d26bb8531c61cd903754260de7732bd019ee04dbf8d500dd1d947773701fb41a29ddf8142dd3f0388d59f778
7
+ data.tar.gz: ab4919f51fe339643dd6f6a4da0086e42451245f68438049c66f81ebf9f9ad14aadfe6ef2f04c28f4b26b473d0440283e9324be331e6643519e7b462a798de55
File without changes
@@ -6,8 +6,8 @@ require 'base64'
6
6
  class String
7
7
  # Encode the string into base64
8
8
  # @param opts [Hash] optional parameters
9
- # @option opts [Symbol] :mode Default value: +:strict+.
10
- # Other values are +:strict+ (+:rfc4648+) or +:urlsafe+.
9
+ # @option opts [Symbol] :mode Default value: `:strict`.
10
+ # Other values are `:strict` (`:rfc4648`) or `:urlsafe`.
11
11
  # @see https://ruby-doc.org/stdlib-2.6.5/libdoc/base64/rdoc/Base64.html
12
12
  # @return [String] the Base64 encoded string
13
13
  # @example
@@ -32,8 +32,8 @@ class String
32
32
 
33
33
  # Decode the string from base64
34
34
  # @param opts [Hash] optional parameters
35
- # @option opts [Symbol] :mode Default value: +:strict+.
36
- # Other values are +:strict+ (+:rfc4648+) or +:urlsafe+.
35
+ # @option opts [Symbol] :mode Default value: `:strict`.
36
+ # Other values are `:strict` (`:rfc4648`) or `:urlsafe`.
37
37
  # @see https://ruby-doc.org/stdlib-2.6.5/libdoc/base64/rdoc/Base64.html
38
38
  # @return [String] the Base64 decoded string
39
39
  # @example
@@ -58,10 +58,10 @@ class String
58
58
 
59
59
  # Is the string encoded in base64?
60
60
  # @param opts [Hash] optional parameters
61
- # @option opts [Symbol] :mode Default value: +:strict+.
62
- # Other values are +:strict+ (+:rfc4648+) or +:urlsafe+.
61
+ # @option opts [Symbol] :mode Default value: `:strict`.
62
+ # Other values are `:strict` (`:rfc4648`) or `:urlsafe`.
63
63
  # @see https://ruby-doc.org/stdlib-2.6.5/libdoc/base64/rdoc/Base64.html
64
- # @return [Boolean] +true+ if the string is a valid base64 string, +false+
64
+ # @return [Boolean] `true` if the string is a valid base64 string, `false`
65
65
  # else.
66
66
  # @example
67
67
  # 'SGVsbG8gd29ybGQh'.b64? # => true
@@ -4,7 +4,7 @@ class String
4
4
  # Encode a string into binary
5
5
  # @param opts [Hash] optional parameters
6
6
  # @option opts [Symbol] :bitnumbering Display output with most significant bit
7
- # first (+:MSB+ default) or least significant bit first (+:LSB+).
7
+ # first (`:MSB` default) or least significant bit first (`:LSB`).
8
8
  # @return [String] the binary encoded string
9
9
  # @example
10
10
  # 'binary'.to_bin # => "011000100110100101101110011000010111001001111001"
@@ -41,7 +41,7 @@ class String
41
41
  # Decode a binary string
42
42
  # @param opts [Hash] optional parameters
43
43
  # @option opts [Symbol] :bitnumbering Display input with most significant bit
44
- # first (+:MSB+ default) or least significant bit first (+:LSB+).
44
+ # first (`:MSB` default) or least significant bit first (`:LSB`).
45
45
  # @return [String] the binary decoded string
46
46
  # @example
47
47
  # '011000100110100101101110011000010111001001111001'.from_bin # => "binary"
data/lib/ctf_party/cgi.rb CHANGED
@@ -4,12 +4,13 @@
4
4
  require 'cgi'
5
5
 
6
6
  class String
7
- # URL-encode the string
7
+ # URL-encode the URL string (RFC2396)
8
8
  # @return [String] the URL-encoded string
9
9
  # @example
10
- # "'Stop!' said Fred".urlencode # => "%27Stop%21%27+said+Fred"
10
+ # 'http://vulnerable.site/search.aspx?txt="><script>alert(/Rubyfu/.source)</script>'.urlencode # => "http://vulnerable.site/search.aspx?txt=%22%3E%3Cscript%3Ealert(/Rubyfu/.source)%3C/script%3E"
11
+ # "'Stop!' said Fred" # => "'Stop!'%20said%20Fred"
11
12
  def urlencode
12
- CGI.escape self
13
+ URI::Parser.new.escape self
13
14
  end
14
15
 
15
16
  # URL-encode the string in place as described for {String#urlencode}.
@@ -17,12 +18,29 @@ class String
17
18
  replace(urlencode)
18
19
  end
19
20
 
20
- # URL-decode the string
21
+ # URL-encode the URL component string
22
+ # @return [String] the URL-encoded string
23
+ # @example
24
+ # "'Stop!' said Fred".urlencode_component # => "%27Stop%21%27+said+Fred"
25
+ # 'http://vulnerable.site/search.aspx?txt="><script>alert(/Rubyfu/.source)</script>'.urlencode_component # => "http%3A%2F%2Fvulnerable.site%2Fsearch.aspx%3Ftxt%3D%22%3E%3Cscript%3Ealert%28%2FRubyfu%2F.source%29%3C%2Fscript%3E"
26
+ def urlencode_component
27
+ CGI.escape self
28
+ end
29
+
30
+ # URL-encode the string in place as described for {String#urlencode_component}.
31
+ def urlencode_component!
32
+ replace(urlencode_component)
33
+ end
34
+
35
+ # URL-decode the URL string (RFC2396)
21
36
  # @return [String] the URL-decoded string
22
37
  # @example
23
- # "%27Stop%21%27+said+Fred".urldecode # => "'Stop!' said Fred"
38
+ # 'http://vulnerable.site/search.aspx?txt=%22%3E%3Cscript%3Ealert(/Rubyfu/.source)%3C/script%3E'.urldecode # => "http://vulnerable.site/search.aspx?txt=\"><script>alert(/Rubyfu/.source)</script>"
39
+ # 'http%3A%2F%2Fvulnerable.site%2Fsearch.aspx%3Ftxt%3D%22%3E%3Cscript%3Ealert%28%2FRubyfu%2F.source%29%3C%2Fscript%3E'.urldecode # => "http://vulnerable.site/search.aspx?txt=\"><script>alert(/Rubyfu/.source)</script>"
40
+ # "'Stop!'%20said%20Fred".urldecode # => "'Stop!' said Fred"
41
+ # '%27Stop%21%27+said+Fred'.urldecode # => "'Stop!'+said+Fred"
24
42
  def urldecode
25
- CGI.unescape self
43
+ URI::Parser.new.unescape self
26
44
  end
27
45
 
28
46
  # URL-decode the string in place as described for {String#urldecode}.
@@ -30,6 +48,22 @@ class String
30
48
  replace(urldecode)
31
49
  end
32
50
 
51
+ # URL-decode the URL component string
52
+ # @return [String] the URL-decoded string
53
+ # @example
54
+ # 'http://vulnerable.site/search.aspx?txt=%22%3E%3Cscript%3Ealert(/Rubyfu/.source)%3C/script%3E'.urldecode_component # => "http://vulnerable.site/search.aspx?txt=\"><script>alert(/Rubyfu/.source)</script>"
55
+ # 'http%3A%2F%2Fvulnerable.site%2Fsearch.aspx%3Ftxt%3D%22%3E%3Cscript%3Ealert%28%2FRubyfu%2F.source%29%3C%2Fscript%3E'.urldecode_component # => "http://vulnerable.site/search.aspx?txt=\"><script>alert(/Rubyfu/.source)</script>"
56
+ # "'Stop!'%20said%20Fred".urldecode_component => "'Stop!' said Fred"
57
+ # '%27Stop%21%27+said+Fred'.urldecode_component # => "'Stop!' said Fred"
58
+ def urldecode_component
59
+ CGI.unescape self
60
+ end
61
+
62
+ # URL-decode the string in place as described for {String#urldecode_component}.
63
+ def urldecode_component!
64
+ replace(urldecode_component)
65
+ end
66
+
33
67
  # HTML escape the string
34
68
  # @return [String] the HTML escaped string
35
69
  # @example
@@ -66,32 +66,32 @@ class String
66
66
  replace(sha2(opts))
67
67
  end
68
68
 
69
- # Alias for {String#sha2} with default value ( +sha2(bitlen: 256)+ ).
69
+ # Alias for {String#sha2} with default value ( `sha2(bitlen: 256)` ).
70
70
  def sha2_256
71
71
  sha2
72
72
  end
73
73
 
74
- # Alias for {String#sha2!} with default value ( +sha2!(bitlen: 256)+ ).
74
+ # Alias for {String#sha2!} with default value ( `sha2!(bitlen: 256)` ).
75
75
  def sha2_256!
76
76
  replace(sha2)
77
77
  end
78
78
 
79
- # Alias for {String#sha2} with default value ( +sha2(bitlen: 384)+ ).
79
+ # Alias for {String#sha2} with default value ( `sha2(bitlen: 384)` ).
80
80
  def sha2_384
81
81
  sha2(bitlen: 384)
82
82
  end
83
83
 
84
- # Alias for {String#sha2!} with default value ( +sha2!(bitlen: 384)+ ).
84
+ # Alias for {String#sha2!} with default value ( `sha2!(bitlen: 384)` ).
85
85
  def sha2_384!
86
86
  replace(sha2(bitlen: 384))
87
87
  end
88
88
 
89
- # Alias for {String#sha2} with default value ( +sha2(bitlen: 512)+ ).
89
+ # Alias for {String#sha2} with default value ( `sha2(bitlen: 512)` ).
90
90
  def sha2_512
91
91
  sha2(bitlen: 512)
92
92
  end
93
93
 
94
- # Alias for {String#sha2!} with default value ( +sha2!(bitlen: 512)+ ).
94
+ # Alias for {String#sha2!} with default value ( `sha2!(bitlen: 512)` ).
95
95
  def sha2_512!
96
96
  replace(sha2(bitlen: 512))
97
97
  end
@@ -21,7 +21,7 @@ class String
21
21
  # @option hash [String] :prefix prefix of the flag. Default: none.
22
22
  # @option hash [String] :suffix suffix of the flag. Default: none.
23
23
  # @option hash [Array<String>] :enclosing the characters used to surround
24
- # the flag. Default are curly braces: +{+, +}+. The array must contain
24
+ # the flag. Default are curly braces: `{`, `}`. The array must contain
25
25
  # exactly 2 elements.
26
26
  # @option hash [String] :digest the hash algorithm to apply on the flag.
27
27
  # Default: none. Allowed values: md5, sha1, sha2_256, sha2_384, sha2_512,
data/lib/ctf_party/hex.rb CHANGED
@@ -4,15 +4,17 @@ class String
4
4
  # Encode an hexadecimal string to a decimal string
5
5
  # @param opts [Hash] optional parameters
6
6
  # @option opts [String] :prefix Prefix of the input. Default value is a void
7
- # string. Example of values: +0x+, +\x+.
7
+ # string. Example of values: `0x`, `\x`, `\\x`.
8
8
  # @return [String] the decimal encoded string
9
9
  # @example
10
10
  # 'ff'.hex2dec # => "255"
11
11
  # '\xf3'.hex2dec(prefix: '\x') # => "243"
12
+ # '6e6f72616a'.hex2dec # => "474316169578"
13
+ # '\\x6e\\x6f\\x72\\x61\\x6a'.hex2dec(prefix: '\\x') # => "474316169578"
12
14
  def hex2dec(opts = {})
13
15
  opts[:prefix] ||= ''
14
16
  # remove prefix
15
- out = sub(opts[:prefix], '')
17
+ out = gsub(opts[:prefix], '')
16
18
  # convert
17
19
  return out.hex.to_s
18
20
  end
@@ -30,26 +32,35 @@ class String
30
32
  # Encode an decimal string to a hexadecimal string
31
33
  # @param opts [Hash] optional parameters
32
34
  # @option opts [String] :prefix Prefix of the output. Default value is a void
33
- # string. Example of values: +0x+, +\x+.
34
- # @option opts [Symbol] :case Char case of the ouput. Default value +:lower+.
35
- # Other valid value +:upper+.
35
+ # string. Example of values: `0x`, `\x`.
36
+ # @option opts [String] :prefixall Prefix each byte. Default value is a void
37
+ # string. Example of value: `\\x`.
38
+ # @option opts [Symbol] :case Char case of the output. Default value `:lower`.
39
+ # Other valid value `:upper`.
36
40
  # @option opts [Symbol] :padding Minimum size of the hexadecimal display
37
- # (number of characters). Eg. 10 -> 0xA or 0x0A
41
+ # (number of characters). Must be even.
38
42
  # @return [String] the hexadecimal encoded string
39
43
  # @example
40
44
  # '255'.dec2hex # => "ff"
41
45
  # '255'.dec2hex({prefix: '0x', case: :upper}) # => "0xFF"
46
+ # '10'.dec2hex(padding: 2) # => "0a"
47
+ # '10'.dec2hex(padding: 8) # => "0000000a"
48
+ # '474316169578'.dec2hex(prefixall: '\\x') # => "\\x6e\\x6f\\x72\\x61\\x6a"
42
49
  def dec2hex(opts = {})
43
50
  opts[:prefix] ||= ''
51
+ opts[:prefixall] ||= ''
44
52
  opts[:case] ||= :lower
45
- opts[:padding] ||= 1
53
+ opts[:padding] ||= 2
54
+ raise(ArgumentError, 'Padding must be even') if opts[:padding].odd?
55
+
46
56
  # convert
47
57
  out = to_i.to_s(16)
48
58
  # padding
49
- out = ('0' * (opts[:padding] - 1)) + out if out.size < opts[:padding]
59
+ out = ('0' * (opts[:padding] - out.size)) + out if out.size < opts[:padding]
50
60
  # char case management
51
61
  out = out.upcase if opts[:case] == :upper
52
62
  # adding prefix must be done after case change
63
+ out = out.scan(/.{2}/).map { |x| opts[:prefixall] + x }.join
53
64
  return opts[:prefix] + out
54
65
  end
55
66
 
@@ -66,19 +77,23 @@ class String
66
77
  # Encode a string into hexadecimal
67
78
  # @param opts [Hash] optional parameters
68
79
  # @option opts [String] :prefix Prefix of the output. Default value is a void
69
- # string. Example of values: +0x+, +\x+.
70
- # @option opts [Symbol] :case Char case of the ouput. Default value +:lower+.
71
- # Other valid value +:upper+.
80
+ # string. Example of values: `0x`, `\x`.
81
+ # @option opts [String] :prefixall Prefix each byte. Default value is a void
82
+ # string. Example of value: `\\x`.
83
+ # @option opts [Symbol] :case Char case of the output. Default value `:lower`.
84
+ # Other valid value `:upper`.
72
85
  # @option opts [Symbol] :nibble Display output with high nibble first
73
- # (+:high+ default) or low nibble first (+:low+).
86
+ # (`:high` default) or low nibble first (`:low`).
74
87
  # @return [String] the hexadecimal encoded string
75
88
  # @example
76
89
  # 'noraj'.to_hex # => "6e6f72616a"
77
90
  # 'noraj'.to_hex(prefix: '0x') # => "0x6e6f72616a"
78
91
  # 'noraj'.to_hex(case: :upper) # => "6E6F72616A"
79
92
  # 'noraj'.to_hex(nibble: :low) # => "e6f62716a6"
93
+ # 'noraj'.to_hex(prefixall: '\\x') # => "\\x6e\\x6f\\x72\\x61\\x6a"
80
94
  def to_hex(opts = {})
81
95
  opts[:prefix] ||= ''
96
+ opts[:prefixall] ||= ''
82
97
  opts[:case] ||= :lower
83
98
  opts[:nibble] ||= :high
84
99
  # convert
@@ -92,6 +107,7 @@ class String
92
107
  # char case management
93
108
  out = out.upcase if opts[:case] == :upper
94
109
  # adding prefix must be done after case change
110
+ out = out.scan(/.{2}/).map { |x| opts[:prefixall] + x }.join
95
111
  return opts[:prefix] + out
96
112
  end
97
113
 
@@ -118,19 +134,20 @@ class String
118
134
  # Decode a hexadecimal string
119
135
  # @param opts [Hash] optional parameters
120
136
  # @option opts [String] :prefix Prefix of the input. Default value is a void
121
- # string. Example of values: +0x+, +\x+.
137
+ # string. Example of values: `0x`, `\x`, `\\x`.
122
138
  # @option opts [Symbol] :nibble Display input with high nibble first
123
- # (+:high+ default) or low nibble first (+:low+).
139
+ # (`:high` default) or low nibble first (`:low`).
124
140
  # @return [String] the hexadecimal decoded string
125
141
  # @example
126
142
  # "6e6f72616a".from_hex # => "noraj"
127
143
  # "0x6e6f72616a".from_hex(prefix: '0x') # => "noraj"
128
144
  # "e6f62716a6".from_hex(nibble: :low) # => "noraj"
145
+ # '\\x6e\\x6f\\x72\\x61\\x6a'.from_hex(prefix: '\\x') # => "noraj"
129
146
  def from_hex(opts = {})
130
147
  opts[:prefix] ||= ''
131
148
  opts[:nibble] ||= :high
132
149
  # remove prefix
133
- out = sub(opts[:prefix], '')
150
+ out = gsub(opts[:prefix], '')
134
151
  # convert
135
152
  return Array(out).pack('H*') if opts[:nibble] == :high
136
153
  return Array(out).pack('h*') if opts[:nibble] == :low
@@ -161,15 +178,16 @@ class String
161
178
  # Encode an hexadecimal string to a binary string
162
179
  # @param opts [Hash] optional parameters
163
180
  # @option opts [String] :prefix Prefix of the input. Default value is a void
164
- # string. Example of values: +0x+, +\x+.
181
+ # string. Example of values: `0x`, `\x`, `\\x`.
165
182
  # @return [String] the binary encoded string
166
183
  # @example
167
184
  # 'ab'.hex2bin # => "10101011"
168
185
  # '\xf3'.hex2bin(prefix: '\x') # => "11110011"
186
+ # '\\x6e\\x6f\\x72\\x61\\x6a'.hex2bin(prefix: '\\x') # => "110111001101111011100100110000101101010"
169
187
  def hex2bin(opts = {})
170
188
  opts[:prefix] ||= ''
171
189
  # remove prefix
172
- out = sub(opts[:prefix], '')
190
+ out = gsub(opts[:prefix], '')
173
191
  # convert
174
192
  return out.to_i(16).to_s(2)
175
193
  end
@@ -187,21 +205,26 @@ class String
187
205
  # Encode an binary string to a hexadecimal string
188
206
  # @param opts [Hash] optional parameters
189
207
  # @option opts [String] :prefix Prefix of the output. Default value is a void
190
- # string. Example of values: +0x+, +\x+.
191
- # @option opts [Symbol] :case Char case of the ouput. Default value +:lower+.
192
- # Other valid value +:upper+.
208
+ # string. Example of values: `0x`, `\x`.
209
+ # @option opts [String] :prefixall Prefix each byte. Default value is a void
210
+ # string. Example of value: `\\x`.
211
+ # @option opts [Symbol] :case Char case of the output. Default value `:lower`.
212
+ # Other valid value `:upper`.
193
213
  # @return [String] the hexadecimal encoded string
194
214
  # @example
195
215
  # '11110011'.bin2hex # => "f3"
196
216
  # '11110011'.bin2hex({prefix: '0x', case: :upper}) # => "0xF3"
217
+ # '0110111001101111011100100110000101101010'.bin2hex(prefixall: '\\x') # => "\\x6e\\x6f\\x72\\x61\\x6a"
197
218
  def bin2hex(opts = {})
198
219
  opts[:prefix] ||= ''
220
+ opts[:prefixall] ||= ''
199
221
  opts[:case] ||= :lower
200
222
  # convert
201
223
  out = to_i(2).to_s(16)
202
224
  # char case management
203
225
  out = out.upcase if opts[:case] == :upper
204
226
  # adding prefix must be done after case change
227
+ out = out.scan(/.{2}/).map { |x| opts[:prefixall] + x }.join
205
228
  return opts[:prefix] + out
206
229
  end
207
230
 
@@ -218,18 +241,19 @@ class String
218
241
  # Decode a hexadecimal IP string into a dotted decimal one
219
242
  # @param opts [Hash] optional parameters
220
243
  # @option opts [String] :prefix Prefix of the input. Default value is a void
221
- # string. Example of values: +0x+, +\x+.
244
+ # string. Example of values: `0x`, `\x`, '\\x'.
222
245
  # @option opts [Symbol] :nibble Display input with high nibble first
223
- # (+:high+ default) or low nibble first (+:low+, used on Unix +/proc/net/tcp+).
246
+ # (`:high` default) or low nibble first (`:low`, used on Unix `/proc/net/tcp`).
224
247
  # @return [String] the dotted decimal IP
225
248
  # @example
226
249
  # '0100007F'.from_hexip(nibble: :low) # => "127.0.0.1"
227
250
  # '0x7f000001'.from_hexip(prefix: '0x') # => "127.0.0.1"
251
+ # '\\x7f\\x00\\x00\\x01'.from_hexip(prefix: '\\x') # => "127.0.0.1"
228
252
  def from_hexip(opts = {})
229
253
  opts[:prefix] ||= ''
230
254
  opts[:nibble] ||= :high
231
255
  # remove prefix
232
- out = sub(opts[:prefix], '')
256
+ out = gsub(opts[:prefix], '')
233
257
  # convert
234
258
  out = out.scan(/.{2}/).map(&:hex2dec)
235
259
  out = out.reverse if opts[:nibble] == :low
@@ -245,17 +269,21 @@ class String
245
269
  # Encode a dotted decimal IP into a hexadecimal one
246
270
  # @param opts [Hash] optional parameters
247
271
  # @option opts [String] :prefix Prefix of the output. Default value is a void
248
- # string. Example of values: +0x+, +\x+.
249
- # @option opts [Symbol] :case Char case of the ouput. Default value +:lower+.
250
- # Other valid value +:upper+.
272
+ # string. Example of values: `0x`, `\x`.
273
+ # @option opts [String] :prefixall Prefix each byte. Default value is a void
274
+ # string. Example of value: `\\x`.
275
+ # @option opts [Symbol] :case Char case of the output. Default value `:lower`.
276
+ # Other valid value `:upper`.
251
277
  # @option opts [Symbol] :nibble Display output with high nibble first
252
- # (+:high+ default) or low nibble first (+:low+, used on Unix +/proc/net/tcp+).
278
+ # (`:high` default) or low nibble first (`:low`, used on Unix `/proc/net/tcp`).
253
279
  # @return [String] the hexadecimal encoded IP
254
280
  # @example
255
281
  # '127.0.0.1'.to_hexip # => "7f000001"
256
282
  # '127.0.0.1'.to_hexip(nibble: :low) # => "0100007f"
283
+ # '127.0.0.1'.to_hexip(prefixall: '\\x') # => "\\x7f\\x00\\x00\\x01"
257
284
  def to_hexip(opts = {})
258
285
  opts[:prefix] ||= ''
286
+ opts[:prefixall] ||= ''
259
287
  opts[:case] ||= :lower
260
288
  opts[:nibble] ||= :high
261
289
  # convert
@@ -265,6 +293,7 @@ class String
265
293
  # char case management
266
294
  out = out.upcase if opts[:case] == :upper
267
295
  # adding prefix must be done after case change
296
+ out = out.scan(/.{2}/).map { |x| opts[:prefixall] + x }.join
268
297
  return opts[:prefix] + out
269
298
  end
270
299
 
data/lib/ctf_party/rot.rb CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  class String
4
4
  # "Encrypt / Decrypt" the string with Caesar cipher. This will shift the
5
- # alphabet letters by +n+, where +n+ is the integer key. The same function
5
+ # alphabet letters by `n`, where `n` is the integer key. The same function
6
6
  # is used for encryption / decryption.
7
7
  # @param opts [Hash] optional parameters
8
8
  # @option opts [Integer] :shift The shift key. Default value: 13.
@@ -35,12 +35,12 @@ class String
35
35
  replace(rot(opts))
36
36
  end
37
37
 
38
- # Alias for {String#rot} with default value ( +rot(shift: 13)+ ).
38
+ # Alias for {String#rot} with default value ( `rot(shift: 13)` ).
39
39
  def rot13
40
40
  rot
41
41
  end
42
42
 
43
- # Alias for {String#rot!} with default value ( +rot!(shift: 13)+ ).
43
+ # Alias for {String#rot!} with default value ( `rot!(shift: 13)` ).
44
44
  def rot13!
45
45
  rot!
46
46
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Version
4
- VERSION = '1.5.0'
4
+ VERSION = '2.0.0'
5
5
  end
data/lib/ctf_party/xor.rb CHANGED
@@ -11,8 +11,8 @@ class String
11
11
  b1 = unpack('U*')
12
12
  b2 = key.unpack('U*')
13
13
  longest = [b1.length, b2.length].max
14
- b1 = [0] * (longest - b1.length) + b1
15
- b2 = [0] * (longest - b2.length) + b2
14
+ b1 = ([0] * (longest - b1.length)) + b1
15
+ b2 = ([0] * (longest - b2.length)) + b2
16
16
  b1.zip(b2).map { |a, b| a ^ b }.pack('U*')
17
17
  end
18
18
 
@@ -36,8 +36,8 @@ class String
36
36
  b1 = b1.chars.map(&:ord)
37
37
  b2 = b2.chars.map(&:ord)
38
38
  longest = [b1.length, b2.length].max
39
- b1 = [0] * (longest - b1.length) + b1
40
- b2 = [0] * (longest - b2.length) + b2
39
+ b1 = ([0] * (longest - b1.length)) + b1
40
+ b2 = ([0] * (longest - b2.length)) + b2
41
41
  b1.zip(b2).map { |a, b| (a ^ b).chr }.join
42
42
  end
43
43
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ctf-party
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexandre ZANNI
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-05-05 00:00:00.000000000 Z
11
+ date: 2022-01-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: docopt
@@ -24,145 +24,22 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0.6'
27
- - !ruby/object:Gem::Dependency
28
- name: bundler
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '2.1'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '2.1'
41
- - !ruby/object:Gem::Dependency
42
- name: commonmarker
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '0.20'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '0.20'
55
- - !ruby/object:Gem::Dependency
56
- name: github-markup
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '4.0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '4.0'
69
- - !ruby/object:Gem::Dependency
70
- name: minitest
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '5'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '5'
83
- - !ruby/object:Gem::Dependency
84
- name: minitest-skip
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: '0.0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: '0.0'
97
- - !ruby/object:Gem::Dependency
98
- name: rake
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: '13.0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: '13.0'
111
- - !ruby/object:Gem::Dependency
112
- name: redcarpet
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - "~>"
116
- - !ruby/object:Gem::Version
117
- version: '3.5'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - "~>"
123
- - !ruby/object:Gem::Version
124
- version: '3.5'
125
- - !ruby/object:Gem::Dependency
126
- name: rubocop
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - "~>"
130
- - !ruby/object:Gem::Version
131
- version: '1.8'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - "~>"
137
- - !ruby/object:Gem::Version
138
- version: '1.8'
139
- - !ruby/object:Gem::Dependency
140
- name: yard
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - "~>"
144
- - !ruby/object:Gem::Version
145
- version: '0.9'
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - "~>"
151
- - !ruby/object:Gem::Version
152
- version: '0.9'
153
- description: A CLI tool & library to enhance and speed up script/exploitwriting for
154
- CTF players (or security researchers, bug bountyhunters, pentesters but mostly focused
155
- on CTF) bypatching the String class to add a short syntax of usualcode patterns.
27
+ description: A CLI tool & library to enhance and speed up script/exploit writing for
28
+ CTF players (or security researchers, bug bounty hunters, pentesters but mostly
29
+ focused on CTF) by patching the String class to add a short syntax of usual code
30
+ patterns. Methods for base64, digest (hash), flag, rot (Caesar), hexadecimal, case,
31
+ cgi (URL encoding/decoding, HTML escaping/unescaping), binary, leet (1337), decimal,
32
+ XOR, whitespace strip.
156
33
  email: alexandre.zanni@engineer.com
157
34
  executables:
158
35
  - ctf-party
159
- - ctf_party_console
36
+ - ctf-party_console
160
37
  extensions: []
161
38
  extra_rdoc_files: []
162
39
  files:
163
40
  - LICENSE.txt
164
41
  - bin/ctf-party
165
- - bin/ctf_party_console
42
+ - bin/ctf-party_console
166
43
  - lib/ctf_party.rb
167
44
  - lib/ctf_party/base64.rb
168
45
  - lib/ctf_party/binary.rb
@@ -187,6 +64,7 @@ metadata:
187
64
  documentation_uri: https://noraj.github.io/ctf-party/
188
65
  homepage_uri: https://noraj.github.io/ctf-party/
189
66
  source_code_uri: https://github.com/noraj/ctf-party/
67
+ rubygems_mfa_required: 'true'
190
68
  post_install_message:
191
69
  rdoc_options: []
192
70
  require_paths:
@@ -208,6 +86,6 @@ requirements: []
208
86
  rubygems_version: 3.2.15
209
87
  signing_key:
210
88
  specification_version: 4
211
- summary: A CLI tool & library to enhance and speed up script/exploitwriting for CTF
212
- players
89
+ summary: A CLI tool & library to enhance and speed up script/exploit writing with
90
+ string conversion/manipulation
213
91
  test_files: []