2013-05-17 12 views
14

Szukałem od jakiegoś czasu, ale nie znalazłem żadnej odpowiedniej odpowiedzi na to pytanie. Zauważyłem, że mój program antywirusowy zaczął wykrywać moją aplikację jako trojana. Mój program antywirusowy to Kaspersky 2013 i jest to typ wykrytego trojana. http://www.securelist.com/en/descriptions/HEUR:Trojan.Win32.GenericKaspersky wykrywa moją aplikację ConsoleApplication jako trojana

Moja aplikacja działa tylko 3 rzeczy:

  • sprawdzić czy Dongle Key jest podłączony do komputera

  • Odszyfrowuje dll (to jest biblioteka klasy WPF z punktu zwyczaj wprowadzania) kluczem sprzętowym

  • Uruchamia bibliotekę dll za pośrednictwem niestandardowego punktu wejścia.

Problem polega na tym, że podobny kod działa w podobnej aplikacji, ale w tym przypadku mój program antywirusowy wykrywa go jako trojana. Zauważyłem, że część kodu, który ma problem jest taki:

public static void ExecuteAssembly(byte[] Bytes) 
    { 
     Assembly a = Assembly.Load(Bytes); 
     foreach (Type type in a.GetTypes()) 
     { 
      try 
      { 
       MethodInfo main = type.GetMethod("Main"); 
       if (main != null) 
        main.Invoke(type, new object[] { }); 
      } 
      catch { } 
     } 
    } 

Co mogę zrobić, aby uniknąć tego problemu? Nie robię trojana i nie mogę uniknąć użycia tej części kodu, aby uruchomić moją bibliotekę dll. Więc nie sądzę, że kod jest problemem. Z góry dzięki.

Mattia

EDIT:

Przesłałem plik do serwisu Egor mi powiedział. To jest wynik. https://www.virustotal.com/en/file/7ee30172ffda51f4b99700d10df2816403cbdc8f17bfe90f7deef81a88639da3/analysis/1369058630/

Jakiej rady możesz udzielić? Aby przesłać plik jako fałszywy alarm lub coś innego, jak zmienić kod? Jestem początkującym w tego rodzaju problemach, więc nie wiem, jak się zachować. Jeszcze raz dziękuję!

+0

nie Czy istnieją inne sposoby, aby rozpocząć DLL programowo? Wywołanie systemowe do RunDLL.EXE, być może, jeśli to nadal istnieje. –

+1

Przypomina mi czasy, kiedy Avast uruchamiał moje aplikacje w piaskownicy i zabijał je bez ostrzeżenia po 10-20 sekundach runtime. Nie mam już tych problemów i nie zmieniłem też kodu. – Nolonar

+3

Proponuję, abyś ograniczył to do zwykłej wersji demonstracyjnej, jak możesz to zrobić i przesłać ją do Kaspersky do sprawdzenia. –

Odpowiedz

5

Chociaż nie mogę udzielić odpowiedzi na pytanie, jak rozwiązać ten problem, zmieniając kod, mogę powiedzieć, że nie jesteś pierwszym, który ma ten problem. Zetknąłem się z tym wcześniej z jednym z moich własnych programów i wygląda na to, że niektóre gry zostały wykryte jako trojan przez Kaspersky. Jak niektórzy inni powiedzieli w komentarzu, możesz przesłać to jako fałszywy pozytyw do Kaspersky. Postępowałem zgodnie z instrukcjami pod tym linkiem: How to report undetected viruses or false positives to the viruslab, No links to malware in the forum please!

4

napotykasz heurystyczną detekcję - co oznacza, że ​​kaspersky ocenił każdy negatywny i pozytywny atrybut twojej biblioteki DLL (wszystko od tabel importu do rozmiaru pliku i rzeczywistych funkcji) i zdecydował że jego klasa jest poniżej zalecanego dla dobrego pliku wykonywalnego.

Zgaduję, że kod przykładowy jest tym, co powoduje wykrycie - co oznacza, że ​​usunięto tę sekcję kodu i nagle kaspersky było w porządku z tym. jeśli tak jest, możesz oszukać skaner kaspersky dzwoniąc do Assembly.Load za pomocą refleksji. (Co jest prawdopodobnie powód dlaczego jest wykrywany - to bardzo często z trojany do pobierania dodatkowych modułów jako pliki DLL i załadować je z pamięci)

typeof(Assembly).GetMethod("Load").Invoke(null,new object[] {Bytes}); 
+1

Nie pracuję już nad tym projektem (zrezygnowałem), ale byłoby to właściwe rozwiązanie. Dzięki! – Pliskin

Powiązane problemy