Disassembling

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod noname901120 18. 9. 2016 18:37

Dobrý den, chtěl bych se zeptat, jak začít, když se chci naučit modifikovat existující program, u kterého nemám dostupný zdrojový kód, to znamená pomocí disassembleru. Chtěl bych to hlavně kvůli vytváření módů pro hry(konkrétně diablo II). Znalost assembly language je samozřejmost, ale i tak si myslím, že na toto musí existovat hodně literatury, jak se v takovém kódu zorientovat, když je to hodně tisíc řádků. Chtěl bych se to nějak naučit, ale nějak se nemůžu pohnout z místa. Děkuji za odpovědi.
noname901120
Kolemjdoucí

Odeslat příspěvekod satikcz 18. 9. 2016 19:15

Ahoj, ideální je vědět, jak takový typický program/hra uvnitř vypadá - např. že u hry je to obvykle hlavní smyčka, ve které se obvykle čte vstup, updatuje svět, vykresluje scéna - takže můžeš třeba v kódu najít tu a od té se pak odpíchnout a zkusit najít pointery na herní objekty jako postavy, itemy apod. - s tím ti může pomoct i třeba program typu cheatengine, kterým můžeš v paměti hledat proměnné podle obsahu apod., pak už jen přijde na řadu nějaký debugger - třeba ollydbg nebo IDA a přehrabování se v kódu :)

Jinak ideální je ještě zjistit, v čem je hra napsaná - jaký jazyk a kompilátor, protože např. dotnet je možné dekompilovat zpátky do téměř původního kódu, takže se nemusíš hrabat v assembleru.

Pak ještě bacha na různé ochrany, kdy mezi ty úplně nejjednodušší patří třeba volání winapi funkce IsDebuggerPresent, která pak třeba hru hned shodí, navede tě na nějaký nekonečný cyklus apod. :)
3x AOC AG271QG (2560x1440, IPS, 165Hz, GSync), MSI RTX 2080Ti Trio, Intel Core i7 8700K@5GHz+EKWB L360, ASUS Maximus X, 32GB G.SKILL TridentZ@3466 MHz, Samsung EVO 840 500 GB + Crucial BX 500 GB + Kingston UV400 1TB, Seasonic P-860 Platinum, FD Define S
satikcz
Junior
Uživatelský avatar

Odeslat příspěvekod powlcz 21. 9. 2016 09:47

Diablo II bude tutově v C nebo C++, rozhodně ne v assembleru. Navíc tě musíme upozornit, že dekompilace komerčního sw je nelegální počin. Literaturu na zorientování se v dissasemblerovaném kódu počítačové hry tipuju že opravdu nenajdeš ;)
Chronický Ujížděč na nevhodnostech
powlcz
Junior

Odeslat příspěvekod satikcz 21. 9. 2016 10:16

powlcz píše:Diablo II bude tutově v C nebo C++, rozhodně ne v assembleru.

O tom tu nikdo nepochybuje, ale C/C++ zpátky na zdrojový kód už moc nerozložíš (i když jsou nějaké utility, co umí některé jednoduché funkce přeložit zpátky, ale funguje to obvykle jen pro určitý kompilátor a třeba ještě jen určitou verzi), takže ti nic jinýho než hrabat se v asm stejně nezbyde :)

Pro orientaci v kódu je ještě dobrý koukat na volání api - např. pokud se volají funkce directdraw, jsi (nejspíš) v renderovací části, pokud je hra rozdělená do knihoven, tak podle toho, z jaké knihovny je volaná funkce apod..
3x AOC AG271QG (2560x1440, IPS, 165Hz, GSync), MSI RTX 2080Ti Trio, Intel Core i7 8700K@5GHz+EKWB L360, ASUS Maximus X, 32GB G.SKILL TridentZ@3466 MHz, Samsung EVO 840 500 GB + Crucial BX 500 GB + Kingston UV400 1TB, Seasonic P-860 Platinum, FD Define S
satikcz
Junior
Uživatelský avatar

Odeslat příspěvekod omualo 21. 9. 2016 10:50

satikcz to popsal hezky. Zacit Cheatenginem, projet si tutorial, zkusit udelat par traineru za pomoci injektaze kodu a pustit se do neceho slozitejsiho (disassembling za pomoci IDA, olly se na to moc nehodi).

Nebo to vzit od korenu, hodit si emulator ZX Spectra a zacit se ucit tam (Z80 neni tak vzdaleny x86 a hlavne se tam da v assaku orientovat - prece jen to melo jen 16/48kB RAM, z toho 8 na zobrazovani). Nekdo to oznaci za zbytecny mezikrok, ale kdyz nekdo nezna strojak vubec, tak ty zaklady si tam osvoji rychleji.

Na nauceni se obchazet ochrany proti disassembingu jsou pro zacatek dobre viry ve virtualce. Je par stranek zabyvajicich se, jak s tim pracovat v IDA i v pripade realtime packeru (nejcastejsi zpusob ochrany proti disassemblingu).

Jen musite vzit v uvahu, ze tohle studium zabere roky. Samotny assak je na dlouho (a to i ten v realnem modu) a RE zabere alespon 10x tolik.
omualo
Junior

Odeslat příspěvekod johnyfoxter 28. 1. 2017 08:49

Ak by si chcel spravit disassembling c# exe aplikacie alebo kniznice dll,tak mozes pouzit DotPeek : https://www.jetbrains.com/decompiler/
Uvidis pekne zdrojovy kod.
Kedze pri kompilacii sa nevytvara priamo strojovy kod (kod,ktoremu rozumie procesor),ale len "medzi kod"(Microsoft Intermediate Language (MSIL)). Aplikacia sa skompiluje az pri spusteni (Just-In-Time (JIT)) do nativneho kodu pre dany procesor. Tak nejak :D
johnyfoxter
Kolemjdoucí


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 2 návštevníků