Вызов Wintrust.WinVerifyTrust из Java через JNA возвращает ошибку в подписанном файле .exe.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Вызов Wintrust.WinVerifyTrust из Java через JNA возвращает ошибку в подписанном файле .exe.

Сообщение 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);
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/785 ... gned-exe-f
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»