Sellainen joka kaappaa välistä pääohjelman ja pääohjelman osan, pienemmän ohjelman väliset parametrit ja muuntelee niitä siinä välissä.
Ei pystynyt mitenkään muuten tekemään erästä juttua kuin valeohjelman siihen niiden väliin jotta pääohjelma luulee sitä parametrejä muuntelevaa valeohjelmaa oikeaksi, eikä huomaa mitään.
Kun ei ollut käytössä sellaista ylellisyyttä kuin dokumentaatio, lainkaan.
Ei pystynyt mitenkään muuten tekemään erästä juttua kuin valeohjelman siihen niiden väliin jotta pääohjelma luulee sitä parametrejä muuntelevaa valeohjelmaa oikeaksi, eikä huomaa mitään.
Kun ei ollut käytössä sellaista ylellisyyttä kuin dokumentaatio, lainkaan.
Vastaukset 6
Vanhimmat
Kerro ihmeessä tarkemmin.
Mikä ympäristö? Oliko kohdeohjelmien lähdekoodi saatavilla? Mitä ohjelmointikieltä käytit? Voitko lähdekoodin omasta ratkaisustasi tai edes periaatteen?
DVD-videoiden ja kuvien editointia, adoben ohjelmia... ei lähdekoodia ole saatavilla noissa...
Itse yritin joskus 10 vuotta sitten tehdä Windowissa niin että pakkasin toisen Exen käynnistyvään pinemmän Exen sisään, tämä latasin sitten sen varsinaisen Exen muistista ja yritti käynnistää sen, mutta Windows esti sen laittomana toimintana.
Toiminto sinänsä ei ole laiton, mutta pienikin virhe tuollaisen ohjelman toteuttamisessa kylläkin johtaa laittomaan toimintoon !
vinkki: joskus kannattaa koodata DLL sen iänikuisen EXEn sijasta.
Esim. näin:
Sinulla on muualta sellaisenaan saatu ALKUPER.EXE
Tuosta ALKUPER.EXE ei ole lähdekoodeja, joten joudut itse debuggerin ja/tai disassemblerin avulla selvittämään tuon sisäistä toimintaa, jos jotain haluat muokata.
Koodaat itse MUOKKAAJA.DLL (Tämän voi aivan yhtä hyvin koodata Delphillä kuin C:llä).
Myös koodaat itse LATAAJA.EXE
Myös LATAAJA.EXEn voi koodata Delphillä (toki se C:lläkin on mahdollista tehdä).
Mitäkö tuo LATAAJA.EXE tekee?
1. Kutsuu Windows API -funktiota: CreateProcess(..., CREATE_SUSPENDED, ...)
2. Käytä Windows API -funktioita WriteProcessMemory ja ReadProcessMemory
Voit myös joutua muokkaamaan uuden prosessin ajoympäristöä: erityisesti rekisterin EIP (32-bit) tai RIP (64-bit) arvoa siten, että se osoittaa uuteen koodiin, jonka itse lisäsit uuteen prosessiin.
Uuden 4 KiTavun muistialueen lisääminen vieraaseen prosessiin (= ALKUPER.EXE):
Käytä Windows API -funktioita VirtualAllocEx.
Joudut kirjoittamaan pienen palan konekielikoodia, joka tekee seuraavaa:
Muokk := LoadLibrary('MUOKKAAJA.DLL');
P := GetProcAddress(Muokk, 'OMA_MUOKK');
sitten kutsut funktiota P, joka on todellisuudessa funktio OMA_MUOKK itse tekemässäsi MUOKKAAJA.DLL.
Normaalisti hyviin tapoihin kuuluisi ohjelman lopussa kutsua FreeLibrary(Muokk), mutta jos edellä kuvatulla tavalla muokkaat toisen tekemää koodia, niin sinulla ei ole varaa moiseen ylellisyyteen - kun et tarkkaan tiedä, milloin sitä pitäisi kutsua - tämä ei kuitenkaan ole vakava bugi, koska käyttöjärjestelmä vapauttaa lopetettavan prosessin RAM -muistin joka tapauksessa.
Valeohjelman sijaan voidaan puhua väliohjelmasta, middlewaresta.
Middlewarea käytetään mm. verkkoliikenteessä, kun halutaan lisätä tunnistetiedot lähetettävään http-otsikkoon automaattisesti, ja tarkastamaan onko http-pyynnöllä oikeus johonkin resurssiin.
"ja tarkastamaan onko http-pyynnöllä oikeus johonkin resurssiin."
Onko siis valtion eri palveluissaan (Traficom, Kela, Te-toimisto, omakanta jne.) käyttäjän tunnistamiseen käyttämä suomi.fi -palvelu Middlewarea ?