.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;
}
#2 楼
您需要从IDA的装载程序列表中选择Portable executable for 80386 (PE)
,而不是确认默认值(Microsoft.NET assembly
)。评论
哦,当下哈哈,我应该慢慢读一本书,也要感谢一堆,这对我来说要容易得多,而且很有趣。
– SSpoke
15年12月24日在19:13
评论
哇,非常感谢您的同伴,非常有用的知识!,不要问您如何获得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