Jump to content
phreak

[C++] Script pentru incarcare fisiere in executabil

Recommended Posts

Posted

Sincer nici nu stiu ce titlu sa-i pun , eu ce vroiam sa fac este sa am o metoda cross-platfrom prin care sa incarc fisiere ( resurse sau orice alt fisier ) in executabilul meu.

Cu ce te ajuta? Self-deleting exe , self-updating exe , easter egg in programe care par legit .. si ce va mai poate imaginatia.

Cum? Citesc fisierul in binary si creez ditamai hex stringu care-l bag intr-un header file.

Sursa :


#include <fstream>
#include <iostream>
using namespace std;

//int main()
//{
// ofstream out;
// out.open("calc.exe", ios::binary);

// packed_file file;
// out.write(file.data(), file.length());
// out.close();

// return 0;
//}

int main(int argc , char* argv[])
{
if(argc < 2)
{
cout<<"You need to supply the filename as an argument"<<endl;
return -1;
}

ifstream in;
ofstream out;
in.open(argv[1], ios::binary);

if(!in.is_open())
{
cout<<"Could not open file"<<endl;
return -1;
}

in.seekg(0, ios::end);
int file_size = in.tellg();
in.seekg(0, ios::beg);

out.open("packed.hpp");
out<<"#ifndef EXE_HPP"<<endl
<<"#define EXE_HPP"<<endl
<<"#include <cstring>"<<endl
<<"struct packed_file {"<<endl
<<"\tpacked_file() { m_len = "<<file_size<<"; m_ptr = NULL; }"<<endl<<endl
<<"\tint length() { return m_len; }"<<endl<<endl<<endl
<<"\tchar * data() {"<<endl
<<"\t\tif(m_ptr != NULL) return m_ptr;"<<endl
<<"\t\tm_ptr = new char[m_len];"<<endl
<<"\t\tmemcpy(m_ptr, \"";

size_t cnt = 1;
while(in.good())
{
int c = static_cast<int>(in.get());
out << "\\x" << hex << c;
cnt++;
}

out<<"\", m_len);"<<endl
<<"\t\treturn m_ptr;\n\t}\n\n"
<<"\t~packed_file() {"<<endl
<<"\t\tif(m_ptr != NULL) delete[] m_ptr;\n\t}"<<endl
<<"private:\n\tint m_len;\n\tchar * m_ptr;\n"
<<"};\n#endif";

out.close();

cout<<"Header creation finished"<<endl;

return 0;
}

Posted

Ca resurse, trebuie sa cunosti bine formatele PE si ELF si e nasol.

Cel mai simplu ar fi asa:

- declari variabila x = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"

- acea variabila contine, nu stiu, 300KB de 'A'

- e salvata intr-o anumita sectiune (de date) din executabil la compilare

- cu un alt program, cauti in executabilul compilat acest "AAAAAAAAAAA"

- pui acolo un alt fisier, ce vrei sa pui

- din programul tau faci ce vrei cu acea variabila, din moment ce acolo pui un alt fisier, trebuie doar sa scrii datele din acea variabila unde vrei

- trebuie sa ai grija cu dimensiunea fisierului sau ce pui acolo, sa stii unde sa te opresti

- poti folosi un anumit sir, gen "HO_BA" ca sa stii ca acolo se termina datele suprascrise de tine in acel sir "AAA" cu un alt program/hex editor

O alta idee e sa scrii acele date "in plus" imediat dupa ultimul octet al programului.

- ai grija sa afli corect de unde citesti, ori determini dimensiunea "imaginii" executabilului, ori ca mai sus cu delimitator

- poti sa realiniezi structura executabilului sa fie valid

- principiu valid si la PE si la ELF

Cred ca intelegi ce vreau sa zic.

Posted

Adevarat ce zici, daca iti trebuie sa rescrii acea parte. Dar pentru ce vreau sa fac eu ( self-deleting exe ) portiunea aia nu ar trebui rescrisa. Contine doar un executabil creat cu DELETE_ON_CLOSE sau cum era flagu ala de la CreateFile si cu un delete loop din care iese o data ce a reusit sa stearga "parintele".

Posted

La cryptere se foloseste o prostie numita "Melt".

Nu e tocmai optima, dar isi face treaba:

1. Executabilul creeaza un fisier .bat/.sh care contine cu ciclu care verifica daca exista un fisier (locatia executabilului)

2. Daca exista incearca sa il stearga, daca nu reintra in ciclu

3. Executabilul creeaza acest fisier, il executa si se opreste (procesul)

4. Scriptul sterge executabilul dupa ce se opreste apoi se sterge singur (nu e obligatoriu, poate fi creat in Temp sau /tmp, dar e practic)

Asta vrei sa faci?

Posted

Nu e nevoie, sunt cateva comenzi, cea mai importanta "del" sau "rm".

Pentru auto-updater e alt principiu. Vezi undeva pe web ultima versiune, o descarci, si fac un "installer" pentru acel update. Adica faci un alt programel/script care copiaza fisierele dintr-un folder temporar, in folderul cu aplicatia ta, inlocuind aplicatia (care e oprita) si celelalte fisiere necesare, apoi repornind aplicatia. Aplicatia doar ruleaza acel installer si se inchide.

Posted

Multumesc pentru idei, dar am deja o solutie in minte. Postul l-am facut ca sa nu se mai chinuie altu cand are nevoie si ( daca trece cmin pe aici ) poate-l converteste cineva in python.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...