IntroducaoO objetivo desta ultima parte na analise com o bradesco3.exe e olhar o codigo, como agora o malware foi "descompactado" e possivel verificar o codigo de uma forma mais facil. Verificando o codigo do malware e a melhor forma de ter certeza que a regra criada para detecta-lo foi realmente bem escrita, pois, dependendo do ambiente em que o malware esta sendo executado pode nao estar executando certas acoes. Como este malware e relativamente simples, o que interessa nessa analise de codigo e descobrir se de alguma forma a URL e randomica ou estatica, para que possamos possivelmente melhorar ou encontrar alguma falha na regra do snort criada para detectar a atividade de rede deste malware como mostrado neste post. Analisando o codigoEmbora o mais comum seja utilizar um disassembler como o IDAPro, o OllyDBG me serviu para analisar este simples malware, alem do que utilizei mais debugging do que realmente ler o codigo por completo. Alem disso, optei por nao utilizar um disassembler para Delphi.Logo no inicio, endereco 0x00472874, vi uma string que ja valeu o trabalho fazer o unpack do arquivo:Deve ser algum stilo Restart de programar. Nao faz sentido algom o uso desta string "EUATETEAMEIMASVOCENAOVALENADAMESMO".Indo ao que interessa (URL), olhando as strings disponiveis apos "descompactar" o malware, percebi que a URL e os parametros nao estao em texto puro, provavelmente sendo gerados na execucao. Entretanto, encontrei a string "http" em 0x0046F5B0 e colocando um breakpoint neste endereco percebi que a stack ja tinha todos os parametros da URL.00DEFF44 |00B096B8 ASCII "http://www.shanhaiichiba.com/banner_inc.php"00DEFF48 |00B425B8 ASCII "PAL"00DEFF4C |00B3AC08 ASCII "A6CECFCDC5BD"00DEFF50 |00B09778 ASCII "&NOME="00DEFF54 |00B493D8 ASCII "PWD"00DEFF58 |00B3A828 ASCII "C4C1C4CFD3BD"00DEFF5C |00B09738 ASCII "DADOS="00DEFF64 |00B28358 ASCII "T=C&DADOS=PWD&NOME=PAL"Portanto, em alguma funcao acima do endereco 0x0046F5B0, foi extraido a URL e os parametros, se observarmos "DADOS=" e "C4C1C4CFD3BD", 'D' = "C4", assim como 'A' = "C1" e 'O' = "CF", pois em "&NOME=" e "A6CECFCDC5BD" "CF" esta na terceira posicao assim como a letra "O".Provavelmente, estes dois utilizam as mesmas funcoes para extrair os parametros da URL. O inicio da funcao onde esta 0x46F5B0 e o 0x0046F524 e colocando um breakpoint neste endereco, notei que esta funcao e chamada por 0x0046F721 e 0x0046F88E.Ao verificar a funcao onde se encontra 0x0046F721 e percorrer a mesma a partir do inicio 0x0046F67C, notei que esta e a funcao responsavel por extrair os parametros da URL:"T=C&" hard-coded em:0046F6AC PUSH bradesco.0046F7D8 ; ASCII "T=C&"0046F6B9 CALL bradesco.0040658CRetorno: EAX=00B3A828 ASCII "C4C1C4CFD3BD"0046F6C4 CALL bradesco.0046DF34Retorno: 00B09738 ASCII "DADOS="0046F6CF MOV EAX,DWORD PTR DS:[EBX+48]0x00B41D38 fixo "PWD"0046F6D2 CALL bradesco.0046F1C4Retorno: EBP-18 ASCII "PWD"0046F6E2 CALL bradesco.0040658CRetorno: 00B3AC08 ASCII "A6CECFCDC5BD"0046F6ED CALL bradesco.0046DF34Retorno: 00B09778 ASCII "&NOME="0046F6FACALL bradesco.0046F988Retorno: 00B425B8 ASCII "PAL"0046F70A CALL bradesco.00404CCCRetorno: 00B28358 ASCII "T=C&DADOS=PWD&NOME=PAL"0046F712 MOV EAX,DWORD PTR DS:[4748FC]DS:[004748FC]=0046F4540046F454: ASCII "E8F4F4F0BAAFAFF7F7F7AEF3E8E1EEE8E1E9E9E3E8E9E2E1AEE3EFEDAFE2E1EEEEE5F2DFE9EEE3AEF0E8F0" 0046F717 CALL bradesco.0046DF34Resultado: 00B096B8 ASCII "http://www.shanhaiichiba.com/banner_inc.php"Embora a URL nao esteja disponivel em texto puro, ela nao se modifica, hard-coded em 0x0046F454. Na funcao 0x0046F988, e utilizada a funcao GetComputerNameA para obter o hostname:0046F9AC CALL 'JMP.&kernel32.GetComputerNameA ; \GetComputerNameAAjustando a regraA atual regra para este malware e a seguinte:alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS (msg:"Bradesco Malware Communication Detected (plugin.exe)"; flow:established; uricontent:"&DADOS=";http_client_body;content:"&NOME=";http_client_body; sid:100000000;rev:1; )Basicamente, checamos a URI por &DADOS= e &NOME=. Porem, e