Впервые использую библиотеку JNA и, вероятно, делаю что-то не так.
Моя цель — проверить подпись Authenticode исполняемого файла, вызвав функцию WinVerifyTrust (из библиотеки Windows WinTrust) в моем Java-коде. >
Мое решение, представленное ниже, компилируется и запускается, но возвращает -2146762749 в результате вызова функции WinVerifyTrust. Я запускаю тест подписанного exe-файла и ожидаю, что результат будет 0.
Я определил интерфейс библиотеки WinTrust и использовал его. См. фрагменты кода ниже
Что я делаю неправильно или как устранить эту проблему? Любая помощь приветствуется.
public interface WinTrust extends StdCallLibrary {
WinTrust INSTANCE = Native.load("Wintrust", WinTrust.class, W32APIOptions.DEFAULT_OPTIONS);
GUID WINTRUST_ACTION_GENERIC_VERIFY_V2 = new GUID("{00AAC56B-CD44-11d0-8CC2-00C04FC295EE}");
int WTD_UI_NONE = 2;
int WTD_REVOKE_NONE = 0;
int WTD_CHOICE_FILE = 1;
int WTD_STATEACTION_VERIFY = 1;
int WTD_STATEACTION_CLOSE = 2;
int WTD_DISABLE_MD2_MD4 = 8192;
int WTD_REVOCATION_CHECK_END_CERT = 32;
int WTD_NO_IE4_CHAIN_FLAG = 2;
int WTD_UICONTEXT_EXECUTE = 0;
@Structure.FieldOrder({"cbStruct", "pcwszFilePath", "hFile", "pgKnownSubject"})
class WINTRUST_FILE_INFO extends Structure {
public int cbStruct = this.size();
public Pointer pcwszFilePath;
public IntByReference hFile = new IntByReference();
public Pointer pgKnownSubject = null;
@Override
protected List getFieldOrder() {
return Arrays.asList("cbStruct", "pcwszFilePath", "hFile", "pgKnownSubject");
}
}
@Structure.FieldOrder({"cbStruct", "pPolicyCallbackData", "pSIPClientData", "dwUIChoice", "fdwRevocationChecks", "dwUnionChoice", "pFile", "dwStateAction", "hWVTStateData", "pwszURLReference", "dwProvFlags", "dwUIContext", "pSignatureSettings"})
class WINTRUST_DATA extends Structure {
public int cbStruct = this.size();
public Pointer pPolicyCallbackData = null;
public Pointer pSIPClientData = null;
public int dwUIChoice = WTD_UI_NONE;
public int fdwRevocationChecks = WTD_REVOKE_NONE;
public int dwUnionChoice = WTD_CHOICE_FILE;
public Pointer pFile = null;
public int dwStateAction = WTD_STATEACTION_VERIFY;
public Pointer hWVTStateData = null;
public String pwszURLReference = null;
public int dwProvFlags = WTD_DISABLE_MD2_MD4 | WTD_NO_IE4_CHAIN_FLAG | WTD_REVOCATION_CHECK_END_CERT;
public int dwUIContext = WTD_UICONTEXT_EXECUTE;
public Pointer pSignatureSettings = null;
}
int WinVerifyTrust(Pointer hwnd, GUID pgActionID, WINTRUST_DATA pWVTData);
}
Класс использования библиотеки:
public class Main
{
public static void main(String[] args) {
String filePath = "C:/Installs/Installer.exe";
Pointer filePathPointer = new Memory((long) (filePath.length() + 1) * Native.WCHAR_SIZE);
filePathPointer.setWideString(0, filePath);
WinTrust.WINTRUST_FILE_INFO fileInfo = new WinTrust.WINTRUST_FILE_INFO();
fileInfo.pcwszFilePath = filePathPointer;
WinTrust.WINTRUST_DATA trustData = new WinTrust.WINTRUST_DATA();
trustData.pFile = fileInfo.getPointer();
fileInfo.write();
trustData.write();
int result = WinTrust.INSTANCE.WinVerifyTrust(null, WinTrust.WINTRUST_ACTION_GENERIC_VERIFY_V2, trustData);
// Cleanup
trustData.dwStateAction = WinTrust.WTD_STATEACTION_CLOSE;
WinTrust.INSTANCE.WinVerifyTrust(null, WinTrust.WINTRUST_ACTION_GENERIC_VERIFY_V2, trustData);
if (result == 0) {
System.out.println("The file is trusted.");
} else {
System.out.println("The file is not trusted. Error code: " + result);
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/785 ... gned-exe-f
Вызов Wintrust.WinVerifyTrust из Java через JNA возвращает ошибку в подписанном файле .exe. ⇐ JAVA
Программисты JAVA общаются здесь
1716927781
Anonymous
Впервые использую библиотеку JNA и, вероятно, делаю что-то не так.
Моя цель — проверить подпись Authenticode исполняемого файла, вызвав функцию WinVerifyTrust (из библиотеки Windows WinTrust) в моем Java-коде. >
Мое решение, представленное ниже, компилируется и запускается, но возвращает -2146762749 в результате вызова функции WinVerifyTrust. Я запускаю тест подписанного exe-файла и ожидаю, что результат будет 0.
Я определил интерфейс библиотеки WinTrust и использовал его. См. фрагменты кода ниже
Что я делаю неправильно или как устранить эту проблему? Любая помощь приветствуется.
public interface WinTrust extends StdCallLibrary {
WinTrust INSTANCE = Native.load("Wintrust", WinTrust.class, W32APIOptions.DEFAULT_OPTIONS);
GUID WINTRUST_ACTION_GENERIC_VERIFY_V2 = new GUID("{00AAC56B-CD44-11d0-8CC2-00C04FC295EE}");
int WTD_UI_NONE = 2;
int WTD_REVOKE_NONE = 0;
int WTD_CHOICE_FILE = 1;
int WTD_STATEACTION_VERIFY = 1;
int WTD_STATEACTION_CLOSE = 2;
int WTD_DISABLE_MD2_MD4 = 8192;
int WTD_REVOCATION_CHECK_END_CERT = 32;
int WTD_NO_IE4_CHAIN_FLAG = 2;
int WTD_UICONTEXT_EXECUTE = 0;
@Structure.FieldOrder({"cbStruct", "pcwszFilePath", "hFile", "pgKnownSubject"})
class WINTRUST_FILE_INFO extends Structure {
public int cbStruct = this.size();
public Pointer pcwszFilePath;
public IntByReference hFile = new IntByReference();
public Pointer pgKnownSubject = null;
@Override
protected List getFieldOrder() {
return Arrays.asList("cbStruct", "pcwszFilePath", "hFile", "pgKnownSubject");
}
}
@Structure.FieldOrder({"cbStruct", "pPolicyCallbackData", "pSIPClientData", "dwUIChoice", "fdwRevocationChecks", "dwUnionChoice", "pFile", "dwStateAction", "hWVTStateData", "pwszURLReference", "dwProvFlags", "dwUIContext", "pSignatureSettings"})
class WINTRUST_DATA extends Structure {
public int cbStruct = this.size();
public Pointer pPolicyCallbackData = null;
public Pointer pSIPClientData = null;
public int dwUIChoice = WTD_UI_NONE;
public int fdwRevocationChecks = WTD_REVOKE_NONE;
public int dwUnionChoice = WTD_CHOICE_FILE;
public Pointer pFile = null;
public int dwStateAction = WTD_STATEACTION_VERIFY;
public Pointer hWVTStateData = null;
public String pwszURLReference = null;
public int dwProvFlags = WTD_DISABLE_MD2_MD4 | WTD_NO_IE4_CHAIN_FLAG | WTD_REVOCATION_CHECK_END_CERT;
public int dwUIContext = WTD_UICONTEXT_EXECUTE;
public Pointer pSignatureSettings = null;
}
int WinVerifyTrust(Pointer hwnd, GUID pgActionID, WINTRUST_DATA pWVTData);
}
Класс использования библиотеки:
public class Main
{
public static void main(String[] args) {
String filePath = "C:/Installs/Installer.exe";
Pointer filePathPointer = new Memory((long) (filePath.length() + 1) * Native.WCHAR_SIZE);
filePathPointer.setWideString(0, filePath);
WinTrust.WINTRUST_FILE_INFO fileInfo = new WinTrust.WINTRUST_FILE_INFO();
fileInfo.pcwszFilePath = filePathPointer;
WinTrust.WINTRUST_DATA trustData = new WinTrust.WINTRUST_DATA();
trustData.pFile = fileInfo.getPointer();
fileInfo.write();
trustData.write();
int result = WinTrust.INSTANCE.WinVerifyTrust(null, WinTrust.WINTRUST_ACTION_GENERIC_VERIFY_V2, trustData);
// Cleanup
trustData.dwStateAction = WinTrust.WTD_STATEACTION_CLOSE;
WinTrust.INSTANCE.WinVerifyTrust(null, WinTrust.WINTRUST_ACTION_GENERIC_VERIFY_V2, trustData);
if (result == 0) {
System.out.println("The file is trusted.");
} else {
System.out.println("The file is not trusted. Error code: " + result);
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78546231/calling-wintrust-winverifytrust-from-java-via-jna-returns-error-on-signed-exe-f[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия