Siema po dłuższej nieobecności (wycieczka).
Do zaczerniania kodu służą obfuscatory, do szyfrowania plików exe jest już cała gama programów, a ja wymyśliłem nową metodę. Plik exe jest przekazywany przez parametr do ExeCoder'a, program ten wczytuje exe'ca do tablicy char. Tablica ta jest w unii wraz z drugą tablicą typu float. Pomysł jest taki, że program na podstawie wczytanego exe'ca szyfruje go, a następnie tworzy nowy kod źródłowy oparty o klasy, dziedziczenie, szablony, być może kontenery STL i zobaczę co jeszcze ślina na klawiaturę przyniesie, na razie nie ten etap.
Exe do szyfrowania będzie sprytnie przechowywany w uprzednio wymienionych strukturach, a przy uruchomieniu całość zostanie wypakowana i uruchomiona jako odszyfrowany exe. Podpięty GCC skompiluje utworzony kod i mamy zaszyfrowany Exec. Taki jest mniej więcej zamysł.
Wiem, jeden temat jeden problem, ale ja problemy mam dwa bardzo małe, więc chyba nikt się nie obrazi, jeśli oba tu umieszczę. Najpierw kod:
#include <iostream>
#include <fstream>
using namespace std;
void inline err( string e )
{
cout << endl << e << endl;
}
int main()
{
ifstream in( "./notepad.exe", ios::binary );
in.seekg( 0, ios::end );
int insize = in.tellg();
in.seekg( 0, ios::beg );
if( insize == 0 )
{
err( "Empty file" );
return - 1;
}
union
{
char * cexe;
float * fexe;
};
cexe = new char[ insize ];
in.read( cexe, insize );
in.close();
for( int i = 0; i < insize; ++i )
{
cexe[ i ] ^= 33;
}
for( int i = 0; i < insize / 4; i += 4 )
{
fexe[ i ] *= 0.29f;
}
ofstream out( "out.txt", ios::binary );
out.write( cexe, insize );
delete[] cexe;
ifstream in2( "out.txt", ios::binary );
in2.seekg( 0, ios::end );
int size2 = in2.tellg();
in2.seekg( 0, ios::beg );
union
{
char * cexe2;
float * fexe2;
};
cexe2 = new char[ size2 ];
in2.read( cexe2, size2 );
in2.close();
for( int i = 0; i < size2 / 4; i += 4 )
{
fexe2[ i ] /= 0.29f;
}
for( int i = 0; i < size2; ++i )
{
cexe2[ i ] ^= 33;
}
ofstream out2( "a.exe", ios::binary );
out2.write( cexe2, size2 );
delete[] cexe2;
}
Mniejszy problem jest taki, że nie mogę sobie poradzić z odwracaniem xor'ów z mnożeniami oraz mnożeń z odejmowaniem, do tego prawdopodobnie sam dojdę, ale nie szkodzi zapytać. Zakomentowane wiersze: 41, 48, 79, 85;
Ważniejszy problem: program poprawnie co do bajta wypakowuje odszyfrowany plik, plik ma ikone notatnika (szyfruję notatnik), ale gdy odpalam dziada pokazuje się komunikat, że to nieprawidłowa aplikacja - a przecież ikonę notatnika ma ;p Ocb? Z góry dziękuję za pomoc.
edit:
Przy otwieraniu a.exe pojawia się komunikat:
Nie można uruchomić aplikacji, ponieważ jej konfiguracja równoczesna jest niepoprawna. Więcej szczegółów można znaleźć w dzienniku zdarzeń aplikacji lub przy użyciu narzędzia wiersza poleceń sxtrace.exe
Już lookam, być może to banalne jak słońce ;p