[vcpp 2010] Eazfuscator

0

Witam, chciałem na swoim programie użyć Eazfuscator.NET Assistant (http://www.foss.kharkov.ua/g1/projects/eazfuscator/dotnet/Default.aspx), gdy przeciągam projekt do jego okna podczas zabezpieczania wyskakuje błąd:

Protecting project 'bla.vcxproj'...  ERROR  Unable to cast object of type 'System.Xml.XmlComment' to type 'System.Xml.XmlElement'.

Może mi ktoś z tym pomóc?;x Próbowałem też innych crypterów/obfuscatorów, każdy albo wywala błąd podczas zabezpieczania, albo aplikacja po tej operacji się nie otwiera :/

0

Używasz jakichś obiektów typu "XmlComment"? Jeśli nie to może jeszcze sprawdź wszystkie "summary" komentarze w kodzie czy gdzieś nie brakuje zamknięcia.

0

Większość protectorów dla .NET nie łyka mixed assembly łączących kod zarządzany z natywnym.

0

używam bardzo krótkiej wstawki z ASM, do sprawdzania CPUID ;x Naprawdę żaden obfuscator tego nie obsłuży?

0

Po cholerę używasz cpuid? Praktycznie wszystkie potrzebne informacje pobrać poprzez elementy .NET, WMI albo w ostateczności WINAPI.

0

Potrzebny mi do HWID, nie orientuje sie jak go wyciagnac przez .NET/WINAPI ;x

0

Project -> References/Properties (zależnie gdzie klikniesz) -> Add New Reference... -> System.Management.dll.

using namespace System;
using namespace System::Management;

int main(array<System::String ^> ^args)
{
    ManagementClass ^processors = gcnew ManagementClass("Win32_Processor");

	for each (ManagementObject ^processor in processors->GetInstances()) {
		Console::WriteLine (processor["ProcessorID"]);
	}

    return 0;
}

o to chodzi? Pobiera dla wszystkich fizycznych procesorów w systemie. Z cpuid i rdtsc w systemach wieloprocesorowych wypadałoby uważać (czyli generalnie zawsze).

0

Dzięki, dałoby radę to jeszcze przerobić tak, żeby podawało ProcessorID tylko pierwszego znalezionego procesora, albo działało tak jak cpuid w asm?

To moja stara funkcja:

UINT64 get_cpuid(void)
{
   DWORD dwStandard = 0; 
   DWORD dwFeature = 0; 
     
   _asm { 
        mov eax, 1 
        cpuid 
        mov dwStandard, eax 
        mov dwFeature, edx 
    }
    return( ((UINT64)(dwFeature) << 32) | ((UINT64)(dwStandard)));
}
0

Przecież właśnie to w formie hexstringa otrzymujesz, prawda? Jak pobrać pierwszy? Albo pobrać enumerator i bieżący element albo iść na skróty i po prostu na koniec pętli wstawić break (mniej sensowne, ale prostsze), czyli:

     ManagementClass ^processors = gcnew ManagementClass("Win32_Processor");
     Int64 processorID = 0;

     for each (ManagementObject ^processor in processors->GetInstances()) {
               processorID = Int64::Parse
                                ( processor["ProcessorID"]->ToString()
                                , Globalization::NumberStyles::HexNumber );
               break;
     }

Do sensowniejszego pobierania sobie poprawisz.

0

Bardzo dziękuje, nigdzie nie mogłem tego znaleŹć :)
Szkoda tylko, że funkcja w wmi potrafi przyciąć..

EDIT: Niestety przy zabezpieczaniu EAZFUSCATOR dalej jest:

Protecting project 'projekt.vcxproj'...  ERROR  Unable to cast object of type 'System.Xml.XmlComment' to type 'System.Xml.XmlElement'.

Wydaje mi się, że wszystkie <summary> są zamknięte (nie używałem własnych)

btw. moj stdafx.h:

#include "windows.h"
#include <winuser.h>
#include <string>
#include "Urlmon.h"
#pragma comment( lib, "Urlmon.lib" )

1 użytkowników online, w tym zalogowanych: 0, gości: 1