Python Forensics - Hızlı Kılavuz

Python, hem profesyonel geliştiriciler hem de acemi programcılar tarafından kolayca anlaşılabilen kolay, okunabilir koda sahip genel amaçlı bir programlama dilidir. Python, herhangi bir yığın çerçevesiyle kullanılabilen birçok yararlı kitaplıktan oluşur. Birçok laboratuvar tahminler için temel modeller oluşturmak ve deneyler yapmak için Python'a güvenir. Ayrıca kritik operasyonel sistemleri kontrol etmeye yardımcı olur.

Python, dijital araştırmayı desteklemek ve bir araştırma sırasında kanıtın bütünlüğünü korumak için yerleşik yeteneklere sahiptir. Bu eğitimde, Python'u sayısal veya hesaplama adli tıpta uygulamanın temel kavramlarını açıklayacağız.

Hesaplamalı Adli Tıp nedir?

Hesaplamalı Adli Tıp, yeni ortaya çıkan bir araştırma alanıdır. Adli sorunları dijital yöntemler kullanarak çözme ile ilgilenir. Dijital kanıtları incelemek için hesaplama bilimini kullanır.

Hesaplamalı Adli Tıp, temel olarak alet işaretleri, parmak izleri, ayakkabı izleri, belgeler vb. Gibi kalıp kanıtlarına dayalı olarak araştırılan nesneler, maddeler ve süreçlere sahip geniş bir konu yelpazesini içerir ve ayrıca fizyolojik ve davranışsal kalıpları, DNA'yı ve dijital kanıtları içerir. suç sahneleri.

Aşağıdaki diyagram, Hesaplamalı Adli Tıp kapsamında ele alınan geniş bir konu yelpazesini göstermektedir.

Hesaplamalı adli tıp, bazı algoritmalar yardımıyla uygulanır. Bu algoritmalar sinyal ve görüntü işleme, bilgisayarla görme ve grafikler için kullanılır. Aynı zamanda veri madenciliği, makine öğrenimi ve robotik içerir.

Hesaplamalı adli tıp, çeşitli dijital yöntemleri içerir. Adli tıpta tüm dijital yöntemleri kolaylaştırmanın en iyi çözümü Python gibi genel amaçlı bir programlama dili kullanmaktır.

Adli bilişimin tüm faaliyetleri için Python'a ihtiyacımız olduğundan, adım adım ilerleyelim ve nasıl kurulacağını anlayalım.

Step 1 - Git https://www.python.org/downloads/ ve sisteminizdeki İşletim Sistemine göre Python kurulum dosyalarını indirin.

Step 2 - Paketi / yükleyiciyi indirdikten sonra, kurulum işlemini başlatmak için exe dosyasına tıklayın.

Kurulum tamamlandıktan sonra aşağıdaki ekranı göreceksiniz.

Step 3 - Bir sonraki adım, sisteminizde Python'un ortam değişkenlerini ayarlamaktır.

Step 4 - Ortam değişkenleri ayarlandıktan sonra, kurulumun başarılı olup olmadığını doğrulamak için komut istemine "python" komutunu yazın.

Kurulum başarılı olduysa, konsolda aşağıdaki çıktıyı alacaksınız.

Python'da yazılan kodlar, C veya Pascal gibi diğer geleneksel programlama dillerinde yazılan kodlara oldukça benzer. Ayrıca Python'un sözdiziminin büyük ölçüde C'den ödünç alındığı söylenir. Bu, C diline benzeyen birçok Python anahtar kelimesini içerir.

Python, adli tıp için verileri doğru bir şekilde çıkarmak için kullanılabilen koşullu ve döngüsel ifadeler içerir. Akış kontrolü için sağlarif/else, whileve üst düzey for herhangi bir "yinelenebilir" nesnenin üzerinde döngü yapan ifade.

if a < b: 
   max = b 
else: 
   max = a

Python'un diğer programlama dillerinden farklı olduğu ana alan, dynamic typing. Nesnelere atıfta bulunan değişken isimleri kullanır. Bu değişkenlerin bildirilmesine gerek yoktur.

Veri tipleri

Python, dizeler, Boolean, sayılar vb. Gibi bir dizi yerleşik veri türü içerir. Ayrıca değişmez türler de vardır, bu, yürütme sırasında değiştirilemeyen değerler anlamına gelir.

Python ayrıca aşağıdakileri içeren bileşik yerleşik veri türlerine sahiptir: tuples değişmez diziler olan lists, ve dictionarieskarma tablolar. Hepsi dijital adli tıpta kanıt toplarken değerleri saklamak için kullanılıyor.

Üçüncü Taraf Modülleri ve Paketleri

Python, aynı zamanda adı verilen modül ve / veya paket gruplarını destekler. third-party modules (ilgili kod tek bir kaynak dosyada gruplandırılır) programları düzenlemek için kullanılır.

Python, hesaplamalı adli tıp alanındaki popülerliğinin ana nedenlerinden biri olan kapsamlı bir standart kitaplık içerir.

Python Kodunun Yaşam Döngüsü

  • İlk başta, bir Python kodu çalıştırdığınızda, yorumlayıcı kodu sözdizimi hataları için kontrol eder. Yorumlayıcı herhangi bir sözdizimi hatası bulursa, bunlar hemen hata mesajları olarak görüntülenir.

  • Sözdizimi hatası yoksa, kod bir bytecode ve PVM'ye (Python Sanal Makinesi) gönderilir.

  • PVM, bayt kodunu herhangi bir çalışma zamanı veya mantıksal hata için kontrol eder. PVM'nin herhangi bir çalışma zamanı hatası bulması durumunda, bunlar hemen hata mesajları olarak rapor edilir.

  • Bayt kodu hatasız ise, kod işlenir ve çıktısını alırsınız.

Aşağıdaki çizim, Python kodunun bir bayt kodu üretmek için ilk olarak nasıl yorumlandığını ve çıktıyı üretmek için bayt kodunun PVM tarafından nasıl işlendiğini grafiksel bir şekilde gösterir.

Adli kılavuzlara göre bir uygulama oluşturmak için, adlandırma kurallarını ve modellerini anlamak ve bunlara uymak önemlidir.

Adlandırma Kuralları

Python adli tıp uygulamalarının geliştirilmesi sırasında izlenecek kurallar ve konvansiyonlar aşağıdaki tabloda açıklanmıştır.

Sabitler Alt çizgi ayırmalı büyük harf YÜKSEK SICAKLIK
Yerel değişken adı Engebeli başlıklı küçük harf (alt çizgi isteğe bağlıdır) şuanki sıcaklık
Global değişken adı Büyük harflerle küçük harf öneki (alt çizgi isteğe bağlıdır) gl_maximumRecordedTemperature
İşlev adı Aktif sesle engebeli başlıklı büyük harf (isteğe bağlı alt çizgi) DönüştürFarenheitToCentigrade (...)
Obje adı Önek ob_ engebeli büyük harflerle küçük harf ob_myTempRecorder
Modül Alt çizgi ve ardından engebeli büyük harflerle küçük harf _tempRecorder
Sınıf isimleri Class_ önekle ardından engebeli büyük harfler ve kısa tutun class_TempSystem

Hesaplamalı Adli Tıpta adlandırma kurallarının önemini anlamak için bir senaryo alalım. Normalde verileri şifrelemek için kullanılan bir karma algoritmamız olduğunu varsayalım. Tek yönlü karma algoritma, girişi ikili veri akışı olarak alır; bu bir parola, dosya, ikili veri veya herhangi bir dijital veri olabilir. Karma algoritması daha sonra birmessage digest (md) girişte alınan verilere göre.

Verilen bir mesaj özetini oluşturacak yeni bir ikili girdi oluşturmak neredeyse imkansızdır. İkili giriş verilerinin tek bir biti bile değiştirilirse, öncekinden farklı benzersiz bir mesaj oluşturacaktır.

Misal

Yukarıda belirtilen kuralları izleyen aşağıdaki örnek programa bir göz atın.

import sys, string, md5   # necessary libraries
print "Please enter your full name"
line = sys.stdin.readline()
line = line.rstrip()
md5_object = md5.new()
md5_object.update(line)
print md5_object.hexdigest()   # Prints the output as per the hashing algorithm i.e. md5
exit

Yukarıdaki program aşağıdaki çıktıyı üretir.

Bu programda, Python betiği girişi (tam adınız) kabul eder ve md5 karma algoritmasına göre dönüştürür. Verileri şifreler ve gerekirse bilgileri güvence altına alır. Adli tıp yönergelerine göre, kanıtların adı veya diğer kanıtlar bu modelde güvence altına alınabilir.

Bir hash functionbüyük miktarda veriyi belirli bir uzunlukta sabit bir değerle eşleyen işlev olarak tanımlanır. Bu işlev, aynı girdinin, aslında bir hash toplamı olarak tanımlanan aynı çıktıyla sonuçlanmasını sağlar. Karma toplam, belirli bilgiler içeren bir özelliği içerir.

Bu işlevin geri döndürülmesi pratik olarak imkansızdır. Bu nedenle, kaba kuvvet saldırısı gibi herhangi bir üçüncü taraf saldırısı pratikte imkansızdır. Ayrıca, bu tür bir algoritmayaone-way cryptographic algorithm.

İdeal bir kriptografik hash fonksiyonunun dört ana özelliği vardır -

  • Verilen herhangi bir girdi için hash değerini hesaplamak kolay olmalıdır.
  • Özgün girdiyi hashinden oluşturmak mümkün olmamalıdır.
  • Hash'i değiştirmeden girişi değiştirmek mümkün olmamalıdır.
  • Aynı hash ile iki farklı girdi bulmak mümkün olmamalıdır.

Misal

Karakterleri onaltılık formatta kullanan parolaları eşleştirmeye yardımcı olan aşağıdaki örneği düşünün.

import uuid
import hashlib
  
def hash_password(password):
   # userid is used to generate a random number
   salt = uuid.uuid4().hex #salt is stored in hexadecimal value
   return hashlib.sha256(salt.encode() + password.encode()).hexdigest() + ':' + salt
     
def check_password(hashed_password, user_password):
   # hexdigest is used as an algorithm for storing passwords
   password, salt = hashed_password.split(':')
   return password == hashlib.sha256(salt.encode()
      + user_password.encode()).hexdigest()

new_pass = raw_input('Please enter required password ')
hashed_password = hash_password(new_pass)
print('The string to store in the db is: ' + hashed_password)
old_pass = raw_input('Re-enter new password ')

if check_password(hashed_password, old_pass):
   print('Yuppie!! You entered the right password')
else:
   print('Oops! I am sorry but the password does not match')

Akış çizelgesi

Bu programın mantığını aşağıdaki akış şeması yardımıyla açıkladık -

Çıktı

Kodumuz aşağıdaki çıktıyı üretecektir -

İki kez girilen şifre, hash fonksiyonuyla eşleşir. Bu, iki kez girilen parolanın doğru olmasını sağlar, bu da yararlı verilerin toplanmasına ve şifrelenmiş bir biçimde kaydedilmesine yardımcı olur.

Bu bölümde, analiz ve kanıt sırasında getirilen bir metin verisini kırmayı öğreneceğiz.

Kriptografide düz bir metin, mesaj gibi bazı normal okunabilir metindir. Öte yandan bir şifreleme metni, siz düz metin girdikten sonra getirilen bir şifreleme algoritmasının çıktısıdır.

Düz bir metin mesajını şifreli bir metne nasıl dönüştürdüğümüzün basit algoritması, düz metni düşmanlarından gizli tutmak için Jül Sezar tarafından icat edilen Sezar şifresidir. Bu şifre, mesajdaki her harfin alfabede üç basamak "ileri" kaydırılmasını içerir.

Aşağıda bir demo örneği verilmiştir.

a → D

b → E

c → F

....

w → Z

x → A

y → B

z → C

Misal

Bir Python komut dosyası çalıştırdığınızda girilen bir mesaj, kalıp kanıtı için kullanılan tüm karakter olasılıklarını verir.

Kullanılan desen kanıtı türleri aşağıdaki gibidir -

  • Lastik İzleri ve İşaretleri
  • Impressions
  • Fingerprints

Her biyometrik veri, tam kanıt elde etmek için kırmamız gereken vektör verilerinden oluşur.

Aşağıdaki Python kodu, düz metinden nasıl bir şifre metni üretebileceğinizi gösterir -

import sys

def decrypt(k,cipher): 
   plaintext = '' 
   
   for each in cipher: 
      p = (ord(each)-k) % 126 
      
      if p < 32: 
         p+=95 
         plaintext += chr(p) 
         print plaintext 

def main(argv):
   if (len(sys.argv) != 1): 
      sys.exit('Usage: cracking.py') 
      cipher = raw_input('Enter message: ') 
      
      for i in range(1,95,1): 
         decrypt(i,cipher)
         
if __name__ == "__main__": 
   main(sys.argv[1:])

Çıktı

Şimdi, bu kodun çıktısını kontrol edin. Basit bir "Radhika" metni girdiğimizde, program aşağıdaki şifre metnini üretecektir.

Virtualizationsunucular, iş istasyonları, ağlar ve depolama gibi BT sistemlerini taklit etme sürecidir. Herhangi bir işletim sisteminin, bir sunucunun, bir depolama aygıtının veya ağ süreçlerinin gerçek sürümünden ziyade sanal bir sürümünün oluşturulmasından başka bir şey değildir.

Sanal donanımın öykünmesine yardımcı olan ana bileşen, bir hyper-visor.

Aşağıdaki şekil, kullanılan iki ana sistem sanallaştırma türünü açıklamaktadır.

Sanallaştırma, bilişimsel adli tıpta çeşitli şekillerde kullanılmıştır. Analiste, iş istasyonunun her bir araştırma için doğrulanmış bir durumda kullanılabileceği şekilde yardımcı olur. Veri kurtarma, bir sürücünün dd görüntüsünü özellikle sanal bir makineye ikincil bir sürücü olarak ekleyerek mümkündür. Aynı makine, kanıtları toplamak için bir kurtarma yazılımı olarak kullanılabilir.

Aşağıdaki örnek, Python programlama dili yardımıyla bir sanal makinenin oluşturulmasının anlaşılmasına yardımcı olur.

Step 1 - Sanal makinenin 'dummy1' olarak adlandırılmasına izin verin.

Her sanal makine, bayt olarak ifade edilen minimum kapasitede 512 MB belleğe sahip olmalıdır.

vm_memory = 512 * 1024 * 1024

Step 2 - Sanal makine, hesaplanan varsayılan kümeye eklenmelidir.

vm_cluster = api.clusters.get(name = "Default")

Step 3 - Sanal makine, sanal sabit disk sürücüsünden başlatılmalıdır.

vm_os = params.OperatingSystem(boot = [params.Boot(dev = "hd")])

Tüm seçenekler, sanal makineye vms koleksiyonunun add yöntemini kullanmadan önce bir sanal makine parametresi nesnesinde birleştirilir.

Misal

Aşağıda, bir sanal makine eklemek için eksiksiz Python betiği verilmiştir.

from ovirtsdk.api import API #importing API library
from ovirtsdk.xml import params

try: #Api credentials is required for virtual machine
   api = API(url = "https://HOST", 
      username = "Radhika", 
      password = "a@123", 
      ca_file = "ca.crt")
      
   vm_name = "dummy1"
   vm_memory = 512 * 1024 * 1024 #calculating the memory in bytes
   vm_cluster = api.clusters.get(name = "Default")
   vm_template = api.templates.get(name = "Blank")
   
   #assigning the parameters to operating system
   vm_os = params.OperatingSystem(boot = [params.Boot(dev = "hd")])
   
   vm_params = params.VM(name = vm_name,
      memory = vm_memory,
      cluster = vm_cluster,
      template = vm_template
      os = vm_os)

   try: 
      api.vms.add(vm = vm_params) 
      print "Virtual machine '%s' added." % vm_name #output if it is successful. 
   except Exception as ex: 
      print "Adding virtual machine '%s' failed: %s" % (vm_name, ex) 
      api.disconnect()
      
except Exception as ex: 
   print "Unexpected error: %s" % ex

Çıktı

Kodumuz aşağıdaki çıktıyı üretecektir -

Modern ağ ortamlarının senaryosu öyledir ki, bir takım zorluklar nedeniyle araştırma zahmetli olabilir. Bu, bir ihlal desteğine yanıt verirken, içeriden öğrenen faaliyetleri araştırırken, güvenlik açığıyla ilgili değerlendirmeler yaparken veya bir mevzuata uygunluğu onaylarken olabilir.

Ağ Programlama Kavramı

Ağ programlamasında aşağıdaki tanımlar kullanılır.

  • Client - İstemci, kişisel bir bilgisayar ve iş istasyonunda çalışan istemci-sunucu ağ programlama mimarisinin bir parçasıdır.

  • Server - Sunucu, aynı veya diğer bilgisayarlardaki diğer bilgisayar programlarına hizmet sağlayan istemci-sunucu mimarisinin bir parçasıdır.

  • WebSockets- WebSockets, istemci ile sunucu arasında kalıcı bir TCP bağlantısı üzerinden çalışan bir protokol sağlar. Bu sayede çift yönlü mesajlar TCP soket bağlantısı arasında (aynı anda) gönderilebilir.

WebSockets, sunucuların istemciye bilgi göndermesine izin veren diğer birçok teknolojinin ardından gelir. Yükseltme Başlığını el sıkışma dışında, WebSockets HTTP'den bağımsızdır.

Bu protokoller, üçüncü taraf kullanıcılar tarafından gönderilen veya alınan bilgileri doğrulamak için kullanılır. Şifreleme, mesajların güvenliğini sağlamak için kullanılan yöntemlerden biri olduğundan, mesajların aktarıldığı kanalın güvenliğini sağlamak da önemlidir.

İstemcinin kullandığı aşağıdaki Python programını düşünün handshaking.

Misal

# client.py
import socket

# create a socket object
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# get local machine name
host = socket.gethostname()
port = 8080

# connection to hostname on the port.
s.connect((host, port))

# Receive no more than 1024 bytes
tm = s.recv(1024)
print("The client is waiting for connection")
s.close()

Çıktı

Aşağıdaki çıktıyı üretecektir -

İletişim kanalı talebini kabul eden sunucu aşağıdaki komut dizisini içerecektir.

# server.py
import socket
import time

# create a socket object
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# get local machine name 
host = socket.gethostname()
port = 8080

# bind to the port
serversocket.bind((host, port))

# queue up to 5 requests 
serversocket.listen(5)

while True:
   # establish a connection 
   clientsocket,addr = serversocket.accept()
   print("Got a connection from %s" % str(addr))
   currentTime = time.ctime(time.time()) + "\r\n"
   clientsocket.send(currentTime.encode('ascii'))
   clientsocket.close()

Python programlama yardımıyla oluşturulan istemci ve sunucu ana bilgisayar numarasını dinler. Başlangıçta, istemci sunucuya ana bilgisayar numarasında gönderilen verilere ilişkin bir istek gönderir ve sunucu isteği kabul eder ve hemen bir yanıt gönderir. Bu şekilde güvenli bir iletişim kanalına sahip olabiliriz.

Python programlarındaki modüller, kodu düzenlemeye yardımcı olur. İlgili kodu tek bir modülde gruplamaya yardımcı olurlar, bu da anlaşılmasını ve kullanılmasını kolaylaştırır. Bağlama ve referans için kullanılabilen keyfi olarak adlandırılmış değerleri içerir. Basit bir deyişle, bir modül, işlevler, sınıflar ve değişkenler içeren Python kodundan oluşan bir dosyadır.

Bir modülün (dosya) Python kodu ile kaydedilir. .py Gerektiğinde ve gerektiğinde derlenen uzantı.

Example

def print_hello_func( par ): 
   print "Hello : ", par 
   return

İçe Aktarma Beyanı

Python kaynak dosyası bir modül olarak kullanılabilir. importdiğer paketleri veya üçüncü taraf kitaplıklarını içe aktaran ifade. Kullanılan sözdizimi aşağıdaki gibidir -

import module1[, module2[,... moduleN]

Python yorumlayıcısı import ifadesiyle karşılaştığında, arama yolunda bulunan belirtilen modülü içe aktarır.

Example

Aşağıdaki örneği düşünün.

#!/usr/bin/python

# Import module support
import support

# Now you can call defined function that module as follows
support.print_func("Radhika")

Aşağıdaki çıktıyı üretecektir -

Bir modül, Python koduyla içe aktarılma sayısından bağımsız olarak yalnızca bir kez yüklenir.

Kimden ... ithalat beyanı

Fromöznitelik, bir modülden belirli öznitelikleri geçerli bir ad alanına aktarmaya yardımcı olur. İşte sözdizimi.

from modname import name1[, name2[, ... nameN]]

Example

İşlevi içe aktarmak için fibonacci modülden fibaşağıdaki ifadeyi kullanın.

from fib import fibonacci

Modülleri Yerleştirme

Modül içe aktarılırken, Python yorumlayıcısı aşağıdaki dizileri arar -

  • Geçerli dizin.

  • Modül yoksa, Python her bir dizini PYTHONPATH kabuk değişkeninde arar.

  • Kabuk değişkeni konumu başarısız olursa, Python varsayılan yolu kontrol eder.

Bilişimsel adli tıp, bilgileri almak ve kanıtları daha kolay bir şekilde çıkarmak için Python modüllerini ve üçüncü taraf modülleri kullanır. Daha sonraki bölümler, gerekli çıktıyı elde etmek için modüllerin uygulanmasına odaklanmaktadır.

DShell

DshellPython tabanlı bir ağ adli analiz araç setidir. Bu araç seti, ABD Ordusu Araştırma Laboratuvarı tarafından geliştirilmiştir. Bu açık kaynak araç setinin piyasaya sürülmesi 2014 yılındaydı. Bu araç setinin ana odak noktası, adli soruşturmaları kolaylıkla yapmaktır.

Araç seti, aşağıdaki tabloda listelenen çok sayıda kod çözücüden oluşur.

Sr.No. Kod Çözücü Adı ve Açıklaması
1

dns

Bu, DNS ile ilgili sorguları çıkarmak için kullanılır

2

reservedips

DNS sorunlarının çözümlerini tanımlar

3

large-flows

Ağ akışlarının listesi

4

rip-http

Dosyaları HTTP trafiğinden çıkarmak için kullanılır.

5

Protocols

Standart olmayan protokollerin tanımlanması için kullanılır

ABD Ordusu Laboratuvarı, aşağıdaki bağlantıda GitHub'daki klon deposunu korumuştur -

https://github.com/USArmyResearchLab/Dshell

Klon bir komut dosyasından oluşur install-ubuntu.py () bu araç setinin yüklenmesi için kullanılır.

Kurulum başarılı olduktan sonra, daha sonra kullanılacak yürütülebilir dosyaları ve bağımlılıkları otomatik olarak oluşturacaktır.

Bağımlılıklar aşağıdaki gibidir -

dependencies = { 
   "Crypto": "crypto", 
   "dpkt": "dpkt", 
   "IPy": "ipy", 
   "pcap": "pypcap" 
}

Bu araç seti, genellikle olaylar sırasında veya uyarı sırasında kaydedilen pcap (paket yakalama) dosyalarına karşı kullanılabilir. Bu pcap dosyaları ya Linux platformunda libpcap ya da Windows platformunda WinPcap tarafından oluşturulur.

Scapy

Scapy, ağ trafiğini analiz etmek ve işlemek için kullanılan Python tabanlı bir araçtır. Scapy araç setinin bağlantısı aşağıdadır -

http://www.secdev.org/projects/scapy/

Bu araç seti, paket manipülasyonunu analiz etmek için kullanılır. Çok sayıda protokolün paketlerini çözme ve bunları yakalama konusunda çok yeteneklidir. Scapy, araştırmacıya ağ trafiği hakkında ayrıntılı bir açıklama sağlayarak Dshell araç setinden farklıdır. Bu açıklamalar gerçek zamanlı olarak kaydedilmiştir.

Scapy, üçüncü taraf araçlarını veya işletim sistemi parmak izini kullanarak çizim yapma yeteneğine sahiptir.

Aşağıdaki örneği düşünün.

import scapy, GeoIP #Imports scapy and GeoIP toolkit 
from scapy import * 
geoIp = GeoIP.new(GeoIP.GEOIP_MEMORY_CACHE) #locates the Geo IP address 
def locatePackage(pkg): 
src = pkg.getlayer(IP).src #gets source IP address 
dst = pkg.getlayer(IP).dst #gets destination IP address 
srcCountry = geoIp.country_code_by_addr(src) #gets Country details of source 
dstCountry = geoIp.country_code_by_addr(dst) #gets country details of destination 
print src+"("+srcCountry+") >> "+dst+"("+dstCountry+")\n"

Bu komut dosyası, birbirleriyle iletişim halindeki ağ paketindeki ülke ayrıntılarının ayrıntılı açıklamasını verir.

Yukarıdaki komut dosyası aşağıdaki çıktıyı üretecektir.

Searchingkesinlikle adli soruşturmanın temellerinden biridir. Günümüzde arama, yalnızca delilleri yürüten araştırmacı kadar iyidir.

Mesajdan bir anahtar kelimeyi aramak, bir anahtar kelime yardımıyla bir kanıt aradığımızda, adli tıpta hayati bir rol oynar. Silinen dosyalardakilerle birlikte belirli bir dosyada neyin aranacağı bilgisi hem deneyim hem de bilgi gerektirir.

Python, desteklemek için standart kitaplık modüllerine sahip çeşitli yerleşik mekanizmalara sahiptir searchoperasyon. Araştırmacılar temelde "kim", "ne", "nerede", "ne zaman" gibi sorulara yanıt bulmak için arama işlemini kullanır.

Misal

Aşağıdaki örnekte, iki dizge bildirdik ve ardından, birinci dizenin ikinci dizeyi içerip içermediğini kontrol etmek için find işlevini kullandık.

# Searching a particular word from a message
str1 = "This is a string example for Computational forensics of gathering evidence!";
str2 = "string";

print str1.find(str2)
print str1.find(str2, 10)
print str1.find(str2, 40)

Yukarıdaki komut dosyası aşağıdaki çıktıyı üretecektir.

“find”Python'daki işlev, bir mesaj veya paragrafta bir anahtar kelimeyi aramaya yardımcı olur. Bu, uygun kanıtların toplanmasında kritiktir.

Indexingaslında araştırmacının bir dosyaya tam bir bakış atmasını ve ondan potansiyel kanıt toplamasını sağlar. Kanıt bir dosya, bir disk görüntüsü, bir bellek anlık görüntüsü veya bir ağ izlemesi içinde yer alabilir.

İndeksleme, aşağıdaki gibi zaman alan görevler için zamanı azaltmaya yardımcı olur keyword searching. Adli araştırma ayrıca, dizinin anahtar kelimeleri hızlı bir şekilde bulmak için kullanıldığı etkileşimli arama aşamasını da içerir.

İndeksleme, anahtar kelimeleri sıralı bir listede listelemeye de yardımcı olur.

Misal

Aşağıdaki örnek, nasıl kullanabileceğinizi gösterir. indexing Python'da.

aList = [123, 'sample', 'zara', 'indexing'];

print "Index for sample : ", aList.index('sample')
print "Index for indexing : ", aList.index('indexing')

str1 = "This is sample message for forensic investigation indexing";
str2 = "sample";

print "Index of the character keyword found is " 
print str1.index(str2)

Yukarıdaki komut dosyası aşağıdaki çıktıyı üretecektir.

Mevcut kaynaklardan değerli bilgileri çıkarmak, dijital adli bilimin hayati bir parçasıdır. Uygun kanıtların elde edilmesine yardımcı olduğu için, mevcut tüm bilgilere erişim sağlamak bir soruşturma süreci için gereklidir.

Veri içeren kaynaklar, veritabanları gibi basit veri yapıları veya JPEG görüntüsü gibi karmaşık veri yapıları olabilir. Basit veri yapılarına basit masaüstü araçları kullanılarak kolayca erişilebilirken, karmaşık veri yapılarından bilgi ayıklamak için gelişmiş programlama araçları gerekir.

Python Görüntüleme Kitaplığı

Python Görüntüleme Kitaplığı (PIL), Python yorumlayıcınıza görüntü işleme yetenekleri ekler. Bu kitaplık birçok dosya formatını destekler ve güçlü görüntü işleme ve grafik yetenekleri sağlar. PIL'in kaynak dosyalarını şuradan indirebilirsiniz:http://www.pythonware.com/products/pil/

Aşağıdaki çizim, PIL'deki görüntülerden (karmaşık veri yapıları) veri çıkarmanın tam akış diyagramını gösterir.

Misal

Şimdi, gerçekte nasıl çalıştığını anlamak için bir programlama örneğine sahip olalım.

Step 1 - Bilgiyi almamız gereken aşağıdaki resme sahip olduğumuzu varsayalım.

Step 2- Bu görüntüyü PIL kullanarak açtığımızda, önce çeşitli piksel değerlerini içeren kanıt çıkarmak için gerekli olan noktaları not edecektir. İşte görüntüyü açmak ve piksel değerlerini kaydetmek için kod -

from PIL import Image
im = Image.open('Capture.jpeg', 'r')
pix_val = list(im.getdata())
pix_val_flat = [x for sets in pix_val for x in sets]
print pix_val_flat

Step 3 - Kodumuz görüntünün piksel değerlerini çıkardıktan sonra aşağıdaki çıktıyı üretecektir.

Verilen çıktı, kanıt için hangi verilerin gerekli olduğuna dair daha iyi bir resim sağlayan RGB kombinasyonunun piksel değerlerini temsil eder. Alınan veriler bir dizi biçiminde temsil edilir.

Sabit diskler gibi standart bilgisayar donanımının adli araştırması ve analizi, kararlı bir disipline dönüşmüştür ve standart olmayan donanım veya geçici kanıtları analiz etme tekniklerinin yardımıyla takip edilmektedir.

Akıllı telefonlar dijital araştırmalarda giderek daha fazla kullanılsa da, yine de standart dışı kabul ediliyor.

Adli analiz

Adli soruşturmalar, akıllı telefondan gelen aramalar veya aranan numaralar gibi verileri arar. Metin mesajları, fotoğraflar veya diğer suçlayıcı kanıtlar içerebilir. Çoğu akıllı telefon, parolalar veya alfasayısal karakterler kullanan ekran kilitleme özelliklerine sahiptir.

Burada, Python'un bir akıllı telefondan veri almak için ekran kilitleme şifresini kırmaya nasıl yardımcı olabileceğini göstermek için bir örnek alacağız.

Manuel Muayene

Android, PIN numarası veya alfasayısal şifre ile şifre kilidini destekler. Her iki parolanın sınırı 4 ila 16 basamak veya karakter arasında olmalıdır. Bir akıllı telefonun şifresi Android sisteminde adı verilen özel bir dosyada saklanır.password.key içinde /data/system.

Android, şifrenin tuzlu bir SHA1 hashsum'unu ve MD5 hashsum'unu depolar. Bu şifreler aşağıdaki kodla işlenebilir.

public byte[] passwordToHash(String password) {

   if (password == null) { 
      return null; 
   }

   String algo = null;
   byte[] hashed = null;

   try { 
      byte[] saltedPassword = (password + getSalt()).getBytes(); 
      byte[] sha1 = MessageDigest.getInstance(algo = "SHA-1").digest(saltedPassword);
      byte[] md5 = MessageDigest.getInstance(algo = "MD5").digest(saltedPassword); 
      hashed = (toHex(sha1) + toHex(md5)).getBytes(); 
   } catch (NoSuchAlgorithmException e) { 
      Log.w(TAG, "Failed to encode string because of missing algorithm: " + algo); 
   }
   
   return hashed;
}

Şifrenin yardımıyla şifreyi kırmak mümkün değil dictionary attack karma parola bir salt file. Busalt64 bitlik rasgele bir tamsayının onaltılı gösteriminden oluşan bir dizedir. Erişmek kolaydırsalt kullanarak Rooted Smartphone veya JTAG Adapter.

Köklü Akıllı Telefon

Dosyanın dökümü /data/system/password.key SQLite veritabanında şu altında saklanır: lockscreen.password_saltanahtar. Altındasettings.db, parola saklanır ve değer aşağıdaki ekran görüntüsünde açıkça görülebilir.

JTAG Adaptörü

JTAG (Ortak Test Eylem Grubu) adaptörü olarak bilinen özel bir donanım, salt. Benzer şekilde, birRiff-Box veya a JIG-Adapter aynı işlevsellik için de kullanılabilir.

Riff kutusundan elde edilen bilgileri kullanarak, şifrelenmiş verilerin konumunu, yani salt. Kurallar aşağıdadır -

  • İlişkili "lockscreen.password_salt" dizesini arayın.

  • Bayt, tuzun gerçek genişliğini temsil eder; length.

  • Bu, akıllı telefonların kayıtlı şifresini / pinini almak için aslında aranan uzunluktur.

Bu kurallar dizisi, uygun tuz verilerini elde etmeye yardımcı olur.

Zaman senkronizasyonu için en yaygın kullanılan ve yaygın bir uygulama olarak kabul edilen protokol, Ağ Zaman Protokolü (NTP) aracılığıyla yapılır.

NTP, belirli bir zaman kaynağı ile senkronize etmek isteyen sunucu ve istemci arasındaki paketleri iletmek için minimum süreyi kullanan Kullanıcı Datagram Protokolünü (UDP) kullanır.

Ağ Zaman Protokolünün özellikleri aşağıdaki gibidir -

  • Varsayılan sunucu bağlantı noktası 123'tür.

  • Bu protokol, ulusal laboratuvarlara senkronize edilmiş birçok erişilebilir zaman sunucusundan oluşur.

  • NTP protokol standardı IETF tarafından yönetilir ve Önerilen Standart, "Ağ Zaman Protokolü Sürüm 4: Protokol ve Algoritmalar Spesifikasyonu" [NTP RFC] başlıklı RFC 5905'tir

  • İşletim sistemleri, programlar ve uygulamalar, zamanı uygun bir şekilde senkronize etmek için NTP kullanır.

Bu bölümde, üçüncü parti Python Library ntplib'den mümkün olan Python ile NTP kullanımına odaklanacağız. Bu kitaplık, sonuçları yerel sistem saatimle karşılaştıran ağır işleri verimli bir şekilde gerçekleştirir.

NTP Kitaplığını Kurmak

ntplib adresinden indirilebilir https://pypi.python.org/pypi/ntplib/ aşağıdaki şekilde gösterildiği gibi.

Kitaplık, NTP protokol alanlarını çevirebilen yöntemler yardımıyla NTP sunucularına basit bir arayüz sağlar. Bu, artık saniyeler gibi diğer anahtar değerlere erişmeye yardımcı olur.

Aşağıdaki Python programı, NTP kullanımının anlaşılmasına yardımcı olur.

import ntplib
import time

NIST = 'nist1-macon.macon.ga.us'
ntp = ntplib.NTPClient()
ntpResponse = ntp.request(NIST)

if (ntpResponse):
   now = time.time()
   diff = now-ntpResponse.tx_time
   print diff;

Yukarıdaki program aşağıdaki çıktıyı üretecektir.

Zamandaki fark yukarıdaki programda hesaplanır. Bu hesaplamalar adli soruşturmalarda yardımcı olur. Elde edilen ağ verileri, sabit sürücüde bulunan verilerin analizinden temelde farklıdır.

Saat dilimlerindeki fark veya doğru saat dilimlerinin elde edilmesi, bu protokol aracılığıyla mesajların yakalanması için kanıtların toplanmasına yardımcı olabilir.

Adli tıp uzmanları, normal olarak adli suçlardaki dijital kanıt dağlarını analiz etmek için dijital çözümler uygulamayı zor buluyorlar. Çoğu dijital araştırma aracı tek iş parçacıklıdır ve aynı anda yalnızca bir komutu yürütebilirler.

Bu bölümde, ortak adli zorluklarla ilgili olabilecek Python'un çoklu işlem yeteneklerine odaklanacağız.

Çoklu işlem

Çoklu işlem, bilgisayar sisteminin birden fazla işlemi destekleme yeteneği olarak tanımlanır. Çoklu işlemeyi destekleyen işletim sistemleri, birkaç programın aynı anda çalışmasını sağlar.

Çeşitli çoklu işlem türleri vardır. symmetric ve asymmetric processing. Aşağıdaki diyagram, genellikle adli soruşturmada izlenen simetrik bir çoklu işlem sistemine ilişkindir.

Misal

Aşağıdaki kod, Python programlamasında farklı işlemlerin dahili olarak nasıl listelendiğini gösterir.

import random
import multiprocessing

def list_append(count, id, out_list): 
   #appends the count of number of processes which takes place at a time
   for i in range(count):
      out_list.append(random.random())
         
   if __name__ == "__main__": 
      size = 999  
      procs = 2
      # Create a list of jobs and then iterate through 
      # the number of processes appending each process to 
      # the job list  
      jobs = []
         
   for i in range(0, procs): 
      out_list = list() #list of processes 
      process1 = multiprocessing.Process(
         target = list_append, args = (size, i, out_list))

      # appends the list of processes
      jobs.append(process)

   # Calculate the random number of processes
   for j in jobs:
      j.start()  #initiate the process

   # After the processes have finished execution
   for j in jobs:
      j.join()
      print "List processing complete."

Burada işlev list_append() sistemdeki süreçlerin listelenmesine yardımcı olur.

Çıktı

Kodumuz aşağıdaki çıktıyı üretecektir -

Bu bölümde, uçucu belleği araştırmaya odaklanacağız. Volatility, aşağıdaki platformlarda uygulanabilen Python tabanlı bir adli tıp çerçevesi: Android ve Linux.

Uçucu Bellek

Geçici bellek, sistemin gücü kapatıldığında veya kesintiye uğradığında içeriğin silindiği bir depolama türüdür. RAM, geçici belleğin en iyi örneğidir. Bu, sabit sürücü gibi geçici olmayan bir belleğe kaydedilmemiş bir belge üzerinde çalışıyorsanız ve bilgisayarın gücü kesilmişse, tüm verilerin kaybolacağı anlamına gelir.

Genel olarak, geçici bellek adli tıp, diğer adli tıp araştırmalarıyla aynı modeli izler -

  • Araştırmanın hedefini seçme
  • Adli verileri edinme
  • Adli analiz

Basit volatility plugins Android toplayıcılar için kullanılan RAM dumpanaliz için. Analiz için RAM dökümü toplandıktan sonra, RAM'de kötü amaçlı yazılım avına başlamak önemlidir.

YARA Kuralları

YARA, sağlam bir dil sağlayan, Perl tabanlı Normal İfadeler ile uyumlu olan ve şüpheli dosyaları / dizinleri ve eşleştirme dizelerini incelemek için kullanılan popüler bir araçtır.

Bu bölümde, model eşleştirme uygulamasına göre YARA'yı kullanacağız ve bunları şebeke gücü ile birleştireceğiz. Tüm süreç adli analiz için faydalı olacaktır.

Misal

Aşağıdaki kodu düşünün. Bu kod, kodun çıkarılmasına yardımcı olur.

import operator
import os
import sys

sys.path.insert(0, os.getcwd())
import plyara.interp as interp

# Plyara is a script that lexes and parses a file consisting of one more Yara
# rules into a python dictionary representation.
if __name__ == '__main__': 
   file_to_analyze = sys.argv[1] 
   rulesDict = interp.parseString(open(file_to_analyze).read()) 
   authors = {} 
   imps = {} 
   meta_keys = {} 
   max_strings = [] 
   max_string_len = 0 
   tags = {} 
   rule_count = 0  

   for rule in rulesDict: 
      rule_count += 1  
   
   # Imports 
   if 'imports' in rule: 
      for imp in rule['imports']: 
         imp = imp.replace('"','') 
         
         if imp in imps: 
            imps[imp] += 1 
         else: 
            imps[imp] = 1  
   # Tags 
   if 'tags' in rule: 
      for tag in rule['tags']: 
         if tag in tags: 
            tags[tag] += 1 
         else: 
            tags[tag] = 1
            
   # Metadata 
   if 'metadata' in rule: 
      for key in rule['metadata']: 
         if key in meta_keys: 
            meta_keys[key] += 1
         else: 
            meta_keys[key] = 1 
         
         if key in ['Author', 'author']: 
            if rule['metadata'][key] in authors: 
               authors[rule['metadata'][key]] += 1 
            else: 
               authors[rule['metadata'][key]] = 1  

   #Strings 
   if 'strings' in rule: 
      for strr in rule['strings']: 
         if len(strr['value']) > max_string_len: 
            max_string_len = len(strr['value']) 
            max_strings = [(rule['rule_name'], strr['name'], strr['value'])] 
         elif len(strr['value']) == max_string_len: 
            max_strings.append((rule['rule_name'], strr['key'], strr['value']))  
   
   print("\nThe number of rules implemented" + str(rule_count))
   ordered_meta_keys = sorted(meta_keys.items(), key = operator.itemgetter(1),
      reverse = True)
   ordered_authors = sorted(authors.items(), key = operator.itemgetter(1), 
      reverse = True)
   ordered_imps = sorted(imps.items(), key = operator.itemgetter(1), reverse = True)
   ordered_tags = sorted(tags.items(), key = operator.itemgetter(1), reverse = True)

Yukarıdaki kod aşağıdaki çıktıyı üretecektir.

Uygulanan YARA kurallarının sayısı, şüpheli dosyaların daha iyi bir resmini vermeye yardımcı olur. Dolaylı olarak, şüpheli dosyaların listesi adli tıp için uygun bilgilerin toplanmasına yardımcı olur.

Github'daki kaynak kodu aşağıdadır: https://github.com/radhikascs/Python_yara

Dijital araştırmaların en büyük endişesi, önemli kanıtları veya verileri şifreleme veya başka bir formatla güvence altına almaktır. Temel örnek şifreleri saklamaktır. Bu nedenle, bu değerli verilerin güvenliğini sağlamak için dijital adli uygulama için Linux işletim sisteminin kullanımını anlamak gerekir.

Tüm yerel kullanıcılar için bilgiler çoğunlukla aşağıdaki iki dosyada saklanır -

  • /etc/passwd
  • etc/shadow

İlki, tüm şifreleri saklayan zorunludur. İkinci dosya isteğe bağlıdır ve karma şifreler dahil olmak üzere yerel kullanıcılar hakkındaki bilgileri depolar.

Parola bilgilerinin her kullanıcı tarafından okunabilen bir dosyada saklanmasına ilişkin güvenlik sorunu ile ilgili sorunlar ortaya çıkar. Bu nedenle, karma şifreler şurada saklanır:/etc/passwd, içeriğin özel bir değerle değiştirildiği "x".

Karşılık gelen hash'lerin içinde aranmalıdır /etc/shadow. İçindeki ayarlar/etc/passwd ayrıntıları geçersiz kılabilir /etc/shadow.

Linux'taki her iki metin dosyası satır başına bir giriş içerir ve giriş, iki nokta üst üste ile ayrılmış birden çok alandan oluşur.

Formatı /etc/passwd aşağıdaki gibidir -

Sr.No. Alan Adı ve Açıklaması
1

Username

Bu alan, insan tarafından okunabilir formatın niteliklerinden oluşur

2

Password hash

Posix crypt fonksiyonuna göre şifrelenmiş formdaki şifreden oluşur.

Hash şifresi olarak kaydedilmişse empty, ardından ilgili kullanıcının sistemde oturum açmak için herhangi bir şifreye ihtiyacı olmayacaktır. Bu alan, ünlem işareti gibi karma algoritma tarafından oluşturulamayan bir değer içeriyorsa, kullanıcı bir parola kullanarak oturum açamaz.

Kilitli bir parolaya sahip bir kullanıcı, SSH anahtarları gibi diğer kimlik doğrulama mekanizmalarını kullanarak yine de oturum açabilir. Daha önce belirtildiği gibi, özel değer "x", şifre karmasının gölge dosyada bulunması gerektiği anlamına gelir.

password hash aşağıdakileri içerir -

  • Encrypted salt - encrypted salt ekran kilitlerinin, pinlerinin ve parolaların korunmasına yardımcı olur.

  • Numerical user ID- Bu alan, kullanıcının kimliğini gösterir. Linux çekirdeği bu kullanıcı kimliğini sisteme atar.

  • Numerical group ID - Bu alan, kullanıcının birincil grubunu ifade eder.

  • Home directory - Yeni işlemler bu dizine referansla başlatılır.

  • Command shell - Bu isteğe bağlı alan, sisteme başarılı bir şekilde oturum açıldıktan sonra başlatılacak olan varsayılan kabuğu belirtir.

Dijital adli tıp, bir kanıtın izlenmesiyle ilgili bilgileri toplamayı içerir. Bu nedenle, kullanıcı kimlikleri kayıtların korunmasında yararlıdır.

Python kullanılarak, tüm bu bilgiler Analiz Göstergeleri için otomatik olarak analiz edilebilir ve son sistem etkinliği yeniden yapılandırılabilir. İzleme, Linux Shell'in uygulanmasıyla basit ve kolaydır.

Linux ile Python Programlama

Misal

import sys
import hashlib
import getpass

def main(argv):
   print '\nUser & Password Storage Program in Linux for forensic detection v.01\n' 
  
   if raw_input('The file ' + sys.argv[1] + ' will be erased or overwrite if 
         it exists .\nDo you wish to continue (Y/n): ') not in ('Y','y') : 
   sys.exit('\nChanges were not recorded\n') 
  
   user_name = raw_input('Please Enter a User Name: ')
   password = hashlib.sha224(getpass.getpass('Please Enter a Password:')).hexdigest()
   
   # Passwords which are hashed  
   try: 
      file_conn = open(sys.argv[1],'w') 
      file_conn.write(user_name + '\n') 
      file_conn.write(password + '\n') 
      file_conn.close() 
   except: 
      sys.exit('There was a problem writing the passwords to file!')
      
if __name__ == "__main__": 
   main(sys.argv[1:])

Çıktı

Parola, onaltılık biçimde saklanır. pass_db.txtaşağıdaki ekran görüntüsünde gösterildiği gibi. Metin dosyaları, hesaplamalı adli tıpta daha sonra kullanılmak üzere kaydedilir.

Tehlike Göstergeleri (IOC), "sistem günlük girişlerinde veya dosyalarında bulunan ve bir sistem veya ağdaki olası kötü niyetli etkinlikleri tanımlayan verileri içeren adli veri parçaları" olarak tanımlanır.

Kuruluşlar, IOC'yi izleyerek saldırıları tespit edebilir ve bu tür ihlallerin meydana gelmesini önlemek için hızlı hareket edebilir veya saldırıları önceki aşamalarda durdurarak zararları sınırlayabilir.

Adli eserlerin sorgulanmasına izin veren bazı kullanım durumları vardır.

  • MD5'e göre belirli bir dosya aranıyor
  • Aslında bellekte depolanan belirli bir varlığı arama
  • Windows kayıt defterinde saklanan belirli girdi veya girdi kümesi

Yukarıdakilerin tümünün kombinasyonu, yapay nesnelerin aranmasında daha iyi sonuçlar sağlar. Yukarıda belirtildiği gibi, Windows kayıt defteri, IOC oluşturmada ve sürdürmede, adli bilişimde doğrudan yardımcı olan mükemmel bir platform sağlar.

Metodoloji

  • Dosya sistemindeki ve özellikle şimdilik Windows kayıt defterindeki konumları arayın.

  • Adli tıp araçlarıyla tasarlanmış eserleri arayın.

  • Olumsuz aktivitelerin belirtilerini arayın.

Araştırmacı Yaşam Döngüsü

Investigative Life Cycle, IOC'yi takip eder ve bir kayıt defterindeki belirli girdileri arar.

  • Stage 1: Initial Evidence- Uzlaşmanın kanıtı, bir ana bilgisayarda veya ağda tespit edilir. Müdahale ekipleri, somut bir adli gösterge olan kesin çözümü araştıracak ve belirleyecektir.

  • Stage 2: Create IOCs for Host & Network- Toplanan verileri takiben, IOC oluşturulur ve bu, Windows kayıt defteri ile kolayca mümkündür. OpenIOC'nin esnekliği, bir Göstergenin nasıl üretilebileceğine dair sınırsız sayıda permütasyon sağlar.

  • Stage 3: Deploy IOCs in the Enterprise - Belirtilen IOC oluşturulduktan sonra, araştırmacı bu teknolojileri Windows kayıtlarındaki API yardımıyla konuşlandıracaktır.

  • Stage 4: Identification of Suspects- IOC'nin konuşlandırılması, şüphelilerin normal bir şekilde tespit edilmesine yardımcı olur. Ek sistemler bile tanımlanacaktır.

  • Stage 5: Collect and Analyze Evidence - Şüphelilerin aleyhine deliller toplanarak buna göre analiz edilir.

  • Stage 6: Refine & Create New IOCs - Araştırma ekibi, kuruluşta bulunan kanıtlara ve verilere ve ek istihbarata dayanarak yeni IOC'ler oluşturabilir ve döngülerini iyileştirmeye devam edebilir.

Aşağıdaki çizim, Araştırma Yaşam Döngüsü aşamalarını göstermektedir -

Cloud computingİnternet üzerinden kullanıcılara sağlanan barındırılan hizmetlerin bir koleksiyonu olarak tanımlanabilir. Kuruluşların, Sanal Makineler (VM'ler), depolama veya bir yardımcı program olarak bir uygulama içeren kaynağı tüketmesine ve hatta hesaplamasına olanak tanır.

Python programlama dilinde uygulama oluşturmanın en önemli avantajlarından biri, uygulamaları hemen hemen her platformda dağıtma yeteneğini içermesidir. cloudyanı sıra. Python'un bulut sunucularında yürütülebileceği ve ayrıca masaüstü, tablet veya akıllı telefon gibi kullanışlı cihazlarda da başlatılabileceği anlamına gelir.

İlginç perspektiflerden biri, nesilden nesile bir bulut tabanı oluşturmaktır. Rainbow tables. Bazı hususlar gerektiren uygulamanın tek ve çok işlemli sürümlerini entegre etmeye yardımcı olur.

Pi Bulut

Pi Cloud, Python programlama dilini Amazon Web Servislerinin bilgi işlem gücüyle entegre eden bulut bilişim platformudur.

Pi bulutlarını uygulama örneğine bir göz atalım. rainbow tables.

Gökkuşağı Masaları

Bir rainbow table belirli bir karma algoritmaya özgü şifrelenmiş parolaların olası tüm düz metin permütasyonlarının bir listesi olarak tanımlanır.

  • Gökkuşağı tabloları, karma şifrelerin bir listesini oluşturan standart bir modeli izler.

  • Şifrelenecek karakterleri veya düz metin parolaları içeren parolalar oluşturmak için bir metin dosyası kullanılır.

  • Dosya, depolanacak ana işlevi çağıran Pi bulutu tarafından kullanılır.

  • Hashing uygulanmış parolaların çıktısı da metin dosyasında saklanır.

Bu algoritma, şifreleri veri tabanına kaydetmek ve bulut sisteminde bir yedek depolama alanına sahip olmak için de kullanılabilir.

Aşağıdaki yerleşik program, bir metin dosyasında şifrelenmiş parolaların bir listesini oluşturur.

Misal

import os
import random
import hashlib
import string
import enchant    #Rainbow tables with enchant 
import cloud      #importing pi-cloud

def randomword(length): 
   return ''.join(random.choice(string.lowercase) for i in range(length))

print('Author- Radhika Subramanian')

def mainroutine():
   engdict = enchant.Dict("en_US")
   fileb = open("password.txt","a+")

   # Capture the values from the text file named password
   while True:
      randomword0 = randomword(6)
      if engdict.check(randomword0) == True:
         randomkey0 = randomword0+str(random.randint(0,99))
      elif engdict.check(randomword0) == False:
         englist = engdict.suggest(randomword0)
         if len(englist) > 0:
            randomkey0 = englist[0]+str(random.randint(0,99))
         else:
            randomkey0 = randomword0+str(random.randint(0,99))

      randomword3 = randomword(5)
      if engdict.check(randomword3) == True:
         randomkey3 = randomword3+str(random.randint(0,99))
      elif engdict.check(randomword3) == False:
         englist = engdict.suggest(randomword3)
         if len(englist) > 0:
            randomkey3 = englist[0]+str(random.randint(0,99))
         else:
            randomkey3 = randomword3+str(random.randint(0,99))
      
      if 'randomkey0' and 'randomkey3' and 'randomkey1' in locals():
         whasher0 = hashlib.new("md5")
         whasher0.update(randomkey0)
         whasher3 = hashlib.new("md5")
         whasher3.update(randomkey3)
         whasher1 = hashlib.new("md5")
         whasher1.update(randomkey1)
         print(randomkey0+" + "+str(whasher0.hexdigest())+"\n")
         print(randomkey3+" + "+str(whasher3.hexdigest())+"\n")
         print(randomkey1+" + "+str(whasher1.hexdigest())+"\n")
         fileb.write(randomkey0+" + "+str(whasher0.hexdigest())+"\n") 
         fileb.write(randomkey3+" + "+str(whasher3.hexdigest())+"\n")
         fileb.write(randomkey1+" + "+str(whasher1.hexdigest())+"\n")

jid = cloud.call(randomword)  #square(3) evaluated on PiCloud
cloud.result(jid)
print('Value added to cloud')
print('Password added')
mainroutine()

Çıktı

Bu kod aşağıdaki çıktıyı üretecektir -

Şifreler, aşağıdaki ekran görüntüsünde gösterildiği gibi görünen metin dosyalarında saklanır.