AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

CPP zu Delphi

Ein Thema von FreshBuilds · begonnen am 17. Jul 2009 · letzter Beitrag vom 17. Jul 2009
Antwort Antwort
FreshBuilds

Registriert seit: 16. Jun 2009
4 Beiträge
 
#1

CPP zu Delphi

  Alt 17. Jul 2009, 15:24
Hallo!
Ich bräuchte mal wieder ein wenig Hilfe. Also zunächst einmal muss ich sagen, dass ich absolut keine Ahnung von CPP habe. Ich habe den folgenden Quellcode und möchte diesen in Delphi nutzen/umwandeln.
Code:
#include "stdafx.h"
#include <windows.h>
#include <stdlib.h>

char* GetHash(HANDLE file,const char* pattern)
{
   DWORD bytes=(DWORD)strlen(pattern)+1;
   char* buffer=new char[bytes];
   DWORD pbytes=0;
   UINT offset=0;
   do{   
      if (SetFilePointer(file,(LONG)offset++,0,FILE_BEGIN)==INVALID_SET_FILE_POINTER && GetLastError()!=NO_ERROR)
         {   _tprintf_s(_T(" error - invalid set file pointer (system error code %d)\n"),GetLastError());
            delete [] buffer;
            buffer=NULL;
            return NULL;
         }
      if (ReadFile(file,(LPVOID)buffer,bytes,&pbytes,NULL)==NULL && GetLastError()!=NO_ERROR)
         {   _tprintf_s(_T(" error - could not read file (system error code %d)\n"),GetLastError());
            delete [] buffer;
            buffer=NULL;
            return NULL;
         }
      *(buffer+bytes-1)=NULL;
      }while(strcmp(buffer,pattern)&&pbytes!=0);
      if(pbytes==0)      
         {   delete [] buffer;
            buffer=NULL;
            return NULL;
         }
   delete [] buffer;
   buffer=NULL;

   DWORD offsett=offset+bytes;
   UINT counter=0;
   buffer=new char[2];
   do{      
      if (SetFilePointer(file,offsett++,0,FILE_BEGIN)==INVALID_SET_FILE_POINTER&&GetLastError()!=NO_ERROR)
         {   _tprintf_s(_T(" error - invalid set file pointer (system error code %d)\n"),GetLastError());
            delete [] buffer;
            buffer=NULL;
            return NULL;
         }
      if (ReadFile(file,(LPVOID)buffer,(DWORD)1,&pbytes,NULL)==NULL&&GetLastError()!=NO_ERROR)
         {   _tprintf_s(_T(" error - could not read file (system error code %d)\n"),GetLastError());
            delete [] buffer;
            buffer=NULL;
            return NULL;
         }
      if((*buffer!=0)&&(pbytes>0)) counter++;
   }while(*buffer!=0&&pbytes!=0);
   if(pbytes==0)
      {   delete [] buffer;
         buffer=NULL;
         return NULL;
      }
   delete [] buffer;
   buffer=NULL;

   char * value=new char[counter+1];
   offset=offset+bytes;
   if (SetFilePointer(file,offset,0,FILE_BEGIN)==INVALID_SET_FILE_POINTER&&GetLastError()!=NO_ERROR)
      {   _tprintf_s(_T(" error - invalid set file pointer (system error code %d)\n"),GetLastError());
         delete [] value;
         value=NULL;
         return NULL;
      }
   if (ReadFile(file,(LPVOID)value,(DWORD)(counter+1),&pbytes,NULL)==NULL&&GetLastError()!=NO_ERROR)
      {   _tprintf_s(_T(" error - could not read file (system error code %d)\n"),GetLastError());
         delete [] value;
         value=NULL;
         return NULL;
      }
         
return (char*)value;
}//-----------------

char*   ServerPasswordDecode(const char* hash)
{
   size_t passsize=strlen(hash)/2+1;
   char* pass=new char[passsize];
   char* t=new char[2];
   *t=NULL;
   *pass=NULL;
   *(t+1)=NULL;
   for(UINT i=0;i<strlen(hash);i++)
      if(i%2)
      {   if(*(hash+i)=='D')
            {   *t=*(hash+i-1)-17;
               strcat_s(pass,passsize,t);
            }else
         if(*(hash+i)=='G')
            {   *t=*(hash+i-1)+31;
               strcat_s(pass,passsize,t);
            }else
         if(*(hash+i)=='H')
            {   *t=*(hash+i-1)+47;
               strcat_s(pass,passsize,t);
            }
      }
   delete [] t;
return pass;
}//---------

char*   ProfilePasswordDecode(const char* hash)
{
   size_t passsize=strlen(hash)+1;
   char* pass=new char[passsize];
   *pass=NULL;
   for(size_t i=0;i<passsize-1;i++)
   {   pass[i]=(~hash[i]);
      pass[i+1]=NULL;
   }

   return pass;
}//-----------------

BOOL CheckGG(HANDLE file)
{   
   char buffer[5];
   DWORD rbytes=0;
   if (SetFilePointer(file,(LONG)0,0,FILE_BEGIN)==INVALID_SET_FILE_POINTER && GetLastError()!=NO_ERROR)
      return FALSE;
   if (ReadFile(file,(LPVOID)buffer,(DWORD)5,&rbytes,NULL)==NULL && GetLastError()!=NO_ERROR && rbytes!=0)
      return FALSE;
   buffer[4]=NULL;
   if(strcmp(buffer,"cfg1"))
      return FALSE;
   else
      return TRUE;
}//-------------------------

int _tmain(int argc, TCHAR **argv)
{   
   _tprintf_s(_T("\n %s v1.01 - gadu-gadu config file decoder\n"),*argv);
   _tprintf_s(_T(" copyright (c) g-n-d.net     www.g-n-d.net\n\n"));
   
   if (argc<2||(_tcsstr(*(argv+1),_T("config.dat"))==NULL))
      {   _tprintf_s(_T(" usage: %s <gadu-gadu config.dat file>\n"),*argv);
         return 0;
      }
   
   HANDLE hFile;
   hFile=CreateFile(*(argv+1),    // file to open
                   GENERIC_READ, // open for reading
                   FILE_SHARE_READ, // share for reading
                   NULL, // default security
                   OPEN_EXISTING, // existing file only
                   FILE_ATTRIBUTE_NORMAL, // normal file
                   NULL); // no attr. template
   if (hFile == INVALID_HANDLE_VALUE)
      {   _tprintf_s(_T(" could not open file %s (system error code %d)\n"),*(argv+1),GetLastError());
         return 0;
      }

   if(!CheckGG(hFile))
      {   _tprintf_s(_T(" given %s file is not the gadu-gadu config file\n"),*(argv+1));
         return 0;
      }

   char* hash=NULL;
   char* value=NULL;

   hash=GetHash(hFile,"Number");
   if(hash!=NULL)
   {   DWORD *p=(DWORD*)hash;
      printf_s(" identity number: %ld\n",*p);
   }
   delete [] hash;

   hash=GetHash(hFile,"Password2");
   if(hash!=NULL)    
   {   value=ServerPasswordDecode(hash);
      printf_s(" password for server: %s\n",value);
      delete [] value;
   }
   delete [] hash;
   
   hash=GetHash(hFile,"passwordstr");
   if(hash!=NULL)
   {   value=ProfilePasswordDecode(hash);
      printf_s(" password for profile: %s\n",value);
      delete [] value;
   }
   delete [] hash;

   CloseHandle(hFile);
   return 0;
}
Es wäre super, wenn jemand mir helfen könnte den Code zu konvertieren.
Vielen Dank schon einmal für eure Hilfe
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: CPP zu Delphi

  Alt 17. Jul 2009, 15:30
An was denkst du im Besonderen?
Markus Kinzler
  Mit Zitat antworten Zitat
FreshBuilds

Registriert seit: 16. Jun 2009
4 Beiträge
 
#3

Re: CPP zu Delphi

  Alt 17. Jul 2009, 15:33
Naja, am besten wie man erstmal anfangen sollte.
Ich denke mal nicht das es einen automatischen Konverter gibt. Und nur um diesen Quellcode zu konvertieren extra CPP lernen ist denke ich ein wenig zu viel.
Deshalb bin ich für jeden Tipp dankbar.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: CPP zu Delphi

  Alt 17. Jul 2009, 15:36
Wenn bekannt wäre, was für ein Hash das ist, könnte man u.U. eine alternative Implementierung dessen verwenden
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Lun
Lun

Registriert seit: 4. Feb 2006
122 Beiträge
 
Delphi 2005 Professional
 
#5

Re: CPP zu Delphi

  Alt 17. Jul 2009, 15:59
Hmm,

hab erstmal überlegt was das Programm eigentlich macht und frag mich im Moment wofür man das braucht.

Wenn ich es jetzt nicht verpeilt habe, ließt das Programm den Benutzer und das Passwort von einem config.file aus nem Messenger namens gadu gadu aus. sowas wie ICO und gibt das Passwort zu nem Benutzeracc zurück. Wenn ich jetzt falsch liege korrigiere mich.

Wenn du dein Passwort vergessen hast, gibt es da keine Passwort vergessen funktion per Mail oder kompeliere es dir in cpp, brauchst es ja nur einmal.

Oder bin ich jetzt total auf Holzweg

greetz

Lun
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz