Mapear Funcionamento de Software

Amigos(as)… estou querendo desenvolver uma aplicação que use o funcionamento de um software que já existe. Para isso eu tenho que saber como o software funciona e quais os comandos ele emite no sistema para executar suas funcionalidades. Exemplo:

Digamos que eu queira automatizar o funcionamento de um telefone VoIP por exemplo, existem vários softphones que podem ser instalados para fazer ligações VoIP, mas eu instalo e faço as ligações de forma manual. Se eu quiser que ele faça as ligações sozinho? Eu executo minha aplicação que insere o numero e ligue sozinho sem precisar eu mesmo abrir o softphone, colocar o numero e colocar para discar.
Acredito que para eu fazer isso eu teria que saber como o softphone se comporta no sistema, quais comandos ele emite e talz. Então a minha pergunta é…

Como saber o que está acontecendo no sistema operacional dirante o funcionamento do software existe?

Existe algum tipo de mapeamento do software?

Para saber o que um software faz realmente quando se comunica com um sistema operacional, você deve ter acesso ao código fonte e análisa-lo, entender as chamadas as API’s do SO, entender o código escrito, isso em uma linguagem auto nível, caso desça, você terá que entender sobre registradores, execução em memória e outras coisas.

Caso não tenha acesso aos fonte de um software para entender seu funcionamento por completo, o máximo que irá entender é a sua pilha de processos que ela executa ao ser aberto, serviços, ou seja, resultados mais genéricos, onde você conseguirá ter uma idéia superficial do que realmente acontece no background.

Dependendo da linguagem que foi escrito, da pra fazer a tal da "Engenharia Reversa"
Pesquisa um pouco sobre isso

Por meio da engenharia reversa se consegue descobrir por exemplo qual porta esta sendo utilizada e o que está sendo enviado pela porta???
Pq praticamente é isso…
Como um cracker consegue pegar informações enviadas de um dispositivo para outro sem conhecer como foi desenvolvido o app de envio… Isso é rede não é mesmo?! Neste caso seria então necessário fazer um mapeamento da rede para saber quais portas estão sendo utilizadas e o que está sendo enviado no momento que o app estiver em comunicação???

Parece muitas perguntas, mas é somente uma…

Raciocina comigo…

Existem muitos programas que conseguimos faze-lo funcionar através de comandos, seja na tela de comando do linux como o do windows, isso pq já sabemos quais são os comandos para fazer ele funcionar. O que quero é descobri esses comandos de qualquer aplicação que esteja rodando no meu computador.

Talvez eu esteja errado, mas…
Eu tenho um programa instalado no meu computador que executa vários comandos (no meu computador), sendo assim, se o programa é de terceiros, tudo bem eu não ter o acesso a linha de código de como ele foi escrito. Mas… se ele esta executando comandos no meu computador eu não posso saber que comandos são esses???

Se voce quer saber o que um programa trafega por alguma porta é facil, é so usar um “Sniffer”, ou coisa do tipo.
Tenta ser mais especifico, exatamente o que voce quer fazer, qual o programa que voce quer “mapear”?

Não é o que você busca, mas existe um programa chamado “Watch4Folder” que monitora todas as suas atividades em seus arquivos e pastas. Não sei se vc vai conseguir saber tudo o que um software de terceiro faz, pra isso vc teria que ter um interceptador sei la, pra saber o que está sendo chamado, parâmetros, tal.