mutex ja existe, acabou de ser criado como vimos.MaisvalidacoesNovamentee chamada a funcao FilePathInfo e ela retornara 0, ja queo arquivo nao esta dentro do diretorio TEMP. Nao identifiquei anecessidade de chamar a TestMutex e a FilePathInfonesse trecho de codigo.Prosseguindono Main Code, e chamada a funcao que denominei GetToken.Nessa funcao ha uma serie de chamadas a funcoes relacionadascom o SID (Security Identifier) do processo em execucao. Ficou meioobscura a funcionalidade dela pra mim, mas de forma geral tem a vercom as permissoes de acesso do usuario que esta executando oprocesso, e feita algumas comparacoes relacionadas a isso.Pareceque se o usuario nao tiver privilegios suficientes o processo efinalizado. Nos meus testes essa funcao sempre retornou 1, masvemos que se ela retornar 0 e chamado o codigo que prepara afinalizacao do processo.Abaixo acontinuacao do Main Code para prosseguirmos com a analise.Como aGetToken retornou 1, a execucao prosseguira para a chamadada FilePathInfo novamente. Como sabemos ela verifica se oexecutavel esta dentro do TEMP e retorna 0 caso nao esteja, que eo valor retornado aqui.O Jumpredirecionara para o bloco de codigo ExecFile. Esse por suavez chama a funcao rotulada por mim como ExecuteFile. Preparacaopara a 2a ExecucaoA funcaoExecuteFile possui diferentes caminhos com diferentesvalidacoes, vamos passar pelas instrucoes mais interessantes.Poucodepois de armazenar espaco na pilha para as variaveis locais, afuncao chama a FilePathInfo para testar se o executavelesta no TEMP. Nao estando la e feito um jump para o bloco decodigo que denominei NotInTEMP. Abaixo seguem as instrucoesdesse bloco.Pelo nomeque coloquei nas funcoes ja da pra ter uma ideia do que elasfazem. A GetTEMPVar busca o caminho do diretorio %TEMP%,ReturnPath busca o caminho completo do executavel,ReturnFileName retorna somente o nome do arquivo,RemoveExtension retira do nome do arquivo a extensao, o.exe (poderia ser ponto qualquer coisa).Depois eutilizada uma string criptografada que equivale a .exe. Porfim, e chamada a funcao MakeNewPath que faz a concatenacaode tudo:%TEMP% +FileName + .exeE emseguida a GetNewPath retorna esse caminho:C:\DOCUME~1\ADMINI~1\CONFIG~1\Temp\Declaracao2011.exeAposconstruir o caminho e hora de salvar o arquivo em disco, isto e,fazer uma copia do arquivo no diretorio TEMP. A funcao que fazisso esta logo abaixo, chamada de WriteMZFile.Apossalvar em disco ha uma chamada para a funcao GetOSVersion,ela e responsavel por verificar a versao do Windows, nao seidizer se essa verificacao foi adicionada pelo programador ou peloproprio compilador, o codigo dela esta a seguir.A funcaoGetVersionExW da API do Windows tem a seguinte definicao:Retrievesinformation about the current operating system. If the functionsucceeds, the return value is a nonzero value. If the function fails,the return value is zero.Comoparametro a funcao recebe uma estrutura de dados chamada deVersionInformation que recebera as informacoes do sistemaoperacional caso tenha sucesso. Essa estrutura possui o campodwMajorVersion que e o versao numerica principal do SO. NaMSDNha uma tabela com os nomes e versoes possiveis para essecampo.Basicamente,a versao sera:6 para Windows 7, Server 2008 e Vista.5 para Windows 2000, XP, Server 2003.Vemos nocodigo que ha uma comparacao com o 6 que determinara o valor doEAX (AL). Se a versao for 6 o AL (EAX) recebera 1, caso contrariorecebera 0 (xor eax, eax).E o EAXsera o retorno da GetOSVersion,que apos a chamada da funcao e