main.cpp
1 #include <iostream> 2 #include <fstream> 3 #include <stdlib.h> 4 #include <windows.h> 5 6 using namespace std; 7 8 int main ( int argc, char* argv[] ) { 9 if ( argc != 4 ) { 10 cout << "Usage: ft <File> <Off> <Data>" << endl; 11 return -1; 12 } 13 fstream file ( argv[1], ios::in | ios::out | ios::binary | ios::ate ); 14 if ( file.is_open() ) { 15 long long fileSize = static_cast<long long> ( file.tellg() ); 16 cout << "Size: " << fileSize << " bytes" << endl; 17 long int yPos = strtol ( argv[2], NULL, 16 ); 18 long int yData = strtol ( argv[3], NULL, 16 ); 19 unsigned char sData = static_cast<unsigned char> ( yData ); 20 if ( yPos < 0 || yPos >= fileSize ) { 21 cout << "Overflow. [0 ~ " << fileSize - 1 << "]" << endl; 22 return -1; 23 } 24 std::ios_base::seekdir sPos = static_cast<std::ios_base::seekdir> ( yPos ); 25 file.seekg ( sPos ); 26 char oldCbit[8], newCbit[8]; 27 itoa ( file.get(), oldCbit, 16 ); 28 itoa ( yData, newCbit, 16 ); 29 cout << "Data: " << oldCbit << " --> " << newCbit << endl; 30 file.seekg ( sPos ); 31 file << sData; 32 file.close(); 33 while ( file.is_open() ) 34 Sleep ( 1 ); 35 cout << "Tampering successfully." << endl; 36 return 0; 37 } else { 38 cout << "Can not open file." << endl; 39 return -1; 40 } 41 }