VB Decompiler


Восстановление исходного кода является очень серьезной проблемой для многих разработчиков и аналитиков антивирусных и исследовательских компаний. Поскольку большинство приложений Visual Basic 5.0/6.0 были разработаны давно, их исходный код (файлы .vbp, .frm и .bas) чаще всего уже не найти из-за миграции на новые рабочие станции, замены жестких дисков и т.д. По опыту большинства наших клиентов, можем сказать, что восстановление даже не всей программы, а лишь необходимых ее алгоритмов — уже является решением поставленных задач. Особенно, когда речь идет об анализе подозрительного ПО на ту или иную активность. Продукт VB Decompiler создан как раз для того, чтобы извлечь из бинарного машинного кода максимум информации.
В современном мире, в компаниях, давно существующих на рынке, весьма серьезно стоит вопрос поддержки старых (так называемых legacy) решений на Visual Basic 6.0. Речь про ситуации, когда продукт для решения экономических, бухгалтерских или инженерных задач разрабатывался 15-20 лет назад и требует адаптации под новые реалии. А чаще его требуется полностью переписать, используя новую среду разработки, при этом сохранив часть старого функционала и обеспечения совместимости с устаревшими данными или протоколом обмена. И тут встает вопрос восстановления кода обработки данных, инженерных алгоритмов, протоколов передачи и т.д. К исходному коду обычно доступа уже нет: разрабатывал код подрядчик, который уже 10 лет как не работает или программист давно уволился и исходный код не сохранился. В этом случае декомпиляция является единственным верным решением.
Есть и другая сфера использования Visual Basic 6.0 сегодня. Авторы вредоносных программ (вирусов, троянов и прочей malware) нередко используют Visual Basic сегодня. VB6 один из немногих языков, создающий файлы маленького размера, не требующих огромных внешних библиотек. Более того, созданные в Visual Basic 6.0 файлы способны запускаться на всем спектре операционных систем Windows: от Windows 95 до Windows 11 практически без доработок. И все бы ничего, но бинарный код таких программ не так прост, как у программ, разработанных в средах C++ и C#, да даже Delphi. Программы, собранные в Visual Basic создают серьезную сложность для аналитиков антивирусных компаний. И причина кроется в двух типах компиляции кода, каждая из которых требует индивидуального подхода и годы времени на анализ. Сегодня VB Decompiler является единственным продуктом на рынке декомпиляторов, поддерживающим оба типа Visual Basic 5.0/6.0 файлов: виртуальной машины P-Code (с более 1000 различных команд внутренней библиотеки) и Native Code — собранным в машинный ассемблерный код программ, но с внешней проприетарной библиотекой MSVBVM60.DLL, имеющей более 700 собственных недокументированных API функций.
На поддержку декомпиляции псевдокода P-Code и машинного Native Code ушло более 20 лет. И даже несмотря на максимально возможную совместимость — еще есть куда стремиться и что улучшать. На текущий момент VB Decompiler способен восстанавливать код из P-Code настолько близко к исходному, насколько это возможно (порядка 85% кода может быть восстановлено). В большинстве случаев, после некоторых доработок вполне реально получить действительно рабочий код из P-Code. В случае программы, скомпилированной в Native Code, вероятность успешной декомпиляции будет ниже, но вы все равно сможете восстановить до 70 процентов оригинального исходного кода. VB Decompiler содержит несколько серьезных встроенных инструментов: дизассемблер x86/x64, эмулятор ассемблерных команд и механизм трассировки. Благодаря им, результат декомпиляции бинарного кода будет очень близок к коду Visual Basic. Из-за разнообразия современных методов оптимизации и защиты кода результат не всегда будет идеальным. Но в ситуации отсутствия оригинального кода анализируемого файла декомпилятор VB действительно может помочь вам в анализе программного обеспечения и обратном проектировании.
Если вы разрабатываете свое программное обеспечение в Visual Studio .NET (Visual Studio 2022 или более ранней версии) с использованием .NET Framework или .NET Core — это также не проблема для VB Decompiler! Декомпилятор легко восстанавливает структуру кода из ассемблерных таблиц и будет полезен для дизассемблирования и анализа IL-кода Visual Basic .NET, C# или других языков из .NET.
Декомпилятор VB не требует установки .NET Framework , так как код этой библиотеки никак не используется при декомпиляции. Декомпилятор отлично работает в любой современной 32х или 64-битной системе Windows, не требуя установки какого-либо дополнительного программного обеспечения, а также в любой 32х или 64-битной системе Linux включая Astra Linux и Alt Linux (требуется установка и настройка Wine).
Как видите, VB Decompiler — идеальный инструмент для анализа и восстановления исходного кода. Это наиболее эффективный инструмент для разработчиков на Visual Basic, а также аналитиков, которые ценят свое время и деньги.
Как получить полный стек вызова функций в Visual Studio
Как получить полный стек вызовов для приложения C++, разработанного с помощью Visual Studio? Я хотел бы иметь полный стек вызовов проекта, который использует fopen(), включая код в системных библиотеках (ntdll.dll, kernel32.dll и т.д). Насколько я понимаю подобный функционал доступен в IDAPro и WinDBG (https://www.youtube.com/watch?v=1HZCg1gVPpw , https://www.youtube.com/watch?v=8oaEAPC84gc). Но вопрос в том, можно ли сделать похожее в Visual Studio?
Отслеживать
задан 23 мая в 16:55
79 1 1 серебряный знак 10 10 бронзовых знаков
¿Ну а что помешало вам сделать это в Visual Studio?
23 мая в 17:12
@user7860670, а как это сделать в VS?
23 мая в 17:29
Запускаете обычную отладку (Local Windows Debugger) и смотрите стек вызовов.
23 мая в 17:35
@user7860670 Обязательно ли при получении стека нужно указывать исходники, или как-то можно обойтись только pdb файлами? imgur.com/a/7PzHPYr
23 мая в 17:50
Там же написано — Можно посмотреть дизассемблированный код.
Программа вылетает в дизассемблированный код
Подскажите способы диагностики. Начинает открываться окно (WPF), срабатывает конструктор, срабатывает OnLoad , начинают срабатывать CanExecute команд, начинают отрабатывать конвертеры. Короче все идет к открытию окна. Но потом неожиданно все падает, открывается вкладка с дизассемблированным кодом и вот это исключение
Дополнительные сведения: Нельзя задать Visibility или вызвать Show, ShowDialog или WindowInteropHelper.EnsureHandle после закрытия окна.
Проблема в том, что это не на какой то конкретной строке возникает, то есть я не могу отладить это. Вылетает рандомно. Иногда я даже успеваю увидеть форму, но чаще всего нет. OnClosing не выполняется UPD: Стек при падении
PresentationFramework.dll!System.Windows.Window.VerifyCanShow() PresentationFramework.dll!System.Windows.Window.ShowDialog() DevExpress.Xpf.Core.v15.2.dll!DevExpress.Xpf.Core.FloatingWindowContainer.TryAsyncShowModal.AnonymousMethod__0() WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate callback, object args, int numArgs) WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.TryCatchWhen(object source, System.Delegate callback, object args, int numArgs, System.Delegate catchHandler) WindowsBase.dll!System.Windows.Threading.Dispatcher.WrappedInvoke(System.Delegate callback, object args, int numArgs, System.Delegate catchHandler) WindowsBase.dll!System.Windows.Threading.DispatcherOperation.InvokeImpl() mscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx) mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx) mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state) WindowsBase.dll!MS.Internal.CulturePreservingExecutionContext.Run(MS.Internal.CulturePreservingExecutionContext executionContext, System.Threading.ContextCallback callback, object state) WindowsBase.dll!System.Windows.Threading.DispatcherOperation.Invoke() WindowsBase.dll!System.Windows.Threading.Dispatcher.ProcessQueue() WindowsBase.dll!System.Windows.Threading.Dispatcher.WndProcHook(System.IntPtr hwnd, int msg, System.IntPtr wParam, System.IntPtr lParam, ref bool handled) WindowsBase.dll!MS.Win32.HwndWrapper.WndProc(System.IntPtr hwnd, int msg, System.IntPtr wParam, System.IntPtr lParam, ref bool handled) WindowsBase.dll!MS.Win32.HwndSubclass.DispatcherCallbackOperation(object o) WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate callback, object args, int numArgs) WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.TryCatchWhen(object source, System.Delegate callback, object args, int numArgs, System.Delegate catchHandler) WindowsBase.dll!System.Windows.Threading.Dispatcher.WrappedInvoke(System.Delegate callback, object args, int numArgs, System.Delegate catchHandler) WindowsBase.dll!System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority priority, System.TimeSpan timeout, System.Delegate method, object args, int numArgs) WindowsBase.dll!System.Windows.Threading.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority priority, System.Delegate method, object arg) WindowsBase.dll!MS.Win32.HwndSubclass.SubclassWndProc(System.IntPtr hwnd, int msg, System.IntPtr wParam, System.IntPtr lParam) [Переход от машинного кода к управляемому] [Переход от управляемого кода к машинному] WindowsBase.dll!System.Windows.Threading.Dispatcher.TranslateAndDispatchMessage(ref System.Windows.Interop.MSG msg) WindowsBase.dll!System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame frame) PresentationFramework.dll!System.Windows.Application.RunDispatcher(object ignore) PresentationFramework.dll!System.Windows.Application.RunInternal(System.Windows.Window window) ClientOperator223.exe!ClientOperator223.App.Main() [Переход от машинного кода к управляемому] [Переход от управляемого кода к машинному] Microsoft.VisualStudio.HostingProcess.Utilities.dll!Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() mscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx) mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx) mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state) mscorlib.dll!System.Threading.ThreadHelper.ThreadStart()
Как просмотреть значения регистров и дизассемблированный код на C?

Как включить в Visual Studio 2019 показ дизассемблированного кода и значения регистров?(Как на скрине)

В VS я не вижу ничего похожего,на то,чтобы включился показ регистров/дизассемблированного кода
- Вопрос задан более двух лет назад
- 576 просмотров