Dias atrás eu estava dentro do
trem, indo trabalhar, dia chuvoso, todo mundo resolveu ir de trem, que por um
acaso estava extremamente lotado. Quando coloquei a mão no bolso, percebí que
meu celular já não estava mais lá. Entrei em desespero, afinal, faziam tres
meses que eu não fazia backup da minha lista de contatos. Não faço idéia de
quem o tinha pego, mas tenho certeza que alguém o surrupiou.
Suponhamos que havia um barbante
interligando meu celular à minha perna, amarrado em ambos os lados. Quando o
ladrão puxasse o aparelho do meu bolso, eu logo sentiria e poderia interceptar
a ação malígna deste indivíduo, agindo da maneira que minha consciencia me
mandasse.
Podemos entender API Hooking como sendo este
barbante. Uma engenhoca que se instala nos outros processos (o celular),
intercepta as funções que estes processos chamam (ato do celular ser puxado do
meu bolso), ter acesso a todos os parâmetros passados para estas funções (poder
ver os atributos de quem está tentando roubar o aparelho), poder alterar os
parâmetros originais passados para as funções (no caso, quebrar um braço ou uma
perna do ladrão) e alterar o resultado que as funções originais retornaram
(permitir ou não que o ladrão leve meu celular com ele).
Onde esta técnica é aplicada, dentro da computação?
Imagine poder interligar uma ponta deste “barbante”
na sua aplicação, e outra ponta em qualquer outra aplicação que esteja rodando
no seu Sistema Operacional? Seria interessante, pois o barbante seria puxado
toda vez que essa aplicação mexe um dedo.
Por exemplo, para cada
arquivo que essa aplicação excluir, o barbante te notificará, e você saberá de
qual arquivo se trata, permitindo que você possa permitir ou não a exclusão do
mesmo. Essa mesma idéia se aplica para cada operação realizada pela aplicação
como a cada arquivo que copia, a cada mensagem que mostra na tela, a cada
programa que ele executa, enfim, qualquer ação que ela realiza.
Agora que você tem uma idéia
do que é esta técnica, baixe alguns aplicativos de demonstração e a biblioteca
BmsApiHook, que estão em Downloads -> BmsApiHook, e estude a forma
com que eu aplico API Hooking. Bons estudos!