Thejuster (Admin)
Guru^2
Messaggi: 2305
Iscritto: 04/05/2008
|
Ragazzi scusate, ora che mi trovo diciamo ad un buon punto per la mia mod.
volevo chiedervi se questo metodo che ho usato è corretto.
Ricordo che in precedenza, Per scrivere sulla memoria normalmente si utilizza
Codice sorgente - presumibilmente Plain Text |
WriteProcessMemory(HANDLE,LPVOID,LPVOID,LPCVOID,SIZE_T,SIZE_T);
|
ora esempio io ho questa funzione
Codice sorgente - presumibilmente C/C++ |
PBYTE funzione(PARAMETERS * myparam){
MessageBox(0,"Prova","test",MB_OK);
return 0;
}
|
Ho ricordato la volta scorsa di passare come argomento tramite il WriteProcessMemory un void del tipo
(void*)Indirizzo
Ho pensato di fare in questo modo. Non sò se il concetto è sbagliato.
per questo chiedo a voi. Il fatto sta che cmq facendo, non succede proprio nulla.
Si avvia il programma, e non succede quello che dovrebbe succedere ovviamente mostrarmi il messagebox
Codice sorgente - presumibilmente C/C++ |
void * MyFuncAddress = VirtualAllocEx(p, NULL, size_funzione, MEM_RESERVE|MEM_COMMIT, PAGE_EXECUTE_READWRITE);
WriteProcessMemory(p, MyFuncAddress, (void*)funzione,size_funzione, NULL);
|
E' corretto quello che ho fatto? ( Anche se stranamente credo proprio di no. ) Ultima modifica effettuata da Thejuster il 31/07/2015 alle 9:59
|
|
TheDarkJuster (Member)
Guru^2
Messaggi: 1620
Iscritto: 27/09/2013
|
Prova a cercare su Google code injection writeprocessmemory
Dovresti trovare qualche esempio funzionante....
|
|
Thejuster (Admin)
Guru^2
Messaggi: 2305
Iscritto: 04/05/2008
|
Uhm si queste sono diciamo le basi di quello che ho fatto.
Scrivere nella memoria e molto semplice.
quello che realmente mi serve e tipo questo
http://www.codeproject.com/Articles/4610/Three-Ways-to-Inj ...
Praticamente mi servirebbe fare il code cave
da quel che ho letto. Bisogna aprire il programma con il debugger.
Scorrere in basso fino a trovare una lista di indirizzi vuoti usati dal compilatore per allocare dinamicamente variabili ecc. ecc.
uno di quei indirizzi andrà allocato il void.
però non conosco la procedura per fare questo.
sto cercando di farla anche leggendo diversi articoli ma sbaglio in qualche cosa.
non conoscete un buon articolo o tutorial su questi argomenti?
|
|
TheDarkJuster (Member)
Guru^2
Messaggi: 1620
Iscritto: 27/09/2013
|
Il caro vecchio dll injection funziona ancora?
https://it.wikipedia.org/wiki/Dll_injection
Qui è spiegato molto velocemente, ma efficacemente. Avevi già provato in questo modo? C'è un motivo per il quale la dll injection non ti va bene?
Perchè io ho usato solo dll injection, e non sono abbastanza preparato su questi argomenti per aiutarti.
Ultima modifica effettuata da TheDarkJuster il 03/08/2015 alle 11:56 |
|
Thejuster (Admin)
Guru^2
Messaggi: 2305
Iscritto: 04/05/2008
|
Uhm si è molto chiaro anche troppo direi.
Allora vada per la Dll Injection.
Unica cosa che non mi è chiara.
Una volta che diciamo mi impossesso del processo.
Esiste un modo per manipolare funzioni interne al programma?
Esempio:
Piero crea un programma di nome ciao.exe
All'interno di ciao.exe esistono ovviamente determinate funzioni, classi etc.
Domanda 1.
C'è un modo per vedere le funzioni in esso contenute?
Domanda 2.
Posso richiamare le funzioni all'interno di ciao.exe programmato da piero?
|
|
TheDarkJuster (Member)
Guru^2
Messaggi: 1620
Iscritto: 27/09/2013
|
Domanda numero 1:
non penso proprio, perchè al momento della compilazione di un eseguibile le funzioni diventano semplici istruzioni che partono da un indirizzo e le chiamate diventano call o jmp a quell'indirizzo.
Altra storia è per le dll che espostano funzioni. Se una dll esporta simboli puoi ottenere i loro nomi, ottenere una libreria statica da linkare per poter usare quella dll e con un po' di lavoro anche l'header: http://www.nirsoft.net/utils/dll_export_viewer.html e http://stackoverflow.com/questions/437432/is-there-a-way-t ...
In pratica puoi fare un sistema che compila la dll da iniettare a runtime, e la linka a una libreria che fa riferimento a un'altra dll, che potrebbe essere una dll del programma "agganciato", ma non mi sembra una cosa molto sensata. Comunque è fattibile......
Domanda numero 2:
Non è possible, o almeno non c'è un modo "standard" per farlo.........
...... e se c'è non lo trovo e non mi viene in mente........
|
|
Thejuster (Admin)
Guru^2
Messaggi: 2305
Iscritto: 04/05/2008
|
capisco.
(Ancora tanta invidia e tanta gelosia al tipo che è riuscito a fare questo)
Come detto in altri topic. Un tipo ci e' riuscito.
Non sò come cavolo abbia fatto ma ci è riuscito.
Altro ancora, chiedevo perché immaginavo che in C++ poteva esistere qualcosa tipo come il .net esempio il reflector.
che si riesce a risalire a classi ed a funzioni.
Con IDAPro non è possibile farlo?
ho trovato
https://en.wikipedia.org/wiki/Run-time_type_information
|
|
TheDarkJuster (Member)
Guru^2
Messaggi: 1620
Iscritto: 27/09/2013
|
"(Ancora tanta invidia e tanta gelosia al tipo che è riuscito a fare questo) " a cosa ti riferisci?
Comunque, no: il bello e brutto del C++ compilato da gcc e simili è che ne esce codice macchina, quindi, niente reflection: non può esistere niente del genere.
|
|
Thejuster (Admin)
Guru^2
Messaggi: 2305
Iscritto: 04/05/2008
|
Precisamente lui ci e riuscito.
http://cherrytree.at/cms/lang/en/ultimate-part-3-loader/
Ma quello che non capisco ancora.e come diavolo a fatto a richiamare funzioni interne del programma.
Ma forse mi sa' che rinuncio. Credo di non essere ancora preparato per arrivare a questi livelli.
Conviene prima che mi studi per bene il c++ ed assembly. E questa cosa del code cave.
Iniettare piccole porzioni di codice non dovrebbe essere un problema. Nemmeno utilizzare la dll injection.
Ma il problea sta proprio in quello che voglio fare io.
E molto complicato
Ultima modifica effettuata da Thejuster il 03/08/2015 alle 17:17
|
|