Skip to content

22143fd2/67

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 

Repository files navigation

FF Dump Deobfuscator

Compara dois dumps do Free Fire — um não ofuscado (OB51) e um ofuscado (OB53) — e gera um mapeamento de classes, fields e métodos entre as duas versões.


Requisitos

  • Python 3.8+
  • Nenhuma dependência externa

Configuração

Abra o d.py e edite as duas primeiras variáveis para apontar para seus dumps:

DEFAULT_OB51 = "51.cs"   # dump não ofuscado
DEFAULT_OB53 = "53.cs"   # dump ofuscado

Ou passe os caminhos diretamente via argumento:

python d.py message --ob51 OB51.cs --ob53 OB53.cs

Uso básico

O argumento principal é o namespace que você quer analisar.

python d.py <Namespace>

Exemplos

python d.py message
python d.py COW.GamePlay
python d.py tcp
python d.py proto

Ver namespaces disponíveis

Antes de rodar, use isso para ver todos os namespaces presentes no dump:

python d.py --list-ns

Saída:

>> Namespaces disponiveis no OB51:

  COW
  COW.GamePlay
  COW.GamePlay.UGCRuntime
  COW.Gameplay
  message
  tcp
  proto
  ...

Filtrar por namespace + classe base

Você pode combinar namespace com uma classe base para filtrar apenas subclasses específicas:

python d.py message --base-class UDPClientMessageBase
python d.py message --base-class TCPClientMessageBase
python d.py tcp     --base-class TCPClientMessageBase

Buscar uma classe específica

Use --search para encontrar uma classe pelo nome e ver o equivalente ofuscado:

python d.py message --search JoinMatchReqInfo
python d.py message --search PlayerInfo
python d.py COW.GamePlay --search Weapon

Para ver os fields e métodos mapeados, adicione --show-fields:

python d.py message --search JoinMatchReqInfo --show-fields

Saída:

================================================================
  OB51 -> JoinMatchReqInfo
────────────────────────────────────────────────────────────────

  [OB51] JoinMatchReqInfo
  Namespace: message
  Fields   : 53

  [OB53] DBGNDLHOIEJ
  Namespace: message
  Fields   : 53

  --- Fields ---
  Offset      OB51 (legivel)                    OB53 (ofuscado)
  --------------------------------------------------------------------------
  0x18        UserID                            MIJOCMKONAD     [UInt64]
  0x20        RoomID                            DGCJANAMDBJ     [UInt64]
  0x28        RoomType                          PHGKDHDOJPN     [Byte]
  ...

  --- Methods ---
  OB53 (ofuscado)                    ->   OB51 (legivel)
  ----------------------------------------------------------------------
  Serialize                          ==   Serialize               [Void]
  UnSerialize                        ==   UnSerialize             [Void]
  Recycle                            ==   Recycle                 [Void]

Listar todas as classes mapeadas

python d.py message --list-all

Saída:

================================================================================
  OB51 (Legivel)                            Status            OB53 (Ofuscado)
────────────────────────────────────────────────────────────────────────────────
  C2S_RUDP_JoinMatch_Req                    EXATO             CBNIDAPCOEP
  JoinMatchReqInfo                          PARCIAL 36/53     DBGNDLHOIEJ
  PProfileData                              SEM MATCH
  ...

Arquivos gerados automaticamente

Toda execução gera dois outputs automaticamente:

1. Arquivo JSON

Contém o mapeamento completo de todas as classes:

mapping_message_51_vs_53.json
mapping_COW.GamePlay_51_vs_53.json

Estrutura de cada entrada no JSON:

{
  "JoinMatchReqInfo": {
    "ob51_name": "JoinMatchReqInfo",
    "ob51_namespace": "message",
    "ob51_fields": [
      { "type": "UInt64", "name": "UserID", "offset": "0x18" },
      { "type": "UInt64", "name": "RoomID", "offset": "0x20" }
    ],
    "match_type": "partial",
    "ob53_exact": [],
    "ob53_partial": [
      {
        "name": "DBGNDLHOIEJ",
        "score": 36,
        "fields": [
          { "type": "UInt64", "name": "MIJOCMKONAD", "offset": "0x18" }
        ],
        "method_map": [
          { "ob53": "Serialize", "ob51": "Serialize", "return_type": "Void" }
        ]
      }
    ]
  }
}

2. Pasta de headers .h

Um arquivo .h por classe mapeada:

headers_message/
  JoinMatchReqInfo.h
  C2S_RUDP_JoinMatch_Req.h
  PProfileData.h
  ...

Conteúdo de cada .h:

// Class     : JoinMatchReqInfo
// OB53      : DBGNDLHOIEJ
// Namespace : message
// Inherits  : UDPClientMessageBase
// Dll       : Assembly-CSharp.dll
// Match     : partial (36/53)

// --- Fields ---
// 0x18  MIJOCMKONAD  ->  UserID    [UInt64]
// 0x20  DGCJANAMDBJ  ->  RoomID    [UInt64]
// 0x28  PHGKDHDOJPN  ->  RoomType  [Byte]

// --- Methods ---
// Serialize    ->  Serialize    [Void]
// UnSerialize  ->  UnSerialize  [Void]
// Recycle      ->  Recycle      [Void]

Pular geração de arquivos

Se quiser apenas ver estatísticas ou fazer uma busca sem gerar arquivos:

# Sem JSON e sem headers
python d.py COW.GamePlay --no-json --no-headers

# Busca rápida sem gerar nada
python d.py message --search JoinMatch --no-json --no-headers

Exportar JSON em caminho customizado

python d.py message --export meu_mapping.json

Referência completa de argumentos

Argumento Descrição
<Namespace> Namespace a filtrar (ex: message, COW.GamePlay)
--ob51 <arquivo> Caminho do dump não ofuscado
--ob53 <arquivo> Caminho do dump ofuscado
--base-class <nome> Filtro adicional por classe base
--search <nome> Busca uma classe pelo nome
--show-fields Mostra fields e métodos no --search
--list-all Lista todas as classes com status de match
--list-ns Lista todos os namespaces disponíveis
--headers <pasta> Pasta customizada para os .h
--no-headers Não gera arquivos .h
--no-json Não salva JSON automático
--export <arquivo> Exporta JSON em caminho específico

Tipos de match

Status Descrição
EXATO Field types idênticos em ordem — match 100% confiável
PARCIAL Prefixo de types coincide (ex: 36/53) — provável mas não garantido
SEM MATCH Classe não encontrada no dump ofuscado

by: https://t.me/dwordunion

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

No contributors

Languages