Hei!
Olen kinnostunut harjoitus mielessä, että miten ohjelma voisi salata oman tiedostonsa. Esimerkkinä jos ohjelma sisältäisi salasanan muistissaan niin sitä ei saisi luettua sieltä noin vain, debuggauksellahan tuo onnistuu, mutta harjoitus mielessä tämä koko projekti kuitenkin.
Eli miten voisin kirjottaa itsensä salaavan ohjelman c++ kielellä.
Toivottavasti onnistuin selittämään jota kuinkin mitä tarkoitan.
Siis ohjelma joka muuttaisi itsensä salatuksi tehtäisiin näin:
1. Ohjelma on tietoinen lähdekoodistaan
2. salaa sen
3. tuhoaa itsensä
tai:
1. ohjelma on jo konekielellä ja ei ole tietoinen lähdekoodistaan
2. ottaa selville oman sijaintinsa kovolla
3. salaa tiedot
4. tuhoaa kovolta ohjelman
5. lopettaa suorittamisen -> poistuu liukuhihnalta
tässä vaihtoehdossa pitää osata konekieltä/assemblyä enkä ole varma onnistuuko uusimmilla käyttöjärjestelmillä(uudempi kuin 1980)
En mä kyllä näe mitään ongelmaa siinä, että ohjelma salaisi itsensä kiintolevyllä. Ongelma tulisi lähinnä siitä, että kun ohjelman lopettaisi, niin kiintolevyllä olisi salattu tiedosto, jota kukaan ei osaisi avata.
Tai siis eihän tuo mikään ongelma sinänsä ole, mutta mulla on ongelma että en oikein tajua mikä idea tässä on.
Kiitoksia nopeista vastauksista!
Jäin miettimään sitä, että jos haluaisin toteuttaa pienen lisäyksen ohjelmaan niin, että kun se ohjelma salattuna ajetaan se toimisi kuitenkin ja lähtisi käyntiin, vaikka niin että se decryptautuisi käynnistäessä ja sulkeutuessa taas encryptaisi itsensä.
Mutta miten se sitten eroaa salaamattomasta versiosta?
http://www.scribd.com/doc/20706618/Self-Encrypting-Code-to-Protect-Against-Analysis-and-Tampering
Haet jotain tämän tyyppistä? Tuon kaveriksi voisit sisäistää vaikkapa tämän: http://www.schneier.com/twofish.html
etsubu kirjoitti:
se decryptautuisi käynnistäessä ja sulkeutuessa taas encryptaisi itsensä.
No tässähän on se periaatteellinen ongelma, että se avain pitää säilyttää selkokielisenä jossain, että se salattu data voidaan vielä joskus purkaa ja jos krakkeri saa selkokielisen avaimen, on vain ajan kysymys, milloin se saa selkokielisen datanki. Mediateollisuus on vuosia paininu saman ongelman parissa (vrt. BD+) sitä tehokkaasti ratkasematta.
Niin ja mediateollisuudella on kuitenkin taustatukea jopa rautavalmistajilta.
etsubu kirjoitti:
Kiitoksia nopeista vastauksista!
Jäin miettimään sitä, että jos haluaisin toteuttaa pienen lisäyksen ohjelmaan niin, että kun se ohjelma salattuna ajetaan se toimisi kuitenkin ja lähtisi käyntiin, vaikka niin että se decryptautuisi käynnistäessä ja sulkeutuessa taas encryptaisi itsensä.
Tällaisia ohjelmia on paljon. Niitä kutsutaan pakkereiksi ja protektoreiksi sen mukaan, käytetäänkö niitä tiedoston kompressointiin vai suojaukseen. Wikipediasta löytyy jokin lista näistä. UPX on avointa lähdekoodia, jos kiinnostaa sitä kautta lähteä tutustumaan.
Ideahan näissä on aika yksinkertainen. Binääri suojataan halutulla tavalla ja luodaan uusi binääritiedosto, johon tallennetaan suojattu data sellaisessa formaatissa, että se voidaan purkaa alkuperäiseen muotoonsa muistissa. Purkamisen suorittaa "selkokielinen" stub, joka kirjoitetaan uuden binäärin alkuun. Tässä stubissa yleensä suoritetaan myös kaikenlaisia anti-debug temppuja debuggaamisen estämiseksi. Purkamisen lopuksi stubista hypätään puretun binäärin entrypointtiin ja ohjelman suoritus alkaa normaalisti. Tässä vaiheessa paha hakkeri dumppaisi muistiin puretun koodin kiintolevylle ja saisi alkuperäisen binäärin käsiinsä.
Jos haluaa tällaista lähteä tekemään, niin kannattaa tutustua PE headeriin (Windows) ja ELF headeriin (Unix). Varmaan ihan harjoituksen nimissä kannattaisi ensiksi koodata jokin viruksen tapainen, joka lisää annetun binäärin alkuun omaa koodia. Googlesta löytyy aiheesta hakusanoilla: PE infection ja ELF infection. Jimi-kimin linkki näyttää myös hyvältä.
Assemblyltä ja matalan tason debuggaamiselta ei voi välttyä, jos haluaa saada jotain toimivaa aikaiseksi.
Kiitoksia kaikille juuri tällaista hain! Tämän kaiken kunnolla luettuani voisi alkaa koodiakin jo näillä tiedoilla luomaan.
Aihe on jo aika vanha, joten et voi enää vastata siihen.