Сейчас на форуме: tyns777, localhost1, vsv1, asfa (+5 невидимых)

 eXeL@B —› Вопросы новичков —› Проблема с библиотекой Net
Посл.ответ Сообщение

Ранг: 5.0 (гость)
Активность: 0.010.03
Статус: Участник

Создано: 25 февраля 2020 16:07
· Личное сообщение · #1

Приветствую

Имею в составе установщика библиотеку, которая в том числе при установке проверяет соотвествует ли OS на которую ставим одной из поддерживаемых.

Подскажите, как узнать, где она смотрит, на какую ОС мы ставим. Ну или как обойти эту проверку. В частности, имею проблему, что некоторые версии Windows 10 программа не воспринимает и отказывается на них работать.

Спасибо.

007b_25.02.2020_EXELAB.rU.tgz - VolvoIt.Installer.RequirementValidator.dll



Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 25 февраля 2020 16:18
· Личное сообщение · #2

Оно?
https://docs.microsoft.com/ru-ru/dotnet/api/system.environment.osversion?view=netframework-4.8



Ранг: 5.0 (гость)
Активность: 0.010.03
Статус: Участник

Создано: 25 февраля 2020 16:25
· Личное сообщение · #3

Похоже, но откуда он берет эти данные? Какая-то ветка реестра или еще откуда-то?



Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 25 февраля 2020 16:51
· Личное сообщение · #4

Я не совсем пойму конечную цель
Вам надо в своей дотнетовской программе ограничитель поставить, научить чужую программу работать под неродной осью или с эмулятором побороться?

Добавлено спустя 6 минут
Ну например вот так https://docs.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-getversion




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 25 февраля 2020 17:09
· Личное сообщение · #5

war

В переменных ядра находится инфа, загружается в две области юзер памяти - USD и PEB. Ключ \Registry\Machine\System\CurrentControlSet\Control\ProductOptions.

-----
vx




Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 25 февраля 2020 17:17 · Поправил: _MBK_
· Личное сообщение · #6

В смысле HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ProductOptions ?
WinNT же



Ранг: 5.0 (гость)
Активность: 0.010.03
Статус: Участник

Создано: 25 февраля 2020 17:20
· Личное сообщение · #7

Хочу чужую прогу запустить под осью под которой она не хочет запускаться



Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 25 февраля 2020 17:25
· Личное сообщение · #8

Если прога дотнетовская то не морочте себе голову и ищите дотнетовский способ определения



Ранг: 5.0 (гость)
Активность: 0.010.03
Статус: Участник

Создано: 25 февраля 2020 17:26
· Личное сообщение · #9

Самое интересное, что у меня есть две систему Win10, на одной работает, а на другой пишет Не поддерживаемая OS.



Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 25 февраля 2020 17:32 · Поправил: _MBK_
· Личное сообщение · #10

Вы моюссылку внимательно прочли?
Если программа тупо проверяет OSVersion вам сильно повезло
В противном случае вам грозит реверсировать и переписывать код с поддержкой неподдерживаемых функций а это достаточно мучительно



Ранг: 5.0 (гость)
Активность: 0.010.03
Статус: Участник

Создано: 25 февраля 2020 17:41
· Личное сообщение · #11

А можно как-то в самой библиотеке открутить эту функцию? Чем это можно сделать?



Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 25 февраля 2020 17:48
· Личное сообщение · #12

Для начала - вы нашли саму проверку? Как именно и где проверяется?



Ранг: 5.0 (гость)
Активность: 0.010.03
Статус: Участник

Создано: 25 февраля 2020 18:01
· Личное сообщение · #13

Да, нашел в рефлекторе. Только изменения не сохраняются



Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 25 февраля 2020 18:01 · Поправил: Medsft
· Личное сообщение · #14

private static void ValidateAll()
{
if (Validator._discRequired == 0.0)
{
Validator.GetDiscRequired(Validator._os);
}
Validator.AntivirusInstalledWin7();
Validator.ValidateCPU();
Validator.ValidateGPU();
Validator.ValidateDVD();
Validator.ValidateDiscSpace();
Validator.ValidateInputDevice();
Validator.ValidateNetwork();
Validator.ValidateRam();
Validator.ValidateTcpIp();
Validator.ValidateUSB();
Validator.ValidateOsLanguage();
Validator.ValidateRSA();
}

вот сколько она проверяет).Нехило

| Сообщение посчитали полезным: _MBK_

Ранг: 5.0 (гость)
Активность: 0.010.03
Статус: Участник

Создано: 25 февраля 2020 18:05
· Личное сообщение · #15

Validator.ValidateOs там есть еще



Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 25 февраля 2020 18:08
· Личное сообщение · #16

А далее примерно, облом на количество процов и т.д.
НО
В самой Dll константы не зашиты, а значит ее запуску предшествует этап настройки и заполнения констант, как уж он делается не знаю
но 100% пудово гдето там должно быть чтото по типу TTPreReqCPUNoOfProcessors.MaxValue = X (где X кол-во процов)



Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 25 февраля 2020 18:10
· Личное сообщение · #17

Ну занопьте проверку и посмотрите что будет
Хотя сомнительно что при такой валидации программа не рухнет в процессе
Или я снова не пойму сути проблемы - у вас править байткод не получается или что?



Ранг: 5.0 (гость)
Активность: 0.010.03
Статус: Участник

Создано: 25 февраля 2020 18:13
· Личное сообщение · #18

Я попытался открыть Refletor с Reflexil, но измененный код не сохраняется. Чем можно поменять?



Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 25 февраля 2020 18:14
· Личное сообщение · #19

Самый злобный вариант)) заменить тело метода
public static TestResult Execute(TTPreReq configObject, bool firstCheck)
{
.....
}
на
public static TestResult Execute(TTPreReq configObject, bool firstCheck)
{
return new TestResult(true, string.Empty, "Сделано с помощью ExeLab", string.Empty);
}
Разраб увидит 100% шок будет как ты с помощью топора обошел всю его защиту)))

Добавлено спустя 1 минуту
Порекламируюсь) ILSpector тебе в руки

| Сообщение посчитали полезным: war

Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 25 февраля 2020 18:23
· Личное сообщение · #20

Или dnSpy

| Сообщение посчитали полезным: war


Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 25 февраля 2020 20:10 · Поправил: difexacaw
· Личное сообщение · #21

war

> А можно как-то в самой библиотеке открутить эту функцию?

Есть два варианта.

1. Реверсить механизм проверки, интерналс апп в каждом случае и вносить изменения, при этом есть вероятность поломать, если есть контр суммы.
2. Не трогать апп, а изменить системные параметры в среде апп. Но для этого нужно как то загрузить и выполнить свой код в контексте апп. Может быть есчо маленькая проблема с R-only блоком памяти(USD), там тоже нужные параметры есть.

Code:
  1.     ULONG OSMajorVersion;
  2.     ULONG OSMinorVersion;
  3.     USHORT OSBuildNumber;
  4.     USHORT OSCSDVersion;
  5.     ULONG OSPlatformId;
  6.     PEBTEB_STRUCT(UNICODE_STRING) CSDVersion;


Что сделать проще это уже тебе решать.

-----
vx


| Сообщение посчитали полезным: war

Ранг: 5.0 (гость)
Активность: 0.010.03
Статус: Участник

Создано: 25 февраля 2020 20:51
· Личное сообщение · #22

Спасибо, удалось запустить


 eXeL@B —› Вопросы новичков —› Проблема с библиотекой Net
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати