Kysymys:
Kuinka pakottaa DLL-tiedoston lataaminen Windows XP: ssä tiettyyn osoitteeseen
f428329
2013-07-26 19:38:18 UTC
view on stackexchange narkive permalink

Minun on suoritettava virheenkorjaus sovelluksessa ja analysoitava sen käynnistys, mutta tärkein DLL ladataan joka kerta eri osoitteisiin, mikä tekee työstäni paljon vaikeampaa. Kuinka voin poistaa ASLR: n kokonaan käytöstä tai ainakin pakottaa yhden DLL: n latautumaan tiettyyn, aina vakiona olevaan osoitteeseen?

Päällekkäinen viesti osoitteesta http://stackoverflow.com/questions/9560993/how-do-you-disable-aslr-address-space-layout-randomization-on-windows-7-x64
Kolme vastused:
QAZ
2013-07-26 19:42:07 UTC
view on stackexchange narkive permalink

Uskon XP: n, jos poistat siirtotaulukon DLL: stä (Tai tyhjennät siirtotaulukoiden RVA: n ja koon tietohakemistossa), niin Windows-latausohjelma yrittää ladata DLL: n haluamaansa perusosoitteeseen (The ImageBase valinnaisessa otsikossa), koska sitä ei voi enää siirtää.

Niin kauan kuin muistia suositellulla perusosoitteella on käytettävissä, tämän pitäisi toimia. Uudemmat Windows-versiot saattavat estää tämän riippuen latausasetuksista AFAIK.

Kätevä työkalu PE-tiedostojen muokkaamiseen on vapaasti saatavilla oleva CFF Explorer.

CFF Explorer on paras, sovittu.
Sanot "jos poistat siirtotaulukon [...], Windows-latausohjelma yrittää ladata DLL: n haluamaansa perusosoitteeseen". Joten missä se yrittää ladata sitä muuten? Eikö olekaan se, että Windows lataa DLL: n haluamaansa perusosoitteeseen, ellei sitä ole otettu? Puhun ei-ASLR-tapauksesta.
peter ferrie
2013-07-27 02:52:05 UTC
view on stackexchange narkive permalink

Jos haluat todella pakottaa DLL: n latautumaan tiettyyn osoitteeseen tekemättä siihen ensin rakenteellisia muutoksia, sinun on ensin allokoitava kaikki jäljellä oleva käytettävissä oleva muisti ja tietysti varmistettava, että kohde sijainti ei ole jo käytössä. ASLR: n poistamiseksi käytöstä tietyn tiedoston kohdalla sinun on asetettava IMAGE_FILE_RELOCS_STRIPPED-lippu COFF-otsikon Ominaisuudet-kenttään. Siirtotaulukon poistaminen ei tee sitä, jos tiedosto on valinnut ASLR: n. Windows siirtää sitä edelleen, se ei vain siirrä tietoja. Tietääni, et voi sammuttaa ASLR: ää maailmanlaajuisesti.

Zach Riggle
2013-08-09 00:56:08 UTC
view on stackexchange narkive permalink

Mitä muut julisteet puhuvat, ovat yleisiä menetelmiä DLL: n lataamiseksi aina tiettyyn osoitteeseen.

Sillä mitä haluat tehdä - mikä on, että absoluuttiset osoitteet ovat aina osuva, vs module + offset - on helppo tehdä.

Jos voit ladata binaarin Windows XP -järjestelmään, se ei ole täysin tietoinen ASLR: stä.

Vaihtoehtoisesti voit poistaa ASLR: n kokonaan käytöstä, mikä varmistaa, että moduulit ladataan aina haluamaansa osoitteeseen. Tätä asetusta ohjataan HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Memory Management \ MoveImages -palvelun kautta.

Jos ensisijainen osoite ei ole käytettävissä, Windows lataa sen jonnekin muualle . Jos kohtaat tämän ongelman, suosittelen ensisijaisen perusosoitteen muokkaamista manuaalisesti. Hyvä hex-editori antaa sinun tehdä tämä.



Tämä Q & A käännettiin automaattisesti englanniksi.Alkuperäinen sisältö on saatavilla stackexchange-palvelussa, jota kiitämme cc by-sa 3.0-lisenssistä, jolla sitä jaetaan.
Loading...