Brazilian Modding Studio
Olá, seja bem vindo à Comunidade BMS!

Para se registrar no fórum, siga os passos:

1 - Clique em "Registrar-se" aqui em baixo;
2 - Aceite os termos de serviço;
3 - Escolha um nome de usuário e senha;
4 - Realize o login no fórum clicando em "Conectar-se".

Compartilhe
avatar
Scripter CLEO - Avançado
Scripter CLEO - Avançado
Título : Censurando since 2011
Mensagens : 22701
Reputação : 727
Desde : 03/05/2012
Idade : 22
Localização : Ibitinga - SP
Link : www.MixMods.com.br
Ver perfil do usuáriohttp://MixMods.com.br
  • Reputação da mensagem: 100% (4 votos)
em Sex 01 Jan 2016, 11:25
A engenharia reversa é o processo de descobrir os princípios tecnológicos e o funcionamento de um dispositivo, objeto ou sistema, através da análise de sua estrutura, função e operação. Objetivamente a engenharia reversa consiste em, por exemplo, desmontar uma máquina para descobrir como ela funciona.

https://pt.wikipedia.org/wiki/Engenharia_reversa

MAS ACALME-SE!
Este tutorial é o básico do básico do básico mesmo que eu o tenha adicionado na seção "Avançados" do tutorial de cleo scripting. Eu mesmo sou um noob nisso, então eu só posso te ensinar o básico.
Peço para que pessoas mais experientes em IDA e/ou Assembly contribua com este tutorial.

Primeiramente, este tutorial consiste em te ensinar o uso do IDA Pro para explorar o .exe do GTA San Andreas, onde a nossa comunidade de modding tem um database já com várias informações e nomes já colocados, assim neste tutorial nós iremos aproveitar tais nomes para entender o funcionamento desse .exe e aproveitar para aplicar em nossos mods, seja cleo ou asi.
Basicamente, este tutorial te ensinará a encontrar endereços de memória, seja para configurar o jogo (como o que fiz no MixSets) ou usar funções dele (coisas que opcodes nunca fariam)

É necessário você antes entender sobre manuseamento de endereços de memória.

Este tutorial é destinado a somente usuários já com experiência em CLEO, se você ainda está aprendendo, feche este tutorial e continue aprendendo e praticando.



Download

Os links... Por precaução...
https://www.base64decode.org/

IDA Pro v7:
Código:
aHR0cDovL2JpdC5kby9kWjNjNg

IDA Pro v6.8:
Código:
aHR0cHM6Ly9kcml2ZS5nb29nbGUuY29tL29wZW4/aWQ9MXVtN2dkMW52NHJqdm4tQ1JDQzVseGUxZnpkaXFYaE4z

gta_sa.idb:
Recomendada (necessário IDA Pro v7):
Código:
aHR0cHM6Ly9kcml2ZS5nb29nbGUuY29tL29wZW4/aWQ9MXl1U01fU2xhTExuOTRxeG83ckNWX1hmY250VENBOHk2
Outras mais antigas (necessário IDA Pro v6.8):
Código:
aHR0cDovL2FhcC5wYXBuZXQuZXUvc2hhcmUvZ3RhX3NhXzIuaWRi
Código:
aHR0cHM6Ly9kcml2ZS5nb29nbGUuY29tL2ZpbGUvZC8wQnp0TmsxMHhwdGtkWmtaUFZTMDVTRE5EZGpBL3ZpZXc





Entendendo

Com o .idb aberto, na esquerda temos a lista de funções (onde você pode dar clique duplo para abrir uma função) e na direita temos várias guias.
Estas guias podem ser fechadas, e você pode reabrir ou abrir novas em "View -> Open subviews", lá terá várias visualizações que podem ser úteis, como o "strings". Reserve um tempo para conhecer as tais subviews e suas utilidades.

Bem, o que mais iremos mexer é no IDA View, onde é a visualização do assembly
No IDA View há 2 modos de visualização que você pode alternar clicando com o botão direito em qualquer lugar lá dentro

O Text View é melhor para o que vamos fazer, já que é o texto puro com cada endereço de memória do lado, é tudo o que precisamos.


Comandos

Os básicos do que precisamos:
TAB - Dentro de alguma função, press TAB para abrir o pseudo code. Como o nome diz, o pseudo code é um código falso, gerado pela máquina só para facilitar o entendimento. Ele é um código em C++ que acredito que mesmo você não sabendo C++ pode entender a função lendo o pseudo code. Você pode apertar TAB novamente para voltar no IDA View.
X - Deixando o cursor de "digitação" em cima de algum nome de uma função, variável ou praticamente qualquer coisa, você verá uma lista de onde aquela coisa é usada. Acredite, isso é extremamente útil, experimente esta funcionalidade e veja.
2 Cliques em cima de uma função - Seja na lista de funções ou mesmo dentro do IDA View ou num pseudo code você pode clicar duas vezes em alguma função lá presente, você irá direto para o local daquela função, e pressionando ESC você voltará de onde saiu. Realmente é fácil navegar.
G - Press G no IDA View para pular diretamente a um endereço, simples. Por exemplo cole esse endereço: 53BEE0 que você irá para o processo principal do jogo (CGame__Process). Você pode digitar assim: @@opcode_0001 (ou outro opcode) e dar ok para ir diretamente num opcode, o que é muito útil para descobrir endereços e funções úteis e simples, mas claro, somente com opcodes "de fábrica", opcodes da CLEO ficam no CLEO.asi e não no gta_sa.exe.
ALT+T - É como um CTRL+F. Depois de pesquisar, use CTRL+T para ir para a próxima (como um F3). Você pode pesquisar em qualquer lugar, tanto na lista de funções, quanto no IDA View (mais demorado) etc.


Explorando

Acredito que o melhor modo de ensinar a encontrar funções/endereço é com exemplos:


Exemplo 1 - Encontrando e mudando algum valor
Como exemplo, encontrarei e mudarei o tamanho do Sol.

Com a lista de funções na esquerda selecionada, eu pressionei ALT+T e na janela digitei "sun" (sol)
É claro, me deparei com várias funções que inclui "sun" no nome, continuei as próximas apertando CTRL+T até me deparar com "CCoronas::DoSunAndMoon", interessante esse nome, não? (mesmo que ele esteja errado, afinal, ele não cria a lua, somente o Sol, é que os nomes foram inventados por nós modders, as vezes há erros. Daqui um tempo o nome pode ser arrumado e aparecer outro ai, bem, é no endereço 6FC5A0)
2 cliques nela, no IDA View, dou TAB para abrir o pseudo code.
De cara nós vemos um "CTimeCycle::m_CurrentColours.m_fCurrentSunSize * 2.7335" e logo em seguida um "CCoronas::RegisterCorona", não precisa de habilidade em C++ para entender que pegou o tamanho do Sol no timecyc, multiplicou por algum número e em seguida adicionou a corona dele.
Mas por algum motivo que não entendi, há 2, uma multiplicando por 2.7335 e outra por 6.0, possivelmente a primeira é usada para o tamanho do Sol em alguma situação específica, pois nos testes que fiz, somente quando editei o 6.0 rendeu resultado.

Mas como eu soube o endereço desse 6.0? Simples, clico nele para o cursor de "digitação" ficar lá e pressiono TAB

Mas não é um número qualquer, e sim um ponteiro para um "6.0". O ponteiro é chamado de "flt_858B44" onde eu posso ver o conteúdo dele (6.0) simplesmente passando o mouse em cima. Se você clicar nele e press X irá aparecer a lista de todos os locais que este ponteiro com valor 6.0 é usado, 80 locais, você não pode de maneira alguma editar o conteúdo desse ponteiro, e sim adicionar um novo ponteiro no lugar dele com um novo número.
Para isso, vejamos que o tal ponteiro do tamanho do Sol está em "006FC6E8" (como visto em azul na print acima), mas antes tem a instrução "fmul", portanto você precisa pular 2 bytes para encontrar o real endereço de onde está escrito este ponteiro (eu não sei ao certo quantos bytes são necessários para pular em cada tipo de instrução, mas é geralmente 1, 2 ou 3, vai chutando, seria bom ter uma lista/regras aqui nesse tutorial, né?)

Bem, 6FC6E8 + 2 bytes = 6FC6EA (lembre-se da contagem hexadecimal, 0 1 2 3 4 5 6 7 8 9 A B C D E F)
Em 6FC6EA nós temos o ponteiro, nós precisamos agora criar um novo ponteiro para substituir ele, o que é simples, por exemplo em cleo você tem 2 modos:

Variável:
Código:
0@ = 20.0
0AC7: 1@ = var 0@ offset

Thread Memory:
Código:
0AC6: 1@ = label @label offset
0A8C: write_memory 1@ size 4 value 20.0 vp 0

:label
hex
00 00 00 00
end

Eu prefiro, é claro, a thread memory, pois se você escrever o ponteiro da variável 0@ lá, caso você editar a 0@, irá editar o valor no endereço automaticamente, assim se você usar uma variável você nunca poderá mudar o valor dela (a não ser em situações específicas). Se seu script é grande e precisará de muitas variáveis, você deverá usar thread memory, assim o valor sempre ficará guardadinho ali bonitinho.

Em seguida, tendo "1@" como o ponteiro da variável ou thread memory, é só escrever o "1@" lá para substituir o antigo ponteiro pelo nosso novo ponteiro com o nosso valor.
Código:
0A8C: write_memory 0x6FC6EA size 4 value 1@ vp 0
Por exemplo:
Código:
{$cleo}
0AC6: 1@ = label @label offset
0A8C: write_memory 1@ size 4 value 20.0 vp 0
0A8C: write_memory 0x6FC6EA size 4 value 1@ vp 0
0A93: end_custom_thread

:label
hex
00 00 00 00
end
E está feito. Você mudou o tamanho do Sol do seu GTA.



Exemplo 2 - Desativando funções do jogo

Bem mais simples do que editar números nele.
No exemplo, bem, eu odeio aquele efeito de neblina pesado que causa lag por exemplo em SF, quero desativar.
Como citado no exemplo 1, vamos procurar por alguma função com nome "fog" (neblina)
Você encontrará várias no caminho, mas a "fog" que queremos é a "CClouds::MovingFogRender", como o nome demonstra, é a renderização da "nuvem" de neblina em movimento pelo mapa, para desativar a tal neblina nós temos que desativar a função de renderização dela, assim ela nunca será renderizada.
2 cliques, no IDA View nós teremos a função, mas nós não queremos editar a função, e sim não fazê-la ser ativada.

Para isso, clique no nome dela (como mostrado em amarelo) e press X para ver onde que esta função é chamada. Felizmente é só em 1 único lugar, então só precisamos editar aquele lugar, se fosse mais, deveria também editar os outros.
Clicando 2 vezes no lugar onde é usada, você irá até lá.

Ela é chamada na renderização dos efeitos do jogo, e está no endereço 53E1AF, onde vai até o endereço 53E1B4, portanto, são 5 bytes. (sim, geralmente são 5 bytes, mas há as funções maiores com parâmetros que acabam usando vários bytes, assim pode dificultar você a contar. Lembre-se que a calculadora do windows tem o modo "programador" com modo hexadecimal lá)
Nós teremos que "NOPar" estes 5 bytes, onde o NOP irá literalmente apagar aquela linha do .exe do jogo deixando um vazio. O NOP é escrever o valor "0x90".
E finalmente o "virtual_protect 1" será utilizado, ele é geralmente recomendado ao usar NOP (foi a única recomendação de uso dele que li em toda minha vida).
Código:
0A8C: write_memory 0x53E1AF size 5 value 0x90 virtual_protect 1
Sim, é só isso. Logo acima dela tem inclusive o CWaterCannons::Render, você pode brincar e remover também os canhões de água dos bombeiros etc etc.

Lembra da CCoronas::DoSunAndMoon que cria o Sol? Que tal desativar o Sol? É só NOPar 53C136
Código:
0A8C: write_memory 0x53C136 size 5 value 0x90 virtual_protect 1
Lembra do mod de desativar o noise da chuva?
Código:
0A8C: write_memory 0x705078 size 5 value 0x90 virtual_protect 1
Bora aumentar 20% do FPS do jogo?
Código:
0A8C: write_memory 0x53E94C size 1 value 0 virtual_protect 0
Como que o incrível Memory Fix de 2 GB funciona?
Código:
0A8C: write_memory 0x8A5A80 size 4 value 2147483647 virtual_protect 0
É, meu jovem... Uma boa explorada no .exe do jogo te possibilita a criar mods ótimos em somente 1 linha de script.

ps: Na cleo 3 era necessário usar "0x9090909090" (5 NOPs) mas na cleo 4 foi facilitado.
ps: CGame__Process (53BEE0) é o processo principal do jogo, muito interessante!





Exemplo 3 - Usando funções do jogo

Poderia ser necessário um tutorial separado para ensinar o uso de funções, mas é simples e nem deve ser necessário isso, auto-explicativo.

Para encontrar funções acredito que não preciso mais exemplificar, só dizer o óbvio: Procure por funções realmente úteis para você, funções como CStreaming::Update nunca serão úteis, e antes tenha certeza de que algum opcode já não faz o que aquela tal função faz, funções como CWeather__ForceWeather já há opcode para isso: 01B5:
Geralmente o uso das funções do jogo podem ser úteis para coisas realmente complexas, raramente você precisará usar para coisas simples já que as coisas simples existem os opcodes.

Vamos pegar um exemplo auto-explicativo lá em CClouds::Init no endereço 7138D0

Esta é a função onde carrega as texturas do particle.txd para ser usada nas nuvens, você pode tanto trocar os nomes (reescrevendo-os) ou usar tais funções em seus mods.
Isso escrito em cleo, seria:
Código:
0AA5: call 0x7316A0 num_params 0 pop 0  //CTxdStore::PushCurrentTxd();
0AA7: call_function 0x731850 num_params 1 pop 1 "particle" -> v0  //v0 = CTxdStore::FindTxdSlot("particle");
0AA5: call 0x7319C0 num_params 1 pop 1 v0  //CTxdStore::SetCurrentTxd(v0);
0AA7: call_function 0x7F3AC0 num_params 2 pop 2 0 "cloud1" -> gpCloudTex  //gpCloudTex = RwReadTexture("cloud1", 0);
0AA7: call_function 0x7F3AC0 num_params 2 pop 2 0 "cloudmasked" -> texCloudmasked  //texCloudmasked = RwReadTexture("cloudmasked", 0);
0AA7: call_function 0x7F3AC0 num_params 2 pop 2 "lunarm" "lunar" -> gpMoonMask  //gpMoonMask = (int)RwReadTexture("lunar", "lunarm");
0AA7: call_function 0x7F3AC0 num_params 2 pop 2 "cloudhighm" "cloudhigh" -> texCloudhigh  //texCloudhigh = RwReadTexture("cloudhigh", "cloudhighm");
0AA5: call 0x7316B0 num_params 0 pop 0  //CTxdStore::PopCurrentTxd();
0AA5: é usado para chamar as funções sem retorno, e o 0AA7: são para funções com retorno (onde retorna algum valor numa variável). Também temos 0AA6: para funções direcionadas à structs (como CVehicle etc) e 0AA8: que é o mesmo mas com retorno.
E veja que os parâmetros são escritos em ordem inversa! Um detalhe super importante, não esqueça.
E o FindTxdSlot não faz carregar um Txd, para carregar um .txd novo é outro assunto. Aparentemente em 5900B6 pode te ajudar nisso.

Quer um exemplo em prática?
Código:
{$cleo}
const
_explo1 = 1@  
_explo2 = 11@
_foot = 2@  
_foot_b1 = 3@  
_foot_b2 = 13@  
_blood1 = 4@  
_blood2 = 14@
_blood3 = 12@  

replace_SHAD_HELI_EXPLOSION = 0x73746A
replace_SHAD_PED_SANDFOOTS = 0x5E5587
replace_BLOODPOOL_64_BLOODFOOTS = 0x5E547B  
replace_BLOODPOOL_64_STOPBIGBLOOD = 0x630E74
replace_BLOODPOOL_64_PROGBIGBLOOD = 0x630E32
replace_BLOODPOOL_64_ADDBLOOD_1 = 0x49ED6F  
replace_BLOODPOOL_64_ADDBLOOD_2 = 0x49EDBD  
 
replace_BLOODPOOL_64_BLEEDING = 0x5E9457
  
replace_BLOODPOOL_64_JUMPLNCH_1 = 0x679ED0
replace_BLOODPOOL_64_JUMPLNCH_2 = 0x679FAA  
 
replace_BLOODPOOL_64_STORE = 0x707B0B
end


0AA5: call 0x7316A0 0 0  PushCurrentTxd ()          
0AA7: call 0x731850 1 1  FindTxdSlot    ( "particle" -> 0@ )
0AA5: call 0x7319C0 1 1  SetCurrentTxd  ( 0@ )          
0AA7: call 0x7F3AC0 2 2  RwReadTexture  ( 0 "explo1"  -> _explo1 )  
0AA7: call 0x7F3AC0 2 2  RwReadTexture  ( 0 "explo2"  -> _explo2 )
0AA7: call 0x7F3AC0 2 2  RwReadTexture  ( 0 "foot"    -> _foot )  
0AA7: call 0x7F3AC0 2 2  RwReadTexture  ( 0 "foot_b1" -> _foot_b1 )  
0AA7: call 0x7F3AC0 2 2  RwReadTexture  ( 0 "foot_b2" -> _foot_b2 )  
0AA7: call 0x7F3AC0 2 2  RwReadTexture  ( 0 "foot_b1" -> _foot_b1 )  
0AA7: call 0x7F3AC0 2 2  RwReadTexture  ( 0 "foot_b2" -> _foot_b2 )    
0AA7: call 0x7F3AC0 2 2  RwReadTexture  ( 0 "blood1"  -> _blood1 )  
0AA7: call 0x7F3AC0 2 2  RwReadTexture  ( 0 "blood2"  -> _blood2 )  
0AA7: call 0x7F3AC0 2 2  RwReadTexture  ( 0 "blood3"  -> _blood3 )      
0AA5: call 0x7316B0 0 0  PopCurrentTxd  ()            
 

0A8C: write_memory replace_SHAD_PED_SANDFOOTS           size 4 value _foot     vp 0
    
while true
    wait 0 //frame 1  
    0A8C: write_memory replace_SHAD_HELI_EXPLOSION          size 4 value _explo1    vp 0  
    0A8C: write_memory replace_BLOODPOOL_64_BLOODFOOTS      size 4 value _foot_b1   vp 0  
                                                                                                                                              
    0A8C: write_memory replace_BLOODPOOL_64_STORE           size 4 value _blood1   vp 0  
    0A8C: write_memory replace_BLOODPOOL_64_ADDBLOOD_1      size 4 value _blood1   vp 0  
    0A8C: write_memory replace_BLOODPOOL_64_ADDBLOOD_2      size 4 value _blood1   vp 0                                
    0A8C: write_memory replace_BLOODPOOL_64_BLEEDING        size 4 value _blood1   vp 0                                  
    0A8C: write_memory replace_BLOODPOOL_64_JUMPLNCH_1      size 4 value _blood1   vp 0                                
    0A8C: write_memory replace_BLOODPOOL_64_JUMPLNCH_2      size 4 value _blood1   vp 0
    
    wait 0 //frame 2
    0A8C: write_memory replace_SHAD_HELI_EXPLOSION          size 4 value _explo2    vp 0  
    0A8C: write_memory replace_BLOODPOOL_64_BLOODFOOTS      size 4 value _foot_b2   vp 0
    0209: 33@ = random_int_in_ranges 0 2
    if 33@ == 1      
    then                                                                                                                                          
        0A8C: write_memory replace_BLOODPOOL_64_STORE         size 4 value _blood3   vp 0
        0A8C: write_memory replace_BLOODPOOL_64_ADDBLOOD_1    size 4 value _blood3   vp 0  
        0A8C: write_memory replace_BLOODPOOL_64_ADDBLOOD_2    size 4 value _blood3   vp 0                              
        0A8C: write_memory replace_BLOODPOOL_64_JUMPLNCH_1    size 4 value _blood3   vp 0                                
        0A8C: write_memory replace_BLOODPOOL_64_JUMPLNCH_2    size 4 value _blood3   vp 0                                
        0A8C: write_memory replace_BLOODPOOL_64_BLEEDING      size 4 value _blood3   vp 0    
    else                                                                                                                                      
        0A8C: write_memory replace_BLOODPOOL_64_STORE         size 4 value _blood2   vp 0
        0A8C: write_memory replace_BLOODPOOL_64_ADDBLOOD_1    size 4 value _blood2   vp 0  
        0A8C: write_memory replace_BLOODPOOL_64_ADDBLOOD_2    size 4 value _blood2   vp 0                                
        0A8C: write_memory replace_BLOODPOOL_64_BLEEDING      size 4 value _blood2   vp 0                                  
        0A8C: write_memory replace_BLOODPOOL_64_JUMPLNCH_1    size 4 value _blood2   vp 0                                
        0A8C: write_memory replace_BLOODPOOL_64_JUMPLNCH_2    size 4 value _blood2   vp 0  
    end
end
Olhando como foram carregadas e usadas as texturas do jogo, eu mesmo carreguei as minhas e usei, inclusive trocando elas para criar variações.

Fiz o carregamento das texturas como o jogo faz, depois procurar em quais locais as texturas eram usadas, como por exemplo em 5E547B é o local onde cria as pegadas de sangue usando a textura texBloodpool64, eu simplesmente reescrevi colocando a textura nova que eu carreguei e agora eu tenho uma pegada de sangue de textura exclusiva de uma sola de sapato. Super simples.
O famoso Mouse Fix que corrige o mouse parando de funcionar aleatoriamente ao pausar e despausar o jogo é criado simplesmente chamando a função diMouseInit (o parâmetro nem eu nem Fabio sabemos pra que serve)
Código:
0AA5: call 0x7469A0 num_params 1 pop 1 0


Uma dica é você abrir o MixSets e ver as escrituras de endereço que ele faz para se basear nas suas explorações. Lembrando que deixando o cursor de digitação em cima de um número no Sanny Builder e apertando CTRL+H converte para hexadecimal (e vice versa)

Este tutorial não disse quase nada sobre IDA, mas quase tudo sobre procurar endereços de memória, o uso do IDA em si é para documentar, você também pode usá-lo para isso se quiser mas este tutorial não serve para explicá-lo, é outro assunto.

Alguma dúvida? Conseguiu achar alguma coisa interessante?


Última edição por Junior_Djjr em Sex 30 Mar 2018, 19:57, editado 18 vez(es) (Razão : Eu tinha colocado endereço errado no CTxdStore::FindTxdSlot)

______________________________
BMS agora em nova plataforma:
Forum.MixMods.com.br
avatar
Designer - Avançado
Designer - Avançado
Título : Grafiteiro & Ilustrador digital.
Mensagens : 1162
Reputação : 156
Desde : 20/05/2015
Idade : 18
Localização : São Paulo - SP
Link : http://troquetti.deviantart.com/
Ver perfil do usuário
em Sex 01 Jan 2016, 11:59
Vou ler todos seus tutoriais jaja
To afim de aprender esse ano

______________________________
Quer ser um ilustrador digital? Alguns tutoriais básicos AQUI.
My WorkShop
avatar
Mensagens Nível 4
Mensagens Nível 4
Mensagens : 266
Reputação : 38
Desde : 27/09/2015
Localização : Cps - SP
Link : goo.gl/BgNT9p
Ver perfil do usuário
em Sex 01 Jan 2016, 21:10
Link do IDA Pro off

______________________________
Não importa o quão pequeno você
comece, apenas comece algo que
importa.


Mods cleo de minha autoria: https://db.tt/91oW1EWC
Jogos de minha autoria: nenhum por enquanto
ModLoader VIsual Editor WIP
avatar
Scripter CLEO - Avançado
Scripter CLEO - Avançado
Título : Censurando since 2011
Mensagens : 22701
Reputação : 727
Desde : 03/05/2012
Idade : 22
Localização : Ibitinga - SP
Link : www.MixMods.com.br
Ver perfil do usuáriohttp://MixMods.com.br
em Sex 01 Jan 2016, 22:57
Eh fácil encontrar links do IDA Pro crackeado

Eh fácil até crackear, crackeia até por bloco de notas essa merda

Baixa algum e me diga se funciona tudo certinho etc, essa eh uma versão mais recente da que eu uso



edit: Nossa, esqueci de citar o comando G, eh indispensável:
G - Press G no IDA View para pular diretamente a um endereço, simples. Por exemplo cole esse endereço: 53BEE0 que você irá para o processo principal do jogo (CGame__Process). Você pode digitar assim: @@opcode_0001 (ou outro opcode) e dar ok para ir diretamente num opcode, o que é muito útil para descobrir endereços e funções úteis e simples, mas claro, somente com opcodes "de fábrica", opcodes da CLEO ficam no CLEO.asi e não no gta_sa.exe.


Última edição por Junior_Djjr em Sex 25 Mar 2016, 10:07, editado 1 vez(es)

______________________________
BMS agora em nova plataforma:
Forum.MixMods.com.br
avatar
Scripter CLEO - Avançado
Scripter CLEO - Avançado
Título : Censurando since 2011
Mensagens : 22701
Reputação : 727
Desde : 03/05/2012
Idade : 22
Localização : Ibitinga - SP
Link : www.MixMods.com.br
Ver perfil do usuáriohttp://MixMods.com.br
em Qui 04 Fev 2016, 21:57
A adição de corona nas luzes dos carros eh muito simples entender
Nomeei:

006E0A50
Pro dummy headlight2 fica em 006E1A60

Toh adicionando tudo no Mix Sets

______________________________
BMS agora em nova plataforma:
Forum.MixMods.com.br
avatar
Programador - Avançado
Programador - Avançado
Mensagens : 7652
Reputação : 349
Desde : 03/05/2012
Ver perfil do usuário
em Ter 09 Fev 2016, 02:13
abre o hexviewer que dá pra ver onde na instrução tá o endereço pra mudar

______________________________
"Give a man a game engine and he delivers a game. Teach a man to make a game engine and he never delivers anything."

avatar
Scripter CLEO - Avançado
Scripter CLEO - Avançado
Título : Censurando since 2011
Mensagens : 22701
Reputação : 727
Desde : 03/05/2012
Idade : 22
Localização : Ibitinga - SP
Link : www.MixMods.com.br
Ver perfil do usuáriohttp://MixMods.com.br
em Qua 10 Fev 2016, 04:35
@LINK/2012 escreveu:abre o hexviewer que dá pra ver onde na instrução tá o endereço pra mudar
Como assim?
Cliquei no valor, abri o hex view e apareceu "selecionada" a instrução toda

______________________________
BMS agora em nova plataforma:
Forum.MixMods.com.br
avatar
Programador - Avançado
Programador - Avançado
Mensagens : 18217
Reputação : 384
Desde : 04/05/2012
Idade : 21
Link : gtamodvicio.blogspot.com
Ver perfil do usuáriohttp://gtamodvicio.blogspot.com
em Qua 10 Fev 2016, 04:43
@Junior_Djjr escreveu:
@LINK/2012 escreveu:abre o hexviewer que dá pra ver onde na instrução tá o endereço pra mudar
Como assim?
Cliquei no valor, abri o hex view e apareceu "selecionada" a instrução toda

O valor que você quer tem 4 bytes, 0x04000000, inverta e terá 00 00 00 04, os ultimos 4 bytes ali são exatamente isso


______________________________

Modifico quase qualquer coisa.   :)
------------------>>>http://gtamodvicio.blogspot.com/<<<------------------

Meu PC:
Spoiler:

Configurações PC:
*Processador: Intel Core i7 4790K 4.00GHz LGA1150
*Placa Mãe: GIGABYTE GA-H97M-D3H Intel (LGA1150)
*HD: 1TB Seagate Barracuda 64MB Sata III 7200RPM (2x - RAID 0)
*HD²: SAMSUNG M3 Externo USB 5400RPM 1TB
*Placa de vídeo: Nvidia GTX660 2GB DDR5 192bit EVGA
*RAM: 8GB DDR3 1600MHZ Kingston HYPER X BEAST (2x4GB)
*Fonte: Corsair 600W Reais CX600M Modular - CP-9020060-WW (80 Plus Bronze)
*Gabinete: Gabinete Raidmax Super Hurricane Branco - 248WB
*Monitor: LG 23MP55HQ Full HD HDMI 23'
avatar
Scripter CLEO - Avançado
Scripter CLEO - Avançado
Título : Censurando since 2011
Mensagens : 22701
Reputação : 727
Desde : 03/05/2012
Idade : 22
Localização : Ibitinga - SP
Link : www.MixMods.com.br
Ver perfil do usuáriohttp://MixMods.com.br
em Qua 10 Fev 2016, 05:45
Isso eh o mesmo de pegar o endereço da próxima instrução e diminuir 4 bytes, neh?
Há algum atalho para abrir o hex view?

______________________________
BMS agora em nova plataforma:
Forum.MixMods.com.br
avatar
Programador - Avançado
Programador - Avançado
Mensagens : 18217
Reputação : 384
Desde : 04/05/2012
Idade : 21
Link : gtamodvicio.blogspot.com
Ver perfil do usuáriohttp://gtamodvicio.blogspot.com
em Qua 10 Fev 2016, 12:18
@Junior_Djjr escreveu:Isso eh o mesmo de pegar o endereço da próxima instrução e diminuir 4 bytes, neh?
Há algum atalho para abrir o hex view?

Nem sempre, por isso eu recomendo comparar os bytes.

Acho que até tem alguma atalho, mas não conheço ele Fuch That Guy (Se você fechou a aba do hex view, pode dar um Reset Desktop no menu Windows)

______________________________

Modifico quase qualquer coisa.   :)
------------------>>>http://gtamodvicio.blogspot.com/<<<------------------

Meu PC:
Spoiler:

Configurações PC:
*Processador: Intel Core i7 4790K 4.00GHz LGA1150
*Placa Mãe: GIGABYTE GA-H97M-D3H Intel (LGA1150)
*HD: 1TB Seagate Barracuda 64MB Sata III 7200RPM (2x - RAID 0)
*HD²: SAMSUNG M3 Externo USB 5400RPM 1TB
*Placa de vídeo: Nvidia GTX660 2GB DDR5 192bit EVGA
*RAM: 8GB DDR3 1600MHZ Kingston HYPER X BEAST (2x4GB)
*Fonte: Corsair 600W Reais CX600M Modular - CP-9020060-WW (80 Plus Bronze)
*Gabinete: Gabinete Raidmax Super Hurricane Branco - 248WB
*Monitor: LG 23MP55HQ Full HD HDMI 23'
avatar
Scripter CLEO - Avançado
Scripter CLEO - Avançado
Título : Censurando since 2011
Mensagens : 22701
Reputação : 727
Desde : 03/05/2012
Idade : 22
Localização : Ibitinga - SP
Link : www.MixMods.com.br
Ver perfil do usuáriohttp://MixMods.com.br
em Qua 10 Fev 2016, 12:30
Eh q eh um saco ter q ficar indo lah em cima abrindo subviews

______________________________
BMS agora em nova plataforma:
Forum.MixMods.com.br
avatar
Mensagens Nível 3
Mensagens Nível 3
Mensagens : 104
Reputação : 2
Desde : 14/01/2014
Ver perfil do usuário
em Qua 10 Fev 2016, 12:59
@Junior_Djjr escreveu:Eh fácil encontrar links do IDA Pro crackeado
Código:
http://www3.zippyshare.com/v/79024544/file.html
https://www.sendspace.com/file/snn4y9
http://www3.zippyshare.com/v/79024544/file.html
https://www.sendspace.com/file/snn4y9

Eh fácil até crackear, crackeia até por bloco de notas essa merda

Baixa algum e me diga se funciona tudo certinho etc, essa eh uma versão mais recente da que eu uso

Não abrem o arquivo .idb, diz que é versão demo, por tanto n pode abrir esse tipo de arquivo.
consegui um crackeado porém v6.1, mas n gera o pseudocódigo corretamente.

______________________________
avatar
Programador - Avançado
Programador - Avançado
Mensagens : 18217
Reputação : 384
Desde : 04/05/2012
Idade : 21
Link : gtamodvicio.blogspot.com
Ver perfil do usuáriohttp://gtamodvicio.blogspot.com
em Qua 10 Fev 2016, 16:13
@KarapTeloS escreveu:
@Junior_Djjr escreveu:Eh fácil encontrar links do IDA Pro crackeado
Código:
http://www3.zippyshare.com/v/79024544/file.html
https://www.sendspace.com/file/snn4y9
http://www3.zippyshare.com/v/79024544/file.html
https://www.sendspace.com/file/snn4y9

Eh fácil até crackear, crackeia até por bloco de notas essa merda

Baixa algum e me diga se funciona tudo certinho etc, essa eh uma versão mais recente da que eu uso

Não abrem o arquivo .idb, diz que é versão demo, por tanto n pode abrir esse tipo de arquivo.
consegui um crackeado porém v6.1, mas n gera o pseudocódigo corretamente.

meu IDA (base64)
Código:
aHR0cHM6Ly9tZWdhLm56LyMhbjU0d1ZES0ohU3oxOG1WTzh0RVpHU2Iwc2Y0UVFmakNmR05BU3JPSlhDUGdITkxReVJLbw==

______________________________

Modifico quase qualquer coisa.   :)
------------------>>>http://gtamodvicio.blogspot.com/<<<------------------

Meu PC:
Spoiler:

Configurações PC:
*Processador: Intel Core i7 4790K 4.00GHz LGA1150
*Placa Mãe: GIGABYTE GA-H97M-D3H Intel (LGA1150)
*HD: 1TB Seagate Barracuda 64MB Sata III 7200RPM (2x - RAID 0)
*HD²: SAMSUNG M3 Externo USB 5400RPM 1TB
*Placa de vídeo: Nvidia GTX660 2GB DDR5 192bit EVGA
*RAM: 8GB DDR3 1600MHZ Kingston HYPER X BEAST (2x4GB)
*Fonte: Corsair 600W Reais CX600M Modular - CP-9020060-WW (80 Plus Bronze)
*Gabinete: Gabinete Raidmax Super Hurricane Branco - 248WB
*Monitor: LG 23MP55HQ Full HD HDMI 23'
avatar
Scripter CLEO - Avançado
Scripter CLEO - Avançado
Título : Censurando since 2011
Mensagens : 22701
Reputação : 727
Desde : 03/05/2012
Idade : 22
Localização : Ibitinga - SP
Link : www.MixMods.com.br
Ver perfil do usuáriohttp://MixMods.com.br
em Qua 10 Fev 2016, 16:44
@Fabio escreveu:meu IDA (base64)
Código:
aHR0cHM6Ly9tZWdhLm56LyMhbjU0d1ZES0ohU3oxOG1WTzh0RVpHU2Iwc2Y0UVFmakNmR05BU3JPSlhDUGdITkxReVJLbw==
Qual a necessidade? :v:

______________________________
BMS agora em nova plataforma:
Forum.MixMods.com.br
avatar
Programador - Avançado
Programador - Avançado
Mensagens : 18217
Reputação : 384
Desde : 04/05/2012
Idade : 21
Link : gtamodvicio.blogspot.com
Ver perfil do usuáriohttp://gtamodvicio.blogspot.com
em Qua 10 Fev 2016, 16:45
@Junior_Djjr escreveu:
@Fabio escreveu:meu IDA (base64)
Código:
aHR0cHM6Ly9tZWdhLm56LyMhbjU0d1ZES0ohU3oxOG1WTzh0RVpHU2Iwc2Y0UVFmakNmR05BU3JPSlhDUGdITkxReVJLbw==
Qual a necessidade? :v:

Para ter certeza que não vai ser preciso apagar essa página pelos links
Link pirata + engenharia reversa de um exe que diz que não pode fazer isso Fuch That Guy

______________________________

Modifico quase qualquer coisa.   :)
------------------>>>http://gtamodvicio.blogspot.com/<<<------------------

Meu PC:
Spoiler:

Configurações PC:
*Processador: Intel Core i7 4790K 4.00GHz LGA1150
*Placa Mãe: GIGABYTE GA-H97M-D3H Intel (LGA1150)
*HD: 1TB Seagate Barracuda 64MB Sata III 7200RPM (2x - RAID 0)
*HD²: SAMSUNG M3 Externo USB 5400RPM 1TB
*Placa de vídeo: Nvidia GTX660 2GB DDR5 192bit EVGA
*RAM: 8GB DDR3 1600MHZ Kingston HYPER X BEAST (2x4GB)
*Fonte: Corsair 600W Reais CX600M Modular - CP-9020060-WW (80 Plus Bronze)
*Gabinete: Gabinete Raidmax Super Hurricane Branco - 248WB
*Monitor: LG 23MP55HQ Full HD HDMI 23'
avatar
Mensagens Nível 3
Mensagens Nível 3
Mensagens : 104
Reputação : 2
Desde : 14/01/2014
Ver perfil do usuário
em Qua 10 Fev 2016, 22:59
Sem sucesso, logo baixei uma versão 6.8, porém ao abrir o .idb, primeiro ele pede permissão para atualiza lo, dizendo ser obsoleto (da v6.1), logo após ele da um erro dizendo "Desculpe, Essa database foi gerada através de um IDA pirata!" e fecha o programa.

______________________________
avatar
Programador - Avançado
Programador - Avançado
Mensagens : 18217
Reputação : 384
Desde : 04/05/2012
Idade : 21
Link : gtamodvicio.blogspot.com
Ver perfil do usuáriohttp://gtamodvicio.blogspot.com
em Qui 11 Fev 2016, 00:32
@KarapTeloS escreveu:Sem sucesso, logo baixei uma versão 6.8, porém ao abrir o .idb, primeiro ele pede permissão para atualiza lo, dizendo ser obsoleto (da v6.1), logo após ele da um erro dizendo "Desculpe, Essa database foi gerada através de um IDA pirata!" e fecha o programa.

Com o IDA e a IDB que eu passei? pokerface pokerface pokerface

______________________________

Modifico quase qualquer coisa.   :)
------------------>>>http://gtamodvicio.blogspot.com/<<<------------------

Meu PC:
Spoiler:

Configurações PC:
*Processador: Intel Core i7 4790K 4.00GHz LGA1150
*Placa Mãe: GIGABYTE GA-H97M-D3H Intel (LGA1150)
*HD: 1TB Seagate Barracuda 64MB Sata III 7200RPM (2x - RAID 0)
*HD²: SAMSUNG M3 Externo USB 5400RPM 1TB
*Placa de vídeo: Nvidia GTX660 2GB DDR5 192bit EVGA
*RAM: 8GB DDR3 1600MHZ Kingston HYPER X BEAST (2x4GB)
*Fonte: Corsair 600W Reais CX600M Modular - CP-9020060-WW (80 Plus Bronze)
*Gabinete: Gabinete Raidmax Super Hurricane Branco - 248WB
*Monitor: LG 23MP55HQ Full HD HDMI 23'
avatar
Mensagens Nível 3
Mensagens Nível 3
Mensagens : 104
Reputação : 2
Desde : 14/01/2014
Ver perfil do usuário
em Qui 11 Fev 2016, 13:18
A msgs aparecem com o IDA 6.8 que baixei, uso essa mesma IDB que o Jr postou no primeiro tópico.
Esse Serial que vc passou n mudou nada (bom talvez eu esteja fazendo algo errado).

______________________________
avatar
Scripter CLEO - Avançado
Scripter CLEO - Avançado
Título : Censurando since 2011
Mensagens : 22701
Reputação : 727
Desde : 03/05/2012
Idade : 22
Localização : Ibitinga - SP
Link : www.MixMods.com.br
Ver perfil do usuáriohttp://MixMods.com.br
em Qui 11 Fev 2016, 13:20
@KarapTeloS escreveu:Esse Serial que vc passou
:)
https://paulschou.com/tools/xlate/

______________________________
BMS agora em nova plataforma:
Forum.MixMods.com.br
avatar
Mensagens Nível 3
Mensagens Nível 3
Mensagens : 104
Reputação : 2
Desde : 14/01/2014
Ver perfil do usuário
em Qui 11 Fev 2016, 13:38
@Junior_Djjr escreveu:
@KarapTeloS escreveu:Esse Serial que vc passou
:)
https://paulschou.com/tools/xlate/

Sim realmente estava fazendo algo errado. xD

______________________________
avatar
Scripter CLEO - Intermediário
Scripter CLEO - Intermediário
Mensagens : 529
Reputação : 42
Desde : 08/02/2016
Localização : São Paulo
Ver perfil do usuário
em Sab 11 Fev 2017, 14:56
Cara, estou querendo entender isso para em um futuro próximo começar a descobrir novos endereços para alguns mods (aqui não ensina, tem algum tutorial para recomendar ou pelo menos explicar como se faz).

O gta_sa.idb deveria estar disponível para download aqui, por que não está? Peguei esse aqui do fastman, mas como sei que está atualizado ou algo assim???

E o IDA Pro é só um programa mesmo, certo?
avatar
Programador - Avançado
Programador - Avançado
Mensagens : 18217
Reputação : 384
Desde : 04/05/2012
Idade : 21
Link : gtamodvicio.blogspot.com
Ver perfil do usuáriohttp://gtamodvicio.blogspot.com
em Sab 11 Fev 2017, 16:34
@Deadstroke escreveu:Cara, estou querendo entender isso para em um futuro próximo começar a descobrir novos endereços para alguns mods (aqui não ensina, tem algum tutorial para recomendar ou pelo menos explicar como se faz).

Estude bastante assembly de x86, é muito assunto para fazer um tutorial do zero aqui.

@Deadstroke escreveu:
O gta_sa.idb deveria estar disponível para download aqui, por que não está? Peguei esse aqui do fastman, mas como sei que está atualizado ou algo assim???

Acabei de testar aqui e o download está funcionando, o que aconteceu aí? philosoraptor

O do fastman deve ser IDB do .exe com secuROM, então ele vai ter pedaços criptografados internamente e alguns endereços trocados. philosoraptor

@Deadstroke escreveu:E o IDA Pro é só um programa mesmo, certo?

É. philosoraptor

______________________________

Modifico quase qualquer coisa.   :)
------------------>>>http://gtamodvicio.blogspot.com/<<<------------------

Meu PC:
Spoiler:

Configurações PC:
*Processador: Intel Core i7 4790K 4.00GHz LGA1150
*Placa Mãe: GIGABYTE GA-H97M-D3H Intel (LGA1150)
*HD: 1TB Seagate Barracuda 64MB Sata III 7200RPM (2x - RAID 0)
*HD²: SAMSUNG M3 Externo USB 5400RPM 1TB
*Placa de vídeo: Nvidia GTX660 2GB DDR5 192bit EVGA
*RAM: 8GB DDR3 1600MHZ Kingston HYPER X BEAST (2x4GB)
*Fonte: Corsair 600W Reais CX600M Modular - CP-9020060-WW (80 Plus Bronze)
*Gabinete: Gabinete Raidmax Super Hurricane Branco - 248WB
*Monitor: LG 23MP55HQ Full HD HDMI 23'
avatar
Scripter CLEO - Avançado
Scripter CLEO - Avançado
Título : Censurando since 2011
Mensagens : 22701
Reputação : 727
Desde : 03/05/2012
Idade : 22
Localização : Ibitinga - SP
Link : www.MixMods.com.br
Ver perfil do usuáriohttp://MixMods.com.br
em Sab 11 Fev 2017, 17:53
@Deadstroke escreveu:Cara, estou querendo entender isso para em um futuro próximo começar a descobrir novos endereços para alguns mods (aqui não ensina, tem algum tutorial para recomendar ou pelo menos explicar como se faz).
Ué, aqui ensina a ir procurar, foi basicamente o objetivo deste tutorial.

______________________________
BMS agora em nova plataforma:
Forum.MixMods.com.br
avatar
Scripter CLEO - Intermediário
Scripter CLEO - Intermediário
Mensagens : 529
Reputação : 42
Desde : 08/02/2016
Localização : São Paulo
Ver perfil do usuário
em Sab 11 Fev 2017, 18:09
@Fabio escreveu:
Estude bastante assembly de x86, é muito assunto para fazer um tutorial do zero aqui.
Entendi, acho que não rola por enquanto então?

@Fabio escreveu:
@Deadstroke escreveu:
O gta_sa.idb deveria estar disponível para download aqui, por que não está? Peguei esse aqui do fastman, mas como sei que está atualizado ou algo assim???

Acabei de testar aqui e o download está funcionando, o que aconteceu aí? philosoraptor

O do fastman deve ser IDB do .exe com secuROM, então ele vai ter pedaços criptografados internamente e alguns endereços trocados. philosoraptor

Que download? Esse é o problema...
Só encontrei os links dos programas do base64 e xlate. Esses códigos do IDA Pro e do gta_sa.idb realmente não saquei como se usa, não seriam somente cracks?
Edit.: entendi, vc coloca os links no base64 que aparece o real. Pq já não transferem o link real normalmente? kkkkk

@Fabio escreveu:
@Deadstroke escreveu:E o IDA Pro é só um programa mesmo, certo?

É. philosoraptor

@Junior_Djjr escreveu:
@Deadstroke escreveu:Cara, estou querendo entender isso para em um futuro próximo começar a descobrir novos endereços para alguns mods (aqui não ensina, tem algum tutorial para recomendar ou pelo menos explicar como se faz).
Ué, aqui ensina a ir procurar, foi basicamente o objetivo deste tutorial.

Na verdade ensina a procurar os que já foram nomeados antes, já é bem útil mesmo, mas como o Fábio disse, difícil.


Consegui dar uma mexida, mas não consigo usar direito o IDA Pro, não faço ideia porque ou se não entendi algum detalhe.
Queria editar um valor que está no endereço 0x0685A49 , referente a weaponaccuracy do player creio eu.
Na linha 146 dentro do endereço, tem o seguinte comando:

Código:
playerPed->weaponAccuracy = (v4->field_18 & 1) != 0 ? 95 : 100;

Queria editar dinamicamente esse 95, mas realmente não faço ideia como pegar o endereço dele e depois colocar num script...

Edit.: estou usando o IDa 8.6, não sei se tem comandos diferentes ou se não craqueei direito hahahah
avatar
Programador - Avançado
Programador - Avançado
Mensagens : 18217
Reputação : 384
Desde : 04/05/2012
Idade : 21
Link : gtamodvicio.blogspot.com
Ver perfil do usuáriohttp://gtamodvicio.blogspot.com
em Sab 11 Fev 2017, 18:15
@Deadstroke escreveu:
Que download? Esse é o problema...
Só encontrei os links dos programas do base64 e xlate. Esses códigos do IDA Pro e do gta_sa.idb realmente não saquei como se usa, não seriam somente cracks?

Não são programas, base64 é uma codificação. O Xlate é um site de transformação de várias codificações.

Decodifique os dados dentro do code:
IDA Pro:
Código:
aHR0cHM6Ly9tZWdhLm56LyMhbjU0d1ZES0ohU3oxOG1WTzh0RVpHU2Iwc2Y0UVFmakNmR05BU3JPSlhDUGdITkxReVJLbw==

gta_sa.idb:
Código:
aHR0cHM6Ly9kbC5kcm9wYm94dXNlcmNvbnRlbnQuY29tL3UvMzU0NzYxMjMvUmV2ZXJzZSUyMEVuZ2luZWVyaW5nL2lkYi9ndGFfc2EuN3o=

@Deadstroke escreveu:
Na verdade ensina a procurar os que já foram nomeados antes, já é bem útil mesmo, mas como o Fábio disse, difícil.

Consegui dar uma mexida, mas não consigo usar direito o IDA Pro, não faço ideia porque ou se não entendi algum detalhe.
Queria editar um valor que está no endereço 0x0685A49 , referente a weaponaccuracy do player creio eu.
Na linha 146 dentro do endereço, tem o seguinte comando:

Código:
playerPed->weaponAccuracy = (v4->field_18 & 1) != 0 ? 95 : 100;

Queria editar dinamicamente esse 95, mas realmente não faço ideia como pegar o endereço dele e depois colocar num script...

É bem complexo, mas, você pode ir clicando em partes do pseudo C/C++ code (esse que você está visualizando) e ir apertando Tab, então o IDA vai te deixar +/- no assembly que corresponde àquilo.

Então você poderá usar isso para ver os valores e em que posição/endereço estão:
Spoiler:
@Fabio escreveu:
@Junior_Djjr escreveu:
@LINK/2012 escreveu:abre o hexviewer que dá pra ver onde na instrução tá o endereço pra mudar
Como assim?
Cliquei no valor, abri o hex view e apareceu "selecionada" a instrução toda

O valor que você quer tem 4 bytes, 0x04000000, inverta e terá 00 00 00 04, os ultimos 4 bytes ali são exatamente isso


______________________________

Modifico quase qualquer coisa.   :)
------------------>>>http://gtamodvicio.blogspot.com/<<<------------------

Meu PC:
Spoiler:

Configurações PC:
*Processador: Intel Core i7 4790K 4.00GHz LGA1150
*Placa Mãe: GIGABYTE GA-H97M-D3H Intel (LGA1150)
*HD: 1TB Seagate Barracuda 64MB Sata III 7200RPM (2x - RAID 0)
*HD²: SAMSUNG M3 Externo USB 5400RPM 1TB
*Placa de vídeo: Nvidia GTX660 2GB DDR5 192bit EVGA
*RAM: 8GB DDR3 1600MHZ Kingston HYPER X BEAST (2x4GB)
*Fonte: Corsair 600W Reais CX600M Modular - CP-9020060-WW (80 Plus Bronze)
*Gabinete: Gabinete Raidmax Super Hurricane Branco - 248WB
*Monitor: LG 23MP55HQ Full HD HDMI 23'
Conteúdo patrocinado
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum