Всем привет. Кто-нибудь пилил такую штуку, чтобы запарсить данные с минидампа/фуллдампа и продукт скормить иде или гидре (грубо говоря, - образ конкретного модуля из адресного пространства)? поделитесь опытом, пожалуйста
Есть наскоро зачем-то сделанный vbs-скрипт, который windbg'ом видимо че-то вытаскивает из дампа. Не помню зачем. Код (Text): sNtkdCmd = chr(34) & "C:\Program Files (x86)\Windows Kits\8.1\Debuggers\x64\ntkd" & chr(34) & " -y c:\symbols -i c:\windows\i386" set wshell = CreateObject("WScript.Shell") set fso = CreateObject("Scripting.FileSystemObject") set directory = fso.GetFolder(".").Files for each file in directory if lcase(fso.getextensionname(file.path)) = "dmp" then set oexec = wshell.exec(sNtkdCmd & " -z " & chr(34) & file.path & chr(34) & " -c " & chr(34) & "!address;q" & chr(34) & " -logo " & chr(34) & "~temp.txt" & chr(34)) do while oexec.status = 0 wscript.sleep 10 loop set oexec = nothing if fso.fileexists("~temp.txt") then last_range_address_hi = 0 set oTempFile = fso.OpenTextFile("~temp.txt",1) do until oTempFile.AtEndOfStream line = oTempFile.readline if mid(line,10,2) = "0`" then range_address_lo = cdbl("&h"&mid(line,12,8)) range_address_hi = cdbl("&h"&mid(line,30,8)) if range_address_lo < last_range_address_hi then range_address_lo = last_range_address_hi end if if ((range_address_hi - range_address_lo) < &h1000000) and (range_address_lo < range_address_hi) then do until range_address_lo >= range_address_hi current_range_size = ((range_address_lo + &hFFFFF) and not &hFFFFF) - range_address_lo if current_range_size = 0 then current_range_size = &h100000 end if if range_address_lo = &h7FF00000 then current_range_size = &hFFFFF end if wscript.stdout.write "+last_range_address_hi=" & right("00000000" & hex(last_range_address_hi),8) & " current_range_size=" & right("00000000" & hex(current_range_size),8) & " " & right("00000000" & hex(range_address_lo),8) & " " & right("00000000" & hex(range_address_hi),8) wscript.stdout.writeline " " & fso.getbasename(file.name) & "_" & right("00000000" & hex(range_address_lo),8) & "_" & right("00000000" & hex(range_address_lo+current_range_size),8) & ".bin" set oexec = wshell.exec(sNtkdCmd & " -z " & chr(34) & file.path & chr(34) & " -c " & chr(34) & ".writemem " & fso.getbasename(file.name) & "_" & right("00000000" & hex(range_address_lo),8) & "_" & right("00000000" & hex(range_address_lo+current_range_size),8) & ".bin " & right("00000000" & hex(range_address_lo),8) & " L " & right("00000000" & hex(current_range_size),8) & ";q" & chr(34)) do while oexec.status = 0 wscript.sleep 10 loop set oexec = nothing range_address_lo = range_address_lo + current_range_size loop last_range_address_hi = range_address_lo end if end if loop set oTempFile = nothing end if end if next
В смысле "обещает"? Оно уже давно там есть. И вообще. у минидампа крайне простой формат (https://learn.microsoft.com/en-us/windows/win32/debug/minidump-files), можно и самому что-то написать. Хотя о чем это я? Найти на гитхабе, конечно же
меня просто смутил момент с символами в покемоне, там где вопросы. хотя настроены верно (и в _NT_SYMBOL_PATH и в самом прокмоне). ида всё хавает, symchk - качает, а прокмон - нет, почемуто. впрочем затем выяснил что и нужные хидеры и интерфейсы есть в винките :/ может кто встречался с этой фигнёй с символами? как решали?
Гидра кстати меня не оч впечатлила. После много лет в IDA, не так давно пользовался гидрой. С точки зрения дизасма и удобства реверса - IDA лучше, на мой взгляд. Ида иногда подбешивает если попадается прога на MFC и часто вместо норм вызовов она пишет какюу нить ересть в виде Вместо норм вызова MFC на подобие MFC_GetString и тд
Думаю перед там-как самому читать из дампов инфу, нужно ознакомится с их содержимым и посмотреть, что сбрасывает в логи например тот-же WinDbg. У него-же есть для этого спец.расшинение !analyze. Он может парсить как крэш-дампы бсодов, так и сброшенные из системного "диспетчера-задач" дампы обычных прог. Нужно сказать, что инфы там предостаточно, чтобы сделать выводы: по Ctrl+D выбираем файл-дампа из папки Win\Minidump, после чего запрашиваем расширение "!analyze". Более подробно здесь: https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/using-the--analyze-extension Код (Text): Microsoft (R) Windows Debugger Version 6.12.0002.633 AMD64 Loading Dump File [C:\Windows\Minidump\101723-37830-01.dmp] Mini Kernel Dump File: Only registers and stack trace are available Loading Kernel Symbols .............................................................. ................................................................ .................................... Loading User Symbols Loading unloaded module list ................ ******************************************************************************* * Bugcheck Analysis * ******************************************************************************* Use !analyze -v to get detailed debugging information. BugCheck 3B, {c0000096, fffff88005ae5b15, fffff88005d41f20, 0} Unable to load image C:\Windows\system32\Drivers\RwDrv.sys, Win32 error 0n2 Probably caused by : RwDrv.sys ( RwDrv+2b15 ) 0: kd> !analyze -v ******************************************************************************* * Bugcheck Analysis * ******************************************************************************* SYSTEM_SERVICE_EXCEPTION (3b) An exception happened while executing a system service routine. Arguments: Arg1: 00000000c0000096, Exception code that caused the bugcheck Arg2: fffff88005ae5b15, Address of the instruction which caused the bugcheck Arg3: fffff88005d41f20, Address of the context record for the exception that caused the bugcheck Arg4: 0000000000000000, zero. Debugging Details: ------------------ ADDITIONAL_DEBUG_TEXT: Use '!findthebuild' command to search for the target build information. If the build information is available, run '!findthebuild -s ; .reload' to set symbol path and load symbols. MODULE_NAME : RwDrv FAULTING_MODULE: fffff80002c17000 nt EXCEPTION_CODE : (NTSTATUS) 0xc0000096 - { FAULTING_IP : RwDrv + 2b15 fffff880`05ae5b15 0f32 rdmsr CONTEXT: fffff88005d41f20 -- (.cxr 0xfffff88005d41f20) rax=0000000000000000 rbx=0000000000000002 rcx=00000000000001f2 rdx=0000000000000000 rsi=00000000380dcb0f rdi=000000009c5a203a rip=fffff88005ae5b15 rsp=fffff88005d42900 rbp=fffffa80034045a0 r8=fffffa8003d85380 r9=000000000000000e r10=fffff80002e069a0 r11=fffffa8003d85380 r12=0000000000000000 r13=0000000000000000 r14=fffffa80034046b8 r15=0000000000000000 iopl=0 nv up ei pl zr na po nc cs=0010 ss=0018 ds=002b es=002b fs=0053 gs=002b efl=00010246 Resetting default scope CUSTOMER_CRASH_COUNT: 1 DEFAULT_BUCKET_ID : VISTA_DRIVER_FAULT BUGCHECK_STR : 0x3B CURRENT_IRQL : 0 LAST_CTRL_TRANSFER : from 0000000000000000 to fffff88005ae5b15 STACK_TEXT: fffff880`05d42900 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : RwDrv+0x2b15 SYMBOL_STACK_INDEX: 0 SYMBOL_NAME : RwDrv + 2b15 FOLLOWUP_NAME : MachineOwner IMAGE_NAME : RwDrv.sys STACK_COMMAND : .cxr 0xfffff88005d41f20 ; kb BUCKET_ID : WRONG_SYMBOLS Структура файлов *.dmp есть здесь-же, остаётся лишь написать утилиту: https://wasm.in/blogs/description-of-dmp-format.505/
импорт по ординалам, вестимо я в таких случаях скриптом пользуюсь, бежит по БД Ида и заменяет на user-frienly имена (берутся с .def файлов MFCxxx)
слишкмо много гуана наплодила месе сколько епох MFC в мире? x32, x64, с недавних пор еще и АРМ туда прицепился + постоянно меняют/добавляют/удаляют функи - кому охота с етим дермецом гнаться
да - но мфс до сих пор часто встречаются. И чаще всего просят не снять защиту а разревестить какой нить алгос или формат данных ))) но я согласен с вами - УГ