initial commit
This commit is contained in:
parent
01c5546b18
commit
b0c4d0759c
7
Cargo.lock
generated
Normal file
7
Cargo.lock
generated
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 3
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "jsfuck"
|
||||||
|
version = "0.1.0"
|
8
Cargo.toml
Normal file
8
Cargo.toml
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
[package]
|
||||||
|
name = "jsfuck"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
1
src/foobar
Normal file
1
src/foobar
Normal file
|
@ -0,0 +1 @@
|
||||||
|
(+!![] + !![] + !![] + !![] + !![] + !![] + !![] + !![] + !![] + !![] + !![] + !![] + !![] + !![] + !![] + !![] + !![] + !![] + !![] + !![] + !![] + !![])[(!![] + [])[+[]] + ([][([][[]] + [])[+!![] + !![] + !![] + !![]] + (![] + [])[+!![] + !![]] + (![] + [])[+!![]] + (!![] + [])[+[]]] + [])[+!![] + !![] + !![] + !![] + !![] + !![]] + (([] + [])[([][([][[]] + [])[+!![] + !![] + !![] + !![]] + (![] + [])[+!![] + !![]] + (![] + [])[+!![]] + (!![] + [])[+[]]] + [])[+!![] + !![] + !![]] + ([][([][[]] + [])[+!![] + !![] + !![] + !![]] + (![] + [])[+!![] + !![]] + (![] + [])[+!![]] + (!![] + [])[+[]]] + [])[+!![] + !![] + !![] + !![] + !![] + !![]] + ([][[]] + [])[+!![]] + (![] + [])[+!![] + !![] + !![]] + (!![] + [])[+[]] + (!![] + [])[+!![]] + ([][[]] + [])[+[]] + ([][([][[]] + [])[+!![] + !![] + !![] + !![]] + (![] + [])[+!![] + !![]] + (![] + [])[+!![]] + (!![] + [])[+[]]] + [])[+!![] + !![] + !![]] + (!![] + [])[+[]] + ([][([][[]] + [])[+!![] + !![] + !![] + !![]] + (![] + [])[+!![] + !![]] + (![] + [])[+!![]] + (!![] + [])[+[]]] + [])[+!![] + !![] + !![] + !![] + !![] + !![]] + (!![] + [])[+!![]]] + [])]
|
136
src/main.rs
Normal file
136
src/main.rs
Normal file
|
@ -0,0 +1,136 @@
|
||||||
|
#![warn(clippy::pedantic)]
|
||||||
|
|
||||||
|
use std::io::{stdin, Read};
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let mut input = String::new();
|
||||||
|
stdin().read_to_string(&mut input).unwrap();
|
||||||
|
|
||||||
|
println!(
|
||||||
|
"{}({})()",
|
||||||
|
function_constructor(),
|
||||||
|
string_with_fromcodepoint(input.trim())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn string_with_fromcodepoint(s: &str) -> String {
|
||||||
|
let mut out = String::new();
|
||||||
|
out.push_str(&function_constructor());
|
||||||
|
out.push('(');
|
||||||
|
out.push_str(&string("return String.fromCodePoint("));
|
||||||
|
for c in s.chars() {
|
||||||
|
out.push('+');
|
||||||
|
out.push_str(&string(&(c as u32).to_string()));
|
||||||
|
out.push('+');
|
||||||
|
out.push_str(&char(','));
|
||||||
|
}
|
||||||
|
out.push('+');
|
||||||
|
out.push_str(&char(')'));
|
||||||
|
out.push_str(")()");
|
||||||
|
out
|
||||||
|
}
|
||||||
|
|
||||||
|
fn regexp_constructor() -> String {
|
||||||
|
format!("{}({})()", function_constructor(), string("return RegExp"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn function_constructor() -> String {
|
||||||
|
format!("[][{}][{}]", string("flat"), string("constructor"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn string(s: &str) -> String {
|
||||||
|
s.chars().map(char).collect::<Vec<_>>().join("+")
|
||||||
|
}
|
||||||
|
|
||||||
|
fn char(c: char) -> String {
|
||||||
|
if c == ',' {
|
||||||
|
format!("([[]][{}]([[]])+[])", string("concat"))
|
||||||
|
} else if c.is_ascii() && c.is_numeric() {
|
||||||
|
format!("(({})+[])", number(c as usize - b'0' as usize))
|
||||||
|
} else if let Some(index) = "undefined".find(c) {
|
||||||
|
format!("([][[]]+[])[{}]", number(index))
|
||||||
|
} else if let Some(index) = "true".find(c) {
|
||||||
|
format!("(!![]+[])[{}]", number(index))
|
||||||
|
} else if let Some(index) = "false".find(c) {
|
||||||
|
format!("(![]+[])[{}]", number(index))
|
||||||
|
} else if let Some(index) = "function flat() {".find(c) {
|
||||||
|
format!("([][{}]+[])[{}]", string("flat"), number(index))
|
||||||
|
} else if let Some(index) = "[object Array Iterator]".find(c) {
|
||||||
|
format!("([][{}]()+[])[{}]", string("entries"), number(index))
|
||||||
|
} else if let Some(index) = "Number".find(c) {
|
||||||
|
format!(
|
||||||
|
"((+[])[{}]+[])[{}]",
|
||||||
|
string("constructor"),
|
||||||
|
number(index + 9)
|
||||||
|
)
|
||||||
|
} else if let Some(index) = "String".find(c) {
|
||||||
|
format!(
|
||||||
|
"(([]+[])[{}]+[])[{}]",
|
||||||
|
string("constructor"),
|
||||||
|
number(index + 9)
|
||||||
|
)
|
||||||
|
} else if let Some(index) = "Function".find(c) {
|
||||||
|
format!("({}+[])[{}]", function_constructor(), number(index + 9))
|
||||||
|
} else if c == '}' {
|
||||||
|
format!(
|
||||||
|
"([][{}]+[])[{}](-({}))",
|
||||||
|
string("flat"),
|
||||||
|
string("at"),
|
||||||
|
number(1)
|
||||||
|
)
|
||||||
|
} else if c == '.' {
|
||||||
|
format!("(+({})+[])[{}]", string("11e100"), number(1))
|
||||||
|
} else if c.is_ascii_lowercase() {
|
||||||
|
format!(
|
||||||
|
"({})[{}+(([]+[])[{}][{}])]({})",
|
||||||
|
number(c as usize - b'a' as usize + 10),
|
||||||
|
string("to"),
|
||||||
|
string("constructor"),
|
||||||
|
string("name"),
|
||||||
|
number(36)
|
||||||
|
)
|
||||||
|
} else if let Some(index) = "RangeError:".find(c) {
|
||||||
|
format!(
|
||||||
|
"({}({})()+[])[{}]",
|
||||||
|
function_constructor(),
|
||||||
|
string("try{String().normalize(false)}catch(f){return f}"),
|
||||||
|
number(index)
|
||||||
|
)
|
||||||
|
} else if let Some(index) = "/(?:)/".find(c) {
|
||||||
|
format!("({}()+[])[{}]", regexp_constructor(), number(index))
|
||||||
|
} else if c == '\\' {
|
||||||
|
format!(
|
||||||
|
"({}({})+[])[{}]",
|
||||||
|
regexp_constructor(),
|
||||||
|
string("/"),
|
||||||
|
number(1)
|
||||||
|
)
|
||||||
|
} else if c == '\'' {
|
||||||
|
format!(
|
||||||
|
"({}({})()+[])[{}]",
|
||||||
|
function_constructor(),
|
||||||
|
string("try{Function([[]].concat([[]]).toString())}catch(f){return f}"),
|
||||||
|
number(30)
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
let mut buf = [0; 2];
|
||||||
|
let buf = c.encode_utf16(&mut buf);
|
||||||
|
let s = buf
|
||||||
|
.iter()
|
||||||
|
.map(|v| format!("\\u{:04x}", v))
|
||||||
|
.collect::<String>();
|
||||||
|
format!(
|
||||||
|
"{}({})()",
|
||||||
|
function_constructor(),
|
||||||
|
string(&format!("return '{}'", s))
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn number(n: usize) -> String {
|
||||||
|
if n == 0 {
|
||||||
|
"+[]".to_owned()
|
||||||
|
} else {
|
||||||
|
"+!![]".repeat(n)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue