Eu criei um "banco de dados" com o pattern de todas as funções dos db2020. Assim é possível portar quase todas as funções para qualquer modelo/FW em apenas 2 minutos usando o PATSearch. O arquivo pode ser encontrado aqui: http://code.google.com/p/elfpack-libraries/source/browse/trunk/Library/db2020_functions_database.src E será atualizado sempre que houver uma nova função ou seja preciso fazer alguma correção para algum modelo especifico. Leia as observações no inicio do arquivo. Pode ser usado qualquer programa editor de texto ou assim que você abrir o arquivo no patsearch. Como usar: 1 - Clique em "load ff" e seleciona a main.raw do seu modelo/FW 2 - Selecione o base address 0x44140000 3 - Selecione a aba "Packet" 4 - Clique em "Load" e selecione o arquivo "db2020_functions_database.src" 5 - Pressione "Search" Selecione a aba "swilib.vkp" e espere até terminar. Código: ;Generated by PATSearchNT by BoBa v0.4 0448: 0x443EFEAA ; 112: __arm (!!!) Direct LDR DWORD (!!!) void memset(void *mem,char chr,int size); 0448: 0x441452C0 ; 112: __arm void memset(void *mem,char chr,int size); 044C: 0x443FAD60 ; 113: __arm int memcpy(void *dest,const void *source,int cnt); 0450: 0x446761B9 ; 114: __thumb int sprintf(char *buf, const char *fmt, ...); 0454: 0x44676781 ; 115: __thumb int snwprintf(wchar_t* buffer, int size, const wchar_t* fmt, ...); 0458: 0x44FAF319 ; 116: __thumb int _fopen(const wchar_t *filpath, const wchar_t *filname,unsigned int mode , unsigned int rights, unsigned int __0); 045C: 0x44FB08F1 ; 117: __thumb int fclose(int file); 0460: 0x44FB0B79 ; 118: __thumb int fread(int file , void *ptr, int size); 0464: 0x44FB0D45 ; 119: __thumb int fwrite(int file , const void *ptr, int size); 0468: 0x4497DB41 ; 11A: __thumb int _wstat(short *path, void *statbuf); 046C: 0x452D51E1 ; 11B: __thumb int fputs(const char *s, int file); 0470: 0x44FAFCAD ; 11C: __thumb int fstat(const wchar_t * path, const wchar_t *fname , FSTAT * fstat_stuct); 0474: 0x44FAD2D1 ; 11D: __thumb DIR_HANDLE * AllocDirHandle(const wchar_t * path); 0478: 0x44FAD491 ; 11E: __thumb FILELISTITEM *GetFname(DIR_HANDLE *, FILELISTITEM *); 047C: 0x44FEC6F5 ; 11F: __thumb void * DataBrowserDesc_Create(void); 0480: 0x44FEC9C1 ; 120: __thumb void DataBrowserDesc_SetStyle(void * db , int style); 0484: 0x44FEC9F9 ; 121: __thumb void DataBrowserDesc_SetHeaderText(void * db , int StrID); 6 - Copie tudo e cole no Bytes_Reverser (não deixe nenhuma linha em branco) e pressione REVERSE ALL. Salve tudo em um arquivo de texto. 7 - Procure pelas funções com Código: 00000000 00000000 e coloque ";" na frente da linha. E também nas funções duplicadas. 8 - Procure e substitua as funções que estão com observações no inicio do arquivo e faça o procedimento necessário para acha-las. =============================================== 4Shared PATSearch Bytes Reverser by Stonos.exe patsearchnt20080208130630.rar Informações sobre como usar o IDA para as funções com observação: http://www.plusgsm.com.br/forums/showthread.php?t=75438
w.junior essa awe em abaixo e a informaçao com as funçoes em observaçao,mais nao entendi direito o que tem que ser feito mesmo indo lah no tuto do IDA,será que poderia me da uma ideia do que tenho q fazer agora? desde jah grato,t+++++++++++++++++++++++++ --------------------------------------------------------------------------------------------------- / / A maioria dos modelos foram criados a partir W850 e testado em w610 R6BC002, k800 e w880 / / Devido aos limites do programa (Não manipular grande padrão), algumas funções deve ser pesquisado usando o "Pesquisar Único". / / Veja a lista abaixo e comentários sobre a função: / / Único Pesquisa: 307, 308 / / Alguns resultados devem ser utilizados posteriormente na IDA. / / Ir para resultar em IDA> Pressione "Alt + G"> ponha em valor "1"> Pressione "C"> Você deverá ver uma LDR DWORD ou algo assim / / Duplo clique em DWORD. A função é XX XX XX 20. Veja a lista abaixo e comentários sobre a função: / / Funções IDA: 112 (Primeiro resultado apenas), 81A7, 81C2, 81D1, 81F2, 821A, 27D, 8285, 82BB, 82BC, 8324. / / 0x112 SWI - Alguns telefones, utilize esta função, no formato XXXXXX20 e outros na XXXXXX44. Experimente ambos. / / Algumas funções possuem diferentes resultados, quando comparados com os originais. / / Mas eles apontam para o mesmo DWORD ou o modelo foi gerado a partir da própria função. / / Verificar o valor do DWORD. Ou, se a função entre parênteses refere-se ao novo endereço. / / 1F5, 828A (LDR), 8288B (LDR), 2A3 (dword), 2E3 (sub), 30E (LDR), 311 (LDR), / / Algumas têm mais de uma função patterm. Se seu modelo não tem a função, o segundo lugar. / / nullsub / / 178, 828A, 28D, 2DC / / Função 288, BL Direct SUB_XXXXXXXX + 1 / / Ir para resultar em IDA> Pressione "Alt + G"> ponha em valor "1"> Pressione "C"> Você deverá ver uma BL SUB_XXXXXXXX. Adicione 1 e inverter os bytes w.junior fiz uma comparaçao da lib que criei seguindo o tuto com a do site oficial,e elas tem o mesmo numero de funçoes,a unica diferença e que tem alguma que estao com os bytes diferente,sao essas:8114,155,1F5,215,241,26F,2A3,2C8,acabei entrando em outra duvida,qual delas esta com os bytes corretos? e se tem a mesma quantidade de funçoes,alem de poder portar essas funçoes para outros aparelhos e obter conhecimento,qual mais e o beneficio que tiramos desse procedimento? desde jah obrigado. há jah ia esquecendo de dizer realmente um otimo tutorial,PARABENS!!!
@Todos Atualizei o primeiro post. Com o novo PATSearch Bytes Reverser by Stonos, não é preciso usar o notepad++ para inserir o 00000000. @SpiercY Qual modelo/fw? Como diria o Jack vamos por partes: - O PatSearch tem um limite de uma linha apenas (1024 caracteres) para fazer a procura no modo Packet. Por isso as funções 307 e 308 devem ser feitas usando a opção single, que não tem um limite tão pequeno. - O ParSearch não consegue procurar pelas funções xxxxxx20, por isso ele te da o endereço de um "link" para essa função e você vai apenas entrar no link e ver o endereço. O que você deve fazer é seguir apenas os passos 1, 2 e 3 do tutorial do IDA e usar o endereço que você achou no pat search. Onde no passo 3 seria "Jump to result in IDA" e o resto é só seguir os outros passos que estão no arquivo. Se ainda tiver alguma duvida sobre o IDA é só falar. Quanto as funções que estão diferentes, pode acontecer por varios motivos: 1º Eu não sei em qual modelo as funções são encontradas/definidase e isso pode enfulenciar muito no resultado. Mas normalmente quem faz isso é o IronMaster e ele possui um w850, por isso eu usei ele como base. 2º Dependendo do telefone o patserach pode achar mais de uma resultado e ele coloca o primeiro resultado como o certo. Que é o caso da 307 e 308 quando se usa a opção packet ao invés da single. Por isso procurei colocar o pattern bem grande para que ele ache a função certa ou não ache nenhuma função. Para os casos em que ele não ache nenhuma função eu coloquei um segundo pattern e em alguns casos até um terceiro para ter um resultado mais preciso, como é o caso da 8141. 3º A função do site oficial pode estar errada. Principalmente nas funções mais antigas. Isso não é muito dificl de acontecer já que são muitas funções e eu sempre vejo no log de atualização menssagens de correção. O ideal quando isso acontecer é verificar essas funções manualmente. Sempre que isso acontecer poste o modelo/fw/função que eu posso verificar se é um problemas no patsearch ou na lib oficial. Se for no patsearch eu vou tentar corrigir o problema. 8114 - Essa aqui na verdade deve ser a 8141. me passa o modelo/fw 155 - me passa o modelo/fw 1F5 - me passa o modelo/fw 215 - null sub. Essas funções são usadas quando a função verdadeira não existe na plataforma ou modelo. Ex. O w880 não tem radio então todas funções de radio nele são substituidas pelas funções null sub para que o elf não faça o telefone reiniciar. Como existe várias null sub o importante é ter ter uma não importa qual. Se você procurar você vai ver que em alguns modelos são usadas o mesmo endereço para varias dessas funções. procure na lib do k790 por 7B251444. 241 - null sub 26F - me passa o modelo/fw 2A3 - Essa é uma das que eu coloquei observação. Ela pode apresentar resultado diferente mas aponta para o mesmo valor da dword. 2C8 - me passa o modelo/wf. O principal motivo de ter feito esse banco de dados foi para os modelos que não tem suporte. ex w610r8ba, w660, z610 etc. Eu comecei fazendo as funções que estão faltando na maioria dos modelos. Tanto que se vc olhar o log vai ver que eu comecei de trás para frente, mas acabei fazendo a lib toda para caso alguém queira fazer um elfpack para algum outro modelo não tenha tanto trabalho. E é bom para caso vc queira verificar a lib do seu modelo.
Meu modelo e firmeware sao W580 R8BE001,entao o principal motivo do tuto é para que os que tem modelos que nao sao atualizados com frequencia poderem atualizar e por conseguinte ter todas as funçoes de modelos atualizados em seu modelo,correto? agora sim ta entendido,mais se for testar essas fnuçoes com a da lib oficial e por sua vez a lib oficial que estiver errada,posta para que eu posso atualizar a minha,vlw pela explicaçao.
Nao entendi muito bem como funciona este método. Se por exemplo, eu precisar portar estas constantes abaixo para o W580, eu só sigo o tutorial que consigo ? 31B: BOOK *DISPLAY_GetTopBook(int display); 327: int GetSignalLevel(void); 328: int Bluetooth_GetState(void); 329: int Bluetooth_GetPhoneVisibility(void);
@SpiercY Vou dar uma olhada nas que estão diferentes. @Dr. Isso mesmo. Mas quando sai uma função nova eu tenho que adicionar o pattern dela. Ja adicionei todas que sairam esses dias. Só falta a 327 para a serie K, que eu não consegui achar até agora. Para a serie W ja ta funfando.