RSS Feed

Autodelete

August 11th, 2008

Scrisesem mai demult o mica aplicatie care odata ce facea ce facea ( chit ca facea ceva rau :) ) trebuia sa se stearga . Stiu ca m-am pus si in cap numai sa-mi dau seama cum se face chestia asta. Dar cunostintele mele de pe atunci nu cuprindeau Windows programming si pana la urma m-am lasat pagubas . Iata ca acum mi-am pus problema din nou insa intr-un nou context. L-am luat la intrebari pe Andrei , prietenul meu din Satu Mare ( Cluj in curand ) si mi-a spus ca se poate rezolva treaba printr-un alt thread care ar fi trebuit sa ruleze remote intr-un alt proces. Ceea ce insemna clar … Code Injecting. Asa ca m-am pus pe invatat code injecting . Si m-am tot chinuit 1 zi intreaga … pana la urma am apelat la ajutorul aceluiasi Andrei care mi-a suportat cele o mie si una de intrebari despre acest mecanisim . Si a inceput omu sa explice… si explica… si explica… si eu tot nu intelegeam :) Rar mai gasesti oameni ca el .Probabil s-a cam sictirit de atata explicat … dar in cele din urma m-am prins cum merge treaba.
Dupa ce am invatat code injecting si l-am si stapanit in linii mari , am trecut la ofensiva . Sa scriu un program care se sterge singur dupa executie.
Problema suna bunal . La sfarsitul codului trantesc un DeleteFile(…) si gata. Problema nu e asa usoara. Daca procesul se afla inca in executie , stergerea esueaza. Asa ca am mers pe ideea lui Andrei, aceea a crearii unui thread remote intr-o alta aplicatie. Dar care ? Ca sa nu afectez niciun alt proces, am preferat sa-mi deschid eu personal un banal “calc.exe” . Apoi am injectat in el bucata de cod care sterge fisierul de pe hard-disk. Initial am abordat o varianta mai complicata .Thread remote verifica daca poate deschide procesul mai poate fi deschis intr-o bucla infinita . Am decis sa renunt la aceasta varianta dintr-un motiv foarte simplu : eu oricum imi doresc sa sterg procesul dupa ce isi termina executia . Prin urmare, dupa ce am creat thread-ul remote , imediat procesul meu se termina . Astfel pot apela lejer functia DeleteFile din thread-ul remote, fiind absolut sigur ca programul nu mai functioneaza. Dupa ce sterg executabilul, apelez ExitProcess din thread-ul remote si “calc.exe” se inchide … De fapt … toata acestea se petrec extrem de rapid. Utilizatorul nu apuca sa vada nicio fereastra pe ecran. Luasem masuri si impotriva acestui lucru … cand deschideam calc.exe , specificam functiei CreateProcess/ShellExecute sa ascunda fereastra insa se pare ca niciuna din cele 2 API-uri nu reuseste acest lucru asa ca am renuntat in cele din urma. Merge si asa…
Codul … nu il pun aici caci e destul de mare … am postat pe Softpedia o librarie in care am implementat functia care realizeaza acest lucru . Daca doriti, ma puteti contacta pe mess la adresa msmihai pentru acest lucru . Sau pe e-mail. Toate cele bune.

Revin…

August 11th, 2008

Iata ca revin dupa o oarecare pauza … am terminat anul I … am ajuns acasa … m-am lasat de ASM :) Da stiu , la cum arata pagina asta, e destul de greu de imaginat . Dar … asa e . Totusi sa nu se inteleaga gresit . Cunosc ASM-ul in mare parte, stiu cu se mananca , insa … nu-l mai folosesc . In schimb mi-am gasit timp sa ma plimb pe bicicleta … sa mai petrec timpul si altfel decat programand . Totusi … blestemul e blestem . Tot trebuia sa invat ceva vacanta asta … ceva ce n-am facut niciodata… si iata-ma ajuns la Win32 Programming, in toata splendoarea sa . Mi-am indeplinit un obiectiv pe care l-am avut de prima oara cand am pus mana pe Visual Studio si anume sa scriu o aplicatie GUI de la 0 . De altfel, acesta a si fost motivul pentru care am refuzat Visual Studio atata vreme in favoarea C++ Builder. Cu putin efort iata ca am reusit. Am mai invatat cateva chestii interesante legate de Win32P , precum hooking,injecting … dar nu intru in amanunte :) Multi ma intreaba daca nu m-am plictisit in vacanta … mai toata lumea isi ia slujbe, se ocupa cu ceva util in vacanta … mie imi place sa fiu liber. Sa-mi pun rucsacul in spate si sa mai fac o plimbare la Iasi ( in curand, poate saptamana viitoare, mai fac una ) . Raspunsul e nu … nu m-am plictisit. Am reusit sa combin de minune programarea cu alte activitati . Si ma apucasem si de citit Biblia candva… am renuntat .