Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: .exe tiedoston purku

Sivun loppuun

hobiti [02.11.2004 20:03:59]

#

millä saan purettua .exe tiedoston muokattavaan muotoon?

hunajavohveli [02.11.2004 20:24:03]

#

No eikös jokaista tiedostoa voi muokata? Vai tarkoitatko, että exe pitäisi purkaa takaisin lähdekoodiksi?

hobiti [02.11.2004 20:31:29]

#

niin just, että saisi sen purettua ja muokattua sitä koodia

hunajavohveli [02.11.2004 20:34:16]

#

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.

hobiti [02.11.2004 20:36:34]

#

mistä moinen ohjelma ja onko kovinkin hankalaa

hunajavohveli [02.11.2004 20:39:38]

#

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.

hobiti [02.11.2004 20:48:21]

#

Enpä noita kovin hyvin hallitse. tuo VB on enemmänkin tuttu kuin monet muut
eli onko tuo lisäohjelmana VB:lle?

petterik [02.11.2004 20:51:08]

#

Hackman Hex Editor v8.0 sisältää disasemblerin.
http://www.freewareweb.com/cgi-bin/archive.cgi?ID=185
En tiedä toimiiko. Kokeile.

hobiti [02.11.2004 21:14:43]

#

Kyllähän tuo toimii ja purkaa sen jollekkin koodille. Numerosarjoja allekkain.. mitenhän kääntäisi sitä "luettavampaan" muotoon

petterik [02.11.2004 21:22:38]

#

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/

hobiti [02.11.2004 22:30:05]

#

Kiitoksia, purku onnistui, mutta mikäköhän ohjelma mahtaa tehdä työn myös toisin päin?

Meitsi [02.11.2004 22:41:19]

#

AI exeksi? No vaikka masm, jos asmia aiot kääntää. En vaan ite ole kyseistä ohjelmaa koklannut kun en asmia koodaa...

Muok: typo

petterik [02.11.2004 22:47:57]

#

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)

Blaze [02.11.2004 22:59:18]

#

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.

petterik [02.11.2004 23:09:13]

#

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.

Niko [02.11.2004 23:37:31]

#

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 :)

whiteFN [03.11.2004 10:26:54]

#

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.

petterik [03.11.2004 11:12:36]

#

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)

thefox [03.11.2004 11:14:33]

#

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 :-)

Metabolix [03.11.2004 11:22:09]

#

En jostakin syystä usko, että Delphillä tehtyjä ohjelmia saisi decompiloitua muuten kuin assemblyksi, jos en itse näe.

whiteFN [03.11.2004 11:29:46]

#

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..

hobiti [03.11.2004 13:26:20]

#

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ä..

Niko [03.11.2004 13:51:03]

#

VB6s ohjelmien tekstien/värein/formien muokkaamiseen on ohjelma...

olkoon google kansassasi :) (VBReformer)

hobiti [03.11.2004 14:07:50]

#

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

makeuu [03.11.2004 14:26:30]

#

Ihan säälittävää alkaa joidenkin ohjelmien lähdekoodeja ottamaan selville. Sairasta hommaa ja sitäpaitsi laitonta.

hobiti [03.11.2004 15:19:24]

#

Jokaisella olkoon omat mielipiteensä ja huvinsa.. Ja eiköhän tuo laittomuus riipu siitä mihin ja miten tuota tuotostaan käytttää..

msdos464 [03.11.2004 16:00:39]

#

Oppimistarkoituksiin, kuten yleensä :)

mamaze [03.11.2004 16:53:02]

#

ja mitäs ihmeen hyötyä tollasesta on kun kyllä luulisi jo tuon tason ohjelmoijien osaavan tehdä vaikka Morrowindin.

Bill Keltanen [07.11.2004 08:53:48]

#

Pääseehän sitä aina ronkkimaan Microsoft Visual C++:lla. Formeja ja binääriä


Sivun alkuun

Vastaus

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

Tietoa sivustosta