这是一个严重的问题,我在Google.com上的任何地方都找不到答案。 />我使用了工具
.NET Reflector 6,该工具在本机方法上崩溃或仅显示对它们的签名。无法编译的区域的x86程序集。这种方法。

我考虑过将dll文件注入到应用程序中,然后将ollydbg附加到它上,这样我就可以转储该dll文件并在IDA PRO中将其检出,但这还是行不通的。 />
默认情况下,IDA PRO 6.8甚至都不会加载混合的.NET程序,因为.NET IL代码和可反编译的本机asm都可以。尝试获取一个真实的dll文件,并将其插入中间的某个位置并粘贴二进制文件y也许通过这种方式IDA PRO会将其检测为不受管理的dll文件。

但是我问您有什么工具可以实现这一目标?

#1 楼

链接Dll的本机方法在这里,您也可以直接在ollydbg中加载dll,以找到本机方法的已解析反汇编

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

-rwxr-xr-x    1 Admin    Administ   268288 Dec 24 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

  // Embedded native code
  // Disassembly of native methods is not supported.
  //  Managed TargetRVA = 0x00005B20
} // end of global method 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         add eax, 4
|          0x00004f32    56             push esi
|          0x00004f33    33db           xor ebx, ebx
|          0x00004f35    89442418       mov dword [esp + 0x18], eax     ; [0x18:4]=64
|          0x00004f39    e83c5a0000     call 0xa97a ;0x0000a97a(unk, unk, unk, unk, unk, unk, unk) ; fcn.0000550c+21614


ollydbg将加载dll并正确反汇编
上面的radare2反汇编和下面的ollydbg反汇编,用于
嵌入式本机方法WritePointer

CPU Disasm
Address   Hex dump         Command                                  Comments
10005B20  /.  51           PUSH    ECX
10005B21  |.  53           PUSH    EBX                              ; Jump to mscoree._CorDllMain
10005B22  |.  55           PUSH    EBP
10005B23  |.  56           PUSH    ESI
10005B24  |.  8B7424 14    MOV     ESI, DWORD PTR SS:[ESP+14]
10005B28  |.  57           PUSH    EDI
10005B29  |.  8D4424 24    LEA     EAX, [ESP+24]
10005B2D  |.  6A 04        PUSH    4                                ; /Size = 4
10005B2F  |.  83C0 04      ADD     EAX, 4                           ; |
10005B32  |.  56           PUSH    ESI                              ; |Addr = 13F8B8
10005B33  |.  33DB         XOR     EBX, EBX                         ; |
10005B35  |.  894424 18    MOV     DWORD PTR SS:[ESP+18], EAX       ; |
10005B39  |.  E8 3C5A0000  CALL    <JMP.&KERNEL32.IsBadReadPtr>     ; \KERNEL32.IsBadReadPtr


您的pastebin

这是没有内部循环的函数的伪代码


function 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)
      }
      return;
}


评论


哇,非常感谢您的同伴,非常有用的知识!,不要问您如何获得0x1000 + 0x400不能等到这些工具更新以显示原始的asm代码(如果无法反编译)。再次感谢

– SSpoke
15年12月24日在19:11

这是基本的pe反向101,它是(rva-rvas节的虚拟地址+指向原始地址的指针)=物理文件偏移btw pebrowse pro只需双击.net metainfo选项卡,即可分解方法

– blabb
2015年12月24日19:25



再次感谢,我完全错失了Igor的解决方案,我通常只单击“确定”而不检查那些选项是到目前为止最简单的方法。

– SSpoke
15年12月24日在19:48

#2 楼

您需要从IDA的装载程序列表中选择Portable executable for 80386 (PE),而不是确认默认值(Microsoft.NET assembly)。


评论


哦,当下哈哈,我应该慢慢读一本书,也要感谢一堆,这对我来说要容易得多,而且很有趣。

– SSpoke
15年12月24日在19:13