Engenharia reversa de um arquivo de dados de estatísticas do meu controlador de bomba de insulina

StackOverflow https://stackoverflow.com/questions/978270

Pergunta

Isto pode ou não ser uma área cinzenta assunto, embora minhas intenções não são, certamente, assim que minha intenção não é provocar um debate ético sobre o tema da engenharia reversa.

Eu sou um tipo 1 terapia com bomba diabética atualmente passando. Eu sou usuário uma OmniPod , é um pod descartável que adere a meu corpo e dispensa insulina por 3 dias. É controlado por um gerente de diabetes pessoal [PDM] (ver abaixo), que controla a quantidade de insulina para dispensar durante as refeições, bloor leituras de açúcar, e que contém um índice de alimentos para a contagem de carboidratos em movimento.

text alt
(fonte: myomnipod.com )

O novo PDM tem uma porta USB para a transferência de dados. O software é gratuito para usuários do Windows (um pacote chamado CoPilot), mas não há suporte para Mac.

Ao ligar o PDM em meu Mac, é montado como qualquer outro dispositivo USB faria e me presenteou com um volume legível com um único arquivo nele com uma extensão IBF. Ele pesa 16KB.

Meu primeiro instinto foi de passá-lo através de um editor de texto e foi presenteado com um arquivo olhando muito binário. Eu, então, passou através de cordas (veja abaixo) e abriu-se com um editor hexadecimal. Embora eu não pudesse ganhar muita informação além das cordas abaixo; sem detalhes de formato de compressão ou qualquer coisa.

$ strings omnipoddata.ibf 
Insulet
OmniPod
basal 1
Post-meal
e-meal
Pre-meal
e-bedtime
Pre-bedtime
.(@P
.(@P
.(@P

Qual deve ser o meu próximo passo neste processo? Eu sou um cara linguagem dinâmica, de modo que todos os recursos para Ruby seria ótimo, ou Python. Há algum teste dirigido processos de engenharia reversa?

Tanto quanto os dados que eu estou olhando para obter, é a informação que eu gostaria de traçar a ganhar mais informações sobre o meu progresso (ingestão de insulina, leituras de açúcar no sangue, marcas de tempo); tudo o que é possível no pacote de software do Windows.

Foi útil?

Solução

O que gostaria de fazer agora é tentar encontrar alguns números. Há um monte de maneiras os números poderiam ser codificado:

  • Ints (1, 2, 4 bytes, vários endianness)
  • ponto flutuante (de vários tamanhos)
  • ponto fixo ou algum outro formato estranho

Você tem a vantagem de conhecer alguns números que vão estar lá, já que você pode ver os dados na tela. Então eu olhar para esses números no arquivo (em vários formatos acima). Isso deve lhe dar alguns dados, no mínimo.

Em seguida, você menciona timestamps. Timestamps são geralmente muito fácil, porque eles são invariavelmente de 32 bits ints não assinados, e você tem uma gama boa estádio (time () +/- alguns 100.000). Então, olhar para ints perto de lá.

Você pode fazer tudo isso à mão com um editor hexadecimal ou escrever um pequeno script. Uma vez que você começar a receber alguns dados para fora, olhar para os padrões. Isso deve ajudar muito a encontrar campos mais interessantes. Boa sorte!

Outras dicas

eu começar a procurar hex-representação de valores conhecidos. O dispositivo (como na foto) tem uma tela, ou você pode olhar no windows?

Se você pode, por exemplo, encontrar uma série de números em hexadecimal que você encontrou no interior da versão do Windows, você pode ser capaz de descobrir o formato 'record'. Olhando para ele, ele parece conter algum tipo de cabeçalho / informações sobre a versão, e uma série de registros com valores numéricos codificados em hexadecimais.

Isso deve dar-lhe um bom ponto de partida.

Gostaria apenas de executar uma VM para a versão do Windows e usar OllyDbg para reverter montá-lo. Esta é a sua melhor aposta, em vez de ficar olhando para um arquivo binário e adivinhar quais as variáveis ??que se correlacionam com o offset.

Mexer com sua própria bomba de insulina não é provavelmente a idéia mais inteligente embora. Supondo que o manipula arquivos da bomba.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top