Compra de opções binárias trading bracknell Assistente virtual Este é um campo com muito potencial, em parte porque a descrição do título abrange muitas coisas. Você pode ajustar suas ofertas para o quê. Vídeo PicsArt Óleo Pintura Efeitos-PicsArt Novo Fx II PicsArt Tutorial Android Apps PicsArt (compra de opções binárias trading bracknell) Obtenha hands-on experiência construção e derivando insights de máquina aprendendo modelos usando R, Python e Azure Machine Learning. Tome este curso livre em. ContentTypes. xml I): C9N NUZB gtN rels /.rels Agtquotf3.blI palavra / rels / document. xml. rels (x / vw palavra / documento. xml gjwv N39quotDiK amplXn1 P4dd. D ZDeH (Ex7M FzJ gI 4yo gtOv V (s Quot (X 8pPl /) s (9 / dh o 39q) 5 quotIQampcb u Ktwx mHquotTg palavra / tema / tema1.xml w toc39v) Em 3Vq39q: TZaG LM2 eO c Qg20pp DU4 hsF,) 3939K K439 vtK Ow SZ sY 0X4D) f -45x / Yt palavra / settings. xml qgdfIK HM9 t2zx quot1ampq Tn UKA palavra / fontTable. xml Y tf / amp 6vY BV UM palavra / webSettings. xml 0JHR (imgtQ42 pt MUH 8s ZyD, S xb9 docProps / app. xml Y vMH) 3E z56lt amp15E docProps / core. xml hp dl DlFh palavra / estilos. xml yj, z Ss49gt gtKs rnx n, BdA ErgS hMo Mq6H E9 hC / bo w9Of: 5A: 5A bKzP kp gtslt1 ContentTypes. xmlPK rels /.relsPK palavra / rels / document. xml. relsPK palavra / documento. xmlPK palavra / tema /theme1.xmlPK palavra / settings. xmlPK palavra / fontTable. xmlPK palavra / webSettings. xmlPK docProps / app. xmlPK amp15E docProps / core. xmlPK palavra / styles. xmlPK Parceiros Publicações Se olharmos atentamente para os números de inflação para os EUA, por último Semanas PPI número incluindo os dados de núcleo registou uma queda decente. PPI em abril caiu 0,4 MoM enquanto core números caíram 0,2. Enquanto menor inflação marca um caso negativo para o ouro que é tratada como uma proteção contra o aumento da inflação, estes dados juntamente com fraqueza recente em números de trabalho mensal e CPI marcar um cenário para o cenário de alívio prolongado da US FED e suportar bullishness na commodity. Outros NewsFast DGA geração com Miasm Feito famoso pelo worm Conficker, algoritmos de geração de domínio impedir cybercriminels de criação de uma complexa rede P2P para um servidor de comando e controle. Sem tornar muito fácil para a comunidade de segurança desligar a infra-estrutura usando IPs ou domínios hardcoded no binário. A semente destes algoritmos é freqüentemente baseada na data, mas lembramos do bom e velho Torpig, que também usou as tendências diárias do Twitter (um truque simples, porém engenhoso, para impedir o registro dos domínios antes do dia atual). Neste post, vamos demonstrar alguns métodos para automatizar a geração de domínios DGA, tomando o exemplo do pequeno Locky ransomware. Método 1: transcrição manual Aqui está o rastreamento de rede de uma execução Locky em 1 de abril de 2017: O binário tenta entrar em contato com: 4 IPs codificados no binário descompactado então, se nenhuma conexão puder ser feita, 8 domínios parecidos com uma DGA A DGA Algoritmo de Locky é inicializado por uma semente de 4 bytes armazenados em uma pequena configuração dentro do binário descompactado: Uma análise rápida revela o objetivo de cada elemento de configuração: AffiliateId. Identificador de botnet usado como o parâmetro affid na solicitação GET para recuperar a chave pública DGASeed. DGA inicialização de sementes, 0x4d nesta amostra Sleep. Número de segundos a aguardar antes de criar a chave de registro HKCUSoftwareLocky (padrão: 0x1e 30s) Svchost. Copie sob o nome svchost. exe (padrão: não) Reg. Persistance através da chave Run de HKCU (padrão: não) ExcludeRussian: exclusão de sistemas russos (padrão: sim) ServerIPs. Lista de 4 IPs a contactar A DGA é simples e pode ser dividida em 3 fases: 1) o algoritmo é inicializado com a semente acima, bem como o ano corrente, mês e dia, através de algumas operações aritméticas simples. Um índice incremental também é passado para a função através do registro ECX 2) um loop gera um caractere de cada vez 3) a extensão é gerada usando um índice em uma seqüência fixa de TLD O algoritmo é muito simples e pode ser implementado manualmente Algumas linhas de Python (v32 () é o truncamento para 32 bits): Let8217s executar esta função para a data 2017/04/01: Os 8 domínios gerados para este dia correspondem aos da captura Wireshark. Mas o que sobre os outros dias Um poderia, obviamente, modificar a data no Windows e lançar Wireshark para cada day8230 Que tarefa chata. Uma maneira melhor é gerar todos os domínios para abril e maio e comparar o resultado com uma lista gerada automaticamente para validar nossa implementação. Método 2. método tradicional com GDB / Python Locky8217s DGA é muito simples e poderia ser implementado rapidamente, mas se tivesse sido mais complexo, wouldn8217t foram concebíveis para fazê-lo totalmente à mão. Um método para resolver este problema é instrumentar uma máquina virtual com GDB e Python, como mostrado em um post anterior sobre Zeus P2P e Dyreza. Dois pontos de interrupção devem ser usados: 1. No início da função, por exemplo, logo após a chamada para GetSystemTime (). De modo a inicializar os registos ea pilha para o estado relevante: ESI contém a semente EDI contém o índice uma variável aponta para uma estrutura SYSTEMTIME cujos deslocamentos 0, 2 e 6 contém o ano, mês e dia, respectivamente 2. Nós deixamos o Pedaço de malware executar até atingir um segundo ponto de interrupção onde o domínio correspondente a esses parâmetros foi gerado. O índice é então incrementado e, sobrescrevendo algumas instruções, o programa salta de volta para o primeiro ponto de interrupção para gerar outro domínio. Se o índice atinge 8, ele é redefinido e o dia é incrementado. O seguinte script GDB / Python implementa esse método e gera automaticamente todos os domínios para abril e maio de 2017: O resultado é armazenado em dga0x4dmethod2gdb. txt. Como estamos executando o Locky em uma máquina virtual completa, esses domínios são considerados como nossa referência. Let8217s compará-los com o resultado da nossa implementação manual (método 1): Nossa implementação manual parece correta. Método 3: caixa de areia fina O método anterior funciona perfeitamente, mas para um malware simples como Locky, talvez possamos encontrar algo mais fácil de usar. Afinal, por que devemos instrumentar um sistema operacional completo quando só precisamos executar algumas instruções de montagem básicas Miasm fornece uma caixa de proteção que aborda isso. O primeiro bloco chama o memset () para redefinir a zona onde o domínio deve ser gerado, em seguida, imite isto em Python com um segundo ponto de interrupção: Miasm Criou uma zona de memória para a pilha começando no endereço 0x130000: Por exemplo, configuramos EBP para 0x13f000: O domínio será gerado em um endereço de memória arbitrário e var40 deve apontá-lo, como exigido pelo código DGA: Finalmente, nós Definir a semente, índice e data (IDA indica que o ponteiro de estrutura SYSTEMTIME está desativado por 0x24): A execução será iniciada a partir do endereço logo após a chamada para GetSystemTime (): IDA indica que a seqüência de caracteres TLD está em 0x413D5C já foi Mapeado pelo analisador Miasm PE como parte da seção binário. rdata: Se este mapeamento hadn8217t foi feito automaticamente, ele poderia ter sido adicionado manualmente: A emulação gera corretamente o primeiro nome de domínio para a data 2017/04/01: Após quase O mesmo esquema que o script GDB do método 2, o script a seguir gera os nomes de domínio para abril e maio de 2017 com uma sandbox Miasm: Os domínios gerados dessa forma correspondem à nossa referência: Método 4: execução simbólica 4.1 Inicialização DGA No método automatizado 2 E 3, nós simplesmente executado código Locky8217s sem tentar entender seu funcionamento interno. Quando o objetivo é reimplementar o algoritmo é C ou Python, por exemplo, esses métodos não são relevantes. Se a complexidade da DGA tornar a transcrição manual (método 1) inviável, precisamos de uma ferramenta para gerar automaticamente uma versão de alto nível do algoritmo a partir de suas instruções de montagem. Miasm tem um engenho simbólico de execução para este propósito. Let8217s começar por desmontar o bloco inicializando Locky8217s DGA, entre os endereços 0x406d67 e 0x406dfa (ver método 1 para os 3 estágios do algoritmo): A execução é lançada neste primeiro bloco: No código, podemos ver que várias operações são realizadas em O registo EAX e que o valor resultante é armazenado em var14 (EBP0xFFFFFFEC). A expressão pode parecer complexa à primeira vista, mas ainda podemos reconhecer adições e multiplicações com as constantes já vistas para as rotações do método 1, da esquerda (ltltlt) e da direita (gtgtgt) Bem como o uso de várias variáveis de pilha. Let8217s usar Miasm para simplificá-lo. Podemos começar por substituir registros ESI e EDI lidos pela semente e índice: Também podemos substituir leituras da estrutura SYSTEMTIME na pilha por identificadores mais legíveis: Estas são as mesmas inicializações que as feitas com o GDB eo sandbox fino para os métodos 2 E 3. Após outra execução, obtemos: A expressão pode ser simplificada mais substituindo constantes por c1. C2 e c3, utilizando o motor de simplificação Miasm: No que diz respeito às variáveis de ano e mês, eles vêm de campos de 16 bits dentro de uma estrutura SYSTEMTIME e são estendidos a zero para 32 bits através das instruções movzx. No idioma intermediário Miasm, isso corresponde a uma expressão ExprCompose, observada com chaves. Para torná-lo mais legível, let8217s simplificar a ano. E fazer o mesmo para o mês: Para a variável de dia, Locky usa a instrução shrcx, 1, traduzida por Miasm em uma composição de 32 bits estendida ecx1: 16. Let8217s simplificá-lo para o dia gtgt 1 apenas: Com estas 6 simplificações básicas, obtemos a seguinte expressão: A expressão assustadora foi convertida em um perfeitamente legível one-liner. Nas zonas de memória alteradas, também observamos a reinicialização da variável var10: O loop DGA termina comparando var10 com EBX computado neste primeiro bloco: Reconhecemos var14. Então let8217s simplificar a expressão de var14 por um var14 identificador para torná-lo mais legível: Esta expressão representa o tamanho dos nomes de domínio gerados: 5 var140xB. Nos registos alterados por este bloco inicial, EDI é definido como 0x10: O primeiro bloco pode portanto ser resumido assim: 4.2 DGA loop O bloco de inicialização sendo entendido, let8217s continuam com o loop DGA. Sua execução simbólica não chega ao fim do bloco: O mecanismo de execução simbólico pára no salto condicional baseado em uma comparação entre var2C e EDI e can8217t diz qual ramo tomar. Sabemos que o EDI é definido como 0x10 pelo bloco anterior, deixando a variável zero para zero, já que o salto não tem impacto no próprio algoritmo: Let8217s também define as variáveis vistas no bloco anterior: Desta vez, a execução atinge o fim do Bloco e as seguintes áreas de memória foram alteradas: var10. Definido para zero no bloco anterior, em incrementado por 1 no loop e, portanto, é um contador. Var14 pode ser simplificado como mostrado anteriormente: Nesta expressão, var10 é estendida a zero para 32 bits e pode ser simplificada: Obtemos a seguinte expressão: O caracter gerado pela DGA está presente no EDX no final do loop: Reconhecemos A expressão de var14 o que nos leva à seguinte simplificação: É simplesmente 0x61 var1425. Com 0x61 ord (8216a8217). Este loop pode, portanto, ser resumido como: 4.3 Extensão Este é o último bloco à esquerda. Em 0x406e74, o registro EAX contém o índice na seqüência de TLD: EBPinit0xFFFFFFEC é var14 e pode ser simplificado: Agora geramos todos os elementos de algoritmo necessários na forma de expressões de Miasm: 4.4 Geração de código C Como o objetivo é traduzir o algoritmo Em C e Python, vamos converter essas expressões Miasm através de tradutores. Por exemplo, na expressão de inicialização var14: Para o número iterações: Observamos que a tradução C às vezes usa funções externas como rotleft (). Rotright (). Shiftrightlogic32 () ou umod64 (). Estas funções são implementadas em miasm2 / jitter / vmmngr. . Ao copiar o código C gerado desta forma por Miasm de todas as nossas expressões simplificadas, obtemos o seguinte código: Teste de Let8217s gerando os domínios de abril e maio de 2017: Miasm gerou corretamente o algoritmo e sua transcrição C está correta. 4.5 Geração de código Python A conversão de nossas expressões para Python não é tão direta: Mas como a representação textual de nossas expressões é muito próxima de Python, vamos gerar código Python válido com a ajuda de algumas substituições de expressão regular. A expressão que representa var14 no passo inicial é válida, exceto para as rotações esquerda e direita: Let8217s substituem a operação ltltlt b por um identificador rol (a, b) e um gtgtgt b por ror (a, b) com o seguinte código: Ao adicionar esta função para o engenharia Miosm simplificação, obtemos código Python válido para var14: O mesmo para a computação módulo: Este é também código Python válido e as outras expressões podem ser convertidas da mesma maneira. O único passo deixado é adicionar chamadas a v32 () para garantir a aritmética de 32 bits: Finalmente, var14 e nbloops têm a seguinte expressão de Python: Nós apenas temos que copiar / colar todas essas expressões de Python para um script: Teste de Let8217s para abril E Maio de 2017: Conclusão DGAs usados por malware atual geralmente são simples e podem ser facilmente traduzidos em qualquer idioma por um ser humano. Mas se o algoritmo for mais complexo do que excepted, ou atualizado freqüentemente, pode ser útil automatizar esta tarefa. Através de uma máquina virtual clássica, GDB pode fazer o trabalho, mas se alguém está procurando uma solução leve, a estrutura Miasm vem a calhar. Sua caixa de areia pode emular código de qualquer binário e gerar rapidamente os nomes de domínio, sem a necessidade de entender todos os detalhes da implementação DGA. Pelo contrário, se o objetivo é reconstruir o algoritmo para implementá-lo em outra linguagem, o módulo de execução simbólica Miasm pode gerar expressões em um idioma intermediário, correspondendo a registros modificados ou áreas de memória, que podem então ser reduzidas com seu mecanismo de simplificação. Traduzi-los em C ou Python pode então ser executado diretamente com o módulo Translator ou através de expressões regulares, de modo a obter o próprio algoritmo em vez do resultado de sua execução somente. Compartilhar informações sobre ameaças sempre foi, é, e continuará a ser um gene muito dominante no Lexsis DNA. Com 15 anos de atividade de inteligência de ameaças e um dos maiores CERT privados na Europa, a Lexsi tem a ver com o compartilhamento de informações de segurança com qualquer pessoa interessada: colegas, parceiros, outros CERTs, clientes e você. Bem-vindo onboardA boa opção para criar seqüências de caracteres com dados binários para salvar (por exemplo, salvar uma instrução sql para um arquivo) em arquivos de texto ou código php é fazer o seguinte: campo ltphp campo bin2hex (campo) chunksplit (campo 2.x) Campo x. Substr (field, 0, - 2) gt isso irá converter seu campo (binário ou não) em hexadecimal e então converter o hex em uma string que pode ser colocada em um arquivo php: FFFFFFFF - gt xFFxFFxFFxFF Em resposta a Patrik: Maneira de imprimir um número em binário é usar baseconvert (). Lt echo baseconvert (bin, 10, 2) gt Se você precisar dele para imprimir todos os 32 bits (como sua função faz) você pode apenas pad it out: lt eco balcão (baseconvert (bin, 10, 2), 32, STRPADLEFT) gt A conversão é a partir da base 10 porque quando bin é passado para baseconvert (), ele é convertido em uma seqüência de caracteres, ea representação padrão é em decimal. Espero que isto ajude. Alguns deram uma função para converter um código hexadecimal de volta em um texto simples (legível por humanos ASCII: P) Mais alguém deu uma função que faz uso de bin2hex para converter URLs em algo como 123456 Aqui está uma função para ir do formulário 123456 de volta em ASCII Observe que esta função pode ser facilmente alterada para transformar qualquer código hexadecimal em ASCII lt função hex2text (str) str explode (, str) arrayshift (str) nmlstr foreach (str como hexstr) nmlstr. Chr (baseconvert (hexstr, 16, 10)) return nmlstr gt espero que isso ajude :) Saudações - Tsuna Espero que isso ajude alguém. Ele apenas exibe uma representação html de dados hexadecimais, bem como um visualizador hexadecimal. Ltplp função hexview (dados) bytePosition columnCount lineCount 0 colunas 8 dataLength strlen (dados) return array () return lttable border1 cellspacing0 cellpadding2gt para (n 0 n lt dataLength n) linhas lineCount columnCount substr (dados n. ) LineCount columnCount 0 foreach (linhas como linha) return lttrgtlttd alignrightgt. BytePosition. : Lt / tdgt para (n 0 n lt colunas n) return lttdgt. Strtoupper (bin2hex (linha n)). Lt / tdgt retorna lttdgt ampnbspampnbspampnbspampnbspampnbspampnbspampnbspampnbsp lt / tdgt para (n 0 n lt colunas n) return lttdgt. (Htmlentities (linha n). Htmlentities (linha n). Ampnbsp). Lt / tdgt retorna lt / trgt bytePosition bytePosition colunas retornam lt / tablegt return implode (return) gt Esta função o desfaz (converte novamente em ASCII). Ltphp função hex2asc (myin) para (i 0 i lt strlen (myin) / 2 i) myout. Chr (basconvert (substr (myin. I 2. 2), 16. 10)) return myout gt Eu estava apenas navegando o acima e com uma pequena modificação, veio com o seguinte que eu acredito ser mais flexível: ltphp função bin2hex (Dados) corrigidos eregreplace (0-9a-fA-F. Dados) pacote de retorno (H. strlen (corrigido), corrigido) gt Isso fará com que tudo o que você passar, mesmo se for preenchido nas extremidades ou entre pares , Deve retornar os dados desejados.
Comments
Post a Comment