Jak edytować obrazy ISO (w tym rozruchowe ISO)

30

Szukam narzędzi dla Ubuntu, których można użyć do edycji obrazów ISO. W tym obrazy ISO, które można uruchamiać, takie jak ISO Ubuntu i Windows. Nie tylko edytuj, ale zapisuj edytowany ISO, ale nadal można go uruchomić po nagraniu na dysku USB lub CD / DVD.

Luis Alvarado
źródło

Odpowiedzi:

42

ISO Master zainstaluj isomaster

Wcześniej używałem ISO Master do dodawania plików do ISO. Jest odpowiedni do tego, czego potrzebujesz, ponieważ zachowuje stan, czy ISO można uruchomić. Użyłem go w przeszłości, aby dodać inną zawartość (np. Muzykę) do dysku na żywo. Należy jednak pamiętać, że po wprowadzeniu zmian w pliku ISO można tylko „Zapisz jako”, tzn. Zostanie utworzony inny plik ISO, więc upewnij się, że masz wystarczającą ilość miejsca na oba pliki.

izomaster

dv3500ea
źródło
2

PowerISO właśnie wydało wersję Linux swojego oprogramowania do edycji ISO. Podobnie jak ISO Master , zachowuje stan, czy ISO można uruchomić. Pozwala jednak zapisać bezpośrednio do oryginalnego pliku (najpierw go usuwając), więc nie ma potrzeby dysponowania wystarczającą ilością miejsca na dysku dla obu plików. Uważam też, że jego interfejs jest łatwiejszy i bardziej intuicyjny w obsłudze niż ISO Master.

zrzut ekranu PowerISO dla systemu Linux

Ploni
źródło
1

Częstą odpowiedzią jest rozpakowanie pliku ISO, zmodyfikowanie go i spakowanie ponownie. Wygląda na to, że „ISO Master”, jak wspomniano w odpowiedzi dv3500ea, jest dobrym front-endem do tego.

Jeśli:

  • nie masz na to miejsca
  • chcesz tylko zmodyfikować chirurgicznie, zamiast przepisywać całość
  • chcesz zmodyfikować urządzenie pamięci masowej zawierające system plików isofs (aka iso9660) bez kopiowania całego urządzenia lub
  • jeśli uważasz, że to rozpakowywanie / przepakowywanie nie jest wystarczająco hackerskie

Zatem ta odpowiedź jest dla Ciebie!

Podsumowując, zastąpimy istniejący plik w systemie plików isofs wybranym plikiem. Nasz pożądany plik musi być mniejszy niż istniejący (docelowy) plik, a końcowe białe znaki (lub śmieci) muszą być dopuszczalne. W rzeczywistości wymaga to tylko dwóch poleceń, ale należy zachować ostrożność: literówka może całkowicie zniszczyć docelowy system plików, a nawet zastąpić plik źródłowy. Kopie zapasowe są twoim przyjacielem!

W moim przypadku chciałem przechowywać skrypt w rozruchu na żywo, więc nie muszę go wpisywać za każdym razem. Skrypt jest na, script.pya mój cel (pamięć USB) jest na /dev/sdc. Rozmiar skryptu wynosi 202 bajty, więc naszym pierwszym krokiem jest znalezienie pliku większego niż 202 bajty, abyśmy mogli go zastąpić. Po zamontowaniu go w /mnt, znalazłem odpowiedni plik na /mnt/info.txt.

Nie możemy po prostu nadpisać info.txtpunktu montowania, narzeka on, że jest to system plików tylko do odczytu. Jesteśmy jednak rootami, więc pokażmy im, co to znaczy! Musimy dowiedzieć się, gdzie info.txtjest system plików. Znaleźć jakiś ciąg znaków, który jest (prawdopodobnie) unikatowe info.txt, na przykład This is the official distribution CD of X., i znajdź go na dysku:

$ sudo strings -a -t d /dev/sdc | grep 'CD of X.'
2573588480 This is the official distribution CD of X. See INSTALL for how to [...]

Alternatywnie, może to być również wykonane z grep, który jest o wiele szybciej, ale wtedy trzeba określić go od początku: $ sudo grep -oba 'This is ...' /dev/sdc.

Teraz, gdy wiemy, gdzie to jest, wystarczy zastąpić te bajty naszym plikiem:

$ sudo dd if=script.py of=/dev/sdc conv=notrunc bs=1 seek=2573588480 count=202

Ta linia:

  • kopiuje bajty z pliku wejściowego ( if) do pliku wyjściowego ( of) i nie ma znaczenia, że ​​plik wyjściowy jest tak naprawdę urządzeniem, ponieważ „wszystko jest plikiem”.
  • conv=notrunc mówi, aby nie obcinał pliku wyjściowego, ponieważ chcemy zastąpić tylko kilka bajtów, a nie nadpisywać plik od pewnego momentu.
  • bs=1 ustawia rozmiar bloku na 1. Zwykle potrzebujesz rozmiaru bloku 4k lub większego, ale to pozwala uniknąć konieczności wykonywania (wbudowanej) matematyki i pozwala nam określić lokalizację dokładnie do bajtu.
  • seek=Nszuka określonego punktu w pliku wyjściowym (należy pamiętać, że seek=Nróżni się od tego, skip=Nponieważ skippomija bajty z pliku wejściowego!). Ustawiamy go oczywiście tam, gdzie jest tekst docelowy.
  • count=Nskopiuj tylko tyle bajtów. Myślę, że można to pominąć, ponieważ zauważy koniec pliku wejściowego, ale zostawiłem go na wszelki wypadek.

I voila, plik jest nadpisany!

Ale poczekaj, plik docelowy był większy niż nasz skrypt, więc na pamięci USB plik jest teraz w rodzaju: „while do if (run) bla; bla (); yright 2007 X Inc.”. Ciągną się śmieci. Dwa sposoby, aby to naprawić: wydłuż nasz plik wejściowy (dodaj spacje) lub dodaj symbol komentarza na końcu. Należy zauważyć, że wielu redaktorów dodać do nowej linii na końcu, więc może chcesz ustawić count=na N-1bajtach (jeżeli plik jest teraz 203 bajtów, a zauważysz, że ostatni bajt to znak nowej linii, zestaw liczyć do 202). Możesz sprawdzić plik pod kątem nowych linii, używając xxd script.py | taili sprawdzając, czy ostatni bajt to 0a(lub, w dziwnych przypadkach, 0d).

Proces jest identyczny dla .isopliku, wystarczy mentalnie zastąpić /dev/sdcgo your.iso.

Zauważ, że kiedy sprawdzasz cel w punkcie montowania, aby zobaczyć, czy zadziałał, być może będziesz musiał użyć go stringsponownie (tym razem szukając skryptu), ponieważ plik prawdopodobnie nadal znajduje się w pamięci podręcznej odczytu.

Luc
źródło