Szyfrowanie polecen w cmd?

0

Witam,

BiosConfigUtility.exe /SetConfig:"write_config" /CurSetupPassword:"abcd1234"
stworzylem *.bat ktory nadpisuje ustawienia BIOS, wczesniej zdefiniowane w pliku "write_config".
Problem moj polega w tym, ze BIOS jest zabezpieczony haslem (abcd1234).
Czy istnieje mozliwosc zaszyfrowania hasla by nie bylo ono widoczne jako tekst podczas edycji pliku cmd?
Zdaje sobie sprawe, ze w cmd tego nie zrobie.. moze ktos zna inne mozliwosci?

1

Masz jakiś kompilator C/C++? Wystarczyłby Ci np. taki programik:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
    char haslo[] = {'a', 'b', 'c', 'd', '1', '2', '3', '4', 0}; // na koniec bajt o wartości 0
    char komenda[256];
    sprintf(komenda, "BiosConfigUtility.exe /SetConfig:\"write_config\" /CurSetupPassword:\"%s\"", haslo);
    system(komenda);
    return 0;
}

Znaki do tablicy z hasłem celowo wpisywane są pojedynczo, ponieważ w przeciwnym wypadku zostałby wygenerowany ciąg znaków w pliku binarnym, który można byłoby podejrzeć.

Oczywiście to jest najprostsze rozwiązanie. Program można rozbudować przez użycie parametrów wywołania w funkcji main albo zapisanie hasła do pliku i szyfrowania go w według jakiegoś klucza.

1

Znaki do tablicy z hasłem celowo wpisywane są pojedynczo, ponieważ w przeciwnym wypadku zostałby wygenerowany ciąg znaków w pliku binarnym, który można byłoby podejrzeć.

A to tego się już nie da? Sprawdź sobie różne kompilatory na http://gcc.godbolt.org/ - w każdym się da łatwo zlokalizować hasło.

0

Skoro już kompilator to można je np zapisać jako liczbę i potem skonwertować na stringa. Albo choćby i XORem potraktować.

0

@DRK
a co z debbugerami etc? Nie wyskoczy przy danej funkcji ciąg znaków sklejony? Pytam z czystej ciekawości.

1

Znaki do tablicy z hasłem celowo wpisywane są pojedynczo, ponieważ w przeciwnym wypadku zostałby wygenerowany ciąg znaków w pliku binarnym, który można byłoby podejrzeć.

Każdy kompilator wygeneruje tobie sklejone bajty, geniuszu obfuskacji.

Poza tym, nawet przy zastosowaniu nie wiadomo jakiego algorytmu, procmon pokaże całą komendę niezależnie od warstwy pod spodem. Jedynym sposobem na nieco bezpieczniejsze przekazanie tego jest przerobienie programu docelowego aby rozszyfrował to hasło. A najlepszym rozwiązaniem jest przerobienie algorytmu wewnątrz tego programu aby również do niego podawać hasło już przemielone tym algorytmem, w wyniku którego zapewne powstaje jakaś liczba przekazana do BIOSu. Tylko w takim wypadku nie ma możliwości odzyskania hasła.

0
2rty43 napisał(a):

Każdy kompilator wygeneruje tobie sklejone bajty, geniuszu obfuskacji.

Znawco wszystkich kompilatorów świata, skompilowałem ten kod zwykłym gcc i wygenerowna binarka nie zawiera jawnego ciągu znaków abcd1234.

EDIT: Przywróciłem treść posta, która usunęła się przez przypadek.

1

A to:

	mov	BYTE PTR [rsp], 97
	mov	BYTE PTR [rsp+1], 98
	mov	BYTE PTR [rsp+2], 99
	mov	BYTE PTR [rsp+3], 100
	mov	BYTE PTR [rsp+4], 49
	mov	BYTE PTR [rsp+5], 50
	mov	BYTE PTR [rsp+6], 51
	mov	BYTE PTR [rsp+7], 52
	mov	BYTE PTR [rsp+8], 0

Faktycznie, nie ma wprost "abcd1234", ale dość wyraźnie widać co to takiego. Swoją drogą zawiodłem się na GCC, nie zorientował się, że to napis. :-/

Clang zrobił jakąś magię, ale dalej widać napis (GCC robi to samo, jeżeli zamiast każdej literki osobno wpisze się normalnie literał znakowy):

movabsq $3761405301503517281, %rax # imm = 0x3433323164636261

A ICC przeniósł napis do danych i również można odczytać ładnie.

Edit: post do którego się odnosiłem znikął, została tylko kropka.

0

Super! Wlasnie o to chodzilo!
Dzieki wielkie!

0

Faktycznie, nie ma wprost "abcd1234", ale dość wyraźnie widać co to takiego. Swoją drogą zawiodłem się na GCC, nie zorientował się, że to napis. :-/

Wow, takiego faila nie spodziewałem się po tak przez wielu wychwalanym za optymalizację poprzez używanie drzew i innych supermagicznych trików gcc. Śmiać się chce.

Znawco wszystkich kompilatorów świata, skompilowałem ten kod zwykłym gcc i wygenerowna binarka nie zawiera jawnego ciągu znaków abcd1234.

Cóż, wygląda na to że przeceniłem te przez wielu wychwalane kompilatory które jakoby były mądrzejsze od programistów. Dla 'prawdziwego' kompilatora C nie powinno mieć znaczenia użyto liczb czy stringów, no ale to jest C, tutaj kod źródłowy sam w sobie jest obfuskacją... Nie mniej wypada chyba przyznać ci rację. Możesz więc używać swojego zaawansowanego algorytmu i nazwać program "LameCrypt" :P .

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