[Çözüldü]Python Hex Arama

Başlatan fghty, 02 Aralık 2012 - 18:15:46

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

fghty

http://forum.ubuntu-tr.net/index.php?topic=36588.0 bu linkteki kodla aradığım hex in bulunduğu dosyaları listelemek istiyorum ama olmadı.

#!/

monthy_python

Aradığınız hex şuysa : #!/
#!/usr/bin/env python
# encoding: utf-8

import os

def SozcukAra(yol, sozcuk="#!/", uzanti="txt"):
os.chdir(yol)
dosyalar = os.listdir(yol)
for i in dosyalar:
if i.endswith(uzanti):
with open(i, "r") as oku:
if sozcuk in oku.read():
print i

"yol" değişkenine aramayı yapacağınız dizinin adresini gireceksiniz. ("home/py/desktop" gibi.)

fghty

Hocam kusura bakma #!/ yazan bölümde kod olacaktı. Yanlışlıkla slmişim galiba. Dosyada hex araması yapacak. Mesela 9F58B8A0 EB3D bunun yer aldığı dosyaları bana söyleyecek. if sozcuk in oku.read() bölümü oku.read().encode("hex") şeklinde değiştiriyorum ama her hex i bulmuyor nedense. Aramayı da dizindeki bütün dosya uzantılarında yapmasını istiyorum. Sizin kodda belirtilen dosya uzantısında arama yapıyor galiba.

monthy_python

dosyaları okurken encode etmesine gerek var mı? encode işleri karışık biraz, ben de beceremiyorum oraları. aradığınız hex'i neden normal bir string olarak vermiyorsunuz?
bütün dosyalar için if/endswith koşulunu kaldırabilirsiniz:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os

def SozcukAra(yol, sozcuk):
os.chdir(yol)
dosyalar = os.listdir(yol)
for i in dosyalar:
with open(i, "r") as oku:
if sozcuk in oku.read():
print i
#deneme
SozcukAra("arama/yapılacak/dizin", "9F58B8A0 EB3D")

fghty

Hocam dll uzantışı dosyada z:\ gibi yol araması yapmam gerekiyor ama dll içinde direk bu şekilde yazmıyor. Her harfin arasında bi karakter daha yer alıyor bu yüzden bulmuyor. z:\ bu yol dosyaların içindeki hex karşılığı '7a003a005c00' buradaki 00 lar fazlalık. Bu yüzden hex aramasına uğraşıyorum.

monthy_python

o zaman sanırım düzenli ifadelerle tanımlayacaksınız aradığınızı (pek iyi bilmediğim konu gene.  :) )
dll dediğinize göre de windowsta yapılacak arama (bilmediğim işletim sistemi.)
 

fghty

Yok hocam Windows ta değil. :) Telefonun sistem dosyaları. Bilgisayara attım oradan arama yapacam. Ama yapamadım. :) Düzenli ifadeler de işe yaramaz gibime geliyor.

sem

grep ile denediniz mi grep ikilik dosyalarda da arama yapıyordu yanılmıyorsam... Deneyip sonuç alamamış mıydınız?
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

coyote1222

ben pythonla benzer bir örnek yazmıştım dosya tiplerini algılayan bunun için dosyaların başındaki formatların işaretlerini kullanıyordum bunu da hex olarak arıyordu kodu incelerseniz fikir verebilir anlamadığınız bir yer olursa daha detaylı açıklayabilirim.

# -*- coding: utf-8 -*-
import sys
from os.path import exists
if not exists(sys.argv[1]):
print sys.argv[1], "geçerli bir dosya değil."
sys.exit(0)

f = open(sys.argv[1], "rb+")

signs = {
"MP3": {0: "\x49\x44\x33"},
"ZIP": {0: "\x50\x4B\x03\x04"},
"JPEG": {0: "\xFF\xD8\xFF"},
"PDF": {0: "\x25\x50\x44\x46"},
"AVI": {0: "\x52\x49\x46\x46", 8: "\x41\x56\x49\x20\x4C\x49\x53\x54"},
"FLV": {0: "\x46\x4C\x56\x01"},
"PNG": {0: "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A"},
"EXE": {0: "\x4D\x5A"},
"MP4": {0: "\x00\x00\x00", 4: "\x66\x74\x79\x70"}
}

for sign in signs:
all_equal = True
for start_point in signs[sign]:
f.seek(start_point)
bytes = f.read(len(signs[sign][start_point]))
if not (bytes == signs[sign][start_point]):
all_equal = False
break
if (all_equal):
print "Dosya türü:", sign
break


fghty

Sorun yazım hatasından kaynaklanıyormuş. Hex büyük harle değilde küçük harfle yazınca sorun olmuyor.