Lemur zaprasza
Strona: [ > ] z 1 Autor Temat: Bezpieczne INI... Viper87 Typ: neutral Postów: 490 Zarejestrowany: Oct 2002 Bezpieczne INI... Mam pytanie-czy kto¶ wie jak zapisać dane do pliku (taj jak do INI czy rejestru), ale w taki sposób, żeby użytkownik programu nie mógł "podejrzeć", co w takim pliku program zapisał? Innymi słowy: Chcę utajnić przed użytkownikiem to, co program zapisuje sobie w plikach INI . _____________________________________________ Viper "Savoir c`est prevoir, prevoir c`est prevenir". (Wiedzieć to przewidzieć, przewidzieć to zapobiegać) 12-01-2003 21:26 Jelcyn Admin forum Typ: admin Postów: 895 Zarejestrowany: Apr 2002 Przykładowy niebezpieczny plik INI Splash=1 AutoOpen=1 Music=0 MaxOpenWindows=20 Przykladowy zabezpieczony plik INI 1,1,0,20 Jak program ma 100 opcji to nikt sie nie skapnie co je co, ale ma to wade, ze Ty bedziesz mial problem bo 1 pomysla i caly program zglupieje. Mozesz np. co 3 bajt wpisywac losowa liczbe dla zmylenia przeciwnika _____________________________________________ Jelcyn vb4all(małpka)canpol.pl * 13-01-2003 19:50 270849979 6237704 Viper87 Typ: neutral Postów: 490 Zarejestrowany: Oct 2002 Jelcyn-wybacz, ale nie kapuję . Możesz ja¶niej? Ja korzystam z sampla, którego Ci posłałem do zapisywania informacji do plików INI... _____________________________________________ Viper "Savoir c`est prevoir, prevoir c`est prevenir". (Wiedzieć to przewidzieć, przewidzieć to zapobiegać) 13-01-2003 21:42 Viper87 Typ: neutral Postów: 490 Zarejestrowany: Oct 2002 Może wyłożę kawę na ławę-chcę napisać program, do odpytywania kogos ze slowek. Tak to sobie pomyslalem, żeby tam był tryb nauczyciela i ktos podaje słówka w obcym języku i w naszym ich znaczenie. I tu jest problem-jak zapiszę to do zwykłego ini, to odpytywana osoba wystarczy, że taki plik INI podejrzy i KAPUT> Rozumiesz? Wiem, że np. w Delphi da się zrobić pliki o własnym rozszerzeniu-wygl±daj± po otwarciu jak np DLL i s± w nich krzaczki, a program je dekoduje... A w VB czy da się co¶ takiego zrobić? _____________________________________________ Viper "Savoir c`est prevoir, prevoir c`est prevenir". (Wiedzieć to przewidzieć, przewidzieć to zapobiegać) 13-01-2003 23:02 Viper87 Typ: neutral Postów: 490 Zarejestrowany: Oct 2002 Dzięki. Tylko: a.) jak tak± baże doł±czyć do VB? b.)Co to jest XOR, ajk go użyć, je¶li to program (a chyba nie), to sk±d go ¶ci±gn±ć, jak to zaimplemetntować w programie? _____________________________________________ Viper "Savoir c`est prevoir, prevoir c`est prevenir". (Wiedzieć to przewidzieć, przewidzieć to zapobiegać) 14-01-2003 15:45 err404 Typ: neutral Postów: 14 Zarejestrowany: Nov 2002 Jedyne co możesz zrobić to..... Zacz±ć pliki szyfrować a jak to możesz zrobić hmmm poniżej zamieszcam ci kody modułów które pozwol± ci na bezpieczne szyfrowanie zawarto¶ci plików(szyfrowanie przez fukcje asc i chr - czyli operacje na wartosciach ASCII , może się skończyć Ľle jeżeli czytasz plik liniami, bo chr(13) to enter ) Kod modułu szyfrowania: '--------------------------------------- Option Explicit Function EncodeData(Text As String) As String Dim i As Integer, a As Integer Dim znakA As String, znakB As String, tmp As String Dim SubRepA As Integer, SubRepB As Integer, RepStr As Integer Dim LocalKey As String tmp = "" LocalKey = "" 'ta petla pozwala na wygenerowanie klucza potrzebnego do zakodowania 'ciagu znaku dowolnej dlugosci Do While Len(LocalKey) < Len(Text) LocalKey = LocalKey + Key Loop 'Ta petla wykonuje kodowania For i = 1 To Len(Text) znakA = Mid(LocalKey, i, 1) SubRepA = InStr(1, Alphabet, znakA, vbBinaryCompare) znakB = Mid(Text, i, 1) SubRepB = InStr(1, Alphabet, znakB, vbBinaryCompare) RepStr = SubRepB + SubRepA If RepStr > Len(Alphabet) Then RepStr = RepStr - Len(Alphabet) tmp = tmp + Mid(Alphabet, RepStr, 1) Next i EncodeData = tmp Debug.Print tmp End Function '--------------------------------------- Kod Modułu deszyfrowania: '--------------------------------------- Option Explicit Function DecodeData(Text As String) As String Dim i As Integer Dim znakA As String, znakB As String, tmp As String Dim SubRepA As Integer, SubRepB As Integer, RepStr As Integer Dim LocalKey As String tmp = "" LocalKey = "" Do While Len(LocalKey) < Len(Text) LocalKey = LocalKey + Key Loop For i = 1 To Len(Text) znakA = Mid(LocalKey, i, 1) SubRepA = InStr(1, Alphabet, znakA, vbBinaryCompare) znakB = Mid(Text, i, 1) SubRepB = InStr(1, Alphabet, znakB, vbBinaryCompare) RepStr = SubRepB - SubRepA If RepStr < 1 Then RepStr = RepStr + Len(Alphabet) tmp = tmp + Mid(Alphabet, RepStr, 1) Next i DecodeData = tmp End Function '--------------------------------------- Kod modułu zmiennych globalnych Option Explicit Global Const Alphabet As String = "a±bcćdeęfghijklłmnńoópqrs¶tuvwxyzżĽAˇBCĆDEĘFGHIJKLŁMNŃOÓPQRS¦TUVWXYZŻ¬0123456789~`!@#$%^&*()-=_+{}[]|:;',.<>/? """ Global Const Program_Key As String = "AxDf93fo9d1ueJpQtMslJdaU94yaiIpW" Global User_Key As String Global Key As String '--------------------------------------- Kod modułu zarz±dzania kluczem '--------------------------------------- Option Explicit Sub ExtractKey() Dim i As Integer, a As Integer Dim znakA As String, znakB As String Dim SubRepA As Integer, SubRepB As Integer, RepStr As Integer Key = "" For i = 1 To 32 znakA = Mid(Program_Key, i, 1) SubRepA = InStr(1, Alphabet, znakA, vbBinaryCompare) znakB = Mid(User_Key, i, 1) SubRepB = InStr(1, Alphabet, znakB, vbBinaryCompare) RepStr = SubRepA + SubRepB If RepStr > Len(Alphabet) Then RepStr = RepStr - Len(Alphabet) Key = Key + Mid(Alphabet, RepStr, 1) Next i End Sub Sub GenerateUserKey() 'Funkcja generuje losowy klucz Dim i As Integer User_Key = "" For i = 1 To 32 User_Key = User_Key + Mid(Alphabet, Int(Rnd * Len(Alphabet)) + 1, 1) Next i End Sub '--------------------------------------- ok jak już skopiujesz sobie te kody do jaki¶ modułów to..... Muszisz podać Programowi twój kod użytkownika(zastanawiasz się po chuj takie to skomplikowane - a ja ci mówie że to zabezpiecza przed odczytaniem hex edytorem bo program w czasie pracy generuje wszystkie klucze a nie ma ich zapisanych w sobie) ok tak czy inaczej to musi być jaki¶ string w zasadzie dowolny (powinien miec 32 znaki-jeżeli nie to musisz zmienić kod w module odpowiedzialnym za generowanie i wyciaganie nowego klucza), bo fukcje szyfrowania i tak sobie go wydłuż±(jezeli nic nie zmieniasz w kodzie wyciagajacym klucz to ta opcja działa tylko jeżeli kodujesz co¶ dłuższego niż 32 znaki) do długo¶ci szyfrowanych danych ok teraz robisz taki patent w sekcji gdzie umie¶ciłem zmienne globalne możesz do User_Key dopisać co¶ w stylo Global Const User_Key ="Kocham Magde i Visual Basica" albo lepiej zrobić patent taki że w pierwszej linijce pliku zawrzeć jaki¶ string który będzie twoim kluczem i teraz to będzie wygl±dało tak Sub LoadPlik() Dim Filen as integer Dim myStr as string Filen=FreeFile'pobieramy nr uchwytu(pierwszy wolny normalnie 1 ale jak otwartych plikow jest wiecej niz 1 to juz nie jest tak wesolo free file zabezpiecza nas przed błedami) open "plik.txt" for input as #filen'otwieramy plik do odczytu line input #filen, user_key'pobieramy klucz uzytkownika z pliku call ExtractKey()'tu prgram generuje klucz wlasciwy z klucza uzytkownika i klucza programu line input #filen, myStr'wczytuje linie do myStr myStr=Decode(myStr)i dekoduje ja w oparciu o klucze 'no i jaki¶ kod tam dalej Close #filen End Sub Sub SavePlik() Dim Filen as integer Dim myStr as string Filen=FreeFile open "plik.txt" for output as #filen call GenerateUserKey()'generuje losowy klucz(dobra sprawa bo ciezko potencjalnemu crackerowi wpasc co sie zmienia bo zamienia sie cala zawartosc pliku przyy zapisie dzieki dynamicznej zmianie zawartosci klucza) print #filen, user_key' drukujemy klucz do pierwszej lini call ExtractKey()' karzemy sklecic nowy klucz z nowo wygenerowanego klucza uzytkownika myStr=Encode(myStr)'kodujemy dane print #filen, myStr'i fruuu je do pliku 'no i jaki¶ kod tam dalej Close #filen End Sub [Post edytowany dnia 15-01-2003 16:27 przez err404] 15-01-2003 16:01 1306176 err404 Typ: neutral Postów: 14 Zarejestrowany: Nov 2002 czasami zmienne tekstowe szyfrować możesz podwójnie potrójnie a nawet więcej razy dim ms as string ms="Ola" ms=Encode(ms)'Pierwsze szyfrowanie debug.print ms ms=Encode(ms)'drugie debug.print ms Pamiętaj jedynie że logika nakazuje że przy dekodowaniu danym musisz cał± droge przej¶ć wstecz P.S. nie szyfruj kluczy(chyba że jakimi¶ stałymi kluczami), bo zaszyfrowany klucz jest nie doodczytania przez program 15-01-2003 16:18 1306176 Viper87 Typ: neutral Postów: 490 Zarejestrowany: Oct 2002 Bardzo Ci dziękuję za ten post i ten o napisach na filmie-muszę przyzanć, że nie wiem czy je od razu zrozumiem. Na razie nie mam czasu. Trochę dużo tego _____________________________________________ Viper "Savoir c`est prevoir, prevoir c`est prevenir". (Wiedzieć to przewidzieć, przewidzieć to zapobiegać) 15-01-2003 16:32 Wszystkich odpowiedzi: 7 :: Maxymalnie na stronę: 20 Strona: [ > ] z 1 |