RE FORUM

[REVERSE ENGINEERING] => Tools => Topic started by: Kockatá hlava on February 06, 2015, 01:35:21 PM

Title: open source IL (.NET) disassembler?
Post by: Kockatá hlava on February 06, 2015, 01:35:21 PM
Neznáte nějakej jednoduchej opensource disassembler pro IL napsanej v C/C++? Potřebuju něco rychle zbastlit a nějak nemůžu nic najít. Jenom tyhle, ale ty sou v C# a skoro bez dokumentace:

https://github.com/carballude/Disassembler
https://github.com/camasd/GetNet

Jeden disassembler je taky v libmono, ale ten je moc složitej.
Title: Re: open source IL (.NET) disassembler?
Post by: DARKER on February 07, 2015, 07:27:30 PM
teraz dost fici dnlib:
https://github.com/0xd4d/dnlib

a dobre skusenosti mam s Mono.Cecil:
http://www.mono-project.com/docs/tools+libraries/libraries/Mono.Cecil/
Title: Re: open source IL (.NET) disassembler?
Post by: Kockatá hlava on February 07, 2015, 11:55:25 PM
Diky za odkazy. Neco, co by bylo napsany v C/C++ sem taky nesehnal, tak sem se do toho nakonec pustil uplne od zacatku, ze to nebude tak tezky.

Ty CLR struktury sou ale silenost a cteni toho ECMA standardu je podobny. A jeste me nasrala IDA, ze neukazuje zadny hlavicky, jenom disasm. Nebo to tam nekde je? Nastesti sem nakonec zjistil, ze Cerbero Profiler dokaze ty struktury zobrazit.
Title: Re: open source IL (.NET) disassembler?
Post by: DARKER on February 08, 2015, 02:49:11 PM
no IDA je na .NET slaba ...
V tom Mono.Cecil si mozes v kode enumerovat/prechadzat vsetky struktury citat/menit flagy, charakteristiky ...
DNLIB by malo byt to iste...
urcite by som to nekodil na novo, ale vyuzil hotovy komponent ...
jedine ze by si chcel nieco specificke/jednorazove a nepotrebujes cely ten balast okolo ...
Title: Re: open source IL (.NET) disassembler?
Post by: Kockatá hlava on February 08, 2015, 04:14:17 PM
Diky za rady. Potrebuju prepsat par opkodu na svoje opkody, to znamena z pohledu IL neplatny opkody. Mam obavu, ze zabiju cas ucenim, jak to delat pres nejakou z tech knihoven a potom zjistim, ze ta knihovna kontroluje, jestli tam nezapisuju neplatny hodnoty, ktery mi odmitne :)
Title: Re: open source IL (.NET) disassembler?
Post by: Kockatá hlava on April 08, 2015, 12:12:01 PM
Snazim se zacit neco delat pomoci te dnlib. Konkretne bych potreboval prochazet pres vsechny stringy z #US streamu a nektery z nich prepsat, mam s tim ale problemy.

Nasledujici kod sice nacte vsechny stringy z #US streamu do USHeap.cachedDict, coz vypada dost jako to, co potrebuju.

Code: [Select]
ModuleDefMD module = ModuleDefMD.Load("Assembly-CSharp.dll");
dnlib.DotNet.Writer.MetaData metadata = dnlib.DotNet.Writer.MetaData.Create(module, null, null, null);
metadata.USHeap.Populate(module.USStream);

Problem je, ze k tomu cachedDict se neda nijak dostat. Neni tam zadna metoda, ktera by ty stringy dokazala prochazet.

Vedle toho je tam jeste dost podobna vec List<string> cached a metoda GetAllRawData(), ktera ten seznam dokaze pekne celej vratit. Problem je, ze nevidim "normalni" zpusob, jak ten cached seznam naplnit.

Co se divam dal, seznam tech stringu bych dokazal vytvorit sam, ale potom nerozumim tomu, jak ten dnlib Writer vlastne funguje. Problem je, ze k te dnlib neni skoro zadna dokumentace a ze zdrojaku se neda moc vycist, jak autor k tem problemum pristupuje.

Na dnlib homepage na GitHubu radi podivat se na ConfuserEx. Nikde v jeho kodu ale nevidim, ze by pristupoval k #US streamu nebo heapu...
Title: Re: open source IL (.NET) disassembler?
Post by: DARKER on April 09, 2015, 02:48:21 PM
ked som kukol do https://github.com/0xd4d/dnlib/blob/master/src/DotNet/Writer/USHeap.cs tak mi vyslo ze to bude ulozene v cachedDict (Dictionary), je tam daka metoda Populate, su tam tusim aj read, write veci... Popripade si vies pridat vlastnu fciu kedze je to opensource ...
Title: Re: open source IL (.NET) disassembler?
Post by: Kockatá hlava on April 15, 2015, 12:22:46 PM
Jak sem to pochopil, tak low-level zapisy, treba do toho #US streamu, se musi delat pres listener zachytavanim eventu z Writeru. High-level struktury jde zapisovat hned po otevreni souboru. Makacka na hlavu.
Title: Re: open source IL (.NET) disassembler?
Post by: DARKER on May 02, 2015, 01:58:30 PM
Nieco podobne, tiez vyzera dobre a pracuje aj so streamami ...
https://github.com/JerreS/AsmResolver
Title: Re: open source IL (.NET) disassembler?
Post by: Kockatá hlava on May 02, 2015, 10:22:07 PM
Diky, taky vypada zajimave. Co se divam, je tam podobnej problem jako s dnlib - skoro zadna dokumentace. Jinak pokud vim, streamy umi i dnlib, ale nepouzivam je.

Jinak ta dnlib mi zatim funguje dobre a vypada dost vymakane, jenom clovek musi pochopit, ze nektery veci jdou menit hned po nacteni souboru a nektery az v dobe zapisovani do vyslednyho souboru.

Jeste jsem chtel rozchodit ten ConfuserEx, je podstavenej nad dnlib, ale nejde mi ani buildnout. Jakoby pouzival nejakou starsi verzi dnlib, protoze se odkazuje na veci, ktery v ni nejsou.
Title: Re: open source IL (.NET) disassembler?
Post by: Z!L0G80 on May 04, 2015, 04:26:00 PM
Jeste jsem chtel rozchodit ten ConfuserEx, je podstavenej nad dnlib, ale nejde mi ani buildnout. Jakoby pouzival nejakou starsi verzi dnlib, protoze se odkazuje na veci, ktery v ni nejsou.

visual studio 2012 v pohode :)

git clone https://github.com/yck1509/ConfuserEx.git ConfuserEx
cd ConfuserEx
git submodule init
git submodule update


Title: Re: open source IL (.NET) disassembler?
Post by: Kockatá hlava on May 08, 2015, 09:23:51 AM
Diky Z!LOGu, git submodule jsem neznal, uz se to da zkompilovat :)