millä saan purettua .exe tiedoston muokattavaan muotoon?
No eikös jokaista tiedostoa voi muokata? Vai tarkoitatko, että exe pitäisi purkaa takaisin lähdekoodiksi?
niin just, että saisi sen purettua ja muokattua sitä koodia
No sehän riippuu ihan siitä, millä se on käännetty exeksi. Tietääkseni tuollaisia ei kovin paljon ole. Mutta ainakin joitain disassemblereita on olemassa. Niillä takaisin symboliseksi konekieleksi kääntäminen onnistuu kai aika hyvin. Mutta on siis ihan turha kuvitella, että tuollainen onnistuisi tuosta vain. Muutenhan kaikkien ohjelmien lähdekoodit saisi selville kuka tahansa.
mistä moinen ohjelma ja onko kovinkin hankalaa
Osaatko sitten hyvinkin assemblyä? Jos et, niin sitten disassemblereista ei paljon hyötyä ole. VB3:lle on muistaakseni myös ihan toimiva takaisin koodiksi kääntävä ohjelma, mutta enpä kyllä tiedä, mistä sellaisen saisi.
Enpä noita kovin hyvin hallitse. tuo VB on enemmänkin tuttu kuin monet muut
eli onko tuo lisäohjelmana VB:lle?
Hackman Hex Editor v8.0 sisältää disasemblerin.
http://www.freewareweb.com/cgi-bin/archive.cgi?ID=185
En tiedä toimiiko. Kokeile.
Kyllähän tuo toimii ja purkaa sen jollekkin koodille. Numerosarjoja allekkain.. mitenhän kääntäisi sitä "luettavampaan" muotoon
Jaahas. Mainos lupasi liikoja. Siinähän selvästi luvattiin, että sisältää disassemblerin, mutta se onkin sitten erillinen tuote.
Mutta tän nyt testasin ainakin ja toimi:
http://www.geocities.com/~sangcho/disasm.html
Toimii penaII prosessoreille tai sen tapaisille tai jotain..ei suostunut ensin disassemblaaraan yhtä dossin exeä, mutta toisesta tuli hieno listaus "disassem ohjelma.exe > koe.txt" käskyllä koe.txt tiedostoon (listas kyllä ms-dos promptiin kauheaa sotkua: >#.0F<.>#.0F<.>#.0F<.>#.0F<.>#.0F<.>#.0F<.>#.0F<.>#.0
mutta älä pelästy siitä...). Huomaa ohjaus merkki >
...en tainnut ladata uusinta versiota. Ja jos ei toikaan ntoimi, niin tuolla on lisää: http://www.freebyte.com/programming/assembler/
Kiitoksia, purku onnistui, mutta mikäköhän ohjelma mahtaa tehdä työn myös toisin päin?
AI exeksi? No vaikka masm, jos asmia aiot kääntää. En vaan ite ole kyseistä ohjelmaa koklannut kun en asmia koodaa...
Muok: typo
Niin joo, kun se teki txt tiedoston...kyllä se koodi on varmaan jollekin assemblerille kelpaavaa. Tai siinähän oli muistaakseni hexa listaus vieressä. Jos tosiaan tiedät mitä teet voit käyttää sitä Hackman Hex Editoria sen muokkaamiseen. Siellä oli Help/Reference/Hex To Assemmbly menussa hex koodia vastaava konekielinen käsky. Mutta kokeile kääntää jollain assemblerillä STOP(disassem readme.txt sanoo):
at this moment only redirection works.
Eli jatka jonkun toisen etsimistä tuolta http://www.freebyte.com/programming/assembler/ (jos et vielä luovuta ja vielä kiinnostaa)
hobiti kirjoitti:
millä saan purettua .exe tiedoston muokattavaan muotoon?
Lyhyt vastaus: et mitenkään.
Pitkä vastaus: saat sinä sen symboliseksi konekieleksi (assembly), mutta ellet ole paatunut assembly-guru, siitä ei oo sulle mitään hyötyä.
Esimerkiksi seuraavanlaisesta C-koodista käännetyn binäärin
#include int main() { printf("Hello World!\n"); return 0; }
saat disassemblerilla allaolevan kaltaiseen muotoon:
HELLO.EXE ↓FR PE 00000000 a32 -------- 12260 ║ Hiew DEMO (c)SEN 00000000: 4D dec ebp 00000001: 5A pop edx 00000002: 90 nop 00000003: 0003 add [ebx],al 00000005: 0000 add [eax],al 00000007: 000400 add [eax][eax],al 0000000A: 0000 add [eax],al 0000000C: FFFF ??? edi 0000000E: 0000 add [eax],al 00000010: B800000000 mov eax,000000000 ;" " 00000015: 0000 add [eax],al 00000017: 004000 add [eax][00000],al 0000001A: 0000 add [eax],al 0000001C: 0000 add [eax],al 0000001E: 0000 add [eax],al 00000020: 0000 add [eax],al 00000022: 0000 add [eax],al 00000024: 0000 add [eax],al 00000026: 0000 add [eax],al 00000028: 0000 add [eax],al 0000002A: 0000 add [eax],al 0000002C: 0000 add [eax],al 0000002E: 0000 add [eax],al
Joillekin tulkattaville kielille (jo mainittu VB3, käsittääkseni myös Java) on olemassa decompiler, jolla saa sitten sitä ihan oikeaa VB- tai Java-koodia, mutta siinäkin on turha odottaa mitään selkokielisiä muuttujannimiä tai kommentteja.
Blaze kirjoitti:
hobiti kirjoitti:
millä saan purettua .exe tiedoston muokattavaan muotoon?
Lyhyt vastaus: et mitenkään.
Eihän hobiti kysynytkään kuinka hän saa exen takaisin lähdekoodiksi, vaan kuinka hän pääse muokkaamaan exeä. Ja kyllähän exeä eli ajettavaa koodia ja siitä tehtyä konekieli listausta pääsee muokkaamaan.
Tuo Hackman teki ihan selkeää konekieltä, mutta harmi että se ei kelpaa millekään assemblerille.
Disassembly of File: untitled1.exe Code Offset = 00000400, Code Size = 00004800 Data Offset = 00004C00, Data Size = 00000E00 Number of Objects = 0005 (dec), Imagebase = 00400000h Object01: .text RVA: 00001000 Offset: 00000400 Size: 00004800 Flags: 60000020 Object02: .data RVA: 00006000 Offset: 00004C00 Size: 00000E00 Flags: C0000040 Object03: .bss RVA: 00007000 Offset: 00000000 Size: 00000000 Flags: C0000080 Object04: .idata RVA: 00049000 Offset: 00005A00 Size: 00000600 Flags: C0000040 Object05: .reloc RVA: 0004A000 Offset: 00006000 Size: 00000600 Flags: 52000040 +++++++++++++++++++ RESOURCE INFORMATION +++++++++++++++++++ There are no Resources in This Application. +++++++++++++++++++ IMPORTED FUNCTIONS +++++++++++++++++++ Number of Imported Modules = 5 (decimal) Import Module 001: kernel32.dll Import Module 002: kernel32.dll Import Module 003: user32.dll Import Module 004: kernel32.dll Import Module 005: user32.dll +++++++++++++++++++ IMPORT MODULE DETAILS +++++++++++++++++ Import Module 001: kernel32.dll Addr:000491E0 hint(0000) Name: FreeLibrary Addr:000491F0 hint(0000) Name: GetVersionExA Addr:00049200 hint(0000) Name: LoadLibraryA Addr:00049210 hint(0000) Name: GetProcAddress Import Module 002: kernel32.dll Addr:000491E0 hint(0000) Name: FreeLibrary Addr:000491F0 hint(0000) Name: GetVersionExA Addr:00049200 hint(0000) Name: LoadLibraryA Addr:00049210 hint(0000) Name: GetProcAddress Import Module 003: user32.dll Addr:00049344 hint(0000) Name: MessageBoxA Import Module 004: kernel32.dll Addr:000491E0 hint(0000) Name: FreeLibrary Addr:000491F0 hint(0000) Name: GetVersionExA Addr:00049200 hint(0000) Name: LoadLibraryA Addr:00049210 hint(0000) Name: GetProcAddress Import Module 005: user32.dll Addr:00049344 hint(0000) Name: MessageBoxA +++++++++++++++++++ EXPORTED FUNCTIONS +++++++++++++++++++ Number of Exported Functions = 0 (decimal) +++++++++++++++++++ ASSEMBLY CODE LISTING +++++++++++++++++++ //********************** Start of Code in Object CODE ************** Program Entry Point = 00401000 (untitled1.exe File Offset:00000400) //******************** Program Entry Point ******** :00401000 C605E079400001 mov byte[004079E0], 01 :00401007 E85C1B0000 call 00402B68 :0040100C C605E079400000 mov byte[004079E0], 00 :00401013 E8501B0000 call 00402B68 ========= :00401018 55 push ebp :00401019 89E5 mov ebp, esp :0040101B 81EC04010000 sub esp, 00000104 :00401021 C605E079400001 mov byte[004079E0], 01 :00401028 E88B1B0000 call 00402BB8 :0040102D E8D6070000 call 00401808
jne...
Kyllähän 'tosi guru' koodaa vaikka hexa editorilla.
Flashille, .net kielille, javalla, vb 6, delphi mm. löytyy...
tosin kaikista ei saa täydellistä koodia :>>
ja noi ohjelmat on muuten laittomia ellet käytä omaan ohjelmaan :)
Disassembler (Win32Dasm/HIEW) purkaa ohjelman assemblerkäskyiksi. Tällä ohjelmalla siis näkee kohdeohjelman lähdekoodin.
Tämän jälkeen avataan sama ohjelma heksaeditorilla (HIEW) ja muutetaan haluttu kohta toiseksi.
Esimerkki:
Ohjelma tarkistaa onko CD asemassa. Jos ei löydy, hypätään aliohjelmaan joka antaa virheilmoituksen ja sulkee ohjelman.
Tämä voidaan kiertää ohittamalla CD-tarkistus tai kääntämällä aliohjelmahypyn ehto päinvastoin (jne->je).
Ja ne ohjelmat ei ole laittomia, käytit mihin vaan.
whiteFN kirjoitti:
Tällä ohjelmalla siis näkee kohdeohjelman lähdekoodin.
,,,...,,, pilkunviilausta: ohjelman lähdekoodihan on voinnut olla vaikka C++. Eli ei näe lähdekoodia, vaan symbolisen konekielilistauksen (mikä on saattanut olla myös "lähdekoodi" jos tehty konekieltä koodaamalla)
En ole ihan perillä Suomen laista mutta ainakin useimpien softien lisensseissä kielletään binäärin disassembloiminen, dekompilaaminen, muokkaaminen yms.
Esim Win32Dasm antaa disassemblyn jota ei ole tarkoitettukaan assembloitavaksi. Muutenkin tulee ongelmia koska se ei osaa erotella esim. dataa ja koodia. Melkeinpä ainoa disassembleri jota kannattaisi kokeilla, on IDA. Se antaa assemblereilla kelpaavan ulosteen, mutta ei sekään tietenkään ihmeisiin pysty.
Tiivistettynä: pystymetsästä ja pelkällä VB-osaamisella tuota muokkailua on vaikea lähteä harrastelemaan. Osaamattomatkin voivat tosin pitää hauskaa esim. Resource Hackerilla :-)
En jostakin syystä usko, että Delphillä tehtyjä ohjelmia saisi decompiloitua muuten kuin assemblyksi, jos en itse näe.
Lähinnä hain takaa tätä bittien vääntämistä sillä heksaeditorilla.. mitä sitä enää assemblerin kautta ajamaan kun voi muokata suoraan? Tämä tietenkin vaatii joko tuuria taikka taitoa, joskus jopa molempia..
Kyllähän tuo aika utopistiselta näyttää.. En ole tosiaan käyttänyt kuin notepadia ja VB 6:ta. Että saa nähdä saankö mitään aikaiseksi. Pitäisi saada värejä muutettua ja tekstit tehtyä suomeksi, sekä jotain kohtia poistettua, tekstiä näytöstä lähinnä..
VB6s ohjelmien tekstien/värein/formien muokkaamiseen on ohjelma...
olkoon google kansassasi :) (VBReformer)
Mutta ongelma vain on että tuo koodi ei suoraa ole VB:llä tehtyä, eli ensin joudun purkamaan .exe tiedoston ja en tiedä saanko sitä sellaiseksi millään, että sitä voi muokata tuolla VB:llä.. Todennäköisesti en
Ihan säälittävää alkaa joidenkin ohjelmien lähdekoodeja ottamaan selville. Sairasta hommaa ja sitäpaitsi laitonta.
Jokaisella olkoon omat mielipiteensä ja huvinsa.. Ja eiköhän tuo laittomuus riipu siitä mihin ja miten tuota tuotostaan käytttää..
Oppimistarkoituksiin, kuten yleensä :)
ja mitäs ihmeen hyötyä tollasesta on kun kyllä luulisi jo tuon tason ohjelmoijien osaavan tehdä vaikka Morrowindin.
Pääseehän sitä aina ronkkimaan Microsoft Visual C++:lla. Formeja ja binääriä
Aihe on jo aika vanha, joten et voi enää vastata siihen.