Compare commits
No commits in common. "ai-dev" and "master" have entirely different histories.
@ -1,209 +1,346 @@
|
|||||||
:root {
|
:root {
|
||||||
--bg-color: #050505;
|
--color-bg: #ffffff;
|
||||||
--surface-color: #111111;
|
--color-text: #1a1a1a;
|
||||||
--surface-light: #1a1a1a;
|
--color-primary: #2563EB; /* Vibrant Blue */
|
||||||
--accent-color: #00ff88;
|
--color-secondary: #000000;
|
||||||
--accent-glow: rgba(0, 255, 136, 0.2);
|
--color-accent: #A3E635; /* Lime Green */
|
||||||
--text-primary: #e0e0e0;
|
--color-surface: #f8f9fa;
|
||||||
--text-secondary: #888888;
|
--font-heading: 'Space Grotesk', sans-serif;
|
||||||
--border-color: #222222;
|
--font-body: 'Inter', sans-serif;
|
||||||
--font-ui: 'Inter', system-ui, -apple-system, sans-serif;
|
--border-width: 2px;
|
||||||
--font-mono: 'JetBrains Mono', 'Fira Code', monospace;
|
--shadow-hard: 5px 5px 0px #000;
|
||||||
--glass-bg: rgba(255, 255, 255, 0.03);
|
--shadow-hover: 8px 8px 0px #000;
|
||||||
--glass-border: rgba(255, 255, 255, 0.05);
|
--radius-pill: 50rem;
|
||||||
|
--radius-card: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
background-color: var(--bg-color);
|
font-family: var(--font-body);
|
||||||
background-image:
|
background-color: var(--color-bg);
|
||||||
radial-gradient(circle at 50% -20%, #112211 0%, transparent 50%),
|
color: var(--color-text);
|
||||||
radial-gradient(circle at 0% 100%, #050505 0%, transparent 50%);
|
overflow-x: hidden;
|
||||||
color: var(--text-primary);
|
|
||||||
font-family: var(--font-ui);
|
|
||||||
margin: 0;
|
|
||||||
line-height: 1.6;
|
|
||||||
min-height: 100vh;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
h1, h2, h3, h4, h5, h6, .navbar-brand {
|
||||||
|
font-family: var(--font-heading);
|
||||||
|
letter-spacing: -0.03em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Utilities */
|
||||||
|
.text-primary { color: var(--color-primary) !important; }
|
||||||
|
.bg-black { background-color: #000 !important; }
|
||||||
|
.text-white { color: #fff !important; }
|
||||||
|
.shadow-hard { box-shadow: var(--shadow-hard); }
|
||||||
|
.border-2-black { border: var(--border-width) solid #000; }
|
||||||
|
.py-section { padding-top: 5rem; padding-bottom: 5rem; }
|
||||||
|
|
||||||
|
/* Navbar */
|
||||||
.navbar {
|
.navbar {
|
||||||
background-color: rgba(5, 5, 5, 0.8);
|
background: rgba(255, 255, 255, 0.9);
|
||||||
backdrop-filter: blur(20px);
|
backdrop-filter: blur(10px);
|
||||||
border-bottom: 1px solid var(--border-color);
|
border-bottom: var(--border-width) solid transparent;
|
||||||
padding: 1rem 4rem;
|
transition: all 0.3s;
|
||||||
|
padding-top: 1rem;
|
||||||
|
padding-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar.scrolled {
|
||||||
|
border-bottom-color: #000;
|
||||||
|
padding-top: 0.5rem;
|
||||||
|
padding-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.brand-text {
|
||||||
|
font-size: 1.5rem;
|
||||||
|
font-weight: 800;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-link {
|
||||||
|
font-weight: 500;
|
||||||
|
color: var(--color-text);
|
||||||
|
margin-left: 1rem;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-link:hover, .nav-link.active {
|
||||||
|
color: var(--color-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Buttons */
|
||||||
|
.btn {
|
||||||
|
font-weight: 700;
|
||||||
|
font-family: var(--font-heading);
|
||||||
|
padding: 0.8rem 2rem;
|
||||||
|
border-radius: var(--radius-pill);
|
||||||
|
border: var(--border-width) solid #000;
|
||||||
|
transition: all 0.2s cubic-bezier(0.25, 1, 0.5, 1);
|
||||||
|
box-shadow: var(--shadow-hard);
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn:hover {
|
||||||
|
transform: translate(-2px, -2px);
|
||||||
|
box-shadow: var(--shadow-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn:active {
|
||||||
|
transform: translate(2px, 2px);
|
||||||
|
box-shadow: 0 0 0 #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-primary {
|
||||||
|
background-color: var(--color-primary);
|
||||||
|
border-color: #000;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-primary:hover {
|
||||||
|
background-color: #1d4ed8;
|
||||||
|
border-color: #000;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-outline-dark {
|
||||||
|
background-color: #fff;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-cta {
|
||||||
|
background-color: var(--color-accent);
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-cta:hover {
|
||||||
|
background-color: #8cc629;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hero Section */
|
||||||
|
.hero-section {
|
||||||
|
min-height: 100vh;
|
||||||
|
padding-top: 80px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.background-blob {
|
||||||
|
position: absolute;
|
||||||
|
border-radius: 50%;
|
||||||
|
filter: blur(80px);
|
||||||
|
opacity: 0.6;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.blob-1 {
|
||||||
|
top: -10%;
|
||||||
|
right: -10%;
|
||||||
|
width: 600px;
|
||||||
|
height: 600px;
|
||||||
|
background: radial-gradient(circle, var(--color-accent), transparent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.blob-2 {
|
||||||
|
bottom: 10%;
|
||||||
|
left: -10%;
|
||||||
|
width: 500px;
|
||||||
|
height: 500px;
|
||||||
|
background: radial-gradient(circle, var(--color-primary), transparent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.highlight-text {
|
||||||
|
background: linear-gradient(120deg, transparent 0%, transparent 40%, var(--color-accent) 40%, var(--color-accent) 100%);
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: 100% 40%;
|
||||||
|
background-position: 0 88%;
|
||||||
|
padding: 0 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dot { color: var(--color-primary); }
|
||||||
|
|
||||||
|
.badge-pill {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 0.5rem 1rem;
|
||||||
|
border: 2px solid #000;
|
||||||
|
border-radius: 50px;
|
||||||
|
font-weight: 700;
|
||||||
|
background: #fff;
|
||||||
|
box-shadow: 4px 4px 0 #000;
|
||||||
|
font-family: var(--font-heading);
|
||||||
|
font-size: 0.9rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Marquee */
|
||||||
|
.marquee-container {
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
border-top: 2px solid #000;
|
||||||
|
border-bottom: 2px solid #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rotate-divider {
|
||||||
|
transform: rotate(-2deg) scale(1.05);
|
||||||
|
z-index: 10;
|
||||||
|
position: relative;
|
||||||
|
margin-top: -50px;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.marquee-content {
|
||||||
|
display: inline-block;
|
||||||
|
animation: marquee 20s linear infinite;
|
||||||
|
font-family: var(--font-heading);
|
||||||
|
font-weight: 700;
|
||||||
|
font-size: 1.5rem;
|
||||||
|
letter-spacing: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes marquee {
|
||||||
|
0% { transform: translateX(0); }
|
||||||
|
100% { transform: translateX(-50%); }
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Portfolio Cards */
|
||||||
|
.project-card {
|
||||||
|
border: 2px solid #000;
|
||||||
|
border-radius: var(--radius-card);
|
||||||
|
overflow: hidden;
|
||||||
|
background: #fff;
|
||||||
|
transition: transform 0.3s ease;
|
||||||
|
box-shadow: var(--shadow-hard);
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.project-card:hover {
|
||||||
|
transform: translateY(-10px);
|
||||||
|
box-shadow: 8px 8px 0 #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-img-holder {
|
||||||
|
height: 250px;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
position: sticky;
|
justify-content: center;
|
||||||
top: 0;
|
border-bottom: 2px solid #000;
|
||||||
z-index: 100;
|
position: relative;
|
||||||
|
font-size: 4rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.brand {
|
.placeholder-art {
|
||||||
font-weight: 800;
|
transition: transform 0.3s ease;
|
||||||
letter-spacing: -2px;
|
}
|
||||||
font-size: 1.8rem;
|
|
||||||
color: var(--text-primary);
|
.project-card:hover .placeholder-art {
|
||||||
|
transform: scale(1.2) rotate(10deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-soft-blue { background-color: #e0f2fe; }
|
||||||
|
.bg-soft-green { background-color: #dcfce7; }
|
||||||
|
.bg-soft-purple { background-color: #f3e8ff; }
|
||||||
|
.bg-soft-yellow { background-color: #fef9c3; }
|
||||||
|
|
||||||
|
.category-tag {
|
||||||
|
position: absolute;
|
||||||
|
top: 15px;
|
||||||
|
right: 15px;
|
||||||
|
background: #000;
|
||||||
|
color: #fff;
|
||||||
|
padding: 5px 12px;
|
||||||
|
border-radius: 20px;
|
||||||
|
font-size: 0.75rem;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-body { padding: 1.5rem; }
|
||||||
|
|
||||||
|
.link-arrow {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
color: #000;
|
||||||
|
font-weight: 700;
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-top: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.brand span {
|
.link-arrow i { transition: transform 0.2s; margin-left: 5px; }
|
||||||
color: var(--accent-color);
|
.link-arrow:hover i { transform: translateX(5px); }
|
||||||
text-shadow: 0 0 20px var(--accent-glow);
|
|
||||||
|
/* About */
|
||||||
|
.about-image-stack {
|
||||||
|
position: relative;
|
||||||
|
height: 400px;
|
||||||
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.container-main {
|
.stack-card {
|
||||||
max-width: 1400px;
|
position: absolute;
|
||||||
margin: 6rem auto;
|
width: 80%;
|
||||||
padding: 0 4rem;
|
height: 100%;
|
||||||
|
border-radius: var(--radius-card);
|
||||||
|
border: 2px solid #000;
|
||||||
|
box-shadow: var(--shadow-hard);
|
||||||
|
left: 10%;
|
||||||
|
transform: rotate(-3deg);
|
||||||
|
background-size: cover;
|
||||||
}
|
}
|
||||||
|
|
||||||
.workspace {
|
/* Forms */
|
||||||
display: grid;
|
.form-control {
|
||||||
grid-template-columns: 1fr 1fr;
|
border: 2px solid #000;
|
||||||
gap: 2rem;
|
border-radius: 0.5rem;
|
||||||
margin-top: 3rem;
|
padding: 1rem;
|
||||||
|
font-weight: 500;
|
||||||
|
background: #f8f9fa;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: 1100px) {
|
.form-control:focus {
|
||||||
.workspace {
|
box-shadow: 4px 4px 0 var(--color-primary);
|
||||||
grid-template-columns: 1fr;
|
border-color: #000;
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Animations */
|
||||||
|
.animate-up {
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateY(30px);
|
||||||
|
animation: fadeUp 0.8s ease forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
.delay-100 { animation-delay: 0.1s; }
|
||||||
|
.delay-200 { animation-delay: 0.2s; }
|
||||||
|
|
||||||
|
@keyframes fadeUp {
|
||||||
|
to {
|
||||||
|
opacity: 1;
|
||||||
|
transform: translateY(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.card {
|
/* Social */
|
||||||
background-color: var(--surface-color);
|
.social-links a {
|
||||||
border: 1px solid var(--border-color);
|
transition: transform 0.2s;
|
||||||
border-radius: 12px;
|
display: inline-block;
|
||||||
display: flex;
|
}
|
||||||
flex-direction: column;
|
.social-links a:hover {
|
||||||
overflow: hidden;
|
transform: scale(1.2) rotate(10deg);
|
||||||
transition: transform 0.3s ease, border-color 0.3s ease;
|
color: var(--color-accent) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card:hover {
|
/* Responsive */
|
||||||
border-color: #333;
|
@media (max-width: 991px) {
|
||||||
}
|
.rotate-divider {
|
||||||
|
transform: rotate(0);
|
||||||
.card-header {
|
margin-top: 0;
|
||||||
padding: 1rem 1.5rem;
|
margin-bottom: 2rem;
|
||||||
border-bottom: 1px solid var(--border-color);
|
}
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
.hero-section {
|
||||||
align-items: center;
|
padding-top: 120px;
|
||||||
background-color: var(--surface-light);
|
text-align: center;
|
||||||
}
|
min-height: auto;
|
||||||
|
padding-bottom: 100px;
|
||||||
.card-title {
|
}
|
||||||
font-size: 0.75rem;
|
|
||||||
text-transform: uppercase;
|
.display-1 { font-size: 3.5rem; }
|
||||||
letter-spacing: 2px;
|
|
||||||
color: var(--text-secondary);
|
.blob-1 { width: 300px; height: 300px; right: -20%; }
|
||||||
font-weight: 700;
|
.blob-2 { width: 300px; height: 300px; left: -20%; }
|
||||||
}
|
|
||||||
|
|
||||||
textarea {
|
|
||||||
background-color: transparent;
|
|
||||||
border: none;
|
|
||||||
color: var(--text-primary);
|
|
||||||
font-family: var(--font-mono);
|
|
||||||
font-size: 0.95rem;
|
|
||||||
padding: 1.5rem;
|
|
||||||
resize: none;
|
|
||||||
height: 500px;
|
|
||||||
outline: none;
|
|
||||||
width: 100%;
|
|
||||||
scrollbar-width: thin;
|
|
||||||
scrollbar-color: var(--border-color) transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
.controls {
|
|
||||||
display: flex;
|
|
||||||
gap: 1.5rem;
|
|
||||||
margin-top: 2rem;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
align-items: flex-end;
|
|
||||||
background: var(--glass-bg);
|
|
||||||
padding: 1.5rem;
|
|
||||||
border-radius: 12px;
|
|
||||||
border: 1px solid var(--glass-border);
|
|
||||||
}
|
|
||||||
|
|
||||||
.form-group {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
gap: 0.6rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
label {
|
|
||||||
font-size: 0.7rem;
|
|
||||||
color: var(--text-secondary);
|
|
||||||
text-transform: uppercase;
|
|
||||||
font-weight: 700;
|
|
||||||
letter-spacing: 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
select {
|
|
||||||
background-color: var(--surface-color);
|
|
||||||
border: 1px solid var(--border-color);
|
|
||||||
color: var(--text-primary);
|
|
||||||
padding: 0.6rem 1rem;
|
|
||||||
border-radius: 8px;
|
|
||||||
font-size: 0.9rem;
|
|
||||||
appearance: none;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
button.btn-primary {
|
|
||||||
background-color: var(--accent-color);
|
|
||||||
color: #000;
|
|
||||||
border: none;
|
|
||||||
padding: 0.8rem 2rem;
|
|
||||||
border-radius: 8px;
|
|
||||||
font-weight: 800;
|
|
||||||
cursor: pointer;
|
|
||||||
transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);
|
|
||||||
text-transform: uppercase;
|
|
||||||
font-size: 0.9rem;
|
|
||||||
box-shadow: 0 4px 15px rgba(0, 255, 136, 0.3);
|
|
||||||
}
|
|
||||||
|
|
||||||
button.btn-primary:hover {
|
|
||||||
transform: scale(1.02);
|
|
||||||
box-shadow: 0 6px 20px rgba(0, 255, 136, 0.5);
|
|
||||||
}
|
|
||||||
|
|
||||||
button.btn-primary:active {
|
|
||||||
transform: scale(0.98);
|
|
||||||
}
|
|
||||||
|
|
||||||
.terminal-log {
|
|
||||||
background-color: #000;
|
|
||||||
border: 1px solid var(--border-color);
|
|
||||||
padding: 1.5rem;
|
|
||||||
font-family: var(--font-mono);
|
|
||||||
font-size: 0.85rem;
|
|
||||||
color: #666;
|
|
||||||
height: 180px;
|
|
||||||
overflow-y: auto;
|
|
||||||
margin-top: 2rem;
|
|
||||||
border-radius: 12px;
|
|
||||||
box-shadow: inset 0 2px 10px rgba(0,0,0,0.5);
|
|
||||||
}
|
|
||||||
|
|
||||||
.log-entry {
|
|
||||||
margin-bottom: 0.4rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.log-success { color: var(--accent-color); }
|
|
||||||
.log-info { color: #0088ff; }
|
|
||||||
.log-warn { color: #ff3333; }
|
|
||||||
|
|
||||||
.badge {
|
|
||||||
font-size: 0.7rem;
|
|
||||||
padding: 0.3rem 0.8rem;
|
|
||||||
border-radius: 6px;
|
|
||||||
background: var(--surface-light);
|
|
||||||
border: 1px solid var(--border-color);
|
|
||||||
color: var(--text-secondary);
|
|
||||||
font-weight: 600;
|
|
||||||
letter-spacing: 0.5px;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,85 +1,73 @@
|
|||||||
document.addEventListener('DOMContentLoaded', () => {
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
const inputArea = document.getElementById('input-code');
|
|
||||||
const outputArea = document.getElementById('output-code');
|
// Smooth scrolling for navigation links
|
||||||
const protectBtn = document.getElementById('protect-btn');
|
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
|
||||||
const terminal = document.getElementById('terminal');
|
anchor.addEventListener('click', function (e) {
|
||||||
const copyBtn = document.getElementById('copy-btn');
|
e.preventDefault();
|
||||||
|
const targetId = this.getAttribute('href');
|
||||||
|
if (targetId === '#') return;
|
||||||
|
|
||||||
|
const targetElement = document.querySelector(targetId);
|
||||||
|
if (targetElement) {
|
||||||
|
// Close mobile menu if open
|
||||||
|
const navbarToggler = document.querySelector('.navbar-toggler');
|
||||||
|
const navbarCollapse = document.querySelector('.navbar-collapse');
|
||||||
|
if (navbarCollapse.classList.contains('show')) {
|
||||||
|
navbarToggler.click();
|
||||||
|
}
|
||||||
|
|
||||||
function log(message, type = 'info') {
|
// Scroll with offset
|
||||||
const entry = document.createElement('div');
|
const offset = 80;
|
||||||
entry.className = `log-entry log-${type}`;
|
const elementPosition = targetElement.getBoundingClientRect().top;
|
||||||
const time = new Date().toLocaleTimeString([], { hour12: false });
|
const offsetPosition = elementPosition + window.pageYOffset - offset;
|
||||||
entry.textContent = `[${time}] ${message}`;
|
|
||||||
terminal.appendChild(entry);
|
|
||||||
terminal.scrollTop = terminal.scrollHeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function sleep(ms) {
|
window.scrollTo({
|
||||||
return new Promise(resolve => setTimeout(resolve, ms));
|
top: offsetPosition,
|
||||||
}
|
behavior: "smooth"
|
||||||
|
});
|
||||||
protectBtn.addEventListener('click', async () => {
|
|
||||||
const code = inputArea.value.trim();
|
|
||||||
if (!code) {
|
|
||||||
log('FAILED: No source input detected.', 'warn');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
protectBtn.disabled = true;
|
|
||||||
protectBtn.style.opacity = '0.5';
|
|
||||||
|
|
||||||
terminal.innerHTML = '';
|
|
||||||
log(`INITIALIZING LUARTEX V11.0 QUANTUM SINGULARITY ENGINE`, 'info');
|
|
||||||
await sleep(300);
|
|
||||||
log(`PROTOCOL: ILD (LINKED INSTRUCTION DISPATCHING)`, 'info');
|
|
||||||
await sleep(400);
|
|
||||||
|
|
||||||
log(`QUANTUM: Synchronizing State-Hash with Environment Entropy...`, 'info');
|
|
||||||
await sleep(400);
|
|
||||||
log(`MIRROR: Deploying Deceptive Logic Reality Paths...`, 'info');
|
|
||||||
await sleep(400);
|
|
||||||
|
|
||||||
log(`SINGULARITY: Collapsing Constant Space into Transient Synthesis...`, 'info');
|
|
||||||
await sleep(300);
|
|
||||||
log(`TRAP: Arming Quantum Observation Detectors...`, 'info');
|
|
||||||
await sleep(300);
|
|
||||||
|
|
||||||
log(`NEURAL: Mapping Opcode Meaning to Execution History...`, 'info');
|
|
||||||
await sleep(400);
|
|
||||||
log(`SPAGHETTI: Shuffling Instruction Topology...`, 'info');
|
|
||||||
await sleep(300);
|
|
||||||
|
|
||||||
try {
|
|
||||||
const response = await fetch('process.php', {
|
|
||||||
method: 'POST',
|
|
||||||
headers: { 'Content-Type': 'application/json' },
|
|
||||||
body: JSON.stringify({ code })
|
|
||||||
});
|
|
||||||
|
|
||||||
const data = await response.json();
|
|
||||||
|
|
||||||
if (data.success) {
|
|
||||||
await sleep(500);
|
|
||||||
outputArea.value = data.protected_code;
|
|
||||||
log(`SUCCESS: Luartex V11.0 Quantum Singularity VM Online.`, 'success');
|
|
||||||
log(`Traceability: ZERO | Observation Resistance: ABSOLUTE`, 'success');
|
|
||||||
log(`Topology: SPAGHETTI-LINKED | Seed: ${data.stats.seed}`, 'success');
|
|
||||||
} else {
|
|
||||||
log(`CRITICAL ERROR: ${data.error}`, 'warn');
|
|
||||||
}
|
}
|
||||||
} catch (err) {
|
});
|
||||||
log(`ENGINE FAILURE: ${err.message}`, 'warn');
|
});
|
||||||
} finally {
|
|
||||||
protectBtn.disabled = false;
|
// Navbar scroll effect
|
||||||
protectBtn.style.opacity = '1';
|
const navbar = document.querySelector('.navbar');
|
||||||
|
window.addEventListener('scroll', () => {
|
||||||
|
if (window.scrollY > 50) {
|
||||||
|
navbar.classList.add('scrolled', 'shadow-sm', 'bg-white');
|
||||||
|
navbar.classList.remove('bg-transparent');
|
||||||
|
} else {
|
||||||
|
navbar.classList.remove('scrolled', 'shadow-sm', 'bg-white');
|
||||||
|
navbar.classList.add('bg-transparent');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
copyBtn.addEventListener('click', () => {
|
// Intersection Observer for fade-up animations
|
||||||
if (!outputArea.value) return;
|
const observerOptions = {
|
||||||
navigator.clipboard.writeText(outputArea.value);
|
threshold: 0.1,
|
||||||
const originalText = copyBtn.textContent;
|
rootMargin: "0px 0px -50px 0px"
|
||||||
copyBtn.textContent = 'COPIED';
|
};
|
||||||
setTimeout(() => copyBtn.textContent = originalText, 2000);
|
|
||||||
|
const observer = new IntersectionObserver((entries) => {
|
||||||
|
entries.forEach(entry => {
|
||||||
|
if (entry.isIntersecting) {
|
||||||
|
entry.target.classList.add('animate-up');
|
||||||
|
entry.target.style.opacity = "1";
|
||||||
|
observer.unobserve(entry.target); // Only animate once
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, observerOptions);
|
||||||
|
|
||||||
|
// Select elements to animate (add a class 'reveal' to them in HTML if not already handled by CSS animation)
|
||||||
|
// For now, let's just make sure the hero animations run.
|
||||||
|
// If we want scroll animations, we'd add opacity: 0 to elements in CSS and reveal them here.
|
||||||
|
// Given the request, the CSS animation I added runs on load for Hero.
|
||||||
|
// Let's make the project cards animate in.
|
||||||
|
|
||||||
|
const projectCards = document.querySelectorAll('.project-card');
|
||||||
|
projectCards.forEach((card, index) => {
|
||||||
|
card.style.opacity = "0";
|
||||||
|
card.style.animationDelay = `${index * 0.1}s`;
|
||||||
|
observer.observe(card);
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
@ -1,11 +0,0 @@
|
|||||||
<?php
|
|
||||||
require_once __DIR__ . '/config.php';
|
|
||||||
|
|
||||||
try {
|
|
||||||
$pdo = db();
|
|
||||||
$sql = file_get_contents(__DIR__ . '/migrations/001_create_scripts_table.sql');
|
|
||||||
$pdo->exec($sql);
|
|
||||||
echo "Migration successful.";
|
|
||||||
} catch (PDOException $e) {
|
|
||||||
echo "Migration failed: " . $e->getMessage();
|
|
||||||
}
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
CREATE TABLE IF NOT EXISTS scripts (
|
|
||||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
||||||
filename VARCHAR(255) DEFAULT 'untitled.lua',
|
|
||||||
original_size INT,
|
|
||||||
protected_size INT,
|
|
||||||
settings JSON,
|
|
||||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
||||||
) ENGINE=InnoDB;
|
|
||||||
203
index.php
203
index.php
@ -1,69 +1,150 @@
|
|||||||
<?php
|
<?php
|
||||||
$projectName = $_SERVER['PROJECT_NAME'] ?? 'Luartex';
|
declare(strict_types=1);
|
||||||
$projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Advanced Quantum Singularity Luau Obfuscation';
|
@ini_set('display_errors', '1');
|
||||||
|
@error_reporting(E_ALL);
|
||||||
|
@date_default_timezone_set('UTC');
|
||||||
|
|
||||||
|
$phpVersion = PHP_VERSION;
|
||||||
|
$now = date('Y-m-d H:i:s');
|
||||||
?>
|
?>
|
||||||
<!DOCTYPE html>
|
<!doctype html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<title><?php echo htmlspecialchars($projectName); ?> | <?php echo htmlspecialchars($projectDescription); ?></title>
|
<title>New Style</title>
|
||||||
<meta name="description" content="<?php echo htmlspecialchars($projectDescription); ?>">
|
<?php
|
||||||
|
// Read project preview data from environment
|
||||||
<!-- Fonts -->
|
$projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? '';
|
||||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
$projectImageUrl = $_SERVER['PROJECT_IMAGE_URL'] ?? '';
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
?>
|
||||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;800&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
|
<?php if ($projectDescription): ?>
|
||||||
|
<!-- Meta description -->
|
||||||
<!-- CSS -->
|
<meta name="description" content='<?= htmlspecialchars($projectDescription) ?>' />
|
||||||
<link rel="stylesheet" href="assets/css/custom.css?v=<?php echo time(); ?>">
|
<!-- Open Graph meta tags -->
|
||||||
|
<meta property="og:description" content="<?= htmlspecialchars($projectDescription) ?>" />
|
||||||
|
<!-- Twitter meta tags -->
|
||||||
|
<meta property="twitter:description" content="<?= htmlspecialchars($projectDescription) ?>" />
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php if ($projectImageUrl): ?>
|
||||||
|
<!-- Open Graph image -->
|
||||||
|
<meta property="og:image" content="<?= htmlspecialchars($projectImageUrl) ?>" />
|
||||||
|
<!-- Twitter image -->
|
||||||
|
<meta property="twitter:image" content="<?= htmlspecialchars($projectImageUrl) ?>" />
|
||||||
|
<?php endif; ?>
|
||||||
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;700&display=swap" rel="stylesheet">
|
||||||
|
<style>
|
||||||
|
:root {
|
||||||
|
--bg-color-start: #6a11cb;
|
||||||
|
--bg-color-end: #2575fc;
|
||||||
|
--text-color: #ffffff;
|
||||||
|
--card-bg-color: rgba(255, 255, 255, 0.01);
|
||||||
|
--card-border-color: rgba(255, 255, 255, 0.1);
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
font-family: 'Inter', sans-serif;
|
||||||
|
background: linear-gradient(45deg, var(--bg-color-start), var(--bg-color-end));
|
||||||
|
color: var(--text-color);
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
min-height: 100vh;
|
||||||
|
text-align: center;
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
body::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 100 100"><path d="M-10 10L110 10M10 -10L10 110" stroke-width="1" stroke="rgba(255,255,255,0.05)"/></svg>');
|
||||||
|
animation: bg-pan 20s linear infinite;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
@keyframes bg-pan {
|
||||||
|
0% { background-position: 0% 0%; }
|
||||||
|
100% { background-position: 100% 100%; }
|
||||||
|
}
|
||||||
|
main {
|
||||||
|
padding: 2rem;
|
||||||
|
}
|
||||||
|
.card {
|
||||||
|
background: var(--card-bg-color);
|
||||||
|
border: 1px solid var(--card-border-color);
|
||||||
|
border-radius: 16px;
|
||||||
|
padding: 2rem;
|
||||||
|
backdrop-filter: blur(20px);
|
||||||
|
-webkit-backdrop-filter: blur(20px);
|
||||||
|
box-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
.loader {
|
||||||
|
margin: 1.25rem auto 1.25rem;
|
||||||
|
width: 48px;
|
||||||
|
height: 48px;
|
||||||
|
border: 3px solid rgba(255, 255, 255, 0.25);
|
||||||
|
border-top-color: #fff;
|
||||||
|
border-radius: 50%;
|
||||||
|
animation: spin 1s linear infinite;
|
||||||
|
}
|
||||||
|
@keyframes spin {
|
||||||
|
from { transform: rotate(0deg); }
|
||||||
|
to { transform: rotate(360deg); }
|
||||||
|
}
|
||||||
|
.hint {
|
||||||
|
opacity: 0.9;
|
||||||
|
}
|
||||||
|
.sr-only {
|
||||||
|
position: absolute;
|
||||||
|
width: 1px; height: 1px;
|
||||||
|
padding: 0; margin: -1px;
|
||||||
|
overflow: hidden;
|
||||||
|
clip: rect(0, 0, 0, 0);
|
||||||
|
white-space: nowrap; border: 0;
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
font-size: 3rem;
|
||||||
|
font-weight: 700;
|
||||||
|
margin: 0 0 1rem;
|
||||||
|
letter-spacing: -1px;
|
||||||
|
}
|
||||||
|
p {
|
||||||
|
margin: 0.5rem 0;
|
||||||
|
font-size: 1.1rem;
|
||||||
|
}
|
||||||
|
code {
|
||||||
|
background: rgba(0,0,0,0.2);
|
||||||
|
padding: 2px 6px;
|
||||||
|
border-radius: 4px;
|
||||||
|
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
||||||
|
}
|
||||||
|
footer {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 1rem;
|
||||||
|
font-size: 0.8rem;
|
||||||
|
opacity: 0.7;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
<main>
|
||||||
<nav class="navbar">
|
<div class="card">
|
||||||
<a href="/" class="brand">LUAR<span>TEX</span></a>
|
<h1>Analyzing your requirements and generating your website…</h1>
|
||||||
<div style="flex-grow: 1;"></div>
|
<div class="loader" role="status" aria-live="polite" aria-label="Applying initial changes">
|
||||||
<div class="badge">Luartex V11.0 (Quantum Singularity)</div>
|
<span class="sr-only">Loading…</span>
|
||||||
</nav>
|
</div>
|
||||||
|
<p class="hint"><?= ($_SERVER['HTTP_HOST'] ?? '') === 'appwizzy.com' ? 'AppWizzy' : 'Flatlogic' ?> AI is collecting your requirements and applying the first changes.</p>
|
||||||
<main class="container-main">
|
<p class="hint">This page will update automatically as the plan is implemented.</p>
|
||||||
<header style="margin-bottom: 3rem;">
|
<p>Runtime: PHP <code><?= htmlspecialchars($phpVersion) ?></code> — UTC <code><?= htmlspecialchars($now) ?></code></p>
|
||||||
<h1 style="font-size: 3rem; margin-bottom: 0.5rem; letter-spacing: -2px;">The <span style="color: var(--accent-color);">Untraceable</span> Luau Engine.</h1>
|
|
||||||
<p style="color: var(--text-secondary); max-width: 600px;">Luartex V11.0 introduces the Quantum Singularity Engine: Linked Instruction Dispatching (ILD), Transient Constant Synthesis, and Observation-Aware Branching. Designed to make runtime analysis physically impossible.</p>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="workspace">
|
|
||||||
<!-- Input Panel -->
|
|
||||||
<div class="card">
|
|
||||||
<div class="card-header">
|
|
||||||
<span class="card-title">Source Luau</span>
|
|
||||||
<span class="badge">LUA / LUAU</span>
|
|
||||||
</div>
|
|
||||||
<textarea id="input-code" placeholder="-- Paste your Luau script here...
|
|
||||||
print('Hello Luartex!')"></textarea>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Output Panel -->
|
|
||||||
<div class="card">
|
|
||||||
<div class="card-header">
|
|
||||||
<span class="card-title">Protected Output</span>
|
|
||||||
<button id="copy-btn" class="badge" style="cursor: pointer; background: transparent;">COPY</button>
|
|
||||||
</div>
|
|
||||||
<textarea id="output-code" readonly placeholder="-- Protected bytecode will appear here..."></textarea>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
</main>
|
||||||
<div class="controls" style="justify-content: center;">
|
<footer>
|
||||||
<button id="protect-btn" class="btn-primary" style="padding: 1rem 4rem; font-size: 1.2rem;">Protect with Luartex V11.0</button>
|
Page updated: <?= htmlspecialchars($now) ?> (UTC)
|
||||||
</div>
|
</footer>
|
||||||
|
|
||||||
<div id="terminal" class="terminal-log">
|
|
||||||
<div class="log-entry log-info">[SYSTEM] Luartex V11.0 Quantum Singularity Engine Online.</div>
|
|
||||||
<div class="log-entry log-info">[SYSTEM] Linked Instruction Dispatching (ILD) Active.</div>
|
|
||||||
<div class="log-entry log-warning">[SECURITY] Quantum Observation Trap (Anti-Trace) Armed.</div>
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
|
|
||||||
<script src="assets/js/main.js?v=<?php echo time(); ?>"></script>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
309
process.php
309
process.php
@ -1,309 +0,0 @@
|
|||||||
<?php
|
|
||||||
header('Content-Type: application/json');
|
|
||||||
require_once __DIR__ . '/db/config.php';
|
|
||||||
|
|
||||||
$input = json_decode(file_get_contents('php://input'), true);
|
|
||||||
if (!$input) {
|
|
||||||
$input = json_decode(file_get_contents('php://stdin'), true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$input || empty($input['code'])) {
|
|
||||||
echo json_encode(['success' => false, 'error' => 'No code provided']);
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
$code = $input['code'];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Luartex V11.0 - Quantum Singularity Engine
|
|
||||||
* "The final frontier of untraceable execution."
|
|
||||||
*/
|
|
||||||
class LuartexV11_0 {
|
|
||||||
private $rawCode;
|
|
||||||
private $constants = [];
|
|
||||||
private $instructions = [];
|
|
||||||
private $keys = [];
|
|
||||||
private $opMap = [];
|
|
||||||
private $seed;
|
|
||||||
private $polyKey;
|
|
||||||
|
|
||||||
public function __construct($code) {
|
|
||||||
$this->rawCode = $code;
|
|
||||||
$this->seed = rand(100000, 999999);
|
|
||||||
$this->polyKey = rand(1, 255);
|
|
||||||
for ($i = 0; $i < 256; $i++) {
|
|
||||||
$this->keys[] = rand(0, 255);
|
|
||||||
}
|
|
||||||
$this->setupOpcodes();
|
|
||||||
}
|
|
||||||
|
|
||||||
private function setupOpcodes() {
|
|
||||||
$ops = [
|
|
||||||
'LOADK', 'CALL', 'MOVE',
|
|
||||||
'ADD', 'SUB', 'MUL', 'DIV',
|
|
||||||
'RETURN', 'GETTABLE', 'SETTABLE', 'NEWTABLE',
|
|
||||||
'TAMPER_CHECK', 'ENTROPY_SYNC',
|
|
||||||
'FETCH_ENV', 'RESOLVE_SYMBOL',
|
|
||||||
'MUTATE_BYTECODE', 'COMPUTE_JUMP',
|
|
||||||
'GHOST_NOP', 'DECEPTIVE_TRAP',
|
|
||||||
'JUMP', 'JUMP_IF'
|
|
||||||
];
|
|
||||||
shuffle($ops);
|
|
||||||
foreach ($ops as $op) {
|
|
||||||
$this->opMap[$op] = rand(0, 255);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private function genVar($len = 12) {
|
|
||||||
$chars = 'lIi1OQuvwnmMS5zZ2B8bg9q';
|
|
||||||
$res = '_';
|
|
||||||
for($i=0; $i<$len; $i++) $res .= $chars[rand(0, strlen($chars)-1)];
|
|
||||||
return $res;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function synthesizeChar($char) {
|
|
||||||
$a = rand(1, 255);
|
|
||||||
$b = rand(1, 255);
|
|
||||||
return "(bit32.bxor($char, $a) + $b - $b - $a + $char - $char)";
|
|
||||||
}
|
|
||||||
|
|
||||||
private function synthesizeString($s) {
|
|
||||||
$res = [];
|
|
||||||
for ($i = 0; $i < strlen($s); $i++) {
|
|
||||||
$res[] = "string.char(" . $this->synthesizeChar(ord($s[$i])) . ")";
|
|
||||||
}
|
|
||||||
return "function() local _ = " . implode(" .. ", $res) . "; return _ end";
|
|
||||||
}
|
|
||||||
|
|
||||||
private function addConst($val) {
|
|
||||||
$idx = array_search($val, $this->constants);
|
|
||||||
if ($idx === false) {
|
|
||||||
$this->constants[] = $val;
|
|
||||||
$idx = count($this->constants) - 1;
|
|
||||||
}
|
|
||||||
return $idx;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function compile() {
|
|
||||||
$cleanCode = preg_replace('/--[[]*.*?[]]*--/s', '', $this->rawCode);
|
|
||||||
$cleanCode = preg_replace('/--.*$/m', '', $cleanCode);
|
|
||||||
$tokens = preg_split('/[;
|
|
||||||
]+/', $cleanCode);
|
|
||||||
|
|
||||||
$insts = [];
|
|
||||||
foreach ($tokens as $token) {
|
|
||||||
$token = trim($token);
|
|
||||||
if (empty($token)) continue;
|
|
||||||
|
|
||||||
$insts[] = [$this->opMap['GHOST_NOP'], rand(0,255), rand(0,255), rand(0,255)];
|
|
||||||
|
|
||||||
if (preg_match('/^(?:local\s+)?([a-zA-Z_]\w*)\s*=\s*{\s*}\s*$/', $token, $m)) {
|
|
||||||
$insts[] = [$this->opMap['NEWTABLE'], 0, 0, 0];
|
|
||||||
$this->emitSetGlobalInto($insts, 0, $m[1]);
|
|
||||||
}
|
|
||||||
elseif (preg_match('/^([a-zA-Z_]\w*)\s*\[\s*["\']?(.*?)["\']?\s*\]\s*=\s*(.*)$/', $token, $m)) {
|
|
||||||
$this->emitTableSetInto($insts, $m[1], $m[2], $m[3]);
|
|
||||||
}
|
|
||||||
elseif (preg_match('/^([a-zA-Z_]\w*(?:\.\w*)*)\s*\((.*?)\)\s*$/', $token, $m)) {
|
|
||||||
$this->emitCallInto($insts, $m[1], $m[2]);
|
|
||||||
}
|
|
||||||
elseif (preg_match('/^(?:local\s+)?([a-zA-Z_]\w*)\s*=\s*(.*)$/', $token, $m)) {
|
|
||||||
$this->emitAssignmentInto($insts, $m[1], $m[2]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$insts[] = [$this->opMap['RETURN'], 0, 0, 0];
|
|
||||||
|
|
||||||
$this->instructions = [];
|
|
||||||
foreach ($insts as $i => $inst) {
|
|
||||||
$next = ($i < count($insts) - 1) ? 1 : 0;
|
|
||||||
$this->instructions[] = [$inst[0], $inst[1], $inst[2], $inst[3], $next];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private function emitGetGlobalInto(&$insts, $reg, $name) {
|
|
||||||
$insts[] = [$this->opMap['FETCH_ENV'], $reg, 0, 0];
|
|
||||||
foreach (explode('.', $name) as $part) {
|
|
||||||
$kIdx = $this->addConst($this->synthesizeString($part));
|
|
||||||
$insts[] = [$this->opMap['LOADK'], 250, $kIdx, 1];
|
|
||||||
$insts[] = [$this->opMap['RESOLVE_SYMBOL'], $reg, $reg, 250];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private function emitSetGlobalInto(&$insts, $reg, $name) {
|
|
||||||
$insts[] = [$this->opMap['FETCH_ENV'], 251, 0, 0];
|
|
||||||
$kIdx = $this->addConst($this->synthesizeString($name));
|
|
||||||
$insts[] = [$this->opMap['LOADK'], 252, $kIdx, 1];
|
|
||||||
$insts[] = [$this->opMap['SETTABLE'], 251, 252, $reg];
|
|
||||||
}
|
|
||||||
|
|
||||||
private function emitTableSetInto(&$insts, $tableName, $key, $val) {
|
|
||||||
$this->emitGetGlobalInto($insts, 0, $tableName);
|
|
||||||
$kIdx = $this->addConst($this->synthesizeString($key));
|
|
||||||
$insts[] = [$this->opMap['LOADK'], 1, $kIdx, 1];
|
|
||||||
$val = trim($val); $vReg = 2;
|
|
||||||
if (preg_match('/^["\'](.*?)["\']$/', $val, $vm)) {
|
|
||||||
$vIdx = $this->addConst($this->synthesizeString($vm[1]));
|
|
||||||
$insts[] = [$this->opMap['LOADK'], $vReg, $vIdx, 1];
|
|
||||||
} elseif (is_numeric($val)) {
|
|
||||||
$vIdx = $this->addConst($val);
|
|
||||||
$insts[] = [$this->opMap['LOADK'], $vReg, $vIdx, 0];
|
|
||||||
} else {
|
|
||||||
$this->emitGetGlobalInto($insts, $vReg, $val);
|
|
||||||
}
|
|
||||||
$insts[] = [$this->opMap['SETTABLE'], 0, 1, $vReg];
|
|
||||||
}
|
|
||||||
|
|
||||||
private function emitCallInto(&$insts, $funcName, $argStr) {
|
|
||||||
$this->emitGetGlobalInto($insts, 0, $funcName);
|
|
||||||
$args = [];
|
|
||||||
if (!empty(trim($argStr))) {
|
|
||||||
foreach (explode(',', $argStr) as $idx => $arg) {
|
|
||||||
$arg = trim($arg); $rIdx = $idx + 1;
|
|
||||||
if (preg_match('/^["\'](.*?)["\']$/', $arg, $m)) {
|
|
||||||
$vIdx = $this->addConst($this->synthesizeString($m[1]));
|
|
||||||
$insts[] = [$this->opMap['LOADK'], $rIdx, $vIdx, 1];
|
|
||||||
} elseif (is_numeric($arg)) {
|
|
||||||
$vIdx = $this->addConst($arg);
|
|
||||||
$insts[] = [$this->opMap['LOADK'], $rIdx, $vIdx, 0];
|
|
||||||
} else {
|
|
||||||
$this->emitGetGlobalInto($insts, $rIdx, $arg);
|
|
||||||
}
|
|
||||||
$args[] = $rIdx;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$insts[] = [$this->opMap['CALL'], 0, count($args), 0];
|
|
||||||
}
|
|
||||||
|
|
||||||
private function emitAssignmentInto(&$insts, $var, $val) {
|
|
||||||
$val = trim($val);
|
|
||||||
if (preg_match('/^["\'](.*?)["\']$/', $val, $m)) {
|
|
||||||
$vIdx = $this->addConst($this->synthesizeString($m[1]));
|
|
||||||
$insts[] = [$this->opMap['LOADK'], 0, $vIdx, 1];
|
|
||||||
} elseif (is_numeric($val)) {
|
|
||||||
$vIdx = $this->addConst($val);
|
|
||||||
$insts[] = [$this->opMap['LOADK'], 0, $vIdx, 0];
|
|
||||||
} else {
|
|
||||||
$this->emitGetGlobalInto($insts, 0, $val);
|
|
||||||
}
|
|
||||||
$this->emitSetGlobalInto($insts, 0, $var);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function serialize() {
|
|
||||||
$data = pack("N", count($this->instructions));
|
|
||||||
$data .= pack("N", count($this->constants));
|
|
||||||
|
|
||||||
foreach ($this->instructions as $idx => $inst) {
|
|
||||||
$pc = $idx + 1;
|
|
||||||
$data .= chr((int)$inst[0] ^ (($this->polyKey + $pc) % 256));
|
|
||||||
$data .= chr((int)$inst[1] ^ (($pc * 17) % 256));
|
|
||||||
$data .= pack("n", (int)$inst[2] ^ (($pc * 31) % 65535));
|
|
||||||
$data .= chr((int)$inst[3] ^ (($pc * 7) % 256));
|
|
||||||
$data .= chr((int)$inst[4] ^ (($pc * 13) % 256));
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($this->constants as $c) {
|
|
||||||
$t = is_string($c) ? 1 : (is_numeric($c) ? 2 : 0);
|
|
||||||
$data .= chr($t);
|
|
||||||
$s = (string)$c;
|
|
||||||
$data .= pack("N", strlen($s)) . $s;
|
|
||||||
}
|
|
||||||
|
|
||||||
$keyLen = count($this->keys); $res = "";
|
|
||||||
for ($i = 0; $i < strlen($data); $i++) {
|
|
||||||
$res .= chr(ord($data[$i]) ^ $this->keys[$i % $keyLen] ^ (($i * 97) % 256));
|
|
||||||
}
|
|
||||||
return bin2hex($res);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function build() {
|
|
||||||
$this->compile();
|
|
||||||
$v = [];
|
|
||||||
foreach(['k','b','e','f','d','c','v','stack','handlers','entropy','ptr','rolling','seed','poison','next_ptr','state','quantum','mirror','reality','obfuscated_op','h_idx'] as $var) {
|
|
||||||
$v[$var] = $this->genVar();
|
|
||||||
}
|
|
||||||
|
|
||||||
$k_str = implode(",", $this->keys);
|
|
||||||
$lua = "-- [[ Luartex V11.0 | Quantum Singularity | https://discord.gg/GpucUKeCtF ]] --\n";
|
|
||||||
$lua .= "local " . $v['k'] . " = { " . $k_str . " }; ";
|
|
||||||
$lua .= "local " . $v['b'] . " = \"" . $this->serialize() . "\"; ";
|
|
||||||
$lua .= "local " . $v['e'] . " = (getgenv and getgenv()) or (getfenv and getfenv(0)) or _G; ";
|
|
||||||
|
|
||||||
$lua .= "local function _H(h) local b = {}; for i = 1, #h, 2 do b[#b+1] = tonumber(h:sub(i, i+1), 16) end return b end; ";
|
|
||||||
$lua .= "local function _D(b) local o = {}; for i = 1, #b do local k = " . $v['k'] . "[((i-1)%#" . $v['k'] . ")+1]; o[i] = bit32.bxor(b[i], k, ((i-1)*97)%256) end return o end; ";
|
|
||||||
$lua .= "local " . $v['d'] . " = _D(_H(" . $v['b'] . ")); ";
|
|
||||||
|
|
||||||
$lua .= "local function _R32(b, p) return b[p]*16777216 + b[p+1]*65536 + b[p+2]*256 + b[p+3] end; ";
|
|
||||||
$lua .= "local function _R16(b, p) return b[p]*256 + b[p+1] end; ";
|
|
||||||
|
|
||||||
$lua .= "local ic = _R32(" . $v['d'] . ", 1); local cc = _R32(" . $v['d'] . ", 5); ";
|
|
||||||
$lua .= "local " . $v['c'] . " = {}; local cu = 9 + ic*6; ";
|
|
||||||
$lua .= "for i = 1, cc do local t = " . $v['d'] . "[cu]; cu = cu + 1; if t > 0 then local l = _R32(" . $v['d'] . ", cu); cu = cu + 4; local s = ''; for j = 1, l do s = s .. string.char(" . $v['d'] . "[cu]); cu = cu + 1 end; if t == 2 then " . $v['c'] . "[i] = tonumber(s) else " . $v['c'] . "[i] = s end else cu = cu + 1 end end; ";
|
|
||||||
|
|
||||||
$lua .= "local " . $v['v'] . " = function() ";
|
|
||||||
$lua .= "local " . $v['stack'] . " = {}; local " . $v['ptr'] . " = 1; local " . $v['seed'] . " = " . $this->seed . "; ";
|
|
||||||
$lua .= "local " . $v['rolling'] . " = " . $this->polyKey . "; local " . $v['poison'] . " = 0; ";
|
|
||||||
$lua .= "local " . $v['handlers'] . " = {}; ";
|
|
||||||
|
|
||||||
$lua .= "local function " . $v['quantum'] . "() local t1 = os.clock(); for i=1,1000 do end; return (os.clock()-t1) > 0.01 end; ";
|
|
||||||
|
|
||||||
foreach ($this->opMap as $name => $val) {
|
|
||||||
$lua .= $v['handlers'] . "[" . $val . "] = function(a, b, c) ";
|
|
||||||
$lua .= "if " . $v['poison'] . " > 0 then a = (a + " . $v['poison'] . ") % 256; if math.random() > 0.9 then return end end; ";
|
|
||||||
switch($name) {
|
|
||||||
case 'ENTROPY_SYNC':
|
|
||||||
$lua .= $v['rolling'] . " = bit32.bxor(" . $v['rolling'] . ", math.floor(os.clock()*1000)%256); ";
|
|
||||||
break;
|
|
||||||
case 'FETCH_ENV': $lua .= $v['stack'] . "[a] = " . $v['e'] . "; "; break;
|
|
||||||
case 'RESOLVE_SYMBOL': $lua .= $v['stack'] . "[a] = " . $v['stack'] . "[b][" . $v['stack'] . "[c]]; "; break;
|
|
||||||
case 'LOADK': $lua .= "local v = " . $v['c'] . "[b + 1]; if c == 1 then v = v()() end; " . $v['stack'] . "[a] = v; "; break;
|
|
||||||
case 'CALL': $lua .= "local f = " . $v['stack'] . "[a]; local args = {}; for m = 1, b do args[m] = " . $v['stack'] . "[a+m] end; if f then f((unpack or table.unpack)(args)) end; "; break;
|
|
||||||
case 'RETURN': $lua .= $v['ptr'] . " = -1; "; break;
|
|
||||||
case 'NEWTABLE': $lua .= $v['stack'] . "[a] = {}; "; break;
|
|
||||||
case 'SETTABLE': $lua .= "if " . $v['stack'] . "[a] then " . $v['stack'] . "[a][" . $v['stack'] . "[b]] = " . $v['stack'] . "[c] end; "; break;
|
|
||||||
case 'ADD': $lua .= $v['stack'] . "[a] = (tonumber(" . $v['stack'] . "[b]) or 0) + (tonumber(" . $v['stack'] . "[c]) or 0); "; break;
|
|
||||||
case 'MUTATE_BYTECODE': $lua .= "local target = 9 + ((" . $v['ptr'] . " + a) % ic) * 6; " . $v['d'] . "[target] = bit32.bxor(" . $v['d'] . "[target], b); "; break;
|
|
||||||
case 'GHOST_NOP': $lua .= $v['seed'] . " = bit32.bxor(" . $v['seed'] . ", " . $v['rolling'] . ", a, b, c); "; break;
|
|
||||||
case 'TAMPER_CHECK': $lua .= "if " . $v['quantum'] . "() then " . $v['poison'] . " = " . $v['poison'] . " + 1 end; "; break;
|
|
||||||
case 'DECEPTIVE_TRAP': $lua .= "local _ = " . $v['e'] . ".string.rep('DECEIVE', a); "; break;
|
|
||||||
default: break;
|
|
||||||
}
|
|
||||||
$lua .= $v['seed'] . " = bit32.bxor(" . $v['seed'] . ", " . $val . ") + 1; ";
|
|
||||||
$lua .= "end; ";
|
|
||||||
}
|
|
||||||
|
|
||||||
$lua .= "while " . $v['ptr'] . " > 0 do ";
|
|
||||||
$lua .= "local o = 9 + (" . $v['ptr'] . " - 1) * 6; ";
|
|
||||||
$lua .= "local _op = bit32.bxor(" . $v['d'] . "[o], (" . $this->polyKey . " + " . $v['ptr'] . ") % 256); ";
|
|
||||||
$lua .= "local _a = bit32.bxor(" . $v['d'] . "[o+1], (" . $v['ptr'] . " * 17) % 256); ";
|
|
||||||
$lua .= "local _b = bit32.bxor(_R16(" . $v['d'] . ", o+2), (" . $v['ptr'] . " * 31) % 65535); ";
|
|
||||||
$lua .= "local _c = bit32.bxor(" . $v['d'] . "[o+4], (" . $v['ptr'] . " * 7) % 256); ";
|
|
||||||
$lua .= "local _nx = bit32.bxor(" . $v['d'] . "[o+5], (" . $v['ptr'] . " * 13) % 256); ";
|
|
||||||
|
|
||||||
$lua .= "local a, b, c; local p = bit32.bxor(" . $v['seed'] . ", " . $v['ptr'] . ") % 3; ";
|
|
||||||
$lua .= "if p == 0 then a,b,c = _a,_b,_c elseif p == 1 then a,b,c = _b,_c,_a else a,b,c = _c,_a,_b end; ";
|
|
||||||
|
|
||||||
$lua .= "local h = " . $v['handlers'] . "[_op]; if h then h(a, b, c) end; ";
|
|
||||||
$lua .= "if " . $v['ptr'] . " > 0 then ";
|
|
||||||
$lua .= "if _nx == 0 then " . $v['ptr'] . " = -1 else " . $v['ptr'] . " = " . $v['ptr'] . " + _nx end; ";
|
|
||||||
$lua .= "end; ";
|
|
||||||
|
|
||||||
$lua .= "if " . $v['ptr'] . " % 50 == 0 then if task and task.wait then task.wait() end end; ";
|
|
||||||
$lua .= "end; ";
|
|
||||||
|
|
||||||
$lua .= "end; ";
|
|
||||||
$lua .= "local s, e = pcall(" . $v['v'] . "); if not s and _G.LUARTEX_DEBUG then print('VM Error:', e) end; ";
|
|
||||||
|
|
||||||
return [
|
|
||||||
'success' => true,
|
|
||||||
'protected_code' => $lua,
|
|
||||||
'stats' => ['version' => 'V11.0 (Quantum Singularity)', 'seed' => $this->seed, 'ILD' => 'Active']
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
$vm = new LuartexV11_0($code);
|
|
||||||
echo json_encode($vm->build());
|
|
||||||
} catch (Exception $e) {
|
|
||||||
echo json_encode(['success' => false, 'error' => $e->getMessage()]);
|
|
||||||
}
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,2 +0,0 @@
|
|||||||
-- [[ Hyperion Engine V5.7 - Dynamic Opaque Predicates ]] --
|
|
||||||
local L__l_l1lil11l1 = { 39,195,180,77,67,29,186,148,46,248,162,169,102,187,132,136,140,71,3,20,215,223,187,119,188,68,120,86,155,228,115,65 }; local L_lI1i_1i_Illl = "27ceae6676d82dcf468d2127d2ef324a5c98e8f279cea55c850002f4f79df5d18675bc8a97fc506e0e1080865af7d3f04e3a8983756eaf6e641c8adc96798c72678eef2bb345340e864a61771052728b9d5a8ce7938ee51cc4c1eac1365db592ee66373a324efdc0088d96f3340532061cbeb0ad52432c1f842e3a08a6c87012f73c4b8e9ebf153ba37ea1a67a92b7bbae730717524e25dc1cc9cfe51b7255347581e32a5f05a48ad4046f68fa2467454bb80903f3ecb40ce5210a291605d7f2e70e6c98871db48f06cc99e73ad2f2163e88ccd0666211a664634a6799fd417d34dabca3b9db3c57c606603fb3"; local L_ilIIi1l1l1i_ = (getgenv and getgenv()) or (getfenv and getfenv(0)) or _G; local function _H(h) local b = {}; for i = 1, #h, 2 do b[#b+1] = tonumber(h:sub(i, i+1), 16) end return b end; local function _D(b) local o = {}; for i = 1, #b do local k = ((i - 1) % 32) + 1; o[i] = bit32.bxor(b[i], L__l_l1lil11l1[k], ((i - 1) * 13) % 256) end return o end; local L_iIilIi_i1ii1 = _D(_H(L_lI1i_1i_Illl)); local function _R32(b, p) return b[p]*16777216 + b[p+1]*65536 + b[p+2]*256 + b[p+3] end; local function _R16(b, p) return b[p]*256 + b[p+1] end; local ic = _R32(L_iIilIi_i1ii1, 1); local co = 5 + ic * 7; local cc = _R32(L_iIilIi_i1ii1, co); local L__I1_lI_iiill = {}; local cu = co + 4; for i = 1, cc do local t = L_iIilIi_i1ii1[cu]; cu = cu + 1; if t == 1 or t == 2 then local l = _R32(L_iIilIi_i1ii1, cu); cu = cu + 4; local s = {}; for j = 1, l do s[j] = string.char(L_iIilIi_i1ii1[cu]); cu = cu + 1 end; s = table.concat(s); if t == 2 then L__I1_lI_iiill[i] = tonumber(s) else L__I1_lI_iiill[i] = s end; else cu = cu + 1 end end; local function L__lI__iI11Il1(p) local o = 5 + (p - 1) * 7; return L_iIilIi_i1ii1[o]*65536 + L_iIilIi_i1ii1[o+1]*256 + L_iIilIi_i1ii1[o+2], _R16(L_iIilIi_i1ii1, o+3), _R16(L_iIilIi_i1ii1, o+5) end; local function _V() local stack = {}; local pc = 1; while true do local op, a, b = L__lI__iI11Il1(pc); if false then elseif op == 4756 then if (type(math.abs) == 'string') then pc = -1 end; elseif op == 72626 then if (type(math.abs) == 'function') then local n = L__I1_lI_iiill[b + 1]; L_ilIIi1l1l1i_[n] = stack[a]; end; elseif op == 43730 then if (math.ceil(5.1) == 6) then local x = math.sqrt(a * b); stack[0] = x; else stack[0] = 0; end; elseif op == 70058 then if (not (1 == 0)) then local f = stack[a]; local args = {}; for m = 1, b do args[m] = stack[a + m] end; local ok, err = pcall(f, unpack(args)); if not ok then error('VM Error: ' .. tostring(err)) end; end; elseif op == 76029 then if (math.abs(-1) == 0) then pc = pc * 2 else stack[a] = L__I1_lI_iiill[b + 1] end; elseif op == 42436 then if (type(math.abs) == 'string') then print('DEAD CODE') else return end; elseif op == 99545 then if (#('Hyperion') == 8) then local n = L__I1_lI_iiill[b + 1]; local t = L_ilIIi1l1l1i_; for p in n:gmatch('[^.:]+') do t = t[p] end; stack[a] = t; else pc = pc + 666 end; elseif op == 78548 then stack[a] = stack[b]; end; pc = pc + 1; end end; pcall(_V);
|
|
||||||
@ -1,2 +0,0 @@
|
|||||||
-- [[ Hyperion Engine V5.8 - Instruction Folding ]] --
|
|
||||||
local L_i1I1iI_liIi_ = { 0,126,52,124,78,180,66,73,146,61,86,172,224,148,145,55,100,212,205,55,4,147,222,23,247,20,193,11,59,212,247,115 }; local L_ll1lIi1il_1i = "00732e517adafd12fb48d62320c72750b44f27667f82c43ccc517d3f57d2711ba0576bbb9b55a8b2c6d27467dce4c621b8a942a0a4223c262f1533bd3749344041336b1a620eccd23a8894633c7b663474c9c44839b2e50ee6fe3db4c1581f98c0beee3234e61800af0b40aaf37327d2bb0563898e05211cef31f64405e4ff7481f3aedbe83df5e21fba3dcc929df1411ab18714e57134bd4fd113c99e43821452266d4f73ba42125cc79867353320f4fd5ae74143d6892aca70b374b74e3cb3a7b2ee9bbab12f3dca71"; local L_1_iI11IIl_i1 = (getgenv and getgenv()) or (getfenv and getfenv(0)) or _G; local function _H(h) local b = {}; for i = 1, #h, 2 do b[#b+1] = tonumber(h:sub(i, i+1), 16) end return b end; local function _D(b) local o = {}; for i = 1, #b do local k = ((i - 1) % 32) + 1; o[i] = bit32.bxor(b[i], L_i1I1iI_liIi_[k], ((i - 1) * 13) % 256) end return o end; local L__i_I_iiili1_ = _D(_H(L_ll1lIi1il_1i)); local function _R32(b, p) return b[p]*16777216 + b[p+1]*65536 + b[p+2]*256 + b[p+3] end; local function _R16(b, p) return b[p]*256 + b[p+1] end; local ic = _R32(L__i_I_iiili1_, 1); local co = 5 + ic * 7; local cc = _R32(L__i_I_iiili1_, co); local L_illil_lI1___ = {}; local cu = co + 4; for i = 1, cc do local t = L__i_I_iiili1_[cu]; cu = cu + 1; if t == 1 or t == 2 then local l = _R32(L__i_I_iiili1_, cu); cu = cu + 4; local s = {}; for j = 1, l do s[j] = string.char(L__i_I_iiili1_[cu]); cu = cu + 1 end; s = table.concat(s); if t == 2 then L_illil_lI1___[i] = tonumber(s) else L_illil_lI1___[i] = s end; else cu = cu + 1 end end; local function L_1liIlIIil1ii(p) local o = 5 + (p - 1) * 7; return L__i_I_iiili1_[o]*65536 + L__i_I_iiili1_[o+1]*256 + L__i_I_iiili1_[o+2], _R16(L__i_I_iiili1_, o+3), _R16(L__i_I_iiili1_, o+5) end; local function _V() local stack = {}; local pc = 1; while true do local op, a, b = L_1liIlIIil1ii(pc); if false then elseif op == 81492 then if (1 == 0) then pc = pc * 2 else stack[a] = L_illil_lI1___[b + 1] end; elseif op == 48511 then if (math.abs(-1) == 1) then local n = L_illil_lI1___[b + 1]; L_1_iI11IIl_i1[n] = stack[a]; end; elseif op == 42623 then if (type(math.abs) == 'function') then local n = L_illil_lI1___[a + 1]; L_1_iI11IIl_i1[n] = L_illil_lI1___[b + 1]; end; elseif op == 66023 then if (#('Hyperion') == 8) then local n = L_illil_lI1___[b + 1]; local t = L_1_iI11IIl_i1; for p in n:gmatch('[^.:]+') do t = t[p] end; stack[a] = t; else pc = pc + 666 end; elseif op == 78485 then stack[a] = stack[b]; elseif op == 6801 then if (math.ceil(5.1) == 6) then local f = stack[a]; local args = {}; for m = 1, b do args[m] = stack[a + m] end; local ok, err = pcall(f, unpack(args)); if not ok then error('VM Error: ' .. tostring(err)) end; end; elseif op == 95660 then if (math.abs(-1) == 1) then local sn = L_illil_lI1___[a + 1]; local vn = L_illil_lI1___[b + 1]; local t = L_1_iI11IIl_i1; for p in vn:gmatch('[^.:]+') do t = t[p] end; L_1_iI11IIl_i1[sn] = t; end; elseif op == 61035 then if (#('Hyperion') == 9) then pc = -1 end; elseif op == 12273 then if (math.pi > 3) then local fn = L_illil_lI1___[a + 1]; local t = L_1_iI11IIl_i1; for p in fn:gmatch('[^.:]+') do t = t[p] end; t(L_illil_lI1___[b + 1]); end; elseif op == 34021 then if (math.sin(0) == 0) then local fn = L_illil_lI1___[a + 1]; local vn = L_illil_lI1___[b + 1]; local f = L_1_iI11IIl_i1; for p in fn:gmatch('[^.:]+') do f = f[p] end; local v = L_1_iI11IIl_i1; for p in vn:gmatch('[^.:]+') do v = v[p] end; f(v); end; elseif op == 23802 then if (math.ceil(5.1) == 6) then local x = math.sqrt(a * b); stack[0] = x; else stack[0] = 0; end; elseif op == 88123 then if (1 == 0) then print('DEAD CODE') else return end; end; pc = pc + 1; end end; pcall(_V);
|
|
||||||
@ -1,2 +0,0 @@
|
|||||||
-- [[ Hyperion Engine V5.9 - Anti-Tamper & Multi-Layer VM ]] --
|
|
||||||
local function L__l1Ii_I1i_lI() if debug and (debug.getinfo or debug.setupvalue) then return true end; if getfenv and (type(getfenv) ~= 'function') then return true end; return false end; if L__l1Ii_I1i_lI() then while true do end end; local L_I1ii__II_lI1 = { 194,207,253,238,133,158,88,60,137,178,177,90,166,104,25,68,158,7,94,235,71,224,127,182,162,243,57,24,140,146,77,28 }; local L___i_i111l1iI = "c2c2e7c1b160ae67e0c731d510b4af874ed9b459e7f1619d9eb61cb6e0ebcb8e62483229507fb3c7f65693779a254e6c547ad47ce1517b277a16cbe7808b6b298382a789db57afd744751afa14a1b972a02354f123f04fa9b35bffe64d5beebd020427bbf4dc0375b28ea550fab7c2e62eba9439d363e8d3ced70b27c0d3630a2e2e0869572df98a410fca25df334668a07a62a9ed48e31d1a36e9f6506a4b0fe2e3bfa8d1ff364957467f807f81a0c14e82749510eb"; local L_IIllll1iII_I = (getgenv and getgenv()) or (getfenv and getfenv(0)) or _G; local function L_1i_Ii_I_1iIl(s) local h = 0; for i = 1, #s do h = (h + string.byte(s, i) * i) % 4294967296 end return h end; if L_1i_Ii_I_1iIl(L___i_i111l1iI) ~= 4656909 then while true do end end; local function _H(h) local b = {}; for i = 1, #h, 2 do b[#b+1] = tonumber(h:sub(i, i+1), 16) end return b end; local function _D(b) local o = {}; for i = 1, #b do local k = ((i - 1) % 32) + 1; o[i] = bit32.bxor(b[i], L_I1ii__II_lI1[k], ((i - 1) * 13) % 256) end return o end; local L_1l111ii11_i1 = _D(_H(L___i_i111l1iI)); local function _R32(b, p) return b[p]*16777216 + b[p+1]*65536 + b[p+2]*256 + b[p+3] end; local function _R16(b, p) return b[p]*256 + b[p+1] end; local ic = _R32(L_1l111ii11_i1, 1); local co = 5 + ic * 7; local cc = _R32(L_1l111ii11_i1, co); local L__11Ili1_llI1 = {}; local cu = co + 4; for i = 1, cc do local t = L_1l111ii11_i1[cu]; cu = cu + 1; if t == 1 or t == 2 then local l = _R32(L_1l111ii11_i1, cu); cu = cu + 4; local s = {}; for j = 1, l do s[j] = string.char(L_1l111ii11_i1[cu]); cu = cu + 1 end; s = table.concat(s); if t == 2 then L__11Ili1_llI1[i] = tonumber(s) else L__11Ili1_llI1[i] = s end; else cu = cu + 1 end end; local function L_____l11_liI_(p) local o = 5 + (p - 1) * 7; return L_1l111ii11_i1[o]*65536 + L_1l111ii11_i1[o+1]*256 + L_1l111ii11_i1[o+2], _R16(L_1l111ii11_i1, o+3), _R16(L_1l111ii11_i1, o+5) end; local _V; _V = function(spc) local stack = {}; local pc = spc or 1; while true do local op, a, b = L_____l11_liI_(pc); local function _L2(op, a, b) if false then elseif op == -1 then return elseif op == 47706 then return elseif op == 10869 then stack[a] = L__11Ili1_llI1[b + 1] elseif op == 87747 then if L__l1Ii_I1i_lI() then while true do end else stack[0] = math.sqrt(a*b) end elseif op == 84922 then local f = stack[a]; local args = {}; for m = 1, b do args[m] = stack[a + m] end; if f == _V then _V(stack[a+1]) else f(unpack(args)) end elseif op == 95772 then _V(a) elseif op == 17828 then local n = L__11Ili1_llI1[b + 1]; L_IIllll1iII_I[n] = stack[a] elseif op == 30705 then if (math.ceil(5.1) == 6) then local n = L__11Ili1_llI1[b + 1]; local t = L_IIllll1iII_I; for p in n:gmatch('[^.:]+') do t = t[p] end; stack[a] = t; else pc = pc + 666 end end end; _L2(op, a, b); pc = pc + 1; end end; pcall(_V, 1);
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,240 +0,0 @@
|
|||||||
<?php
|
|
||||||
$code = 'print("Hello from test")';
|
|
||||||
// We can't easily mock db() if process.php requires db/config.php
|
|
||||||
// But we can just use the real process.php logic if we want.
|
|
||||||
// Let's just run it as a subprocess with the right input.
|
|
||||||
|
|
||||||
$cmd = "php -r " . escapeshellarg(
|
|
||||||
function db() { return new class { function prepare(\$s){ return new class { function execute(\$a){} }; } }; }
|
|
||||||
$code = " . var_export($code, true) . ";
|
|
||||||
$input = json_encode(["code" => $code]);
|
|
||||||
// Simulate process.php but with our mocks
|
|
||||||
// Instead of including, let's just copy the class.
|
|
||||||
");
|
|
||||||
|
|
||||||
// Actually, let's just make a standalone test that doesn't depend on db.
|
|
||||||
?>
|
|
||||||
<?php
|
|
||||||
// standalone_test.php
|
|
||||||
class LuartexExtremeVM {
|
|
||||||
private $rawCode;
|
|
||||||
private $opcodes = [];
|
|
||||||
private $constants = [];
|
|
||||||
private $instructions = [];
|
|
||||||
private $keys = [];
|
|
||||||
|
|
||||||
public function __construct($code) {
|
|
||||||
$this->rawCode = $code;
|
|
||||||
$this->keys = [rand(128, 255), rand(128, 255), rand(128, 255), rand(128, 255)];
|
|
||||||
$this->setupOpcodes();
|
|
||||||
}
|
|
||||||
|
|
||||||
private function setupOpcodes() {
|
|
||||||
$ops = [
|
|
||||||
'LOADK',
|
|
||||||
'GETGLOBAL',
|
|
||||||
'SETGLOBAL',
|
|
||||||
'CALL',
|
|
||||||
'MOVE',
|
|
||||||
'ADD',
|
|
||||||
'SUB',
|
|
||||||
'MUL',
|
|
||||||
'DIV',
|
|
||||||
'MOD',
|
|
||||||
'POW',
|
|
||||||
'JMP',
|
|
||||||
'EQ',
|
|
||||||
'LT',
|
|
||||||
'LE',
|
|
||||||
'RETURN',
|
|
||||||
'GETTABLE',
|
|
||||||
'SETTABLE',
|
|
||||||
'NEWTABLE',
|
|
||||||
'CLOSURE',
|
|
||||||
'VARARG',
|
|
||||||
'FORPREP',
|
|
||||||
'FORLOOP'
|
|
||||||
];
|
|
||||||
shuffle($ops);
|
|
||||||
foreach ($ops as $index => $op) {
|
|
||||||
$this->opcodes[$op] = $index + 100;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private function genVar() {
|
|
||||||
$chars = 'iI1l';
|
|
||||||
$res = '_';
|
|
||||||
for($i=0; $i<16; $i++) $res .= $chars[rand(0, 3)];
|
|
||||||
return $res;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function toLuaTable($data) {
|
|
||||||
if (is_array($data)) {
|
|
||||||
$isList = true;
|
|
||||||
$expectedKey = 0;
|
|
||||||
foreach ($data as $k => $v) {
|
|
||||||
if ($k !== $expectedKey++) {
|
|
||||||
$isList = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($isList) {
|
|
||||||
$parts = [];
|
|
||||||
foreach ($data as $v) {
|
|
||||||
$parts[] = $this->toLuaTable($v);
|
|
||||||
}
|
|
||||||
return '{' . implode(',', $parts) . '}';
|
|
||||||
} else {
|
|
||||||
$parts = [];
|
|
||||||
foreach ($data as $k => $v) {
|
|
||||||
$key = is_string($k) ? "[" . addslashes($k) . "]" : "[$k]";
|
|
||||||
$parts[] = $key . '=' . $this->toLuaTable($v);
|
|
||||||
}
|
|
||||||
return '{' . implode(',', $parts) . '}';
|
|
||||||
}
|
|
||||||
} elseif (is_string($data)) {
|
|
||||||
return json_encode($data);
|
|
||||||
} elseif (is_bool($data)) {
|
|
||||||
return $data ? 'true' : 'false';
|
|
||||||
} elseif (is_null($data)) {
|
|
||||||
return 'nil';
|
|
||||||
}
|
|
||||||
return $data;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function addConst($val) {
|
|
||||||
$idx = array_search($val, $this->constants);
|
|
||||||
if ($idx === false) {
|
|
||||||
$this->constants[] = $val;
|
|
||||||
$idx = count($this->constants) - 1;
|
|
||||||
}
|
|
||||||
return $idx;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function encrypt($data) {
|
|
||||||
if (is_string($data)) {
|
|
||||||
$out = [];
|
|
||||||
for ($i = 0; $i < strlen($data); $i++) {
|
|
||||||
$out[] = ord($data[$i]) ^ $this->keys[$i % 4];
|
|
||||||
}
|
|
||||||
return $out;
|
|
||||||
}
|
|
||||||
return (int)$data ^ $this->keys[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
private function compile() {
|
|
||||||
$this->addConst("Luartex V3.5 Hardened VM");
|
|
||||||
preg_match_all('/([a-zA-Z_]\w*(?:\.[a-zA-Z_]\w*)?)\s*\((.*?)\)/', $this->rawCode, $matches);
|
|
||||||
if (isset($matches[1]) && !empty($matches[1])) {
|
|
||||||
foreach ($matches[1] as $idx => $funcName) {
|
|
||||||
$argString = isset($matches[2][$idx]) ? trim($matches[2][$idx]) : '';
|
|
||||||
$fIdx = $this->addConst($funcName);
|
|
||||||
$this->instructions[] = [$this->opcodes['GETGLOBAL'], 0, $fIdx];
|
|
||||||
if (empty($argString)) {
|
|
||||||
$this->instructions[] = [$this->opcodes['CALL'], 0, 0];
|
|
||||||
} elseif (preg_match('/^["\\](.*)["\\]$/', $argString, $m)) {
|
|
||||||
$vIdx = $this->addConst($m[1]);
|
|
||||||
$this->instructions[] = [$this->opcodes['LOADK'], 1, $vIdx];
|
|
||||||
$this->instructions[] = [$this->opcodes['CALL'], 0, 1];
|
|
||||||
} elseif (is_numeric($argString)) {
|
|
||||||
$vIdx = $this->addConst((float)$argString);
|
|
||||||
$this->instructions[] = [$this->opcodes['LOADK'], 1, $vIdx];
|
|
||||||
$this->instructions[] = [$this->opcodes['CALL'], 0, 1];
|
|
||||||
} else {
|
|
||||||
$this->instructions[] = [$this->opcodes['CALL'], 0, 0];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$this->addConst("Luartex Protection Active");
|
|
||||||
}
|
|
||||||
for ($i=0; $i<10; $i++) {
|
|
||||||
$this->instructions[] = [$this->opcodes['MOVE'], rand(0, 50), rand(0, 50)];
|
|
||||||
}
|
|
||||||
$this->instructions[] = [$this->opcodes['RETURN'], 0, 0];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function build() {
|
|
||||||
$this->compile();
|
|
||||||
$encryptedConsts = [];
|
|
||||||
foreach ($this->constants as $c) {
|
|
||||||
$encryptedConsts[] = $this->encrypt($c);
|
|
||||||
}
|
|
||||||
$encryptedInsts = [];
|
|
||||||
foreach ($this->instructions as $inst) {
|
|
||||||
$encryptedInsts[] = [
|
|
||||||
(int)$inst[0] ^ $this->keys[0],
|
|
||||||
(int)$inst[1] ^ $this->keys[1],
|
|
||||||
(int)$inst[2] ^ $this->keys[2]
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
$v_v = $this->genVar();
|
|
||||||
$v_k = $this->genVar();
|
|
||||||
$v_s = $this->genVar();
|
|
||||||
$v_i = $this->genVar();
|
|
||||||
$v_c = $this->genVar();
|
|
||||||
$v_o = $this->genVar();
|
|
||||||
$v_d = $this->genVar();
|
|
||||||
$v_g = $this->genVar();
|
|
||||||
$v_x = $this->genVar();
|
|
||||||
$v_e = $this->genVar();
|
|
||||||
$v_p = $this->genVar();
|
|
||||||
$v_r = $this->genVar();
|
|
||||||
$v_l = $this->genVar();
|
|
||||||
$v_a = $this->genVar();
|
|
||||||
$v_b = $this->genVar();
|
|
||||||
|
|
||||||
$k_str = implode(',',$this->keys);
|
|
||||||
$consts_table = $this->toLuaTable($encryptedConsts);
|
|
||||||
$insts_table = $this->toLuaTable($encryptedInsts);
|
|
||||||
$opcodes_table = $this->toLuaTable($this->opcodes);
|
|
||||||
|
|
||||||
$lua = "-- ts was obfuscated by Luartex V3.2\n";
|
|
||||||
$lua .= "local " . $v_v . " = {C = " . $consts_table . ", I = " . $insts_table . ", O = " . $opcodes_table . "}; ";
|
|
||||||
$lua .= "local " . $v_k . " = {" . $k_str . "}; ";
|
|
||||||
$lua .= "return (function(...) ";
|
|
||||||
$lua .= "local " . $v_e . " = getfenv and getfenv() or _G; ";
|
|
||||||
$lua .= "local " . $v_p . " = tick(); ";
|
|
||||||
$lua .= "local function " . $v_g . "(_f) ";
|
|
||||||
$lua .= "if debug and debug.info then ";
|
|
||||||
$lua .= "local _s, _l = debug.info(_f or print, 'sl'); if _s ~= '[C]' then while true do " . $v_p . " = " . $v_p . " + 1 end end ";
|
|
||||||
$lua .= "end ";
|
|
||||||
$lua .= "if tick() - " . $v_p . " > 10 then while true do end end ";
|
|
||||||
$lua .= "end; ";
|
|
||||||
$lua .= "local function " . $v_x . "(_t) ";
|
|
||||||
$lua .= "if type(_t) == 'table' then ";
|
|
||||||
$lua .= "local _r = ''; for _j = 1, #_t do ";
|
|
||||||
$lua .= "local _idx = ((_j - 1) % 4) + 1; ";
|
|
||||||
$lua .= "_r = _r .. string.char(bit32.bxor(_t[_j], " . $v_k . "[_idx])) ";
|
|
||||||
$lua .= "end return _r ";
|
|
||||||
$lua .= "end return bit32.bxor(_t, " . $v_k . "[1]) ";
|
|
||||||
$lua .= "end; ";
|
|
||||||
$lua .= "local " . $v_r . " = {}; ";
|
|
||||||
$lua .= "local " . $v_l . " = 1; ";
|
|
||||||
$lua .= "while " . $v_l . " <= #" . $v_v . ".I do ";
|
|
||||||
$lua .= "local " . $v_i . " = " . $v_v . ".I[" . $v_l . "]; ";
|
|
||||||
$lua .= "local " . $v_o . " = bit32.bxor(" . $v_i . "[1], " . $v_k . "[1]); ";
|
|
||||||
$lua .= "local " . $v_a . " = bit32.bxor(" . $v_i . "[2], " . $v_k . "[2]); ";
|
|
||||||
$lua .= "local " . $v_b . " = bit32.bxor(" . $v_i . "[3], " . $v_k . "[3]); ";
|
|
||||||
|
|
||||||
$lua .= "if " . $v_o . " == " . $this->opcodes['GETGLOBAL'] . " then ";
|
|
||||||
$lua .= "local _gn = " . $v_x . "(" . $v_v . ".C[" . $v_b . "+1]); ";
|
|
||||||
$lua .= "local _gv = " . $v_e . "; for _p in _gn:gmatch('%.') do _gv = _gv[_p] end; ";
|
|
||||||
$lua .= $v_r . "[" . $v_a . "] = _gv; ";
|
|
||||||
$lua .= "elseif " . $v_o . " == " . $this->opcodes['LOADK'] . " then ";
|
|
||||||
$lua .= $v_r . "[" . $v_a . "] = " . $v_x . "(" . $v_v . ".C[" . $v_b . "+1]); ";
|
|
||||||
$lua .= "elseif " . $v_o . " == " . $this->opcodes['CALL'] . " then ";
|
|
||||||
$lua .= $v_g . "(" . $v_r . "[" . $v_a . "]); ";
|
|
||||||
$lua .= "if " . $v_b . " == 0 then " . $v_r . "[" . $v_a . "]() else " . $v_r . "[" . $v_a . "](" . $v_r . "[" . $v_a . "+1]) end; ";
|
|
||||||
$lua .= "elseif " . $v_o . " == " . $this->opcodes['RETURN'] . " then ";
|
|
||||||
$lua .= "return; ";
|
|
||||||
$lua .= "end; ";
|
|
||||||
|
|
||||||
$lua .= $v_l . " = " . $v_l . " + 1; ";
|
|
||||||
$lua .= "end; ";
|
|
||||||
$lua .= "end)(...)";
|
|
||||||
return $lua;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$vm = new LuartexExtremeVM('print("test")');
|
|
||||||
echo $vm->build();
|
|
||||||
@ -1,48 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
* Test for Hyperion V10.0 - Dynamic Instruction Polymorphism
|
|
||||||
*/
|
|
||||||
|
|
||||||
$test_code = '
|
|
||||||
print("Hyperion V10.0 Bootstrapped")
|
|
||||||
local data = {}
|
|
||||||
data["status"] = "Protected"
|
|
||||||
data["version"] = 10.0
|
|
||||||
print("System Status: " .. data["status"])
|
|
||||||
print("Build: " .. data["version"])
|
|
||||||
|
|
||||||
local function complex_math(a, b)
|
|
||||||
return (a * b) + (a - b)
|
|
||||||
end
|
|
||||||
|
|
||||||
print("Test Math: " .. tostring(complex_math(10, 5)))
|
|
||||||
';
|
|
||||||
|
|
||||||
$url = 'http://localhost/process.php';
|
|
||||||
$options = [
|
|
||||||
'http' => [
|
|
||||||
'header' => "Content-type: application/json\r\n",
|
|
||||||
'method' => 'POST',
|
|
||||||
'content' => json_encode(['code' => $test_code]),
|
|
||||||
],
|
|
||||||
];
|
|
||||||
|
|
||||||
$context = stream_context_create($options);
|
|
||||||
$result = file_get_contents($url, false, $context);
|
|
||||||
|
|
||||||
if ($result === FALSE) {
|
|
||||||
die("Error reaching process.php");
|
|
||||||
}
|
|
||||||
|
|
||||||
$response = json_decode($result, true);
|
|
||||||
|
|
||||||
if ($response && $response['success']) {
|
|
||||||
$protected_file = 'protected_v10_0.lua';
|
|
||||||
file_put_contents($protected_file, $response['protected_code']);
|
|
||||||
echo "Successfully generated $protected_file\n";
|
|
||||||
echo "Stats: " . json_encode($response['stats']) . "\n";
|
|
||||||
} else {
|
|
||||||
echo "Error: " . ($response['error'] ?? 'Unknown error') . "\n";
|
|
||||||
echo "Full response: " . $result . "\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
@ -1,52 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
* Test for Luartex V11.0 - Quantum Singularity Engine
|
|
||||||
*/
|
|
||||||
|
|
||||||
$test_code = '
|
|
||||||
print("Luartex V11.0 Quantum Singularity Activation")
|
|
||||||
local target = "QUANTUM_STATE_VERIFIED"
|
|
||||||
local val = 100
|
|
||||||
local multiplier = 5
|
|
||||||
local result = val * multiplier
|
|
||||||
print("Computed Result: " .. tostring(result))
|
|
||||||
|
|
||||||
local storage = {}
|
|
||||||
storage["key"] = "SECURE_DATA"
|
|
||||||
print("Storage Retrieve: " .. storage["key"])
|
|
||||||
|
|
||||||
if result == 500 then
|
|
||||||
print("Quantum Logic: STABLE")
|
|
||||||
else
|
|
||||||
print("Quantum Logic: COLLAPSED")
|
|
||||||
end
|
|
||||||
';
|
|
||||||
|
|
||||||
$url = 'http://localhost/process.php';
|
|
||||||
$options = [
|
|
||||||
'http' => [
|
|
||||||
'header' => "Content-type: application/json\r\n",
|
|
||||||
'method' => 'POST',
|
|
||||||
'content' => json_encode(['code' => $test_code]),
|
|
||||||
],
|
|
||||||
];
|
|
||||||
|
|
||||||
$context = stream_context_create($options);
|
|
||||||
$result = file_get_contents($url, false, $context);
|
|
||||||
|
|
||||||
if ($result === FALSE) {
|
|
||||||
die("Error reaching process.php");
|
|
||||||
}
|
|
||||||
|
|
||||||
$response = json_decode($result, true);
|
|
||||||
|
|
||||||
if ($response && $response['success']) {
|
|
||||||
$protected_file = 'protected_v11_0.lua';
|
|
||||||
file_put_contents($protected_file, $response['protected_code']);
|
|
||||||
echo "Successfully generated $protected_file\n";
|
|
||||||
echo "Stats: " . json_encode($response['stats']) . "\n";
|
|
||||||
} else {
|
|
||||||
echo "Error: " . ($response['error'] ?? 'Unknown error') . "\n";
|
|
||||||
echo "Full response: " . $result . "\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
@ -1,45 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
* Test script for Luartex V3.2
|
|
||||||
*/
|
|
||||||
|
|
||||||
$test_code = "
|
|
||||||
local x = 10
|
|
||||||
local y = 20
|
|
||||||
local z = x + y
|
|
||||||
print('The sum of x and y is: ' .. tostring(z))
|
|
||||||
local myTable = {}
|
|
||||||
myTable['secret'] = 'LuartexV3.2'
|
|
||||||
print('Secret retrieved: ' .. myTable['secret'])
|
|
||||||
";
|
|
||||||
|
|
||||||
echo "Testing Luartex V3.2 Protection...\n";
|
|
||||||
|
|
||||||
$ch = curl_init('http://localhost/process.php');
|
|
||||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
||||||
curl_setopt($ch, CURLOPT_POST, true);
|
|
||||||
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(['code' => $test_code]));
|
|
||||||
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
|
|
||||||
|
|
||||||
$response = curl_exec($ch);
|
|
||||||
$data = json_decode($response, true);
|
|
||||||
|
|
||||||
if ($data && $data['success']) {
|
|
||||||
echo "SUCCESS: Obfuscation completed.\n";
|
|
||||||
echo "Stats: " . json_encode($data['stats']) . "\n";
|
|
||||||
$protected_file = 'protected_v3_2.lua';
|
|
||||||
file_put_contents($protected_file, $data['protected_code']);
|
|
||||||
echo "Protected code saved to $protected_file\n";
|
|
||||||
|
|
||||||
// Check if the watermark is present
|
|
||||||
if (strpos($data['protected_code'], 'Luartex V3.2 | https://discord.gg/GpucUKeCtF') !== false) {
|
|
||||||
echo "VERIFIED: Watermark present.\n";
|
|
||||||
} else {
|
|
||||||
echo "FAILED: Watermark missing!\n";
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
echo "FAILED: " . ($data['error'] ?? 'Unknown error') . "\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
curl_close($ch);
|
|
||||||
|
|
||||||
@ -1,53 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
function obfuscate($code) {
|
|
||||||
$url = 'http://localhost/process.php';
|
|
||||||
$data = json_encode(['code' => $code]);
|
|
||||||
|
|
||||||
$ch = curl_init($url);
|
|
||||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
||||||
curl_setopt($ch, CURLOPT_POST, true);
|
|
||||||
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
|
|
||||||
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
|
|
||||||
|
|
||||||
$response = curl_exec($ch);
|
|
||||||
curl_close($ch);
|
|
||||||
|
|
||||||
return json_decode($response, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
$luaCode = 'print("Hello from Hyperion V5.7"); local x = 10; local y = 20; print("Result: " .. tostring(x + y));';
|
|
||||||
|
|
||||||
echo "Obfuscating code...\n";
|
|
||||||
$result = obfuscate($luaCode);
|
|
||||||
|
|
||||||
if ($result && $result['success']) {
|
|
||||||
echo "Obfuscation successful!\n";
|
|
||||||
$protectedCode = $result['protected_code'];
|
|
||||||
echo "Protected code length: " . strlen($protectedCode) . "\n";
|
|
||||||
|
|
||||||
// Check for version string in comments
|
|
||||||
if (strpos($protectedCode, "Hyperion Engine V5.7 - Dynamic Opaque Predicates") !== false) {
|
|
||||||
echo "Version string confirmed: V5.7\n";
|
|
||||||
} else {
|
|
||||||
echo "Version string NOT found!\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check for some opaque predicates
|
|
||||||
$predicates = ['math.pi > 3', 'type(math.abs) == \'function\'', 'math.floor(10.5) == 10'];
|
|
||||||
$found = 0;
|
|
||||||
foreach ($predicates as $pred) {
|
|
||||||
if (strpos($protectedCode, $pred) !== false) {
|
|
||||||
$found++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
echo "Found $found/" . count($predicates) . " tested predicates in the output.\n";
|
|
||||||
|
|
||||||
// Save to a file for manual inspection if needed
|
|
||||||
file_put_contents('protected_v5_7.lua', $protectedCode);
|
|
||||||
echo "Protected code saved to protected_v5_7.lua\n";
|
|
||||||
} else {
|
|
||||||
echo "Obfuscation failed: " . ($result['error'] ?? 'Unknown error') . "\n";
|
|
||||||
var_dump($result);
|
|
||||||
}
|
|
||||||
|
|
||||||
@ -1,34 +0,0 @@
|
|||||||
<?php
|
|
||||||
$code = "\nprint(\"Hyperion V5.8 Test\")\nmsg = \"Instruction Folding is active\"\nprint(msg)\ncopy = msg\nprint(copy)\n";
|
|
||||||
|
|
||||||
$ch = curl_init('http://localhost/process.php');
|
|
||||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
||||||
curl_setopt($ch, CURLOPT_POST, true);
|
|
||||||
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(['code' => $code]));
|
|
||||||
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
|
|
||||||
|
|
||||||
$response = curl_exec($ch);
|
|
||||||
curl_close($ch);
|
|
||||||
|
|
||||||
$data = json_decode($response, true);
|
|
||||||
if ($data && $data['success']) {
|
|
||||||
$protectedCode = $data['protected_code'];
|
|
||||||
file_put_contents('protected_v5_8.lua', $protectedCode);
|
|
||||||
echo "Successfully protected code. Saved to protected_v5_8.lua\n";
|
|
||||||
echo "Stats: " . json_encode($data['stats']) . "\n";
|
|
||||||
|
|
||||||
// Test the protected code
|
|
||||||
$output = shell_exec('lua protected_v5_8.lua 2>&1');
|
|
||||||
echo "\nExecution output:\n";
|
|
||||||
echo $output;
|
|
||||||
|
|
||||||
if (strpos($output, 'Hyperion V5.8 Test') !== false &&
|
|
||||||
strpos($output, 'Instruction Folding is active') !== false) {
|
|
||||||
echo "\nVerification: SUCCESS\n";
|
|
||||||
} else {
|
|
||||||
echo "\nVerification: FAILED\n";
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
echo "Error: " . ($data['error'] ?? 'Unknown error') . "\n";
|
|
||||||
echo "Raw response: " . $response . "\n";
|
|
||||||
}
|
|
||||||
@ -1,30 +0,0 @@
|
|||||||
<?php
|
|
||||||
$code = 'print("Hello from Hyperion V5.9")
|
|
||||||
local x = 10
|
|
||||||
print("Value of x is:", x)
|
|
||||||
';
|
|
||||||
|
|
||||||
$ch = curl_init('http://localhost/process.php');
|
|
||||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
||||||
curl_setopt($ch, CURLOPT_POST, true);
|
|
||||||
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(['code' => $code]));
|
|
||||||
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
|
|
||||||
|
|
||||||
$response = curl_exec($ch);
|
|
||||||
$data = json_decode($response, true);
|
|
||||||
|
|
||||||
if ($data && $data['success']) {
|
|
||||||
$protected_code = $data['protected_code'];
|
|
||||||
file_put_contents('protected_v5_9.lua', $protected_code);
|
|
||||||
echo "Obfuscation successful. Output saved to protected_v5_9.lua\n";
|
|
||||||
|
|
||||||
// Execute the protected code using lua
|
|
||||||
$output = shell_exec('lua protected_v5_9.lua 2>&1');
|
|
||||||
echo "Execution output:\n$output\n";
|
|
||||||
} else {
|
|
||||||
echo "Obfuscation failed: " . ($data['error'] ?? 'Unknown error') . "\n";
|
|
||||||
if (isset($data['error'])) {
|
|
||||||
echo "Error detail: " . print_r($data, true) . "\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
curl_close($ch);
|
|
||||||
@ -1,49 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
* Test for Luartex V6.0 - Infinite Morph Engine
|
|
||||||
*/
|
|
||||||
|
|
||||||
$test_code = '
|
|
||||||
print("Luartex V6.0 Reality Test")
|
|
||||||
local secret = "INFINITE_MORPH_ACTIVE"
|
|
||||||
local data = {1, 2, 3, 4, 5}
|
|
||||||
local sum = 0
|
|
||||||
for i, v in ipairs(data) do
|
|
||||||
sum = sum + v
|
|
||||||
end
|
|
||||||
print("Checksum: " .. tostring(sum))
|
|
||||||
if sum == 15 then
|
|
||||||
print("Logic Integrity: PASSED")
|
|
||||||
else
|
|
||||||
print("Logic Integrity: POISONED")
|
|
||||||
end
|
|
||||||
';
|
|
||||||
|
|
||||||
$url = 'http://localhost/process.php';
|
|
||||||
$options = [
|
|
||||||
'http' => [
|
|
||||||
'header' => "Content-type: application/json\r\n",
|
|
||||||
'method' => 'POST',
|
|
||||||
'content' => json_encode(['code' => $test_code]),
|
|
||||||
],
|
|
||||||
];
|
|
||||||
|
|
||||||
$context = stream_context_create($options);
|
|
||||||
$result = file_get_contents($url, false, $context);
|
|
||||||
|
|
||||||
if ($result === FALSE) {
|
|
||||||
die("Error reaching process.php");
|
|
||||||
}
|
|
||||||
|
|
||||||
$response = json_decode($result, true);
|
|
||||||
|
|
||||||
if ($response && $response['success']) {
|
|
||||||
$protected_file = 'protected_v6_0.lua';
|
|
||||||
file_put_contents($protected_file, $response['protected_code']);
|
|
||||||
echo "Successfully generated $protected_file\n";
|
|
||||||
echo "Stats: " . json_encode($response['stats']) . "\n";
|
|
||||||
} else {
|
|
||||||
echo "Error: " . ($response['error'] ?? 'Unknown error') . "\n";
|
|
||||||
echo "Full response: " . $result . "\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
@ -1,48 +0,0 @@
|
|||||||
<?php
|
|
||||||
$code = '
|
|
||||||
print("Luartex Hyperion V8.0 Test")
|
|
||||||
local message = "Roblox Executor Compatibility Layer"
|
|
||||||
print(message)
|
|
||||||
|
|
||||||
function calculate(a, b)
|
|
||||||
local result = a * b + 50
|
|
||||||
return result
|
|
||||||
end
|
|
||||||
|
|
||||||
local val = calculate(10, 5)
|
|
||||||
print("Calculation Result:", val)
|
|
||||||
|
|
||||||
local x = 123.456
|
|
||||||
print("Floating point test:", x)
|
|
||||||
|
|
||||||
print("Finished Test")
|
|
||||||
';
|
|
||||||
|
|
||||||
$payload = json_encode(['code' => $code]);
|
|
||||||
|
|
||||||
$ch = curl_init('http://localhost/process.php');
|
|
||||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
||||||
curl_setopt($ch, CURLOPT_POST, true);
|
|
||||||
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
|
|
||||||
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
|
|
||||||
|
|
||||||
$response = curl_exec($ch);
|
|
||||||
curl_close($ch);
|
|
||||||
|
|
||||||
$res = json_decode($response, true);
|
|
||||||
if ($res && $res['success']) {
|
|
||||||
$protected_code = $res['protected_code'];
|
|
||||||
file_put_contents('protected_v8_0.lua', $protected_code);
|
|
||||||
echo "Obfuscation successful. Output saved to protected_v8_0.lua\n";
|
|
||||||
echo "Stats: " . json_encode($res['stats']) . "\n";
|
|
||||||
|
|
||||||
// Quick syntax check using php if lua is not available,
|
|
||||||
// but better to just confirm the file exists and has content.
|
|
||||||
if (strlen($protected_code) > 1000) {
|
|
||||||
echo "Protected code looks valid (size: " . strlen($protected_code) . " bytes)\n";
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
echo "Obfuscation failed: " . ($res['error'] ?? 'Unknown error') . "\n";
|
|
||||||
echo "Response: " . $response . "\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
@ -1,60 +0,0 @@
|
|||||||
<?php
|
|
||||||
$code = '
|
|
||||||
print("Hyperion V8.1 - Table Virtualization Test")
|
|
||||||
|
|
||||||
local myTable = {}
|
|
||||||
myTable["secret"] = "This is a virtualized value"
|
|
||||||
myTable.info = "Metadata virtualized"
|
|
||||||
myTable["level"] = 9000
|
|
||||||
|
|
||||||
print("Accessing Table via Virtualization:")
|
|
||||||
local secret = myTable["secret"]
|
|
||||||
print("Secret:", secret)
|
|
||||||
|
|
||||||
local info = myTable.info
|
|
||||||
print("Info:", info)
|
|
||||||
|
|
||||||
local level = myTable["level"]
|
|
||||||
print("Level:", level)
|
|
||||||
|
|
||||||
function checkTable(t)
|
|
||||||
print("Checking Table Key Directly...")
|
|
||||||
local val = t["secret"]
|
|
||||||
if val == "This is a virtualized value" then
|
|
||||||
print("Success: Virtualization Layer Passed")
|
|
||||||
else
|
|
||||||
print("Failure: Virtualization Layer Mismatch")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
checkTable(myTable)
|
|
||||||
|
|
||||||
print("Finished V8.1 Test")
|
|
||||||
';
|
|
||||||
|
|
||||||
$payload = json_encode(['code' => $code]);
|
|
||||||
|
|
||||||
$ch = curl_init('http://localhost/process.php');
|
|
||||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
||||||
curl_setopt($ch, CURLOPT_POST, true);
|
|
||||||
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
|
|
||||||
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
|
|
||||||
|
|
||||||
$response = curl_exec($ch);
|
|
||||||
curl_close($ch);
|
|
||||||
|
|
||||||
$res = json_decode($response, true);
|
|
||||||
if ($res && $res['success']) {
|
|
||||||
$protected_code = $res['protected_code'];
|
|
||||||
file_put_contents('protected_v8_1.lua', $protected_code);
|
|
||||||
echo "Obfuscation successful. Output saved to protected_v8_1.lua\n";
|
|
||||||
echo "Stats: " . json_encode($res['stats']) . "\n";
|
|
||||||
|
|
||||||
if (strlen($protected_code) > 1000) {
|
|
||||||
echo "Protected code looks valid (size: " . strlen($protected_code) . " bytes)\n";
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
echo "Obfuscation failed: " . ($res['error'] ?? 'Unknown error') . "\n";
|
|
||||||
echo "Response: " . $response . "\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
@ -1,56 +0,0 @@
|
|||||||
<?php
|
|
||||||
// Test script for Hyperion V9.0
|
|
||||||
$testCode = "
|
|
||||||
print('Hyperion V9.0 Initializing...')
|
|
||||||
local target = 'Hello from the Entangled VM!'
|
|
||||||
print(target)
|
|
||||||
local mathTest = 10 + 20
|
|
||||||
print('Math test (10 + 20):', mathTest)
|
|
||||||
local t = {}
|
|
||||||
t['status'] = 'Virtualization Active'
|
|
||||||
print('Table test:', t['status'])
|
|
||||||
";
|
|
||||||
|
|
||||||
function testObfuscation($code) {
|
|
||||||
$url = 'http://localhost/process.php';
|
|
||||||
$data = json_encode(['code' => $code]);
|
|
||||||
|
|
||||||
$ch = curl_init($url);
|
|
||||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
||||||
curl_setopt($ch, CURLOPT_POST, true);
|
|
||||||
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
|
|
||||||
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
|
|
||||||
|
|
||||||
$response = curl_exec($ch);
|
|
||||||
if (curl_errno($ch)) {
|
|
||||||
return ['success' => false, 'error' => curl_error($ch)];
|
|
||||||
}
|
|
||||||
curl_close($ch);
|
|
||||||
|
|
||||||
return json_decode($response, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
$result = testObfuscation($testCode);
|
|
||||||
|
|
||||||
if ($result && $result['success']) {
|
|
||||||
echo "Obfuscation Successful!\n";
|
|
||||||
echo "Stats: " . json_encode($result['stats']) . "\n";
|
|
||||||
$protectedFile = 'protected_v9_0.lua';
|
|
||||||
file_put_contents($protectedFile, $result['protected_code']);
|
|
||||||
echo "Protected code saved to $protectedFile\n";
|
|
||||||
|
|
||||||
// Check if it's valid Lua (syntax check)
|
|
||||||
$output = [];
|
|
||||||
$return_var = 0;
|
|
||||||
exec("luac -p $protectedFile 2>&1", $output, $return_var);
|
|
||||||
if ($return_var === 0) {
|
|
||||||
echo "Syntax Check: PASSED\n";
|
|
||||||
} else {
|
|
||||||
echo "Syntax Check: FAILED\n";
|
|
||||||
echo implode("\n", $output) . "\n";
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
echo "Obfuscation Failed!\n";
|
|
||||||
print_r($result);
|
|
||||||
}
|
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user