Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » exe mit CFile auslesen, funktioniert nicht

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
05.03.2005, 15:35 Uhr
~EricP
Gast


Hallo Leute!

Ich versuche einen Kopierschutzscanner zu basteln. Da ich aber meistens nur .exe und .dll Dateien zu scannen habe kommt es zu Problemen. Der nachfolgende Quellcode versucht den string "BoG" in einer Datei zu finden. Das Problem ist, dass das Programm nur Teile von der Datei ließt, soll heißen dort wo "BoG" vorkommt würd nicht gelesen. Das liegt scheinbar daran das unmittelbar vor "BoG" ein Haufen voller "00" Zeichen kommt also in Hexadezimal ausgedrückt. Einfach mal ne .exe mit nem Hexeditior öffnen und dann sieht man es.

Ich habe versucht heraus zu finden woran es liegen könnte und bin mir sicher, dass es mit den "nOpenFlags" zu tun hat. Hab davon aber keine Ahnung. Wäre nett wenn mir einer eine Lösung schreiben könnte oder ne andere Klasse als CFile die besser binär einlesen kann.


C++:
    Kopierschutz = ""; // ist ein CString
    char str[1024];
    int bytes = sizeof(str); // bytes würd auf 1024 gesetzt
    CFile datei(adresse, CFile::modeRead | CFile::osNoBuffer); //adresse ist ein CString
    while (bytes == sizeof(str))
    {
        bytes = datei.Read(str, sizeof(str)); //1024 Zeichen werden in str eingelesen und es würd die Zahl der tatsächlich gelesenen bytes auf die Variable bytes übertragen
        Kopierschutz = str;
        if (Kopierschutz.Find("BoG", 0) != -1) //Es würd im string Kopierschutz nach "BoG" gesucht.
        {
            textbox.AddString("SafeDisc gefunden!");
        }
    }

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.03.2005, 12:27 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


mach mal ein "CFile::modeBinary" mit als openflag mit rein
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.03.2005, 14:03 Uhr
~EricP
Gast


Danke für die Antwort.
Ich habe allerdings CFile::modeBinary nicht gefunden nur CFile::typeBinary und das bewürkt leider nichts. Das Problem besteht somit weiterhin. Hat jemand noch ne Idee?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.03.2005, 19:34 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


oh meinte natürlich typeBinary.

Das Problem ist das CString::Find auf Textmodus arbeitet, d.h sucht nur bis zum ersten '\0'
Das einfachste ist wahrscheinlich du liest immer ein Zeichen ein und schaust ob es ein B ist, dann les direkt nächste ob o, usw
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
07.03.2005, 10:31 Uhr
Th



Außerdem könnte es passieren, daß der String 'BoG' gerade an einer Puffergrenze vorkommt, d.h. z.B. an Stelle 1023 steht 'B', dann wird im nächsten Puffer 'oG...' eingelesen und du findest den String auch nicht.
Also so wie FloSoft geschrieben hat, Zeichen einzeln einlesen und sobald ein 'B' kommt, kannst du ja dann die nächsten zwei Zeichen einlesen und auf 'oG' vergleichen.

Außerdem mußt du unbedingt die Datei im Binärmodus öffnen.

Dieser Post wurde am 07.03.2005 um 10:32 Uhr von Th editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: