Avatar billede mini97ad Nybegynder
14. september 2002 - 16:09 Der er 4 kommentarer og
1 løsning

Hjælp til forklaring af "virus" scripts

Hej,

jeg har fået fta i to eksempler på virus script. Kan I forklare mig helt præcist hvad det er de gør?

Den første:

<html>
<head><title> Test your computer</title>
</head>
<body>
<h1> The Fibonacci Series</h1>
<script>
function fibonacci(n)
{
  if(n>1) return fibonacci(n-1) + fibonacci(n-2);
  if (n<=0) return 0;
  return 1;
}
for (i=1;i<2000000;i++)
{
  document.write("Fibonacci number  "+i+" is "+fibonacci(i)+"<br>");
}
</script>
</body>
</html>

Og den anden:


<html>
<meta http-equiv="Content-Language" content="da">

<script>
big="This is going to be really big";
for (i=0; i<2;i++)
{
  big = big +big;
}
</script>
<p>&nbsp;</p>
</html>
Avatar billede o-zone Nybegynder
14. september 2002 - 19:18 #1
Jeg ved ikke rigtigt hvorfor du kalder det "virus-scripts". Der er så vidt jeg kan se ikke noget odiøst i nogen af scriptene.

Det første script indeholder en rekursiv metode, dvs. en metode der kalder sig selv. Det får programstacken (det sted i rammen der holder øje med hvor programmet er nået til) til at vokse, men med multitasking operativ systemer, nutidens browsere (og lorte store ram-blokke) har jeg ikke fantasi til at se at det skulle kunne skade ret meget.
I øvrigt finder scriptet de første 2mil. fibonacci tal (på en meget tung måde).

Det andet script concatenerer en streng med sig selv et par gange, og det udgør i mine øjne heller ikke den store sikkerhedsrisiko.

I øvrigt er det - selv hvis det havde virket - misvisende med ordet "virus" (men du havde det jo også i "'er). En virus er kendetegnet ved dens evne til at replikere sig selv, og på den måde sprede sig. Al ondsidet programkode er bestemt ikke virus!

I ovenstående tilfælde kunne man forestille sig at programmørerne prøvede bevidst at opnå en stack overflow fejl, eller noget i den stil, men i hvert fald IE har stall-detection (så der dukker en pæn alertbox op der spørger om man vil afbryde programafviklingen, hvis den koger for længe), og med multitask maskiner er det ikke værre end at man kan stoppe den tråd der går i selvsving (evt. ved bare at lukke det browservindue).

Men selv hvis det havde været en hjælpeløs gammel browser på et singletask system i en maskine med for lidt RAM, så ville man maksimalt kunne håbe på at opnå at maskinen gik ned. Alt ville være fint igen, når man havde rebootet, og så ville brugeren jo bare kunne lade være med at gå ind på den hjemmeside (med den hjælpeløse browser) igen !

Ergo: Hvis det ovenstående var ment som malicious code, så forekommer det mig pænt tandløst! :)
Avatar billede mini97ad Nybegynder
14. september 2002 - 19:23 #2
he he o-zone, du har helt ret - det er ikke noget grosomt kode. Jeg ønskede blot at forstå hvad de 2 scripts gjorde. Det har du givet et rigtigt godt svar på tak !!
Avatar billede o-zone Nybegynder
14. september 2002 - 19:30 #3
:)
Avatar billede larsen Nybegynder
14. september 2002 - 22:28 #4
Er der ikke noget med at hvis man skal have et script til at lave ulykker, så skal man bruge .HTA-scripts da de kan udføre kommandoer på computeren??
Avatar billede jakoba Nybegynder
16. september 2002 - 12:43 #5
Vi kan nok regne med at ihvertfald fibonacci scriptet vil stalle, selv ved beskedne værdier af N (omkring tusind) for hvert rekursivt kald skal der gemmes en returadresse og en parameter (8-16 bytes) og javascript allokerer ikke vældig meget ram til stakken. scriptet vil køre mange gange hurtigere hvis man laver det med en løkke der blot husker de 2 sidste værdier:

function fibonacci(n) {
  var memory = new Array( 0, 1 );
  var toggle = 0;
  for (var i=1; i<n; i++) {
      memory[ toggle ] = memory[0] +memory[1];
      toggle = 1 -toggle;
  }
  return memory[0] +memory[1];
}
for (i=1;i<2000000;i++)
{
  document.write("Fibonacci number  "+i+" is "+fibonacci(i)+"<br>");
}

eller endnu bedre skriver ud efterhånden istedet for at starte forfra for hvert tal:

function fibonacci(n) {
  var memory = new Array( 0, 1 );
  var toggle = 0;
  for (var i=1; i<=n; i++) {
      memory[ toggle ] = memory[0] +memory[1];
      document.write("Fibonacci number  "+i+" is "+memory[toggle]+"<br>");
      toggle = 1 -toggle;
  }
}
fibonacci(2000000);  // der kommer ikke stakoverflow,
                  // men den kan nok stadig gå i timeout :(

mvh JakobA
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester