Jump to content
Che

[C++] Cum sa faci un fel de compilator ?

Recommended Posts

Sa zicem ca as vrea sa fac un program in care utilizatorul alege niste functii anume pe care sa le faca programul lui si apoi sa-i dea "BUILD" si sa iasa un nou program care sa faca ceea ce a ales el sa faca (bineinteles, cu parametrii alesi de el).

Care sunt metodele pe care le-as putea folosi in programul meu pentru a crea acel executabil pe care-l doreste utilizatorul ?

Stiu ca e o functie write_bytes sau asa ceva in vb.net, ce face ea mai exact ? Face tot acelasi lucru ca si cum utilizatorul ar da copy paste la codul programului dorit in Visual Studio C++ ? Exista si in C++ asa ceva ? Ce anume ?

Link to comment
Share on other sites

Salut,

Tu practic vrei s? faci un builder de virus? Asta am citit printre rânduri.

Ai putea defini în programul t?u o variabil? 0xdeadbeef.

De exemplu


int x = 0xdeadbeef;

În builder tu o s? faci replace la acea variabil? cu altceva. În func?ie de ce ai înlocuit, vei face un switch în program la runtime, care s? fac? altceva în fun?ie de ce e acolo.

Dac? asta nu merge po?i declara un char în program


char x[20] = "mama are mere"

La fel, înlocuie?ti în builder acest string cu altceva, ?i faci ceva în fun?ie de ce e acolo. O s? revin cu un demo pe linux.

Link to comment
Share on other sites

Trebuie sa fie executabil? Trebuie sa fie in C/C++? Nu prea inteleg. Daca nu vrei sa intri in detalii aici poate intr-un PM.

Ai un program facut in C++, sa-l numim Programul A.

Il deschizi si are il el GUI-ul de asa natura incat sa poti alege sa creezi vizual niste functii carora le dai si parametri.

Spre exemplu, unu intra in program si vrea sa-si creeze un cripter:

Alege dintr-o lista AES256, apoi mai alege si Base64 si apoi Atom128 si alege x3 si in final AER256 cu parola "MyPassword".

Apoi da click pe "BUILD" si Programul A creaza acum un alt program numit Programul B care este un cripter care iti cripteaza orice executabil o data cu AES256, apoi cu base64 o data si apoi cu atom128 de 3 ori si in final il mai cripteaza o data cu AER256 cu parola "MyPassword".

Programul A este un executabil in C++ .exe, tot la fel si Programul B.

@em

Link to comment
Share on other sites

Vezi asta: https://ro.wikipedia.org/wiki/Automat_finit

Cat despre "compilare", adica din cod sursa sa faci un executabil... :)

Fa pentru inceput ceva simplu:

1. Creezi un automat finit

2. Procesezi un limbaj simplu

Ex. write(123)

Creezi o sintaxa bine pusa la punct. Mai exact, iei caracter cu caracter si:

a. Ai o litera? Hmm, pare sa fie numele unei functii. Mergi mai departe

b. Urmatorul caracter e "("? Inseamna ca s-a terminat numele functiei ("write") si urmeaza un parametru

c. Urmatorul caracter e ")"? Inseama ca "123" e parametru pentru "write"

Acestea sunt stari.

jjV6zwe.png

Cele in cerculet sunt stari. Liniile inseamna procesare caracter cu caracter si starea in care se trece.

De exemplu, din starea "functie", citesti o litera, te intorci in aceeasi stare si adaugi acea litera la numele functiei. Daca citesti insa caracterul "(" te duci in starea "param" si citesti cifra cu cifra valoarea.

E un caz simplu de tot. Trebuie sa iei in considerare orice posibilitate si sa duci in starea de "eroare de compilare" daca ceva nu este in regula.

3. Dupa asta, interpretezi acel limbaj al tau.

E frumos ce vrei sa faci dar poate fi complicat. Cauta despre teoria compilatoarelor, sunt multe articole, ce am zis eu e doar o idee, poate sa nu fie cea mai buna.

Apoi, daca vrei "exe" trebuie sa transcrii din acel automat finit in limbaj de asamblare. Daca reusesti asta, o sa poti asambla in cod executabil, creezi un fisier PE (Portable Executable, strucutra exe) gol, pui Entrypoint catre o sectiune ".text" (sau ce nume vrei tu) care e "readable and executable" si acolo pui acel cod. Daca ai date, o sa iti trebuiasca o sectiune speciala. E prea complicat.

Incearca ceva interpretat simplu, un script ca acel "write(123)".

--------------------------------------------------------------------

Acum am vazut ce vrei sa faci de fapt.

Un crypter functioneaza asa:

1. Ai un EXE deja creat

2. Pui "la final" sau "la interior" fisierul cryptat

3. Pui niste date de configurare, ca mai sus

In acele date de configurare specifici encryptia si poate cheia. Sau ii pui o metoda de a primi cumva, de undeva, cheia de decryptare.

Cat despre cum functioneaza un crypter, nu e asa simplu: trebuie sa incarci in memorie un executabil. Insa gasesti mult cod sursa din care poti invata, dar o sa iti ia ceva timp. :)

Edited by Nytro
Link to comment
Share on other sites

Dar de ce nu creezi un plugin-system si un fisier text care descrie procesul (pipeline) pe care il vrei.

Lista gen:

AES256, Base64, Atom128:3

Executabilul principal. Citeste lista, cauta DLL-urile specificate, si chiama functia specifica in fiecare plugin cu datele specificate urmat ca plugin-ul sa comunice inapoi datele procesate si tot asa pana ce se termina lista.

Link to comment
Share on other sites

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...