Então, por algum motivo, você decidiu estudar como eles ainda escrevem esse malware para Windows. As razões pelas quais um tópico pode interessar a uma pessoa são muito diferentes e não necessariamente destrutivas - alguém quer se tornar um galoaver / whitehead, alguém está apenas se perguntando como funciona. Em geral, os motivos são muitos, e isso é tudo letra. Claro, existem muitos artigos na Internet como "escrevemos uma botnet em python" e trabalhos escolares semelhantes, e muitos provavelmente os leram - mas há muito pouco sentido nesses manuais. Seus autores (muitas vezes noobs completos) não dão nenhuma compreensão da base, do básico, mas simplesmente escrevem instruções da série fazer merda em um pedaço de merda e um pedaço de pau, ganhando vantagens. Claro, para alguns, isso é suficiente, e para aqueles que não, continue lendo.
A principal tese que precisa ser aprendida é que o malware é um programa regular que executa determinadas ações. Assim, você deve apenas aprender a programar para uma plataforma específica.. Como a maioria está interessada no Windows, consideraremos esse sistema operacional específico (e não conheço nada além do Windows).
0x0
Então, vamos começar. Na escola, eles primeiro aprendem a ler e escrever, depois passam para outras disciplinas, mas no caso do nosso tópico, você deve saber usar o Windows no nível de um usuário confiante / administrador de sistema novato. É claro que, se você está lendo este artigo, tem alguns conhecimentos de informática. Mas as redes sociais e o YouTube não são o que você precisa. Você deve ser capaz de usar a linha de comando do Windows (cmd.exe), "viajar" pelo sistema de arquivos, ter um entendimento básico de arquivos .bat, a variável %PATH% (saber o que é, ser capaz de adicionar/remover valores lá). Você precisa entender e configurar a máquina virtual, porque. em primeiro lugar, esse software pode matar o sistema operacional principal e, em segundo lugar, o malware terá que ser verificado em diferentes edições e versões do Windows. Não posso recomendar literatura específica para este item, porque. Todo mundo tem um nível diferente de conhecimento.
Teoria:
"Referência do Administrador de Utilitários Sysinternals."https://rutracker.org/forum/viewtopic.php?t=4222897 https://ab57.ru/syssuite.html
Prática:
instale uma máquina virtual (VirtualBox ou outra), coloque o seven/XP lá.
Na linha de comando, vá para outra pasta, para outra unidade, crie um arquivo, exclua um arquivo, execute o programa do cmd. Procure ajuda em https://ab57.ru/ ou no Google.
0x1
Em seguida, você precisa decidir sobre a linguagem de programação, ou seja, em que todo esse negócio será criado. Resumindo, você precisa aprender a linguagem C. Mais detalhadamente, a linguagem de programação deve ser nativa (ou seja, sem frameworks, etc.) e compilada (não scripts). Você pode falar muito sobre esse assunto, por que é assim e por que não aprender peton, mas no Sharp ... Já disse muitas vezes como a primeira linguagem é necessária onde não há nada supérfluo como bibliotecas não desconectáveis, frameworks , coletores de lixo. É um código limpo. Aprenda - você pode escrever qualquer coisa, mas precisa começar a aprender com esse idioma.
Existem muitas linguagens, mas, em princípio, você pode escolher entre C e Pascal. Por que não montador? É muito difícil começar com isso, sei disso por experiência própria. Ao aprender o Asm como primeira língua, você será forçado a aprender o próprio Asm, os fundamentos da programação e o WinApi (já que não há biblioteca padrão no Asma). Aqueles. para exibir uma string na tela ou gravá-la em um arquivo, você precisará explorar simultaneamente o maravilhoso mundo da API do Windows, com um milhão de parâmetros e mil tipos de dados, e até xor drdsconvertê-lo em código asm. Enquanto C ou Pascal neste estágio permitirá que você "brinde" e use funções simples. Por que não C++? Porque não tem vantagens sobre C puro no contexto da tarefa que precisamos, e aprender OOP e novos padrões de 0 é irreal (e sem sentido). As vantagens reais são fábricas, modelos, iteradores, ponteiros inteligentes, boost, etc. e assim por diante, e não "C com classes" de 1994, como muitas pessoas veem C++. Com o tempo, você pode querer mudar para os profissionais, mas não agora. Também existe o freebasic e outros exóticos, mas esses idiomas são menos populares e, nesse caso (sem inclusão, algum tipo de erro), não haverá ninguém para perguntar. No início do treinamento, isso é muito importante quando há um erro que não é pesquisado no Google e não há ninguém para perguntar. Portanto - ou C ou Pascal.Não importa por onde você comece, no entanto, você precisa levar em conta que o conhecimento de C (no nível das classificações de leitura) ainda será necessário, porque. todos esses MSDN e livros contêm exemplos neste idioma. Nesta nota, também focarei em C, então estude C. Com relação a Pascal - se alguém tiver um bom livro para iniciantes (e pensamentos sobre este tópico) em mente, escreva aqui. Só me lembro de Stolyarov http://www.stolyarov.info/books/programming_intro mas seu pascal é puramente uma preparação para a codificação C.
Teoria:
Stephen Prata "A Linguagem de Programação C. Aulas e Exercícios". https://rutracker.org/forum/viewtopic.php?t=4791274 _ tudo é mastigado nos mínimos detalhes.
Brian Kernighan, Dennis Ritchie. "The C Programming Language" https://rutracker.org/forum/viewtopic.php?t=32310 é um livro mais complicado (em relação ao primeiro), mas é um clássico (os autores criaram a linguagem C).
Prática:
Todos os exercícios do livro (codifique você mesmo, descubra como e por que funciona, experimente diferentes recursos de linguagem).
Instale o Visual Studio, há uma boa depuração passo a passo, realce de sintaxe, preenchimento automático, etc. Leia a ajuda, como depurar lá, teste na prática (registros, memória, variáveis).
0x2
Tendo estudado os fundamentos básicos da linguagem C, você pode seguir em frente, ou seja, começar a aprender o WinApi. O desenvolvimento principal no sistema operacional Windows ocorre com a ajuda do Win32 Api - este é, por assim dizer, o nível mais baixo (documentado pela Microsoft) para desenvolvimento no Windows no modo de usuário. Há também Native Api e até mesmo uma chamada direta para syscalls, mas até agora isso não é necessário. Você precisa entender os fundamentos do desenvolvimento do Windows - o que é um thread, um processo, um serviço, como os aplicativos multithread são desenvolvidos e assim por diante. Paralelamente, você precisa aprimorar seus conhecimentos da linguagem C, ou seja, estudar os algoritmos básicos. Alguns deles você deve ter conhecido antes. O conhecimento de algoritmos é necessário para ser um programador normal, e não um "bydlocoder". Além disso, algumas estruturas do sistema (e apenas tipos de outras pessoas) podem usar todas essas tabelas de hash, listas duplamente encadeadas e similares. Obviamente, em qualquer linguagem de programação, há muito tempo existem recursos de biblioteca padrão para isso. Mas - você precisa entender como tudo está organizado em um nível baixo e só então usar o acabado. Em geral, no processo de aprendizagem você precisa fazer suas próprias "bicicletas", quanto mais melhor.
Teoria:
Finogenov K.G. "Win32. Programming Basics" https://rutracker.org/forum/viewtopic.php?t=908022 , o livro mais simples e básico sobre WinApi. Infelizmente, o autor o escreveu há 20 anos, quando tudo era diferente, mas ainda assim.
http://firststeps.ru/mfc/winapi/win/apiwind1.html o básico do winapi em russo e geralmente um site útil Kernighan, Pike "Programming Practice" https://rutracker.org/forum/viewtopic.php?t=3049308 um excelente livro (um dos autores é o criador de C e Go), apenas sobre o tópico de algoritmos e desenvolvimento em em geral.
Prática:
Escreva os aplicativos GUI mais simples para Windows. Sem componentes, WinApi puro (janelas, caixas de diálogo). Teste diferentes exemplos do livro de Finogenov.
Refine seus exemplos de livros C (seção 0x1) adicionando janelas. Por exemplo, uma janela, um formulário de entrada, abra tal e tal arquivo, se ok - leia os dados dele, se não ok - exiba um erro.
0x3
Você já passou no básico do WinApi, está mais ou menos confiante na linguagem C, é hora de mergulhar completamente na programação no Windows. Estudar vários mecanismos do sistema, familiarizar-se com processos, comunicação entre processos, criação de serviços, dispositivo de memória do Windows, bibliotecas dinâmicas e assim por diante - em geral, estudar todos os tijolos que compõem o desenvolvimento no Windows. Aqui você pode aprender tudo, ou pode escolher apenas alguns tópicos, digamos, pular serviços ou segurança do Windows. Aconselho você a ler tudo seguido, porque. não há conhecimento extra.
Teoria:
Jeffrey Richter "Windows via C/C++" https://rutracker.org/forum/viewtopic.php?t=3075398 Clássicos da programação do sistema no Windows. Independentemente do que mais você planeja estudar, você deve ler este livro.
J. Hart "Programação do sistema no ambiente Windows" https://rutracker.org/forum/viewtopic.php?t=988938 Também é um bom livro, existem tarefas para trabalho independente.
Richter, Clark, "Programming Server Applications for Windows 2000" https://rutracker.org/forum/viewtopic.php?t=298205 Você não precisará de tudo neste livro imediatamente, mas alguns tópicos (registro, arquivos) devem ser estudado, porque eles complementam o primeiro livro. A propósito, é neste livro que existe um IOCP (que porra ninguém precisa há 20 anos, mas de repente ganhou popularidade por causa dos shitlockers).
Prática:
Existem muitos exemplos nos livros acima, estude-os, tente mudar alguma coisa, conclua as tarefas para refinar os exemplos ou crie os seus próprios.
Escreva um criptolocker simples que procure arquivos e os criptografe com um xor banal. Use tecnologias diferentes (threads, porta, pool de threads), compare qual é mais eficiente (consulte o livro de Hart para saber como comparar).
Escreva um componente (módulo na forma de uma DLL) para o seu criptolocker, grave-o no registro; adicione um recuo a algum domínio (usando a API Wininet/winsock/winhttp, consulte msdn para obter a documentação).
0x4
No livro de Richter da etapa anterior, no final do tutorial, você se deparou com o conceito de injeção de processo, conexão de funções de API e tópicos semelhantes. É hora de estudar tudo isso com mais detalhes. Você precisa aprender a estudar programas sem códigos-fonte, depurá-los, revertê-los, entender a lógica do programa de outra pessoa e procurar erros em seu próprio ambiente de combate. O depurador de estúdio ajudou todo esse tempo no aprendizado. Mas para os programas de outras pessoas, não haverá tal brinde, porque. você não tem os códigos-fonte, apenas a listagem do asm. O que depurar? Você pode pegar o antigo OllyDBG (apenas 32 bits) e o novo x64dbg e descobrir. Primeiro, trace seus próprios programas passo a passo, enquanto lê o manual do montador em paralelo. Existem muitos livros sobre este último, mas nem tudo é necessário neste caso - Asm é suficiente para entender, e não escrever sobre ele (especialmente em DOS, como ensinam 80% dos autores).
Teoria:
"Introdução à reversão de 0 usando Ida Pro" https://wasm.in/threads/perevod-vvedeni … pro.32249/ mirror https://yutewiyof.gitbook.io/intro-rev-ida-pro/
. Tradução de yashechka , o curso é excelente "Introdução à quebra de 0 usando ollidbg" https://exelab.ru/f/?action=vthread& … opic=14847 Prática:
Reverta e depure primeiro os seus próprios aplicativos e, em seguida, os aplicativos de outras pessoas (crack, malware de outra pessoa).
Escreva um shellcode simples (mesmo endereços de API codificados), execute-o. Teste diferentes métodos de injeção no processo.
0xFF
Aqui está um curso aproximado, depois de estudar o qual você pode começar a desenvolver um malware simples com confiança. Por que simples? Porque, infelizmente, apesar da grande quantidade de informações, muitas coisas ainda estão nos bastidores. Por exemplo, formato PE, segurança do Windows, tecnologia COM, drivers (não é necessário aprender a escrever malware para o kernel, mas é altamente desejável entender como funciona lá), criptografia, rede, NTFS, gráficos do Windows ( um tópico enorme, todos esses GDI +, win32k .sys), etc. e assim por diante. Mas tudo isso tem conserto, seria uma vontade de aprender. Tendo uma base, você pode descobrir tudo gradualmente.
Leitura adicional:
MSDN
Mark Russinovich "Internos do Windows"
"do verde ao vermelho" - três artigos, procure você mesmo o link, em cópias wasma ou chm do antigo wasma.
rsdn.org
Sven Schreiber "Recursos não documentados do Windows 2000"
..... milhares de sites, páginas, livros..
Prática adicional:
reverter o malware de outra pessoa, escrevendo o seu próprio. Se você não sabe de algo - inverta seu concorrente, leia as avaliações de Aver, pergunte no fórum.
E aprenda constantemente, porque conhecimento é Poder e o principal capital!
Notas.
O artigo reflete puramente minha opinião subjetiva e minha experiência pessoal, não chama ninguém para nada, apenas aconselha. Críticas construtivas ("é melhor estudar X primeiro e depois focar em Y depois de reler Z") são bem-vindas. Não construtivo ("tudo isso é bobagem, aprenda peton!") Será excluído (mas ninguém proíbe criar seu próprio tópico e descrever sua experiência de e para).
Links para materiais, mas podem ficar desatualizados, morrer, mover, então procure-os pelo nome no Google.