Sobre o projeto

dearxan é uma biblioteca para análise estática e em tempo de execução e correção das verificações que o Arxan (agora GuardIT) insere em um binário. De acordo com o README, ela pode neutralizar completamente o Arxan nos jogos da FromSoftware que o utilizam: uma vez aplicados os patches, nenhum código Arxan (como verificações anti-debug e de integridade) é executado e as funções criptografadas permanecem descriptografadas. O README observa uma ressalva: os stubs do ponto de entrada do Arxan ainda precisam ser executados. Esses stubs não realizam verificações anti-debug, mas em alguns jogos (por exemplo, Dark Souls Remastered) eles realizam verificações de integridade e podem travar o jogo se modificações forem detectadas. Isso pode ser mitigado colocando hooks no callback passado para neuter_arxan. O autor afirma que, uma vez que os stubs do ponto de entrada sejam totalmente engenharia reversa, isso não será mais necessário. Jogos testados listados no README: - Dark Souls Remastered - Dark Souls II SOTFS - Dark Souls III - Elden Ring - Armored Core VI - Elden Ring: Nightreign A crate é testada apenas contra as variantes do Arxan nas versões mais recentes desses jogos da FromSoftware e pode não funcionar com configurações do Arxan usadas por outros desenvolvedores. Contribuições são bem-vindas. Opções de uso descritas: - Do Rust com o recurso disabler: adicione dearxan ao Cargo.toml e chame dearxan::disabler::neuter_arxan uma vez, idealmente antes do ponto de entrada do jogo ser executado. Um callback recebe o resultado e é um local sugerido para instalar hooks. - Do C++: baixe a biblioteca estática dos Releases, vincule-a com as bibliotecas de importação do Windows incluídas, inclua include/dearxan.h e chame dearxan::neuter_arxan. O padrão mínimo suportado é C++14, com C++17+ recomendado. - Do C: mesma biblioteca e cabeçalho, chame dearxan_neuter_arxan com um callback. - De outras linguagens: gere bindings C a partir de include/dearxan.h e chame dearxan_neuter_arxan. O README avisa que muitos injetores de DLL ou lançadores de mods não suspendem o processo na criação ou não permitem que o código seja executado antes do ponto de entrada do jogo. A crate suporta tais carregadores na base do melhor esforço, mas é fortemente recomendado usar um que carregue mods antes do ponto de entrada. Para jogos Souls compatíveis com me3, a crate já está integrada nesse carregador de mods através da opção de perfil disable_arxan, e usar isso é recomendado se o mod já depende de me3. Para escrever um patcher personalizado (por exemplo, para corrigir um executável em disco), o README diz que você precisa analisar os stubs do Arxan com dearxan::analysis::analyze_all_stubs ou APIs equivalentes, passar os valores StubInfo resultantes para dearxan::patch::ArxanPatch::build_from_stubs e aplicar os patches manualmente. Isso deve ser repetido até que nenhum novo stub seja encontrado, porque alguns jogos têm stubs criptografados não descobertos na primeira passagem de análise. Para uma imagem executável ao vivo, é importante que o stub do ponto de entrada do Arxan tenha sido invocado; binários da FromSoftware também podem ser envolvidos em SteamStub. O README descreve recursos do Arxan, incluindo mutações de instruções e ofuscação de fluxo de controle, criptografia de funções sensíveis em repouso com descriptografia em tempo de execução, verificações anti-debug e verificações de integridade que podem escrever flags em um buffer, travar o jogo via corrupção de pilha ou fluxo de controle, ou reparar código de função. A lógica do Arxan está contida em stubs inseridos em funções arbitrárias do jogo; eles salvam contexto, executam lógica do Arxan, restauram contexto e saltam de volta. A crate desativa o Arxan encontrando esses stubs e visitando seus grafos de fluxo de controle. Ela usa emulação parcial de instruções e bifurca o estado do programa em ramificações para lidar com a ofuscação de fluxo de controle, depois analisa a estrutura do stub para extrair patches. Estes são geralmente um hook de salto para um trampolim que corrige a pilha do stub, e às vezes incluem extração de regiões de código descriptografadas para escrever seus conteúdos diretamente. Flags de recursos: - disabler (padrão): fornece um patcher que desativa completamente o Arxan via neuter_arxan. - rayon (padrão): paraleliza a análise de stubs usando rayon. - ffi: exporta a função C dearxan_neuter_arxan. - instrument_stubs: baseia-se em disabler instrumentando cada stub para registrar uma mensagem na primeira vez que é chamado; o README avisa que isso atualmente trava para jogos diferentes de Dark Souls Remastered devido a corrupção de registradores. - internal_api: expõe a maioria das APIs internas de análise binária através de dearxan::analysis::internal; elas não são estabilizadas e podem quebrar entre versões menores. Os créditos mencionam dasaav pela sincronização global para neuter_arxan, ajuda na engenharia reversa de como o Arxan armazena regiões de memória para descriptografar e pela descoberta do algoritmo de criptografia (TEA de 32 rodadas).