Sim, o próprio programa citado anexa um debugger se solicitado. O debugger é anexado quando a aplicação está em execução. Não o programa presente no computador (no caso o Counter-Strike) já vem numa linguagem para o Windows entender (abra um no bloco de notas para você ver). Usando um editor Hexadecimal você consegue editar algo nesse aplicativo sem abrir-lo (é bem mais )
DWORD:
Uma dword é normalmente o dobro de uma word, que por sua vez é normalmente a unidade natural de operação do processador, sobre a qual as instruções operam de uma vez só(ou pelo menos deveriam). O tamanho de uma word pode variar dependendo da implementação de dada arquitetura, e conseqüentemente o de uma dword variará.
Para o processador, não existe "int", "char", "long long int", "short", etc. Também não existem tipos; tudo não passa de uma longa seqüência de estados binários. Nós chamamos variáveis assim em uma linguagem de programação de nível mais alto(e fazemos diferenciação de tipos), mas normalmente nas linguagens próximas do código de máquina(Assembly), usamos os termos byte, word, dword(double word) e qword(quad word).
Embora usemos em linguagens de nível mais baixo, uma word é parte da implementação, e seu tamanho exato irá variar. Já em linguagens de alto nível o tamanho é normalmente apenas um sinônimo para algum outro tipo, como "int" ou "unsigned int". Nesses casos, como por exemplo no Windows, um byte será um valor de 8 bits, uma word será um valor de 16 bits, uma dword será um valor de 32 bits, e uma qword será um valor de 64 bits.
Por essa definição, essas variáveis não passam de:
typedef uint8_t BYTE;
typedef uint16_t WORD;
typedef uint32_t DWORD;
typedef uint64_t QWORD;
E é muito provavelmente por isso que as encontrou com letras maiúsculas: é uma prática comum (e boa) representar constantes, typedefs, defines e etc com letras maiúsculas. Dessa forma você reconhece facilmente.
Então, em outras palavras, são apenas variáveis de tamanhos variáveis que armazenam dados, cuja interpretação, assim como com todos os outros dados, depende de você, do programa, ou do sistema.
removido de: http://br.answers.yahoo.com/question/index?qid=20110708212627AAIIFMy
Resumindo:
WORD é a instrução 16 bits usadas em todos os processadores.
D(ouble)WORD é a instrução 32 bits em todos os processadores desde o Intel 80386.
Q(uad)WORD é a instrução 64 bits usadas nos processadores mais modernos, a maioria são de dois ou mais núcleos.
Em relação ao main, eu não sei. Na verdade eu não entendo muito de assembly ... Acho que só com uma boa apostila.