Jak policzyc sume kontrolna (checksum) w pliku BIN??

0

Witam,

mam do was takie pytanie, poniewaz siedze juz dluzszy czas nad kilkoma plikami i nie moge sobie poradzic z sumami kontrolnymi poniewaz nie wiem jak sa generowane,

mam plik w ktorym jest posklejanych kilka plikow bin (posklejanych tzn w jednym pliku sa po kolei powklejane, konczy sie jeden zaczyna sie drugi...), znalazlem programik ktory to rozpakuje i mam teraz 7 plikow,

otwieram w HEX Workshopie najmniejszy plik ktory ma zaledwie 20kb, program ktory to rozpakowal zwraca mi checksume, szukajac w calym HEX kodzie znajduje ja i tak samo inne wartosci ktore zwraca program ktory rozpakowal te pliki, wartosci to np. dlugosc, adress itd... struktura poczatkow pliku sie nie zmienia, w tym samym miejscu sa checksumy..

no i teraz moje pytanie do was czemu jak licze w HEX Workshopie sume kontrolna nie jest ona zgodna z tym co pokazuje program ktory to rozpakowal ??
jak ona moze byc liczona ?
probowalem juz zaznaczac od nastepnej wartosci za suma kontrolna i do konca pliku i liczyc checksume ale tez sie rozni, nie wiem jak to zrobic ;-(((
potrzebna mi jest wiedza liczenia tej sumy kontrolnej poniewaz musze przetlumaczyc pare wyrazow na jezyk polski a robiac to suma kontrolna sie zmieni i urzadzenie tego nie przyjmie...

Pozdrawiam i czekam na odpowiedzi,

0

Suma kontrolna (CRC) to "negatywna suma wszystkich bajtów pliku"

Znaczy to nic więcej jak to, że musisz zsumować wszystkie bajty pliku (sumę oczywiście możesz przechowywać w zmiennej pożądanego rozmiaru - w różnych implementacjach może mieć 1, 2 lub więcej bajtów) a nastpępnie potraktować ją operacją w assemblerze zwaną NOT (negacja bitów).

Jeśli chcesz dokładnie dowiedzieć się jak microsoft oblicza CRC to proponuję poszukać jakichdokumentacji o plikach EXE. Jak dobrze pamiętam to w jednym z pól nagłówka jest właśnie 32-bitowe pole CRC.

0

tzn. ten plik ktory mam nie jest exe, ani nie pisal to microsoft.... struktura tego pliku wyglada tak ze na poczatku mamy dane o firmie, nazwa, data itd.. pozniej jakis ciag w hexie.. nastepnie jest podany adres w kosci pamieci do ktorej nalezy go wgrac, dlugosc, i ostatnia checksuma... pozniej mamy dane flasha...
nie wiem czy rozumiesz co teraz napisalem... jesli nie moge wrzucic tutaj screen z programu...

pzdr

0

IMHO, raczej TY nie zrozumiales.. niewazne jaka jest zawartosc pliku. jesli liczysz checksume z calego pliku, po prostu jedziesz po zywych bajtach czytajac plik w trybie binarnym.. jesli zas checksuma dotyczy tylko jego fragmentu - w ten wlasnie sposob musisz potraktowac ten fragment

0

Witam,

heh rozumiec rozumiem jak sie liczy checksumy... tylko moje pytanie brzmi wlasnie jak znalezc ten framgent ktory trzeba liczyc ?? na co zwrocic uwage ? jakie rzeczy moga okazac sie charakterystyczne ?

Pzdr

0

elementy charakterystyczne (jak np. obraz programu) są określone w zależności od formatu pliku. jeżeli to jest zwykły bin to on cały jest obrazem programu. A jeżeli chodzi ci o określenie jakiej części pliku dotyczy checksum to niestety albo musisz sprawdzać każdy możliwy blok (licząc sumę dla bloku każdego rozmiaru i o każdym offsecie - ilość kombinacji jest tak duża, że to się nie opyla) w nadzieji, że istnieje tylko jeden blok o takiej sumie kontrolnej (co jest raczej niemożliwe) lub zwrócić się do kogoś kto dokładnie zna strukturę tego pliku

0

Witam,

nie ma jakiegos programu ktory by to liczyl ? np od konca pliku lecial co bajt i liczyl za kazdym razem checksume ?

wrzucam tutaj link do tego pliku BIN, http://tnij.org/plikkk
jesli by ktos mogl to niech zerknie pliczek wazy tylko 20kB, a tutaj log do niego:

"Creating File: APFM.bin
size 0x5000 [20480]
offset 0x9f800 [653312]
Tag Found: .APL
Version Found: V220057B
Date Found: Dec 8 2006
Time Found: 1726
Address: 0x80dfb000
Length: 0x4d94
(?)Checksum: 0x9b0eb585
"

Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1