[ miljanar @ 26.08.2008. 13:27 ] @
aplikacija treba sadrzaj fajla(128Bytes) koji je txt formatu(predstavlja kljuc i sadrzi hex vrednosti) da iscita i napravi novi fajl koji se automatski smesta na odredjenu lokaciju na C,sam kod sam iskomplikovala,imam jedan exe fajl koji odredjuje putanje i sadrzaj novog fajla definisan sa 128 *(zvezdica)jer je poverljiv i drugi kod koji gadja prvi exe i trazi niz od 128*kad nadje medja zvezdice odgovarajucim karakterima iz zadatig fajla i to smesta u novi fajl na C i pravi exe koji ide korisniku.Opseg vrednosti od 80-9F vb6 mi interpretita kao 3F,ostale vrednosti mi tacno prenese.?????????Ako me je neko razumeo:-),pomagajte!!!!!!!!
poenta aplikacije je da korisnik unese sifru i da se taj sadrzaj prenese na odredjenu lokaciju a da korisnik nema pojma sta radi apllikacija.
[ Aleksandar Ružičić @ 26.08.2008. 15:15 ] @
hmm, nisam siguran da sam bas razumeo sta si htela da kazes :)

kako mislis da ti vb vrednosti od &h80 do &h9F tretira kao &h3F? poslednji put kada sam ja radio sa vb6 sasvim dobro je podnosio hexadecimalne brojeve :)

pojasni malo to "prenosenje" brojeva. ja koliko sam razumeo ti u jednom fajlu imas 128-bitni hexadecimalni broj i treba da ga procitas i onda otvoris drugi exe fajl, pronadjes 128 zvezdica i te zvezdice zamenis sa tim 128bitnim hexadecimalnim brojem?
[ Eurora3D Team @ 26.08.2008. 17:30 ] @
Ja sam shvatio da imas niz od 128 bajtova raznih vrednosti (u kom rasponu ?) u txt fajlu.
I kad ih iscitas ? vrednosti od &h80 do &h9F su "interpretirane" (gde? u VB IDE-u?) kao &h3F. Sta je sa ostalim vrednostima preko &h9F ? Dali se koriste ?
Evo ti kod koji upisuje i cita te vrednosti ... mozda ti bude od koristi ...

Code:

Private Sub Form_Load()
Dim fso, fs
Set fso = CreateObject("Scripting.FileSystemObject")
Set fs = fso.CreateTextFile("C:\Fajl.txt")
Dim str As String
str = ""
For n = &H80 To &H9F
str = str & Chr(n)
Next n
fs.Write str
fs.Close
Set fs = Nothing
Set fs = fso.OpenTextFile("C:\Fajl.txt", 1)
str = fs.ReadAll
Set fs = Nothing
Set fso = Nothing
Debug.Print str
End Sub
[ miljanar @ 27.08.2008. 07:49 ] @
Dobro si shvatio ....najobicniji txt fajl od 128bajtova sa sadrzajem izmuljanim u hex editoru,znaci niz od 128 hex brojeva.
Citam ih u drugom kodu koji mi trazi zvezdice,otvara fajl sa hex sadrzajem,iscitava,medja zvezdice karakterima i to smesta u novi fajl na odgovarajucu lokaciju.
Sve ostale vrednosti mi verno prenese osim navedenih....
Zasto....te vrednosti prestavljaju ona glupava slova kao a sa dve tacke i tome sl.i takvo kodiranje podrzava ANSII ,da li je mozda u tome problem?
[ Eurora3D Team @ 27.08.2008. 10:49 ] @
Ovo je citat iz MSDN-s o ANSI setu znakova.
"ANSI 8-bit character set used to represent up to 256 characters (0–255) using your keyboard. The first 128 characters (0–127) correspond to the letters and symbols on a standard U.S. keyboard. The second 128 characters (128–255) represent special characters, such as letters in international alphabets, accents, currency symbols, and fractions."
Taj raspon znakova koji pominjes spada u prvi deo druge polovine ovog seta znakova (128-159).
Nisi objasnila sve ovo sto sam pitao tako da nije moguce dati 100% tacan odgovor ... u svakom slucaju
Ova moja funkcija gore tacno cita fajl u i upisuje bajtove u String buffer
Probaj sledece
Nemoj da koristis znakove u programu nego njihove ASCI vrednosti. Imas funkcije Chr(broj) za pretvaranje ASCI koda u slovo i Asc("slovo") za pretvaranje slova u ASCI kod.
Ucitavaj sadrzaj fajla u String i ucitaj ceo odjednom (posto je mali tekst) pa ga parsiraj odatle.
Proveri deo programa koji radi trazenje tih zvezdica , moguce je da si prilikom postavljanja uslova (dali je zvezdica itd.) negde greskom isfiltrirala taj raspon znakova.
Cini mi se da je problem najverovatnije u ovom poslednjem.... jer ako pogledas logicki nema razloga da funkcije koje citaju fajl (windows funkcije) ne procitaju svaki bajt tacno ... mozda je problem i u programu koji je snimio taj fajl na HD (taj hex editor) mozda nije snimio to sto ti mislis da bi trebalo.

[ miljanar @ 27.08.2008. 11:13 ] @
Fajlu pristupam binarno i citam bajt po bajt tako da ne mogu da koristim funkcije Chr i Asc(valjda),a opseg je 00-FF,sve mi iscita i prenese verno osim ovog opsega koji sam navela....
[ Aleksandar Ružičić @ 27.08.2008. 11:15 ] @
e sad ste me oboje zbunili :)

prvo se kaze:
Citat:
aplikacija treba sadrzaj fajla(128Bytes) koji je txt formatu(predstavlja kljuc i sadrzi hex vrednosti)


i ja pomislim da taj fajl sadrzi nesto tipa:
Code:
3b0cd18f7ba643012ef28c6a3e7b80311f8bc54d0f264ab3012be8c104fa383b0cd18f7ba643012ef28c6a3e7b80311f8bc54d0f264ab3012be8c104fa38

sto je 128bajtni hexadecimalni broj (ili 128 hexadecimalnih cifara) a fajl je u ascii formatu

a onda se kaze:
Citat:
najobicniji txt fajl od 128bajtova sa sadrzajem izmuljanim u hex editoru

a prikaz u hex editoru se dosta razlikuje od prikaza ascii fajla (hex editorom se edituju binarni fajlovi a ne textualni, mada mogu i textualni naravno...)


i meni i dalje nije jasno sta podrazumevas pod "Opseg vrednosti od 80-9F vb6 mi interpretita kao 3F", jer ukoliko ti samo treba da ucitas 128-bajtni string/niz i da ga prekopiras u drugi fajl sta se tu interpretira?


edit:
pretece me miljanar :)
ali i dalje ostaju oba moja pitanja...
[ Eurora3D Team @ 27.08.2008. 11:31 ] @
Mozes da koristis Chr i Asc i sa bajtovima
Code:

Dim Slovo As String
'Bajt
Dim Bajt As Byte
Bajt = 65 ' ASCI 65 = A
Slovo = Chr(Bajt) ' Dobijamo A u Slovo
Debug.Print Slovo ' Dobijamo A na izlazu
Debug.Print Asc(Slovo) ' Dobijamo 65 na izlazu
'Niz bajtova
Dim BajtNiz(3) As Byte
BajtNiz(1) = 67 ' ASCI 67 = C
Slovo = Chr(BajtNiz(1)) ' Dobijamo C u Slovo
Debug.Print Slovo ' Dobijamo C na izlazu
Debug.Print Asc(Slovo) ' Dobijamo 67 na izlazu


@Alekasandar
:)
Ma ima txt sa 128 karaktera (koji ako gledas u nekom hex editoru izgleda kao niz hex brojeva :) ) ,
Ima nesto kao ev2cb av2--4ov gledano iz Notepada
S' tim da svaki znak normalno mozemo da gledamo i kao broj (decimalni ili hex) od 0 do 255 . Jedino sto ona ocigledno vise voli (ili mora zbog aplikacije) da barata hex brojevima
tako sam ja shvatio ..



[Ovu poruku je menjao Eurora3D Team dana 27.08.2008. u 15:27 GMT+1]
[ miljanar @ 27.08.2008. 12:47 ] @
aj ovako,ako imas hex editor unesi neke hex vrednosti,idi na export to file i fajl sacuvaj kao hex byte(*.hex).Takav fajl ja dobijam,odnosno kljuc za sifrovanje.i taj kao takav trebam da ocitam,i sadrzaj bukvalno iskopiram u drugi novi koji se smesta na C.
Ovo je druga varijanta sa binarnim fajlovima,pa se mozda bolje razumemo,ali isti problem.
[ Aleksandar Ružičić @ 27.08.2008. 14:18 ] @
e pa to je vec druga stvar, ti si me zbunila kada si rekla u txt formatu...

elem, ucitavas ovako:
Code:

Dim fn As Integer
dim key(0 to 127) As Byte
fn = FreeFile
Open "file.ext" For Binary Access Read Lock Write As #fn
   get #fn,, key()
close #fn


a ovako upisujes:
Code:

dim pos as integer
fn = FreeFile
Open "file2.ext" For Binary Access Write Lock Write As #fn
   pos = findPositionOfFirstStar() ' ovde ubaci logiku/funkciju koja ce da ti pronadje gde pocinju tih 128 zvezdica (na kojoj poziciji)
  put #fn, pos, key()
close #fn


i to je to...

[Ovu poruku je menjao Aleksandar Ružičić dana 27.08.2008. u 16:40 GMT+1]
[ miljanar @ 28.08.2008. 09:40 ] @
evo ti moj kod,malo skracen ali to je to
Code:

open KRIPTO for binary as #3   'kripto je binarni fajl sa kljucem
poc_lok=FindStart-1   'findstart funkcija koja trazi 128 *
duz=FileLen(template_exe)      'template_exe je exe fajl sa putanjama i definisanom const od 128 *
open template_exe for binary as #1
open new_exe for binary as #2      'new_exe je novi exe fajl u kom je integrisan kljuc
ofset=0
tst_pod=&h30
for i=0 to duz-1
get #1,,pom_pod
if((i=poc_lok+ofset) and i<poc_lok +broj_bajtova))  then   'broj_bajtova=128
get#3,,tst_pod
put #2,,tst_pod
ofset=ofset+2
else
put #2,,pom_pod


kad otvorim fajl kripto i novi fajl koji sam definisala u template_exe(a koji treba da budu isti) i koji je sada na nekoj lokaciji na C(uporeddjujenm ih preko total commandera,f3view,options pa hex-vrednosti izmedju h80-h9F mi prenosi kao h3F)

[Ovu poruku je menjao Aleksandar Ružičić dana 28.08.2008. u 17:06 GMT+1]
[ Eurora3D Team @ 28.08.2008. 19:34 ] @
Zainteresovala me je tema :) (mozda si nasla Bug u MS VB bibliotekama ... ) a i da se odmorim od c++-a
Probao sam sa bmp slikom u koju sam na kraj dodao 128 * i fajlom od 128 bajtova koji ima nekoliko znakova koji su kod tebe problematicni i radi.
Slika koja se dobije moze da se otvori a * na kraju su zamenjene sadrzajem hex fajla.
Inace koriscen je Win API , kao sto se i vidi ...
poz
Code:

Private Const FILE_SHARE_READ = &H1
Private Const FILE_SHARE_WRITE = &H2
Private Const CREATE_NEW = 1
Private Const OPEN_EXISTING = 3
Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000
Private Const CREATE_ALWAYS = 2
Private Const INVALID_HANDLE_VALUE = -1
Private Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, ByVal lpOverlapped As Any) As Long
Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, ByVal lpOverlapped As Any) As Long
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function GetFileSize Lib "kernel32" (ByVal hFile As Long, lpFileSizeHigh As Long) As Long
Option Base 1 ' baza nizova je index 1 ... a ne 0

Private Function CopyHex(CrFile As String, InFile As String, OutFile As String) As Boolean
CopyHex = False
Dim hCr As Long, hIn As Long, hOut As Long
Dim CrBuffer() As Byte, InBuffer() As Byte, OutBuffer() As Byte
Dim bWrote As Long, bRead As Long
Dim fSz As Long, I As Long, n As Long, m As Long
'I
bRead = 0
hCr = CreateFile(CrFile, GENERIC_READ, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)
If hCr = INVALID_HANDLE_VALUE Then Debug.Print "Greska u otvaranju HEX fajla": Exit Function
fSz = GetFileSize(hCr, 0)
If fSz <> 128 Then Debug.Print "HEX fajl nema 128 bajtova": Exit Function
ReDim CrBuffer(fSz)
ReadFile hCr, CrBuffer(1), fSz, bRead, ByVal 0&
CloseHandle hCr
If bRead <> fSz Then Debug.Print "Greska u citanju fajla " & CrFile: Exit Function
'II
bRead = 0
hIn = CreateFile(InFile, GENERIC_READ, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)
If hIn = INVALID_HANDLE_VALUE Then Debug.Print "Greska u otvaranju fajla " & InFile: Exit Function
fSz = GetFileSize(hIn, 0)
If fSz = 0 Then Debug.Print "Greska u otvaranju fajla " & InFile: Exit Function
ReDim InBuffer(fSz)
ReadFile hIn, InBuffer(1), fSz, bRead, ByVal 0&
CloseHandle hIn
If bRead <> fSz Then Debug.Print "Greska u citanju fajla " & InFile: Exit Function
ReDim OutBuffer(fSz)
'Prepisujemo bajtove i nalazimo ***
n = 0: m = 0
For I = 1 To fSz
If I <= fSz - 127 And  m = 0 Then
If InBuffer(I) = CByte(Asc("*")) And InBuffer(I + 127) = CByte(Asc("*")) Then ' mali trik :)
Dim b As Boolean
b = True
For n = I To I + 127
If Not Chr(InBuffer(I)) = "*" Then b = False
Next n
If b = True Then m = I
End If
End If
OutBuffer(I) = InBuffer(I)
Next I
If m = 0 Then Debug.Print "Nemamo niz ****": Exit Function
For I = m To m + 127
OutBuffer(I) = CrBuffer(I - m + 1)
Next I
'III
hOut = CreateFile(OutFile, GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, CREATE_ALWAYS, 0, 0)
If hOut = INVALID_HANDLE_VALUE Then Debug.Print "Greska u kreiranju fajla " & OutFile: Exit Function
WriteFile hOut, OutBuffer(1), fSz, bWrote, ByVal 0&
CloseHandle hOut
If fSz <> bWrote Then Debug.Print "Greska pri upisu u fajl " & OutFile: Exit Function
CopyHex = True
End Function

Private Sub Form_Load()
'CrFile je HEX fajl od 128 bajtova, InFile je fajl sa 128 * a OutFile je proizvod gde su zvezdice iz InFile zamenjena sadrzajem HEX fajla
Dim CrFile As String, InFile As String, OutFile As String
CrFile = "": InFile = "": OutFile = "" ' popuniti
If CopyHex(CrFile, InFile, OutFile) Then MsgBox "Ok"
End Sub



[Ovu poruku je menjao Eurora3D Team dana 28.08.2008. u 23:20 GMT+1]
[ miljanar @ 01.09.2008. 13:32 ] @
Ovo je malo previse za pocetnika...:-)da malo proucim kod pa se javljam....hvala u svakom slucaju.
[ Eurora3D Team @ 02.09.2008. 16:51 ] @
Nigde nije pisalo da si pocetnik :) a i taj kod koji radis nije za nivo pocetnika ... (citas jedan exe fajl , drugi hex pa upisujes u treci ...)
Win API je sam po sebi komplikovan u odnosu na VB6
Evo ti objasnjenje , ukratko
Ulazni parametri su imena fajlova.
Delovi I i II citaju ceo sadrzaj fajlova u 2 byte niza
Deo posle toga trazi niz od 128 zvezdica u drugom fajlu i pravi treci niz identican sa drugim s' tim sto su sve zvezdice iz drugog (ocekuje se da su zvezdice poredjane jedna za drugom) zamenjuje sadrzajem prvog niza.
Deo III upisuje dobijeni treci niz u izlazni fajl
Uz ovo ima i dosta error handler-a , al ovo gore je sustina ove funkcije
[ miljanar @ 03.09.2008. 10:04 ] @
:-)Ok,to sam provalila ali nisam radila sa Win API-jem pa mi je malo konfuzna sama sintaksa koda....
Hoces da mi objasnis liniju koda

hCr = CreateFile(CrFile, GENERIC_READ, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)
[ Aleksandar Ružičić @ 03.09.2008. 11:37 ] @
to gledaj kao ekvivalent liniji:
Code:

Open crFile For Binary Access Read Write As #1
[ stefanpn @ 03.09.2008. 12:02 ] @
poziv API funkcije CreateFile:

Code:

Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long


Napravi datoteku [OutFile] za čitanje, ne ekskluzivno da bi drugi mogli da čitaju i upisuju, bez SecurityAttribute-a, ukoliko vec postoji onda otvori postojecu, bez flagova i bez šeme.
[ miljanar @ 03.09.2008. 14:51 ] @
ok,jasno....hvala:-)
a da li neko zna zasto moj kod ne radi,tj.zasto mi ne prenosi tacno onaj hex opseg????Necu se smiriti dok to ne provalim....
[ Eurora3D Team @ 03.09.2008. 19:32 ] @
Ni meni nije jasno u cemu je tu stvar ...
U svakom slucaju , pre nego sto sam napisaju ovu funkciju koja koristi Windows API probao sam VB pristup (FileSystemObject) za citanje i upis u fajlove. Podatke sam ucitavao u String buffere.
Iako je kod bio dobro napisan slike (ja sam koristio slike umesto exe-a) koje sam dobijao nisu mogle da se otvore (gledaju). Gledano iz Notepada dobijeni fajl je bio dosta drugaciji od ulaznog . Zvezdice su bile zamenjene ali su ostali podatci (nisam gledao opsege) bili prepisani pogresno, ne svi al prilicno.
To je to sto sam ja primetio a zasto nije ni meni jasno.
A ova pravi fajl za upis
hOut = CreateFile(OutFile, GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, CREATE_ALWAYS, 0, 0)

[Ovu poruku je menjao Eurora3D Team dana 03.09.2008. u 20:44 GMT+1]
[ Aleksandar Ružičić @ 04.09.2008. 10:22 ] @
@Eurora, FSO ne podrzava pisanje/citanje binarnih fajlova (ako se ja ne varam, mada mislim da sam u pravu iako jos oci nisam otvorio :p) pa si zato dobijao neispravne fajlove (tj nekako si zeznuo format fajla)...
[ miljanar @ 04.09.2008. 11:13 ] @
Kako ne podrzava,pa pravila sam aplikaciju za XOR dva binarna fajla i radi savrseno..??????
[ miljanar @ 04.09.2008. 11:15 ] @
Kako ne podrzava,pa pravila sam aplikaciju za XOR dva binarna fajla i radi savrseno..??????
[ stefanpn @ 04.09.2008. 11:33 ] @
Stvar je (ja mislim) u tome sto bi podatke trebao da citas kao Unsigned, a ne Signed vrednosti.

Zar nije bilo jednostavnije da se sve odradi sa VB-ovim ugradjenim IO, (Get, Put...)?
[ miljanar @ 04.09.2008. 11:48 ] @
Pa tako sam i radila.....ovu problematicnu aplikaciju
[ miljanar @ 04.09.2008. 13:48 ] @
A kako da podatke citam kao Unsigned vrednosti,Stefane?
[ Eurora3D Team @ 04.09.2008. 13:57 ] @
@miljanar Aleksandar je u pravu ... fso ne cita pravilno binarne (izgleda da sam previse u c++ ... popustam u VB-u :) )
Ali get cita ... ako se sve uradi ok trebalo bi da radi na VB nacin.
Prepravio sam ovu funkciju u VB stilu ... meni radi isto kao i ona sa Win API-em (sa slikama) a ti proveri te vrednosti koje pominjes
poz
Code:


Private Function CopyHex(CrFile As String, InFile As String, OutFile As String) As Boolean
CopyHex = False

If CrFile = "" Or InFile = "" Or OutFile = "" Then Exit Function
On Error GoTo Err
Dim fSz As Long, I As Long, n As Long, m As Long, b As Boolean
Dim CrBuffer() As Byte, InBuffer() As Byte, OutBuffer() As Byte
Dim hFile As Integer
ReDim CrBuffer(1 To FileLen(CrFile)): ReDim InBuffer(1 To FileLen(InFile)) ': ReDim OutBuffer(1 To FileLen(InFile))
fSz = FileLen(InFile)
'I
hFile = FreeFile
Open CrFile For Binary Access Read Lock Write As #hFile
Get #hFile, , CrBuffer()
Close #hFile
'II
hFile = FreeFile
Open InFile For Binary Access Read Lock Write As #hFile
Get #hFile, , InBuffer()
Close #hFile

'Prepisujemo bajtove i nalazimo ***
n = 0: m = 0
For I = 1 To fSz
If I <= fSz - 127 And m = 0 Then
If InBuffer(I) = CByte(Asc("*")) And InBuffer(I + 127) = CByte(Asc("*")) Then ' mali trik :)
b = True
For n = I To I + 127
If Not Chr(InBuffer(I)) = "*" Then b = False: Exit For
Next n
If b = True Then m = I
End If
End If
'OutBuffer(I) = InBuffer(I) ' koristimo ulazni bufer
Next I
If m = 0 Then Debug.Print "Nemamo niz ****": Exit Function
For I = m To m + 127
'OutBuffer(I) = CrBuffer(I - m + 1)
InBuffer(I) = CrBuffer(I - m + 1) ' prepravicemo ulazni ... bolje nego da koristimo dva bufera
Next I
'III
hFile = FreeFile
Open OutFile For Binary Access Write Lock Write As #hFile
'Put #hFile, , OutBuffer() 'necemo ovaj
Put #hFile, , InBuffer()
Close #hFile

CopyHex = True
Exit Function
Err:
CopyHex = False
Debug.Print "Greska " & Err.Description

End Function

Private Sub Form_Load()
'CrFile je HEX fajl od 128 bajtova, InFile je fajl sa 128 * a OutFile je proizvod gde su zvezdice iz InFile zamenjena sadrzajem HEX fajla
Dim CrFile As String, InFile As String, OutFile As String
CrFile = "": InFile = "": OutFile = "" ' popuniti
If CopyHex(CrFile, InFile, OutFile) Then MsgBox "Ok"
End Sub
[ stefanpn @ 04.09.2008. 16:46 ] @
Baš kao što je Eurrora odradio

tako što je promenljivu u koju smešta pročitanu vrednost deklarisao kao Byte.