44 votes

L'ingénierie inverse des récits de guerre

Parfois, vous n'avez pas le code source et le besoin de désosser un programme ou d'une boîte noire. Tout plaisir des histoires de guerre?

Voici un des miens:

Il y a quelques années j'avais besoin de réécrire un pilote de périphérique pour lequel je n'ai pas le code source. Le pilote de l'appareil a couru sur une vieille CP/M micro-ordinateur et conduit un dédié photoensemble de la machine par l'intermédiaire d'un port série. (Wow, je vais les montrer à mon âge ici... la Quasi-absence de documentation pour la photoensemble machine était disponible pour moi.

J'ai enfin réalisé un serial port monitor sur un PC DOS qui imitait les réponses de la photoensemble de la machine. J'ai câblé le DOS PC pour le CP/M de la machine et a commencé l'enregistrement des données provenant du pilote de périphérique que j'ai données de flux à travers le CP/M de la machine. Cela m'a permis de comprendre la transmission et de codage utilisé par le pilote de périphérique et de re-créer l'équivalent d'une pour une machine DOS.

45voto

Thomas Tempelmann Points 2849

Lire l'histoire de FCopy pour le C-64 ici:

Dans les années 80, le Commodore C-64 ans avaient un intelligent lecteur de disquette, la 1541, c'est à dire une unité externe qui avait son propre PROCESSEUR et tout et tout.

Le C-64 serait envoyer des commandes pour le lecteur qui, à leur tour, puis les exécuter sur son propre, de la lecture de fichiers, et un tel, puis envoyer les données à la C-64, le tout sur une propriétaire câble série.

Le manuel pour la 1541 mentionné, outre les commandes de lecture et d'écriture de fichiers, que l'on pourrait lire et à écrire à sa mémoire interne de l'espace. Encore plus excitant était que l'on pouvait télécharger 6502 code dans le lecteur de la mémoire et de l'exécuter il.

Cela m'a accroché et j'ai voulu jouer avec celle - exécuter du code sur le disque. Bien sûr, il n'y a pas de documentation sur ce code peut être exécuté sur place, et quelles fonctions il pourrait utiliser.

Un de mes amis avait écrit un désassembleur de BASE. et donc, j'ai lu tous ses ROM contenu, qui était de 16 ko de 6502 code de CPU, et essayé de comprendre ce qu'il fait. Le système d'exploitation sur le lecteur était tout à fait étonnant et l'avancée de l'OMI - il eu une sorte de tâche de gestion, avec les commandes sont envoyées à partir de l'unité de communication pour les i/o disque tâche de gestionnaire.

J'ai appris assez pour comprendre comment utiliser le disque i/o commandes de lecture/écriture des secteurs du disque. En fait, après avoir lu l'Apple ]['s DOS 3.3 livre qui explique tous les rouages de son format de disque et algos dans les détails, a été d'une grande aide dans la compréhension de tout cela.

(J'ai appris plus tard que j'ai pu avoir aussi trouvé la réserve naturelle-fra avais info sur le plus 4032/4016 lecteurs de disque pour le "business" Commodore modèles qui ont travaillé tout à fait la même que la 1541, mais qui n'était pas disponible pour moi plutôt déconnecté hobby programmeur à ce moment.)

Le plus important, j'ai aussi appris comment la série comms travaillé. J'ai réalisé que la série comms, à l'aide de 4 lignes, deux pour les données, deux pour la poignée de main, a été programmé très peu efficace, le tout dans un logiciel (si fait correctement, en utilisant la classique série de handshaking).

Donc j'ai réussi à écrire beaucoup plus vite les comms de routine, où j'ai fait une synchronisation fixe assumtions, en utilisant à la fois les données et la poignée de main en ligne pour la transmission de données.

Maintenant, j'ai été capable de lire et d'écrire des secteurs, et aussi transmettre des données plus rapidement que jamais.

Bien sûr, il aurait été génial si on pouvait simplement charger du code dans la voiture qui accélère les comms, et ensuite utiliser les commandes habituelles pour lire un fichier, qui à son tour serait l'utilisation la plus rapide comms. Ce n'était pas possible, même si, comme le système d'exploitation sur le lecteur n'a pas fourni toutes les crochets pour que (l'esprit que tous les OS en ROM, inmodifiable).

Donc je me demandais comment je pourrais faire de mes résultats passionnants dans une application utile.

Après avoir été un programmeur pour un moment déjà, traitant de la perte de données de toutes les époques (des cassettes et disquettes étaient pas très fiable à l'époque), j'ai pensé: Sauvegarde!

J'ai donc écrit un programme de sauvegarde qui pourrait dupliquer une disquette, un disque qui n'a jamais vu la vitesse: La première version n'a copier un ensemble de 170 KB disque en seulement 8 minutes (oui, à quelques minutes), la deuxième version n'a même à environ 4,5 minutes. Alors que les applications avant le mien a pris plus de 25 minutes. (Vous l'esprit, l'Apple ][, qui a eu son disque OS en cours d'exécution sur l'Apple directement, avec la rapidité d'accès aux données parallèle, est ce que tout cela en une minute ou deux).

Et donc FCopy pour le C-64 est né.

Il est devenu rapidement très populaire. Non pas comme un programme de sauvegarde comme je l'avais prévu, mais comme le premier choix pour tous ceux qui veulent copier les jeux et autres logiciels pour leurs amis.

S'est avéré qu'une simplification dans mon code, ce qui serait simplement sauter des secteurs illisibles, l'écriture d'un secteur avec un mauvais CRC à la copie, ne contourner la plupart de la copie utilisée régimes de protection, ce qui rend possible de copier la plupart des anciens non copiables disques.

J'avais essayé de vendre mon application et l'a vendu en fait 70 fois. Quand il était annoncé dans les magazines, affirmant qu'il serait de copier un disque en moins de 5 minutes, les clients pourrait appeler et de ne pas croire, "mieux connaître" qu'il ne peut pas être fait, mais lui donner un essai.

Pas beaucoup plus tard, d'autres ont commencé à désosser mon application, et de l'optimiser, prise de comms encore plus rapide, conduisant à une copie des applications qui le fit encore en 1,5 minutes. Plus rapide était guère possible, parce que, en raison de la quantité limitée de mémoire disponible sur la 1541 et le C-64, vous avez eu pour le remplacement des disques à plusieurs reprises dans le seul disque dur pour copier tous les 170 KO de son contenu.

En fin de compte, FCopy et son optimisé successeurs étaient probablement le plus populaire des logiciels toujours sur le qui-C-64 dans les années 80. Et même si elle n'était pas rentable financièrement pour moi, il fait encore me fier, et j'ai appris beaucoup de choses sur la rétro-ingénierie, de la futilité de la protection de la copie et de la façon dont la célébrité se sent. (En fait, Jim Butterfield, un éditeur pour un C-64 magazine au Canada, a dit à ses lecteurs de mon histoire, et dès qu'il avait un chèque de près de 1000$ CA pour moi recueillies par le magazine de nombreux reconnaissant les utilisateurs de l'envoi de 5$-chèques de voyage, qui a été un gros tas d'argent, alors pour moi.)

42voto

Thomas Tempelmann Points 2849

En fait, j'ai une autre histoire:

Quelques années après ma FCopy "succès" de l'histoire, j'ai été approché par quelqu'un qui m'a demandé si je pouvais craquer une machine à sous du logiciel.

C'était en Allemagne, où presque tous les pub eu un ou deux de ceux-ci: Vous souhaitez jeter de l'argent dans ce qui équivaut à environ un trimestre NOUS, puis elle tournerait à trois roues et si tu as de la chance avec un modèle, vous pouvez avoir le choix de "quitte ou double" votre victoire sur le prochain jeu, ou d'obtenir le gain actuel. Le but du jeu est d'essayer de doubler votre gain à quelques reprises jusqu'à ce que vous obtenez dans la "série" mode où tout réussir à gagner, de peu d'importance, vous obtiendrez un grand paiement (d'environ 10 fois vos dépenses par match).

La difficulté était de savoir quand double, et quand ne pas. Pour un "outsider" c'était complètement au hasard, bien sûr. Mais il s'est avéré que ceux-allemand de machines ont été à l'aide de simples pseudo-aléatoires tables dans leur Rom. Maintenant, si vous avez vu le jeu de machine pour quelques tours, vous auriez pu comprendre où ce "hasard le pointeur de la table" a été et de prévoir le prochain mouvement. De cette façon, un joueur de savoir quand double et quand passer, ce qui l'amène finalement à la "grande série de victoire".

Maintenant, c'était déjà une chose courante lorsque cette personne s'est approché de moi. Il y avait une scène underground qui a eu accès à la Rom dans ces machines, trouver les tables et créer des logiciels pour les ordinateurs de type C-64 à utiliser pour la prédiction de la machine déplace suivant.

Puis est venu un nouveau type de machine, mais, qui utilise un algorithme différent: au Lieu d'utiliser des pré-calc avais tables, il a fait quelque chose d'autre, et aucun des résidents des craquelins pouvait comprendre cela. Donc, j'ai été approché, qui est connu comme une sorte de génie depuis mon FCopy renommée.

Je me suis donc la Rom. 16KO, comme d'habitude. Aucune information sur ce qu'elle fait et comment cela a fonctionné que ce soit. J'étais sur mon propre. Même le code n'a pas l'air familier (je savais 6502 et 8080 alors uniquement). Après quelques recherches et demander, j'ai trouvé qu'il était un 6809 (que j'ai trouvé pour être le plus beau de 8 bits PROCESSEUR d'exister, et qui a des analogies avec le PROCESSEUR 680x0 conception, ce qui est beaucoup plus linéaire que la famille x86 instructions du gâchis).

En ce moment, j'avais déjà un 68000 (j'ai travaillé pour la société "Gepard Ordinateur" qui a construit et vendu une machine de ce type, avec son propre développeur de l'OS et de, tous) et a été dans la programmation, Modula-2. J'ai donc écrit un désassembleur pour le 6809, celui qui m'a aidé avec le reverse engineering par trouver des sous-routines, sauts, etc. Lent, j'ai une une idée de l'écoulement de contrôle de la machine à sous du programme. Finalement, j'ai trouvé un code qui ressemblait à un mathématiques de l'algorithme et il m'est apparu que ce pourrait être l'aléatoire de la génération de code.

Comme je n'ai jamais eu une éducation formelle dans les sciences de l'informatique, jusqu'alors je n'avais aucune idée de comment un randomgen à l'aide de mul, d'ajouter et de mod travaillé. Mais je me souviens avoir vu quelque chose mentionné dans un Modula-2 livre et on se demande alors ce que c'était.

Maintenant, j'ai pu rapidement trouver le code qui ferait appel de cette randomgen et identifier les "événements" de plomb à une randomgen itération, ce qui signifie que je savais comment prédire les prochaines itérations et leurs valeurs au cours d'un match.

Ce qui restait était de comprendre la position actuelle de la randomgen. Je n'avais jamais été bon avec les choses abstraites telles que l'algèbre. Je connaissais quelqu'un qui a étudié les mathématiques et a été un programmeur trop, cependant. Quand je l'ai appelé, il a rapidement su résoudre le problème et quabbled beaucoup de choses sur comment de simples il serait de déterminer les randomgen de la valeur de départ. Je n'ai rien compris. Eh bien, j'ai compris une chose: Le code pour accomplir cela prendrait beaucoup de temps, et qu'un C-64, ou toute autre 8 bits ordinateur prendrait des heures si pas des jours pour elle.

Ainsi, j'ai décidé de lui offrir 1000 DM (qui a beaucoup d'argent pour moi à l'époque) s'il pouvait m'écrire une routine assembleur 68000. Ne lui a pas fallu longtemps et j'ai eu le code que j'ai pu tester sur mon 68000. Il a fallu généralement entre 5 et 8 minutes, ce qui est acceptable. Si j'étais presque là.

Il encore nécessaire un portable 68000 de la pub où la fente de la machine. Mon Gepard ordinateur était clairement pas le type d'ordinateur portable. Heureusement, quelqu'un d'autre, je savais en Allemagne produites ensemble 68000 ordinateurs sur un petit circuit imprimé. Pour les I/O qu'il ne devait série de communications (RS-232) et un port parallèle (Centronics était la norme de l'époque). Je pourrais accrocher quelques 9V bloc battieries pour le faire fonctionner. Puis j'ai acheté une Forte ordinateur de poche, qui avait un caoutchouc clavier et une seule ligne de 32 caractères d'affichage. Fonctionnant sur piles, ce qui était mon terminal. Il a une interface RS-232 connecteur qui j'ai connecté à l'68000 conseil d'administration. La Forte avait aussi une sorte de mémoire non volatile, ce qui m'a permis de stocker le 68000 aléatoire-logiciel de craquage sur la Forte, de les transférer à la demande sur le 68000, qui a ensuite calculé la valeur de départ. Enfin, j'ai eu un petit Centronics imprimante qui imprime étroites de papier thermo (qui était de la taille de ce enregistreuses utiliser pour imprimer des reçus). Par conséquent, une fois que le 68000 eu les résultats, il serait d'envoyer une ligne de résultats pour les jeux à venir sur la machine à sous de la de Sharp, qui l'a imprimé sur le papier.

Donc, pour vider une de ces machines à sous, vous souhaitez travailler avec deux personnes: Vous commencez à jouer, écrire ses résultats, on avait le minimum de nombre de matchs requis pour la graine de calcul, l'un de vous serait aller à la voiture garée à l'extérieur, tournez sur le Sharp, saisir les résultats, il aurait le 68000 hochet pour 8 minutes, et il en est sorti une liste imprimée de jeu à venir s'exécute. Alors tout ce que vous besoin, c'était ce petit bout de papier, le ramener à votre copain, qui a gardé la machine occupé, aligner les résultats obtenus avec l'impression et pas plus de 2 minutes plus tard, vous avez été "surpris" à gagner tous les temps 100s de la série. Vous pouvez jouer ces jeux 100, pratiquement la vidange de la machine (et si la machine était vide avant les 100 matchs ont été joués, il avait le droit d'attendre qu'elle soit remplie de nouveau, peut-être même revenir le lendemain, alors que la machine est arrêtée jusqu'à ce que vous est venu à l'arrière).

Ce n'est pas Las Vegas, donc, si vous voulez seulement obtenir environ 400 DM d'une machine de cette façon, mais c'était rapide et sûr de l'argent, et c'était passionnant. Certains pub propriétaires nous soupçonné de tricherie, mais n'avait rien contre nous en raison des lois à l'époque, et même si certains ont appelé la police, la police a été en faveur d'entre nous).

Bien sûr, la fente entreprise de fabrication de vite eu vent de cela et a essayé de contrebalancer, la désactivation de ces machines jusqu'à ce que des ROMs ont été installés. Mais les premières fois, ils ont seulement changé la randomgen de nombres. On n'avait qu'à s'emparer de la nouvelle Rom, et il m'a fallu quelques minutes pour trouver les nouveaux numéros et de les mettre en œuvre dans mon logiciel.

Donc, cela a duré un certain temps au cours de laquelle moi et des amis parcouru thru pubs de plusieurs villes en Allemagne à la recherche de ces machines seulement nous avons pu craquer.

Finalement, cependant, le fabricant de machine a appris comment "réparer": Jusque-là, la randomgen a été élevé uniquement à certaines périodes, par exemple, quelque chose comme 4 fois pendant la lecture, et une fois de plus par le joueur, la pression du "quitte ou double" bouton.

Mais ensuite, ils ont enfin changé de sorte que le randomgen en permanence être interrogée, en ce sens que nous n'étions plus en mesure de prédire la prochaine valeur de semences exactement à l'heure de la pression de la touche.

C'était la fin de celui-ci. Encore, faire l'effort d'écrire un désassembleur juste pour cette seule fissure, trouver la clé de routines de 16 KO de 8 bits code de CPU, de déterminer inconnu algorithmes, d'investir beaucoup d'argent pour payer quelqu'un pour développer du code, je ne comprenais pas, à trouver des éléments pour un portable de haute vitesse de l'ordinateur impliquant "à l'aveugle" 68000 CPU avec le Tranchant comme un terminal et de l'imprimante pour la pratique de sortie, et puis en fait la vidange de la machines à moi-même, a été l'une des choses les plus excitantes que j'ai jamais fait avec mes compétences en programmation.

11voto

RoadWarrior Points 11588

Chemin du retour dans le début des années 90, j'ai oublié mon Compuserve mot de passe. J'ai eu la version cryptée dans la CEI.INI, j'ai donc écrit un petit programme pour faire une attaque à texte clair et d'analyse dans une tentative de renverser l'algorithme de chiffrement. 24 heures plus tard, j'ai compris comment ça fonctionnait et ce que mon mot de passe.

Peu de temps après, j'ai fait un nettoyage et publié le programme en tant que freeware pour que Compuserve les clients pouvaient récupérer leurs mots de passe perdus. Le soutien de la société de personnel se réfèrent souvent à ces gens de mon programme.

Il a finalement trouvé son chemin sur quelques panneaux d'affichage (en souvenir?) et les forums sur Internet, et a été inclus dans un livre allemand sur Compuserve. C'est toujours flottant autour de là, quelque part. En fait, Google me prend directement.

10voto

Roger Baker Points 91

Bon, ce n'était pas de l'ingénierie inverse (tout à fait), mais un simple matériel hack né de la pure frustration. J'ai été un IT manager pour une région du sud-ouest de Bell est un service de téléphonie cellulaire dans le début des années 90. Mon département a été considérablement sous-financés, et nous avons donc dépensé de l'argent sur des gens intelligents plutôt que des équipements.

Nous avons eu un WAN entre les grandes villes, utilisés exclusivement pour le service à la clientèle, de la critique IP des liens. Notre entreprise patrons ont insisté sur le fait que nous avons installer un système de réseau de surveillance afin de nous informer lorsque les lignes sont allés vers le bas (pas d'argent pour la redondance, mais dépenser de l'argent pour la manipulation des échecs. Soupir.)

FORTEMENT recommandé solution a couru sur une station de travail SPARC et a commencé à $30K, plus le coût d'un SPARC station (autour de $20K à l'époque), qui a été une partie substantielle de mon budget. Je ne pouvais pas le voir - c'était une perte de $$. Donc j'ai décidé d'un peu de hacking est dans l'ordre.

J'ai pris un vieux PC prévue pour la destruction et de mettre une copie de ProComm (rappelez-vous ProComm?) et s'il avait ping chacune des nœuds le long de la route (c'était l'une des versions ultérieures de ProComm que le script FTP ainsi que des lignes série, KERMIT, etc.) Un peu de logique dans le codage tiré d'envoi d'un message de téléavertisseur lorsqu'un nœud ne pouvaient pas être atteints. J'avais déjà utilisé pour bricoler un système de pager pour nos techniciens, donc j'ai réutilisé le pager de code. Le script s'est exécuté en permanence, l'envoi d'un ping une fois chaque minute sur chacun des liens critiques, et ramifiée dans le pager du code lors d'un ping n'était pas retourné.

Nous avons dupliqué ce système à chaque emplacement critique pour un coût de moins de 500 $et a eu un très rapide de notification lorsqu'un lien est allé vers le bas. Prochain numéro - un de nos premiers dépannage méthodes pour alimenter le cycle de nos routeurs et/ou les serveurs terminal server. J'ai un peu de dial-up X10 contrôleurs et un peu de X10 sur/off de l'appareil commutateurs de puissance. Vous avez eu à connaître le bon numéro de téléphone à utiliser et les tonalités correctes de pousser, mais nous avons imprimé un cheat carte pour chaque technicien et ils ont continué avec leurs récepteurs. Instantanée de la réponse rapide! Un de mes techniciens de programmer les téléphones que nous avons tous eu pour réinitialiser l'équipement spécifique à chaque site comme un site de numérotation rapide. Celui-tech résout le problème!

Maintenant, le "dit" de dévoilement.

Je suis assis à déjeuner avec notre réseau d'entreprise gestionnaire de Dallas, qui est d'insister sur l'achat de la Soleil à base de réseau de gestion de produit. J'obtiens une page que l'un de nos liens s'est arrêté, et puis une deuxième page. Depuis les messages pager sont à venir à partir de deux serveurs différents, je sais exactement quel routeur est en cause (c'est un ensemble, je savais que de toute façon, comme la technologie lors de la réunion avec moi, a été mis en file d'attente "vers le bas d'un routeur" pendant le repas, donc nous avons pu le show-off.) Je montre les messages pager pour le gestionnaire et lui demander ce qu'il allait faire pour résoudre ce problème. Il a les yeux me regardent avec méfiance, car il n'a pas encore été paginé par sa Solaris système NMS qui est censé suivre liens critiques. "Bien, je crois que vous feriez mieux d'appeler un tech et de les faire pour réinitialiser le routeur et voir si cela résout-il." Je me suis tourné vers la technologie qui a été déjeuner avec nous et lui a demandé de le gérer. Il tira son téléphone cellulaire (au-dessus de la table à ce moment) et appuyé sur la vitesse-cadran il avait programmé pour réinitialiser le routeur en question. Le téléphone composé le X10 commutateur, dit-il à l'arrêt du routeur, en pause de cinq secondes, il dit, de mettre le routeur, et déconnecté. Notre ProComm script nous a envoyé les pages de nous dire que le lien était de retour dans les trois minutes de cette routine. :-)

Le réseau de l'entreprise responsable a été très impressionné. Il m'a demandé ce que le coût était pour mon nouveau système. Quand je lui ai dit moins de $1K, il a été apoplectic. Il avait juste commandé un GRAND ensemble de la Sun Solaris de gestion de réseau solution juste pour les tâches que j'avais illustré. Je pense qu'il avait passé quelque chose comme $150K. Je lui ai dit comment la magie a été fait et lui a offert le ProComm script pour le prix d'un déjeuner. TANSTAAFL. Il a dit qu'il fallait m'acheter le déjeuner de garder ma bouche fermée.

Le nettoyage de mes vieux tiroirs de disques et autres, j'ai trouvé une copie du code de Pingasaurus Rex" était le nom que j'avais donné. Qui a été le piratage dans le bon vieux temps.

10voto

mannu Points 615

Une fois, lors de la lecture de Daggerfall II, je ne pouvais pas se permettre le Daedrique Dai-Katana j'ai donc hex-édité la sauvegarde.

Sérieux si, j'ai réussi à retirer le dongle sur ma papas installation d'AutoCAD à l'aide de SoftICE il y a plusieurs années. C'était avant l'Internet est grand. Il travaille comme un ingénieur alors qu'il avait une copie légitime. Il avait juste oublié la clé usb à son travail et il avait besoin de faire certaines choses, et je pensais que ça allait être un défi amusant. J'ai été très fier par la suite.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X