Aller au contenu

appels systeme sous windose


Messages recommandés

donc pour en venir aux fonctions, après avoir lue (en partie) les fonction en lien, comme son nom l'indique, j'utilise OpenSCManager pour recuperer le handle du gestionnaire de service de ma machine en lui fournissant les droit d'accès adequate.

ensuite je fait echouer une premiere fois la fonction "EnumServicesStatusEx" (comme pour le TCP_TABLE) de facon a recuperer la taille en octet (dans le parametre "pcbBytesNeeded") a alloué a mon tableau de structure recevant les informations.

par contre la ou j'ai plus de mal c'est sur le 2e parametre de la fonction "infoLevel" de type SC_ENUM_TYPE...

[EDIT]

je continue tout a l'heure il est trop tard j'arrive plus a réflechir :transpi: .... :dd:

(je réponds que sur ça, il est "tard", je suis fatigué '^^)

SC_ENUM_TYPE n'a qu'un seul type énuméré, SC_ENUM_PROCESS_INFO (c'est ça qu'il faut lui donner, ou sa valeur, 0), tu n'as donc pas beaucoup de question à te poser dessus ^^

Lien vers le commentaire
Partager sur d’autres sites

(je réponds que sur ça, il est "tard", je suis fatigué '^^)

lol, sa c'est mon coté "pov petite nature" :craint: j'avais fini par trouver,

j'avais edité mais avec une coupure de ma carte reseau qui a durée un bon moment le post est passé a la trappe... (sa m'apprendra a faire n'importe quoi...)

sinon donc j'ai fini par implanté la fonction chargé de retrouver le nom des service (pas mal pompé sur msdn d'ailleur).

et partant de la le resultat ... disons que certain port sont en listen avec un seul service et d'autre avec plusieur, parfois il est possible de "deviner" grace au nom quel est le service qui ouvre le port (quand il sont plusieur) mais franchement c'est pas tip top, et en plus dans ce cas je me vois pas les stopper.

mais y'a d'autre cas ou c'est plus louche, genre mon logiciel de graveur CD/DVD qui ouvre 3 service, chacun d'entre eux ouvrant un port ... :byebye: (et sa c'est quand le graveur est inactifs ... )

du coup je repensait a Regmon et je me demandais si y'aurait pas une methode avec les hooks pour savoir si un process fait un appel a winsock par exemple (au moin dans un premier temps sa me permettrait, peut etre, de savoir quels services mettent ces port en listen...)

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

salut,

en reprennant mon netstat perso je me suis rendu compte que pour la fonction qui me permet de recuperer le handle de mon process

process=OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,FALSE,tcpModule->table[i].dwOwningPid);

un appel a GetLastError me renvoie une erreur "ERROR_ACCESS_DENIED" pour certain PID (svschost, wininit.exe, system, etc...)

a priori je doit activer le "SeDebugPrivilège" par l'intermediaire de " AdjustTokenPrivileges" ou "CreateRestrictedToken".

quelqu'un pourrait il rapidement m'expliquer la logique/fonctionnement afin que je puisse recuperer ce handle.

[EDIT]

bon d'après ce que j'ai pu suivre a cette adresse : http://www.volynkin.com/debug.htm

il faut recuperer le handle de sont propre process et lui attribué des droit suffisant par l'une des deux fonction precitée.

j'ai bien tester le code tel-quel qui ne fonctionne pas des masse (meme s'il s'execute sans probleme)

et d'après ce que me dit MSDN adjustTokenPrivilèges ne permet pas d'avoir des privilèges plus éléver que les privilèges maximum associé au jeton du programme (peut etre un peut brouillon mon explication...)

bref apparament il faudrait peut etre plutot utiliser "createRestrictedToken" en "dupliquant" ou "usurpant" le token du process dont je veut lire les donné et apparament attribué un nouveau token disposant de ces droits a mon process (peut etre mais je suis pas sure de ce que j'ai lu )...

Lien vers le commentaire
Partager sur d’autres sites

bon bah en fait le code fonctionne (pour tout les process sauf le process SYSTEM (PID 4)... - pour l'instant) faut juste penser :

a lancer l'execution en statut administrateur et a ne pas etre en DEBUG (remarque - a priori les 2 sont incompatibles).

reste plus qu'a trouver, selon le cas, quel service est impliquer dans la connexion, et comment obtenir le handle pour system, et comment faire en sorte d'avoir par defaut une execution en statut admin (je pencherait peut etre soit pour la creation d'une install, soit pour un lancement au demarage systeme mais c'est une idée en l'air... (je veut voire si sa vol :cartonrouge: ))...

Lien vers le commentaire
Partager sur d’autres sites

As-tu regardé cette partie de la doc sur les applications qui ont besoin des droits admin ? Certes tu ne peux pas élever une application en cours de route mais ça te montre qu'il y a des moyens de contourner cette restriction.

merci du tuyau, je vais regarder sa de pret.

quand tu dit en cours de route, tu veut dire une application déja en cours d'execution ...?

(ce qui rejoindrai l'idée de la doc concernant le lancement d'un autre process disposant des droit, ou a faire un RPC)

Lien vers le commentaire
Partager sur d’autres sites

ha zut! moi qui reve de visiter kernell-parc depuis que je suis tout petit :francais:

ouais le manifeste pourrais etre une idée faudrat que je lui colle une boucle qui me le met a jour toute le X seconde et que je compile sans poru linux

d'un autre coté sa a l'air d'etre la solution la plus simple...

si je me trompe pas il faut que je jette un oeil du coté de la base de registre pour voire comment elle fonctionne et où ecrire...

d'après ce que j'ai compris il est aussi possible d'envoyer un signal d'interruption au proc pour lui dire de basculer en mode kernell mais bon c'est de l'ASM et en plus je connais pas la procedure (en plus c'est un peut loin pour l'instant et sa doit etre beaucoup plus compliquer que sa...)

[EDIT] ha, meme pas besoin de la bae de registre en fait...! , une simple compilation avec les propriétés du fichier manifeste dans l'editeur de lien regle tout sa tout seul...

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

bon, une petite appartée qui a rien a voir avec ce sujet :

j'apprend plein de truc avec le C et l'algo ce qui est deja bien. D'un autre coté, si ont part du principe que l'interet fondamentale de coder c'est de faire executer des instructions a une machines "faite" de composant electronique, et que pour ce faire ont passe par différentes couches qui composent un systemes d'exploitations, pigé le "shmilblick" est pour le coup plutot pas évident...

pour donner un exemple :

grosso-modo en ce moment mon temps se partage comme sa : lectures de tas de bouquin et d'infos diverse 85% ( je viens de finir "systemes d'exploitations" de Tannenbaum, ... ), les 15 % restant sont partagés entre le codages de mon "netstat" (pour lequel je finis surtout par avoir l'impression de bidouiller) et de l'entrainement sur les structures de données.

pour en revenir au (très épais mais néamoins interessant) bouquin de Tannenbaum, bien qu'il explique comment est conçu un systeme d'exploitation il est très loin d'etre exploitable à mon niveau et il m'à pas tellement aidé du point de vue codage

bon je sait pas si mes propos sont très explicite mais ce que je veut dire part la c'est :

- est-ce que passer sur un OS peut etre moins complexe (j'ai entendu dire que les etudiant en infos utilisent beaucoup MINIX...) pourrais me permettre d'acquerir certaines base / logique qui me permettrait de mieux appréhender les autres OS par la suite...

- est-ce que remettre mes objectifs a plus tard et passer a un autre langages (C++ ou autre ?) me permettrait de regler ce probleme ??

(sinon pour faire plus simple avec tout leurs MFC, COM, OLE, NET, ADO, ATL, code managé, module, services, registre, process speciaux (PID4), framework, jeton d'acces authorization et ACLs, .... , pour moi... c'est le bordel et je m'y retrouve pas)

donc qu'est ce que je peut faire pour eclaircir tout sa ?

Lien vers le commentaire
Partager sur d’autres sites

Un sage quelconque a dit un truc qui ressemblait à : Pour manger un éléphant, mieux vaut le faire avec plusieurs petite bouchées qu'une grande :transpi:

Pour formuler autrement toutes les technos que tu cites certes elles existent mais tu n'as pas absolument besoin de les connaître pour faire ce dont tu as besoin dans l'immédiat, à part une ou deux. Profite de ton projet pour apprendre ces une ou deux tranquillement sans t'encombrer l'esprit avec le reste, et fait le reste transuillement, un par un. Enfin moi c'est comme ça que je m'organise :francais:

- est-ce que passer sur un OS peut etre moins complexe (j'ai entendu dire que les etudiant en infos utilisent beaucoup MINIX...) pourrais me permettre d'acquerir certaines base / logique qui me permettrait de mieux appréhender les autres OS par la suite...

Éventuellement, la difficulté résidant à mon avis dans le fait d'être motivé pour développer sous Minix ou autre... apprendre de nouvelles librairies... à toi de voir

- est-ce que remettre mes objectifs a plus tard et passer a un autre langages (C++ ou autre ?) me permettrait de regler ce probleme ??

non. Les technos que tu éviteras en changeant de plate-forme seront remplacées par d'autres. Et tu vas t'éloigner du noyeau ce qui va ralentir ta compréhension des mécanismes bas niveau.

Lien vers le commentaire
Partager sur d’autres sites

Un sage quelconque a dit un truc qui ressemblait à : Pour manger un éléphant, mieux vaut le faire avec plusieurs petite bouchées qu'une grande :mdr:

Pour formuler autrement toutes les technos que tu cites certes elles existent mais tu n'as pas absolument besoin de les connaître pour faire ce dont tu as besoin dans l'immédiat, à part une ou deux. Profite de ton projet pour apprendre ces une ou deux tranquillement sans t'encombrer l'esprit avec le reste, et fait le reste transuillement, un par un. Enfin moi c'est comme ça que je m'organise :transpi:

pour reprendre ton idée que je suis en train de tester , ne sachant pas de quelle technos^^ je vais avoir besoins (sa depend de ce dont ont besoins les fonctions que j'appel :fou: ), je me les tape toutes une par une. et sa a l'air de plutot bien fonctionner comme technique. (meme si c'est long...)

maintenant je pense que je vais quand meme test minix quitte a me faire chier un peut sa à l'air beaucoup plus simple... (je vient de sauver une machine de la casse pour le coup, c'est ma petite B-A de la journée :yes: )

d'ailleur je me suis rendus compte d'un petit truc un peut bizarre :

sur la structure MIB_IF_ROW2 Structure je vient de me rendre compte que les champ "InDiscards" et "OutDiscards" correspondent, je cite :

"Indique le nombre de paquets entrant (/sortant) qui ont été rejeté malgré qu'aucune erreur n'ait été détectée afin d'empêcher qu'ils ne soient transmit à un protocole de couche supérieur … "

partant de la sa peut toujours venir d'une erreur de traduction de ma part (surement d'ailleur...), mais dans le cas contraire j'ai du mal a comprendre pourquoi de temps en temps ont ferais "chier" la couche superieur en lui filant pas un ou deux paquets correcte par si par là. (à moins que ce soit l'implementation informatique standard du syndicalisme - :mdr: joke inside).

la version originale est ici :

The number of inbound packets which were chosen to be discarded even though no errors were detected to prevent the packets from being deliverable to a higher-layer protocol.
Lien vers le commentaire
Partager sur d’autres sites

Généralement l'augmentation des packets ignorés est un signe que la mémoire tampon de la carte réseau est plein et qu'il jette les paquets par le fenêtre parce qu'il ne peut plus les stocker...

ouais dit comme sa sa parrait coherent et c'est surtout beaucoup plus simple,... vilain msdn qui me fait raconter n'importe quoi :D

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...