Assembler szyfrowanie plików

0

Poszukuję programu napisanego w assemblerze który będzie szyfrował plik (nie tylko tekstowy), algorytmem podstawieniowym myślałem o najprostszym XOR ale pliki mogą być różnej długości więc nie mogę przyjąć od razu długość pliku. Jak nie znając długości (wielkości) pliku można przeczytać go linijka po linijce? I może macie jakieś wskazówki jak zaimplementować ten algorytm,. Dzięki wielkie za odpowiedzi.

0

Co to znaczy że nie masz wielkości pliku wczytywanego? To co nie możesz jej pobrać? Bo coś tu jest w takim razie sprzeczne. Wczytując plik do pamięci potrzebujesz jego wielkości.

0
szyfruj_xorem proc lpBufor:dword, dwRozmiar:dword, dwKlucz:dword

       mov eax,lpBufor
       mov ecx,dwRozmiar
       mov edx,dwKlucz
       
nastepny_bajt:

       xor byte ptr[eax+ecx-1],dl
       dec ecx
       jne nastepny_bajt

       ret

szyfruj_xorem endp

wesołych świąt ;)

0
Assa napisał(a)

Co to znaczy że nie masz wielkości pliku wczytywanego? To co nie możesz jej pobrać? Bo coś tu jest w takim razie sprzeczne. Wczytując plik do pamięci potrzebujesz jego wielkości.

Niby tak ale jak pobrać wielkość takiego pliku bo np. plik tekstowy będzie potrzebował mniejszego bufora niż plik obrazka.

Bartosz Wójcik napisał(a)
szyfruj_xorem proc lpBufor:dword, dwRozmiar:dword, dwKlucz:dword

       mov eax,lpBufor
       mov ecx,dwRozmiar
       mov edx,dwKlucz
       
nastepny_bajt:

       xor byte ptr[eax+ecx-1],dl
       dec ecx
       jne nastepny_bajt

       ret

szyfruj_xorem endp

wesołych świąt ;)

Czy powyższa procedura da się zastosować do plików innych niż pliki tekstowe?

Życzę także także wesołych świąt :)

0
Bartosz Wójcik napisał(a)

Nie, tylko pliki z rozszerzeniem .txt i .tiff da się tym zaxorować hehe :P

to w takim razie jakie przekształcić ten kod dla obrazków?

0

Wybaczcie miałem w tedy kiepski dzień. W kodzie wyskakuje mi błąd (nie jeden :) )
xor byte ptr[eax+ecx-1],dl spodziewa się jakiejś instrukcji lub przecinka
szyfruj_xorem proc lpBufor:dword, dwRozmiar:dword, dwKlucz:dword, szyfruj_xorem endp błąd parsera spodziewa się jakiejś instrukcji. Używam NASM'a

0

xor byte ptr[eax+ecx-1],dl
w NASM nie ma czegoś takiego jak ptr. Wywal go po prostu.

szyfruj_xorem proc lpBufor:dword, dwRozmiar:dword, dwKlucz:dword
 
       mov eax,lpBufor
       mov ecx,dwRozmiar
       mov edx,dwKlucz
 
nastepny_bajt:
 
       xor byte ptr[eax+ecx-1],dl
       dec ecx
       jne nastepny_bajt
 
       ret
 
szyfruj_xorem endp

Proc też nie ma.

Nie testowałem, ale w najprostszej wersji powinno to wyglądać mniej-więcej tak:

szyfruj_xorem:
       pop edx ;dwKlucz
       pop ecx ;dwRozmiar
       pop eax ;lpBufor
 
.nastepny_bajt:
 
       xor byte [eax+ecx-1], dl
       dec ecx
       jne nastepny_bajt
       ret
       ; po wywołaniu funkcji trzeba będzie jeszcze wyczyścić stos, zostawiamy go na -0xC
0

<code = asm>; void encrypt_xor(LPBYTE lpBuffor, DWORD dwSize, DWORD dwKey)
encrypt_xor:
push ebp
mov ebp,esp

%stacksize flat
%arg lpBuffor:dword, dwSize:dword, dwKey:dword

mov eax,[lpBuffor]
mov ecx,[dwSize]
mov edx,[dwKey]

next_byte:

xor [eax+ecx-1],dl
dec ecx
jne next_byte

mov esp, ebp
pop ebp

ret


Próbowałem w ten sposób ale ma problem z preprocesorami %stacksize oraz %arg

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