Ir para conteúdo
Faça parte da equipe! (2024) ×
Conheça nossa Beta Zone! Novas áreas a caminho! ×

DarkShade

Gold Member
  • Total de Posts

    508
  • Registro em

  • Última visita

  • Dias Ganhos

    1
  • WCoins

    0

Posts postados por DarkShade

  1. @Juliana~* [QUOTE]Os métodos de encriptação MD5 e SHA1 são o que uso, mas eles são tão inseguros assim?[/QUOTE]Não são inseguros, são limitados a um tamanho máximo, permitindo assim uma repetição de hashes. (exemplo fictício, "a" e "aba" serem o mesmo hash). [QUOTE]Sim eu acho por ser valor fixo e assim, um banco de dados que contem diversas combinações pode facilmente obter o valor da criptografia.[/QUOTE] Hashes não possuem retorno, é um caminho só de ida, não há como desencriptar. [QUOTE]Como é um método de criptografia simples de usar, eu gosto mais, e pensando nos valores fixos cheguei a seguinte conclusão: function gerarSaltAleatorio($tamanho = 22) { return substr(sha1(mt_rand()), 0, $tamanho); } // gerar salt aleatóriamente $salt = gerarSaltAleatorio(); // criptografa a senha -> 'senha' + 'salt' gerado $hash = md5($senha . $salt); for ( $x = 0; $x <= 1000; $x++ ) { $hash = md5($hash); } Assim eu salvo o 'salt' e a 'senha criptografada' no banco de dados. No login, seleciono o usuário no banco de dados, obtido no caso do formulário login, seleciono a 'senha criptografada' e o 'salta', gero o novo hash a partir do formulário de login e comparo 'senha do formulário' + 'salt do banco de dados' com 'senha criptografa' do banco de dados e ai libero ou não o acesso. Será que é seguro o suficiente? [/QUOTE] Você está jogando tempo e processamento fora, pois um md5(sha1() ) já dão conta do recado tanto quanto serem executados 1001x (como consta no exemplo). [QUOTE]Até, se o hacker conseguiu roubar o banco de dados ele tem acesso ao servidor. Se ele tem acesso ao servidor, nem o salt ele vai saber, pois e valor aleatório.[/QUOTE] Se você irá comparar senhas usando essa estratégia, mesmo o valor sendo aleatório, você precisará salvá-lo para comparar a autenticidade dos dados. E o hacker em questão não precisa necessariamente saber o valor de um hash. Basta ele criar uma senha, e com o md5(sha1()) gerado para tal, basta ele copiar e colocar no login desejado que entrará corretamente. [QUOTE]E o FOR acima atrasa o código, evitando ataque de força bruta. Enfim, será que da para prosseguir com o projeto assim?[/QUOTE] Não, isso não impede, apenas atrasa-o. Quer solução? Bloqueie a conta por tentativas incorretas da senha ou utilize um captcha. [QUOTE]Concordo, mas ainda sim com o BCrypt seria a mesma lógica, e claro é bem mais seguro. Mas MD5 seria suficiente para a não interpretação da senha? [/QUOTE] Hoje em dia não, pois há diversos sites com bibliotecas enormes de palavras salvas com seus respectivos Hashes MD5 para a "reversão". [QUOTE]Como mostrado acima, ah possibilidade de um método randômico do sha1 repetir? [/QUOTE] Com total certeza. [QUOTE]Seria algo que deveria me preocupar?[/QUOTE] Não, deveria se preocupar em fazer algo correto, pois isso é uma gambiarra (sendo sincero). Quer algo mais seguro apenas com md5() e/ou sha1()? Crie uma segunda ou terceira criptografia, como por exemplo, usar um md5() de um base64encode() de uma string criptografada por uma criptografia sua (ou apenas sua criptografia + md5()). @NoSlake [QUOTE]Até onde sei, posso estar errado, mas MD5 é "vai e vem", há como descriptografar. BCrypt é o que chamam de criptografia "One Way". Só há como acertar o hash novamente se a pessoa souber o que está escrito.[/QUOTE] MD5 é um hash, logo não há volta.
    • Curtir 1
  2. INTRODUÇÃO

     

    Hoje em dia muitos programadores começaram a se preocupar com o quesito proteção contra as práticas da RCE (Reverse Code Engineering), mas muitos deles ainda utilizam de conhecimento simples e limitado, o que em grande maioria, contam com o uso de algo muito comum, do qual irei abordar hoje, falo da API (Application Programming Interface) IsDebuggerPresent.

    Os exemplos a seguir serão baseados nas linguagens C e Assembly e no disassembler OllyDbg.

    Assuntos a serem abordados:

    1. Usabilidade;
    2. Visão geral no disassembler;
    3. Como contornar com alterações físicas da memória estática do processo;
    4. Como contornar sem alterações físicas da memória estática do processo.

     

    1. Usabilidade

    IsDebuggerPresent trata-se de uma função sem parâmetros de entrada cujo retorno é do tipo bool onde irá retornar true caso haja a presença de um depurador na aplicação e false caso não haja, exemplo:

    É necessário se cadastrar para acessar o conteúdo.

     

    2. Visão geral no disassembler

    f476064feb.png

    1. Função IsDebuggerPresent vista pelo depurador OllyDbg.

     

    Como podem ver, ela é uma função bem simples e pequena da qual irá apenas obter o valor de uma flag (BeingDebugged) com o tamanho de 1 byte localizado dentro da estrutura PEB (Process Environment Block) do processo.

     

     

    3. Como contornar com alterações físicas da memória estática do processo

     

    e0e56b7413.png

    2. Função IsDebuggerPresent vista pelo depurador OllyDbg.

     

    O que foi feito não foi nada menos do que forçar o retorno false de todas as chamadas para essa API.

    Lógica:

    É necessário se cadastrar para acessar o conteúdo.

     

     

    4. Como contornar sem alterações físicas da memória estática do processo

     

    Forçamos assim o valor false diretamente no PEB.

    É necessário se cadastrar para acessar o conteúdo.


    CONCLUSÃO

     

    Apesar das falhas e simplicidade, essa é uma das APIs mais usadas quando o assunto é Anti RCE, porém é claro, o uso de tal hoje em dia é praticamente obsoleto, pois não se é preciso de muito para contorná-la.

    Créditos

    Nytex

    • Curtir 3
  3. INTRODUÇÃO

     

    Muitas pessoas por aí já devem ter pensado em algum momento, "como será que skins são criadas?", então venho através deste compartilhar meu método de criação, tentando deixar tudo de forma clara, porém direta e caso haja alguma dúvida durante o processo ou sobre a parte técnica de algo, basta deixar seu comentário que irei lhe responder com prazer. Então, vamos lá.

     

    Assuntos a serem abordados:

    1. Ferramentas utilizadas;
    2. Criação do background;
    3. Desenhando o layout;
    4. Configurando o layout;
    5. Limpando o projeto;
    6. Colocando a mão na massa;
    7. Download.

     

    1. Ferramentas utilizadas

    Neste tutorial irei utilizar os programas:

    • Adobe Photoshop CS6

    • Visual Studio 2008

     

    2. Criação do background

    O que você precisa ter em mente primeiramente é, quais cores você irá usar e qual o tamanho de sua aplicação.

    No meu caso eu optei por uma escala de cinza entre #515151 (cinza médio) a #404040 (cinza escuro), para destaque #ff8703 (laranja) junto a #aeaeae (cinza claro) e com o tamanho de 250x300.

     

     

    3. Desenhando o layout

     

    Crie um novo projeto no PS com as dimensões escolhidas, faça um degradê (no meu caso optei por este método) com as cores desejadas e uma linha separando a barra de menus, a idéia segue abaixo:

     

    5f97bdf6e1.png

     

     

    Seguindo a base previamente criada, dei umas mexidas e ajeitei ao meu gosto para deixar bem simples e visível o que quero fazer, segue o exemplo:

     

    ad4d0fc1e6.png

     

    Basta ressaltar que o exemplo acima não será usado no projeto, mas sim o mesmo sendo apenas um passo opcional e de pré visualização do resultado final.

    Depois disso feito, converta a primeira imagem para as dimensões 1x300 (o que irá diminuir drasticamente o tamanho do arquivo) e salve como layout.bmp.

     

     

    4. Configurando o projeto

     

    Após feito o item 3, entre no VS2008 e crie um novo projeto Win32 Application e selecione Empty Project.

    Crie dois arquivos, main.cpp em Source Files e resource.rc em Resource Files e neste arquivo, adicione a imagem layout.bmp e os ícones da DarkProgramming.

    Neste exemplo, eu usei também uma biblioteca que criei tempos atrás para otimizar o tempo trabalhando com Win32App, adicione em Header Files:

     

    [spoiler=DlgUtils.h]

    É necessário se cadastrar para acessar o conteúdo.

     

     

     

     

    5. Limpando o projeto

    Como já devem saber, várias IDEs costumam colocar "lixo" no meio das dos arquivos, então vamos limpá-lo e deixar tudo do jeito correto com apenas o necessário.

    Primeiramente exclua o arquivo resource.h e então clique com o botão direito no arquivo resource.rc e apague tudo exceto as linhas referentes ao ícone e a imagem, ficando assim:

    É necessário se cadastrar para acessar o conteúdo.

     

    6. Colocando a mão na massa

     

    Seguem abaixo as sources do arquivos, em caso de quaisquer dúvidas, basta me perguntar que lhe responderei com prazer.

     

    [spoiler=main.cpp]

    É necessário se cadastrar para acessar o conteúdo.

     

    e07f2b61c0.png

     

     

    7. Download

     

    É necessário se cadastrar para acessar o conteúdo.

     

     

    CONCLUSÃO

    Tentei deixar tudo bem simples e direto, pois apesar de que a primeira vista isso parecer complexo, basta um pouco de prática que tudo se resolve. :)

     

     

    Créditos

    Nytex

    • Curtir 3
  4. Está lhe faltando lógica de programação, mas ok. procedure TForm1.Timer25Timer(Sender: TObject); var [COLOR=#ff0000]name : array [0..255] of WideChar;[/COLOR] aa,buf: integer; nob: DWord; begin GetWindowThreadProcessId(strtoint(Edit19.text), @processid); HPROCESS := Openprocess(process_all_access, false, processid); Readprocessmemory(HPROCESS, Pointer(PW_BASE_ADDRESS), @buf, sizeof(buf), nob); Readprocessmemory(HPROCESS, Pointer(buf + $1C), @buf, sizeof(buf), nob); readprocessmemory(HPROCESS, Pointer(buf + $2C), @buf, sizeof(buf), nob); readprocessmemory(HPROCESS, Pointer(buf + $6B0), @buf, sizeof(buf), nob); readprocessmemory(HPROCESS, Pointer(buf + $0), [COLOR=#ff0000]@NAME[0][/COLOR], sizeof([COLOR=#ff0000]name[/COLOR]), nob); Label17.Caption:= [COLOR=#ff0000]name[/COLOR]; end; @Edit: Modifiquei de Char para WideChar pois não li a parte do "Unicode".
  5. @sabbat Isso é útil apenas para desenvolvedores ou servidores concorrentes, para jogadores não tem muita importância. @RafaelFG12 Você está fazendo errado. Ative todos os buffs, use BM1, "desative os buffs e ative novamente (faça isso 2x por BM)", desative o BM1 tirando pela espada. ^ Repita. OBS: Para comparar, use alguma skill fixa num monstro e grave quanto da de dano sem critico e com critico.
  6. Os arquivos foram atualizados devido a uma atualização feita pelo Cabal Pirata.

    Change Log foi adicionado para especificação das mudanças feitas.

    (Joko, se estiver lendo isso, procure estudar mais ou pague alguém pra fazer uma proteção que seja mais desafiadora [Está fácil de mais, abraços]).

×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.