Otázka:
Jak načíst nativní kód ASM ze souboru DLL smíšeného režimu .NET?
SSpoke
2015-12-24 07:54:38 UTC
view on stackexchange narkive permalink

Toto je vážně jedna otázka, na kterou jsem nikde na Google.com nenašel odpověď.

Když mám na mysli smíšený režim, mám na mysli aplikaci .NET, která má společně nespravovaný a spravovaný kód.

Použil jsem tools.NET Reflector 6, který selhává na nativních metodách nebo jim zobrazuje pouze podpis. Také jsem použil dnEditor v0.76 beta, který nikdy nepadne, ale také neukazuje žádnou nativní sestavu x86 pro oblasti, které nemohl Dekompilovat se.

Dostávám takový kód

  [SuppressUnmanagedCodeSecurity] [MethodImpl (MethodImplOptions.Unmanaged | MethodImplOptions.PreserveSig)] veřejný nebezpečný statický externí bajt WritePointer (uint uint_1 , void * pVoid_1, int int_4, int int_5, __arglist);  

Přesto neexistuje způsob, jak vidět sestavu x86 pro tuto metodu.

Přemýšlel jsem o vložení této dll soubor do aplikace a poté k němu připojte ollydbg, abych mohl vypsat dll soubor a zkontrolovat jej v IDA PRO, ale také to nefunguje.

IDA PRO 6.8 se ve výchozím nastavení ani nenačte smíšeně. NET programy jako oba .NET IL Code a decompilable native asm ..

Došly mi zde možnosti, zkusím získat skutečný dll soubor a někde uprostřed ho vytáhnout a vložit tam binární soubor, možná takhle by IDA PRO detekovat jej jako nespravovaný dll soubor.

Ale žádám vás o nějaké nástroje, jak toho dosáhnout?

Dva odpovědi:
blabb
2015-12-24 18:48:05 UTC
view on stackexchange narkive permalink

Nativní metoda propojené DLL je zde, můžete také načíst dll přímo v ollydbg, abyste našli vyřešenou demontáž nativní metody

E: \ 1dll> ls -l 1.dll

  -rwxr-xr-x 1 administrátor administrace 268288 24. prosince 15:27 1.dll  

E: \ 1dll> rahash2 -a md5 1.dll

  1.dll: 0x00000000-0x000417ff md5: 82eab591d8bc6d293a2a07f10a5f6a46  

E: \ 1dll> "c: \ Program Files \ Microsoft SDKs \ Windows \ v7.0A \ bin \ ildasm.exe" / text 1.dll | grep -i global. * writepointer -B 3

  // Integrovaný nativní kód // Demontáž nativních metod není podporována. // Managed TargetRVA = 0x00005B20} // konec globální metody WritePointer  

E: \ 1dll> radare2 -qc "s 0x5b20-0x1000 + 0x400; af; pdf;" 1.dll

  / (fcn) fcn.00004f20 135 | 0x00004f20 51 push ecx | 0x00004f21 53 push ebx | 0x00004f22 55 push ebp | 0x00004f23 56 push esi | 0x00004f24 8b742414 mov esi, dword [esp + 0x14]; [0x14: 4] = 0 | 0x00004f28 57 push edi | 0x00004f29 8d442424 lea eax, [esp + 0x24]; 0x24; '$' | 0x00004f2d 6a04 push 4 | 0x00004f2f 83c004 přidat eax, 4 | 0x00004f32 56 push esi | 0x00004f33 33 dB xnebo ebx, ebx | 0x00004f35 89442418 mov dword [esp + 0x18], eax; [0x18: 4] = 64 | 0x00004f39 e83c5a0000 volání 0xa97a; 0x0000a97a (unk, unk, unk, unk, unk, unk, unk); fcn.0000550c + 21614  

Zdá se, že radare2 nenačte dll správně jako obrázek, ale zdá se, že ji načte jako surový soubor (jako v hexeditorovém zobrazení), ollydbg načte dll a správně rozebere demontáž radare2 výše a ollydbg demontáž níže pro vloženou nativní metodu WritePointer

  CPU Disasm
Adresa Hex dump Příkaz Komentáře 10005B20 /. 51 PUSH ECX10005B21 |. 53 PUSH EBX; Přejít na mscoree._CorDllMain10005B22 |. 55 PUSH EBP10005B23 |. 56 PUSH ESI10005B24 |. 8B7424 14 MOV ESI, DWORD PTR SS: [ESP + 14] 10005B28 |. 57 PUSH EDI10005B29 |. 8D4424 24 LEA EAX, [ESP + 24] 10005B2D |. 6A 04 PUSH 4; / Velikost = 410005B2F |. 83C0 04 PŘIDAT EAX, 4; | 10005B32 |. 56 PUSH ESI; | Addr = 13F8B810005B33 |. 33DB XOR EBX, EBX; | 10005B35 |. 894424 18 MOV DWORD PTR SS: [ESP + 18], EAX; | 10005B39 |. E8 3C5A0000 VOLAT <JMP.&KERNEL32.IsBadReadPtr>; \ KERNEL32.IsBadReadPtr  

týkající se vašeho pastebin

zde je pseudokód pro funkci bez vnitřní smyčky

radare2 -c " s 0x5cb0-0x1000 + 0x400; af; pdc; " 1.dll

  funkce fcn.000050b0 () {loc_0x50b0: push ecx push ebx push ebp push esi esi = dword [esp + 0x14] push edi eax = [esp + 0x1c ] push 4 eax + = 4 push esi ebx = 0 dword [esp + 0x18] = eax 0xa97a () if (eax == eax notZero 0x5106) {loc_0x5106: eax = dword [ebx] pop edi pop esi pop ebp dword [esp + 4] = 0 pop ebx pop ecx loc_0x50d2: ebp = dword [esp + 0x1c] esi = dword [esi] edi = 0 if (ebp == ebp isLessOrEqual 0x5106)} návrat;}  
Páni, díky moc, kámo, velmi užitečné znalosti !, nebudu se ptát, jak získáte 0x1000 + 0x400 se nemůže dočkat, až se tyto nástroje aktualizují a zobrazí surový asm kód, pokud jej nelze dekompilovat. Ještě jednou děkuji
to je základní pe reverzní 101 to je (rva - virtuální adresa sekce rvas + ukazatel na surovou adresu) = fyzický offset souboru btw pebrowse pro může metody rozebrat jednoduše dvojitým kliknutím na záložku .net metainfo
ještě jednou děkuji, úplně jsem se podíval na Igorovo řešení, lol, obvykle prostě kliknu na Ok, aniž bych zkontroloval ty možnosti, což je zdaleka nejjednodušší způsob, jak to udělat.
Igor Skochinsky
2015-12-24 20:43:55 UTC
view on stackexchange narkive permalink

Ze seznamu zavaděčů v IDA musíte vybrat přenosný spustitelný soubor pro 80386 (PE) namísto potvrzení výchozího nastavení ( sestavení Microsoft.NET ). IDA loader screen

Oh dang haha ​​pomalý okamžik by měl číst více, díky partě také, je to pro mě mnohem jednodušší a udělal trik.


Tyto otázky a odpovědi byly automaticky přeloženy z anglického jazyka.Původní obsah je k dispozici na webu stackexchange, za který děkujeme za licenci cc by-sa 3.0, pod kterou je distribuován.
Loading...