Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Ohjelman kopiointi Windowsissa

ville-v [23.04.2007 13:12:06]

#

Koulun koneessa on esto, että Internet Explorerilla ei voi ladata ohjelmia. Ohjelmien suoritus kuitenkin onnistuu. Ymmärtääkseni tällöin ohjelma kopioidaan selaimen välimuistiin pelkän RAM-muistin sijasta.

Tarkoitus olisi saada ohjelmaan toiminto jolla tämä selaimen välimuistissa oleva ohjelma kopioisi itsensä ennalta määritettyyn kohteeseen. Välimuistissa olevan ohjelman polkua ja tiedostonimeä ei tiedetä etukäteen.

Päädyin seuraavanlaiseen pseudokoodiin:

main(){
if(olemassa(kohde) == false){
kopioi(tämätiedosto(), kohde);
suorita(kohde);
}
else{
varsinainen_ohjelma();
}
}

Ongelmana on kuitenkin se, mitkä kyseisten funktioiden nimet ovat, mitä niille annetaan parametriksi, ja toimisiko kyseinen menetelmä Internet Explorer 6:n kanssa?

Niin ja kieli on tosiaan C++.

Markus [23.04.2007 13:38:37]

#

Tuo ei onnistu. Jos onnistuu, kyseessä on vakava tietoturva-aukko.

Sen sijaan asenna (käyttäen omaa konettasi) USB-muistitikulle FireFox-selain (http://www.mozilla-europe.org/fi/products/firefox/). Tämän jälkeen yksinkertaisesti laitat USB-tikun koulun koneeseen ja käynnistät FireFoxin siltä. Voit selata täten nettiä normaalisti ja imuroida ohjelmiakin. Jos imuroit ohjelmia, voit asentaa nekin samalle USB-tikulle, jolloin ne kulkevat kätevästi mukana kotiinkin. Eikä näin tarvitse koodata riviäkään.

Metabolix [23.04.2007 22:05:53]

#

Periaatteessa jonkinlainen ohjelman käynnistyskomento on sen ensimmäisessä parametrissa. On siis mahdollista, että tällainen toimii:

#include <cstdlib>
#include <cstring>
#include <string>
using namespace std;

int main(int argc, char **argv)
{
    // Funktiolla strstr selvitetään käynnistyskomennosta, onko siinä tietty pätkä. Siis pitää tietää, minne IE ohjelman laittaa.
    // printf("Komento: '%s'\n", argv[0]); // Debugausta varten, niin voi katsoa sitä komentoa.

    // Jos vaikka Temp olisi tunnistettava osa komennosta
    if (argc != 0 && strstr(argv[0], "Temp")) {
        return 0;
        string komento = "copy \""; // Ehkei tarvitse \":ta
        komento += argv[0];
        komento += "\" Q:\\jokin_kiva_oma_ohjelma.exe"; // kohde (ja taas \")
        system(komento.c_str()); // Kopioidaan (toivottavasti)
        return 0; // Ja loppuu tähän
    }

    // Olikin normaali startti tai komentoa ei tiedetty / tunnistettu
    return 0;
}

tesmu [25.04.2007 14:13:08]

#

Metabolix: Eikös tuo ohjelma samantien lopu jos tuo if lause on totta kun sulla on heti perään return 0;

Blaze [25.04.2007 16:09:19]

#

Hys! Se on testi, jolla katsotaan, lukiko ville-v annettua koodia, vai copypastesko vain!

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta