Author Topic: open source IL (.NET) disassembler?  (Read 870 times)

Kockatá hlava

  • Junior Member
  • ***
  • Posts: 134
  • n00b
    • x86asm.net
open source IL (.NET) disassembler?
« 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.

DARKER

  • [SCF]
  • Administrator
  • Senior Member
  • *****
  • Posts: 336
Re: open source IL (.NET) disassembler?
« Reply #1 on: February 07, 2015, 07:27:30 PM »

Kockatá hlava

  • Junior Member
  • ***
  • Posts: 134
  • n00b
    • x86asm.net
Re: open source IL (.NET) disassembler?
« Reply #2 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.

DARKER

  • [SCF]
  • Administrator
  • Senior Member
  • *****
  • Posts: 336
Re: open source IL (.NET) disassembler?
« Reply #3 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 ...

Kockatá hlava

  • Junior Member
  • ***
  • Posts: 134
  • n00b
    • x86asm.net
Re: open source IL (.NET) disassembler?
« Reply #4 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 :)

Kockatá hlava

  • Junior Member
  • ***
  • Posts: 134
  • n00b
    • x86asm.net
Re: open source IL (.NET) disassembler?
« Reply #5 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...

DARKER

  • [SCF]
  • Administrator
  • Senior Member
  • *****
  • Posts: 336
Re: open source IL (.NET) disassembler?
« Reply #6 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 ...

Kockatá hlava

  • Junior Member
  • ***
  • Posts: 134
  • n00b
    • x86asm.net
Re: open source IL (.NET) disassembler?
« Reply #7 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.

DARKER

  • [SCF]
  • Administrator
  • Senior Member
  • *****
  • Posts: 336
Re: open source IL (.NET) disassembler?
« Reply #8 on: May 02, 2015, 01:58:30 PM »
Nieco podobne, tiez vyzera dobre a pracuje aj so streamami ...
https://github.com/JerreS/AsmResolver

Kockatá hlava

  • Junior Member
  • ***
  • Posts: 134
  • n00b
    • x86asm.net
Re: open source IL (.NET) disassembler?
« Reply #9 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.

Z!L0G80

  • -=[t4C]=-
  • Senior Member
  • ****
  • Posts: 280
Re: open source IL (.NET) disassembler?
« Reply #10 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


-= SmrT SiGNaTuRaM !!! =-

Kockatá hlava

  • Junior Member
  • ***
  • Posts: 134
  • n00b
    • x86asm.net
Re: open source IL (.NET) disassembler?
« Reply #11 on: May 08, 2015, 09:23:51 AM »
Diky Z!LOGu, git submodule jsem neznal, uz se to da zkompilovat :)