Skip to content
This repository was archived by the owner on Jun 26, 2025. It is now read-only.

Commit 9c7d7bd

Browse files
committed
fix
1 parent da2307d commit 9c7d7bd

File tree

4 files changed

+89
-28
lines changed

4 files changed

+89
-28
lines changed

.idea/inspectionProfiles/Project_Default.xml

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/workspace.xml

Lines changed: 18 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,29 @@
1-
# KotlinJSTemplate
1+
# WebCorrupter.js
2+
## Что это?
3+
WebCorrupter - это вирус для веб-станиц. Он портит контент веб-страницы,
4+
удаляя контент, меняя его местами и меняя его внешний вид.
5+
6+
## Как использовать
7+
Чтобы запустить вирус на веб-странице, выполните следующий код в DevTools:
8+
```js
9+
eval(
10+
await (
11+
await fetch(
12+
"https://raw.githubusercontent.com/denis0001-dev/WebCorrupter.js/refs/heads/main/dist/WebCorrupter.js"
13+
)
14+
).text()
15+
);
16+
```
17+
18+
Для постоянного встраивания добавьте следующий код в `head` или конец `body`:
19+
```html
20+
<script src="https://raw.githubusercontent.com/denis0001-dev/WebCorrupter.js/refs/heads/main/dist/WebCorrupter.js"></script>
21+
```
22+
23+
## Тесты
24+
Этот вирус содержит два теста:
25+
1. [Простая HTML-страница](https://denis0001-dev.github.io/WebCorrupter.js/tests/1);
26+
2. [Клон сайта Toolbox.io](https://denis0001-dev.github.io/WebCorrupter.js/tests/2).
27+
Кстати, если вам интересно узнать про Toolbox.io, [оригинальный сайт здесь](https://toolbox-io.ru).
28+
29+
Все тесты содержат копию `webcorrupter.js` для удобства тестирования.

src/jsMain/kotlin/ru/morozovit/webcorrupter/Main.kt

Lines changed: 41 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,13 @@ import kotlinx.dom.addClass
77
import org.w3c.dom.*
88
import ru.morozovit.util.addEventListener
99
import ru.morozovit.util.nextHexColor
10-
import ru.morozovit.webcorrupter.RandomUtils.randomDelay
1110
import kotlin.random.Random.Default.nextInt
1211
import kotlin.random.Random.Default.nextLong
1312

14-
object RandomUtils {
15-
suspend inline fun randomDelay() = delay(nextLong(50, 3000))
16-
}
17-
1813
object Virus {
14+
private var speedFactor = 1.0
15+
private const val SPEED_INCREASE_RATE = 0.008
16+
private const val MAX_SPEED_FACTOR = 10.0
1917
private val max get() = when {
2018
document.body!!.innerHTML.length > 500000 -> 1000
2119
document.body!!.innerHTML.length > 100000 -> 400
@@ -24,38 +22,50 @@ object Virus {
2422
document.body!!.innerHTML.length > 5000 -> 100
2523
else -> 50
2624
}
25+
private lateinit var prevPage: String
26+
27+
private suspend inline fun randomDelay(mul: Float = 1f) {
28+
delay((getAdjustedDelay(nextLong(50, 1000)) * mul).toLong())
29+
updateSpeedFactor()
30+
console.log("Speed factor: ", speedFactor)
31+
}
32+
33+
private fun updateSpeedFactor() {
34+
speedFactor = (speedFactor + SPEED_INCREASE_RATE).coerceAtMost(MAX_SPEED_FACTOR)
35+
}
36+
37+
private fun getAdjustedDelay(delay: Long): Long {
38+
return (delay / speedFactor).toLong().coerceAtLeast(10)
39+
}
2740

2841
private fun randomNumberOfTimes() = nextInt(10, max)
2942

3043
object Payloads {
3144
suspend fun messUpElements() {
32-
randomDelay()
3345
console.log("Messing up elements...")
3446
val numberOfTimes = randomNumberOfTimes()
3547
console.log("Number of times: ", numberOfTimes)
3648
repeat(numberOfTimes) {
3749
try {
38-
randomElement().appendChild(randomElement(true))
50+
randomElement(true).appendChild(randomElement(true))
3951
} catch (_: Exception) {}
4052
delay(nextInt(100, 500).toLong())
4153
}
4254
}
4355

4456
suspend fun addRandomText() {
45-
randomDelay()
4657
console.log("Adding random text...")
4758
val numberOfTimes = randomNumberOfTimes()
4859
console.log("Number of times: ", numberOfTimes)
4960
repeat(numberOfTimes) {
5061
try {
5162
randomElement().textContent += "error"
5263
} catch (_: Exception) {}
53-
delay(nextInt(100, 1000).toLong())
64+
randomDelay()
5465
}
5566
}
5667

5768
suspend fun addRandomStyles() {
58-
delay(nextInt(100, 3000).toLong())
5969
console.log("Adding random styles...")
6070
val numberOfTimes = randomNumberOfTimes()
6171
console.log(numberOfTimes)
@@ -68,7 +78,7 @@ object Virus {
6878
2 -> element.style.transform = "blur(${nextInt(1, 100)}px)"
6979
}
7080
} catch (_: Exception) {}
71-
delay(nextInt(100, 1000).toLong())
81+
randomDelay()
7282
}
7383
}
7484

@@ -85,15 +95,19 @@ object Virus {
8595
}
8696

8797
suspend fun invertColors() {
88-
randomDelay()
8998
console.log("Inverting colors...")
90-
document.body?.style?.filter = "invert(100%)"
91-
delay(nextInt(3000, 10000).toLong())
92-
document.body?.style?.filter = "none"
99+
val numberOfTimes = randomNumberOfTimes()
100+
console.log(numberOfTimes)
101+
repeat(numberOfTimes) {
102+
try {
103+
val element = randomElement() as HTMLElement
104+
element.style.filter = "invert(100%)"
105+
} catch (_: Exception) {}
106+
randomDelay()
107+
}
93108
}
94109

95110
suspend fun shakeElements() {
96-
randomDelay()
97111
console.log("Shaking elements...")
98112
val numberOfTimes = randomNumberOfTimes()
99113
repeat(numberOfTimes) {
@@ -102,25 +116,23 @@ object Virus {
102116
element.style.animation = "shake 0.5s"
103117
element.style.animationIterationCount = "infinite"
104118
} catch (_: Exception) {}
105-
delay(nextInt(100, 1000).toLong())
119+
randomDelay()
106120
}
107121
}
108122

109123
suspend fun rotateElements() {
110-
randomDelay()
111124
console.log("Rotating elements...")
112125
val numberOfTimes = randomNumberOfTimes()
113126
repeat(numberOfTimes) {
114127
try {
115128
val element = randomElement() as HTMLElement
116129
element.style.transform = "rotate(${nextInt(0, 360)}deg)"
117130
} catch (_: Exception) {}
118-
delay(nextInt(100, 1000).toLong())
131+
randomDelay()
119132
}
120133
}
121134

122135
suspend fun showBSOD() {
123-
randomDelay()
124136
console.log("Showing BSOD...")
125137
document.documentElement!!.innerHTML = """
126138
|<head>
@@ -179,6 +191,8 @@ object Virus {
179191
suspend fun run() {
180192
loadStyle()
181193
showCheatActivated()
194+
prevPage = document.documentElement!!.innerHTML
195+
GlobalScope.launch { restorePage() }
182196
val payloads = listOf(
183197
Payloads::messUpElements,
184198
Payloads::addRandomText,
@@ -225,6 +239,13 @@ object Virus {
225239
console.warn(e)
226240
}
227241
}
242+
243+
private suspend fun restorePage() {
244+
while (true) {
245+
randomDelay(4f)
246+
document.documentElement!!.innerHTML = prevPage
247+
}
248+
}
228249
}
229250

230251
fun main() {

0 commit comments

Comments
 (0)