Python Forensics - Panduan Cepat

Python adalah bahasa pemrograman tujuan umum dengan kode yang mudah dibaca dan dapat dengan mudah dipahami oleh pengembang profesional maupun pemrogram pemula. Python terdiri dari banyak pustaka berguna yang dapat digunakan dengan kerangka kerja tumpukan apa pun. Banyak laboratorium mengandalkan Python untuk membangun model dasar untuk prediksi dan menjalankan eksperimen. Ini juga membantu untuk mengontrol sistem operasional kritis.

Python memiliki kemampuan bawaan untuk mendukung investigasi digital dan melindungi integritas bukti selama investigasi. Dalam tutorial ini, kami akan menjelaskan konsep dasar penerapan Python dalam digital atau forensik komputasi.

Apa itu Forensik Komputasi?

Forensik Komputasi adalah domain penelitian yang muncul. Ini berkaitan dengan pemecahan masalah forensik menggunakan metode digital. Ini menggunakan ilmu komputasi untuk mempelajari bukti digital.

Forensik Komputasi mencakup berbagai subjek yang memiliki objek, zat, dan proses yang diselidiki, terutama berdasarkan bukti pola, seperti tanda alat, sidik jari, cetakan sepatu, dokumen, dll., Dan juga mencakup pola fisiologis dan perilaku, DNA, dan bukti digital di TKP.

Diagram berikut menunjukkan berbagai mata pelajaran yang tercakup dalam Forensik Komputasi.

Forensik komputasi diimplementasikan dengan bantuan beberapa algoritma. Algoritma ini digunakan untuk pemrosesan sinyal dan gambar, visi komputer dan grafik. Ini juga mencakup penambangan data, pembelajaran mesin, dan robotika.

Forensik komputasi melibatkan beragam metode digital. Solusi terbaik untuk memudahkan semua metode digital dalam forensik adalah dengan menggunakan bahasa pemrograman tujuan umum seperti Python.

Karena kita membutuhkan Python untuk semua aktivitas forensik komputasi, mari kita lanjutkan langkah demi langkah dan memahami cara menginstalnya.

Step 1 - Pergi ke https://www.python.org/downloads/ dan unduh file instalasi Python sesuai dengan Sistem Operasi yang Anda miliki di sistem Anda.

Step 2 - Setelah mengunduh paket / penginstal, klik file exe untuk memulai proses instalasi.

Anda akan melihat layar berikut setelah penginstalan selesai.

Step 3 - Langkah selanjutnya adalah mengatur variabel lingkungan Python di sistem Anda.

Step 4 - Setelah variabel lingkungan disetel, ketik perintah "python" pada prompt perintah untuk memverifikasi apakah penginstalan berhasil atau tidak.

Jika instalasi berhasil, maka Anda akan mendapatkan output berikut di konsol.

Kode yang ditulis dengan Python terlihat sangat mirip dengan kode yang ditulis dalam bahasa pemrograman konvensional lainnya seperti C atau Pascal. Juga dikatakan bahwa sintaksis Python banyak dipinjam dari C. Ini mencakup banyak kata kunci Python yang mirip dengan bahasa C.

Python menyertakan pernyataan bersyarat dan perulangan, yang dapat digunakan untuk mengekstrak data secara akurat untuk forensik. Untuk kontrol aliran, ini menyediakanif/else, while, dan tingkat tinggi for pernyataan yang mengulang objek "iterable".

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

Area utama di mana Python berbeda dari bahasa pemrograman lain adalah dalam penggunaannya dynamic typing. Ini menggunakan nama variabel yang merujuk ke objek. Variabel ini tidak perlu dideklarasikan.

Jenis Data

Python menyertakan sekumpulan tipe data bawaan seperti string, Boolean, angka, dll. Ada juga tipe yang tidak dapat diubah, yang berarti nilai yang tidak dapat diubah selama eksekusi.

Python juga memiliki tipe data bawaan gabungan yang mencakup tuples yang merupakan array yang tidak dapat diubah, lists, dan dictionariesyang merupakan tabel hash. Semuanya digunakan dalam forensik digital untuk menyimpan nilai sambil mengumpulkan bukti.

Modul dan Paket pihak ketiga

Python mendukung grup modul dan / atau paket yang juga disebut third-party modules (kode terkait dikelompokkan bersama dalam satu file sumber) digunakan untuk mengatur program.

Python menyertakan pustaka standar yang luas, yang merupakan salah satu alasan utama popularitasnya dalam forensik komputasi.

Siklus Hidup Kode Python

  • Pada awalnya, ketika Anda menjalankan kode Python, penerjemah memeriksa kode untuk kesalahan sintaks. Jika interpreter menemukan kesalahan sintaks, maka mereka akan segera ditampilkan sebagai pesan kesalahan.

  • Jika tidak ada kesalahan sintaks, maka kode dikompilasi untuk menghasilkan file bytecode dan dikirim ke PVM (Python Virtual Machine).

  • PVM memeriksa bytecode untuk setiap runtime atau kesalahan logis. Jika PVM menemukan error runtime, maka error tersebut akan segera dilaporkan sebagai pesan error.

  • Jika bytecode bebas dari kesalahan, maka kode akan diproses dan Anda mendapatkan hasilnya.

Ilustrasi berikut menunjukkan secara grafis bagaimana kode Python diinterpretasikan pertama kali untuk menghasilkan bytecode dan bagaimana bytecode diproses oleh PVM untuk menghasilkan output.

Untuk membuat aplikasi sesuai dengan pedoman Forensik, penting untuk memahami dan mengikuti konvensi dan pola penamaannya.

Konvensi Penamaan

Selama pengembangan aplikasi forensik Python, aturan dan konvensi yang harus diikuti dijelaskan dalam tabel berikut.

Konstanta Huruf besar dengan pemisahan garis bawah SUHU TINGGI
Nama variabel lokal Huruf kecil dengan tutup bergelombang (garis bawah adalah opsional) currentTemperature
Nama variabel global Awalan gl huruf kecil dengan tutup bergelombang (garis bawah adalah opsional) gl_maximumRecordedTemperature
Nama fungsi Huruf besar dengan tutup bergelombang (garis bawah opsional) dengan suara aktif ConvertFarenheitToCentigrade (...)
Nama objek Awali ob_ huruf kecil dengan huruf besar tidak rata ob_myTempRecorder
Modul Garis bawah diikuti oleh huruf kecil dengan tutup bergelombang _tempRecorder
Nama kelas Awali class_ lalu tutup bergelombang dan pertahankan singkat class_TempSystem

Mari kita ambil skenario untuk memahami pentingnya konvensi penamaan di Forensik Komputasi. Misalkan kita memiliki algoritma hashing yang biasanya digunakan untuk mengenkripsi data. Algoritme hashing satu arah mengambil input sebagai aliran data biner; ini bisa berupa kata sandi, file, data biner, atau data digital apa pun. Algoritma hashing kemudian menghasilkan filemessage digest (md) sehubungan dengan data yang diterima di input.

Secara praktis tidak mungkin untuk membuat input biner baru yang akan menghasilkan intisari pesan tertentu. Bahkan satu bit data masukan biner, jika diubah, akan menghasilkan pesan unik, yang berbeda dari yang sebelumnya.

Contoh

Lihatlah program contoh berikut yang mengikuti konvensi yang disebutkan di atas.

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

Program di atas menghasilkan keluaran sebagai berikut.

Dalam program ini, skrip Python menerima input (nama lengkap Anda) dan mengubahnya sesuai dengan algoritma hashing md5. Ini mengenkripsi data dan mengamankan informasi, jika diperlukan. Sesuai pedoman forensik, nama bukti atau bukti lain dapat diamankan dalam pola ini.

SEBUAH hash functiondidefinisikan sebagai fungsi yang memetakan sejumlah besar data ke nilai tetap dengan panjang tertentu. Fungsi ini memastikan bahwa input yang sama menghasilkan output yang sama, yang sebenarnya didefinisikan sebagai jumlah hash. Hash sum mencakup karakteristik dengan informasi spesifik.

Fungsi ini secara praktis tidak mungkin dikembalikan. Dengan demikian, serangan pihak ketiga seperti serangan brute force secara praktis tidak mungkin. Juga, algoritma semacam ini disebutone-way cryptographic algorithm.

Fungsi hash kriptografi yang ideal memiliki empat properti utama -

  • Harus mudah untuk menghitung nilai hash untuk setiap masukan yang diberikan.
  • Itu harus tidak layak untuk menghasilkan masukan asli dari hashnya.
  • Harus tidak mungkin mengubah input tanpa mengubah hash.
  • Pasti tidak layak untuk menemukan dua masukan berbeda dengan hash yang sama.

Contoh

Pertimbangkan contoh berikut yang membantu dalam mencocokkan kata sandi menggunakan karakter dalam format heksadesimal.

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')

Diagram alir

Kami telah menjelaskan logika program ini dengan bantuan diagram alur berikut -

Keluaran

Kode kami akan menghasilkan keluaran berikut -

Kata sandi yang dimasukkan dua kali cocok dengan fungsi hash. Ini memastikan bahwa kata sandi yang dimasukkan dua kali akurat, yang membantu mengumpulkan data yang berguna dan menyimpannya dalam format terenkripsi.

Dalam bab ini, kita akan belajar tentang memecahkan data teks yang diambil selama analisis dan bukti.

Teks biasa dalam kriptografi adalah teks normal yang dapat dibaca, seperti pesan. Teks sandi, di sisi lain, adalah keluaran dari algoritma enkripsi yang diambil setelah Anda memasukkan teks biasa.

Algoritma sederhana tentang bagaimana kita mengubah pesan teks biasa menjadi teks sandi adalah sandi Caesar, ditemukan oleh Julius Caesar untuk menjaga rahasia teks biasa dari musuh-musuhnya. Sandi ini melibatkan pengalihan setiap huruf dalam pesan "maju" sebanyak tiga tempat dalam alfabet.

Berikut adalah ilustrasi demo.

a → D

b → E

c → F

....

w → Z

x → A

y → B

z → C

Contoh

Pesan yang dimasukkan saat Anda menjalankan skrip Python memberikan semua kemungkinan karakter, yang digunakan untuk bukti pola.

Jenis bukti pola yang digunakan adalah sebagai berikut -

  • Jejak dan Tanda Ban
  • Impressions
  • Fingerprints

Setiap data biometrik terdiri dari data vektor, yang perlu kita pecahkan untuk mengumpulkan bukti lengkap.

Kode Python berikut menunjukkan bagaimana Anda dapat menghasilkan teks sandi dari teks biasa -

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:])

Keluaran

Sekarang, periksa keluaran kode ini. Saat kita memasukkan teks sederhana "Radhika", program akan menghasilkan teks sandi berikut.

Virtualizationadalah proses meniru sistem TI seperti server, workstation, jaringan, dan penyimpanan. Ini tidak lain adalah pembuatan versi virtual daripada versi sebenarnya dari sistem operasi apa pun, server, perangkat penyimpanan, atau proses jaringan.

Komponen utama yang membantu dalam emulasi perangkat keras virtual didefinisikan sebagai a hyper-visor.

Gambar berikut menjelaskan dua jenis utama virtualisasi sistem yang digunakan.

Virtualisasi telah digunakan dalam forensik komputasi dalam berbagai cara. Ini membantu analis sedemikian rupa sehingga workstation dapat digunakan dalam status tervalidasi untuk setiap investigasi. Pemulihan data dimungkinkan dengan melampirkan gambar dd dari drive sebagai drive sekunder pada mesin virtual khususnya. Mesin yang sama dapat digunakan sebagai perangkat lunak pemulihan untuk mengumpulkan bukti.

Contoh berikut membantu dalam memahami pembuatan mesin virtual dengan bantuan bahasa pemrograman Python.

Step 1 - Biarkan mesin virtual diberi nama 'dummy1'.

Setiap mesin virtual harus memiliki memori 512 MB dalam kapasitas minimum, dinyatakan dalam byte.

vm_memory = 512 * 1024 * 1024

Step 2 - Mesin virtual harus dipasang ke cluster default, yang telah dihitung.

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

Step 3 - Mesin virtual harus melakukan booting dari drive hard disk virtual.

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

Semua opsi digabungkan menjadi objek parameter mesin virtual, sebelum menggunakan metode add dari koleksi vms ke mesin virtual.

Contoh

Berikut ini adalah skrip Python lengkap untuk menambahkan mesin virtual.

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

Keluaran

Kode kami akan menghasilkan keluaran berikut -

Skenario lingkungan jaringan modern sedemikian rupa sehingga penyelidikan bisa menjadi rumit karena sejumlah kesulitan. Hal ini dapat terjadi baik Anda menanggapi dukungan pelanggaran, menyelidiki aktivitas orang dalam, melakukan penilaian terkait kerentanan, atau memvalidasi kepatuhan peraturan.

Konsep Pemrograman Jaringan

Definisi berikut digunakan dalam pemrograman jaringan.

  • Client - Klien adalah bagian dari arsitektur client-server dari pemrograman jaringan yang berjalan pada komputer pribadi dan workstation.

  • Server - Server adalah bagian dari arsitektur client-server yang menyediakan layanan ke program komputer lain di komputer yang sama atau komputer lain.

  • WebSockets- WebSockets menyediakan protokol antara klien dan server, yang berjalan melalui koneksi TCP persisten. Melalui ini, pesan dua arah dapat dikirim antara koneksi soket TCP (secara bersamaan).

WebSockets hadir setelah banyak teknologi lain yang memungkinkan server untuk mengirim informasi ke klien. Selain menggoyangkan Upgrade Header, WebSockets tidak bergantung pada HTTP.

Protokol ini digunakan untuk memvalidasi informasi yang dikirim atau diterima oleh pengguna pihak ketiga. Karena enkripsi adalah salah satu metode yang digunakan untuk mengamankan pesan, penting juga untuk mengamankan saluran yang melaluinya pesan telah ditransfer.

Pertimbangkan program Python berikut, yang digunakan klien untuk handshaking.

Contoh

# 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()

Keluaran

Ini akan menghasilkan keluaran sebagai berikut -

Server yang menerima permintaan saluran komunikasi akan menyertakan skrip berikut.

# 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()

Klien dan server yang dibuat dengan bantuan pemrograman Python mendengarkan nomor host. Awalnya, klien mengirimkan permintaan ke server sehubungan dengan data yang dikirim dalam nomor host dan server menerima permintaan tersebut dan segera mengirimkan tanggapan. Dengan cara ini, kita dapat memiliki saluran komunikasi yang aman.

Modul dalam program Python membantu mengatur kode. Mereka membantu dalam mengelompokkan kode terkait menjadi satu modul, yang membuatnya lebih mudah untuk dipahami dan digunakan. Ini mencakup nilai bernama sewenang-wenang, yang dapat digunakan untuk mengikat dan referensi. Dengan kata sederhana, modul adalah file yang terdiri dari kode Python yang mencakup fungsi, kelas, dan variabel.

Kode Python untuk modul (file) disimpan dengan .py ekstensi yang dikompilasi jika diperlukan.

Example

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

Pernyataan Impor

File sumber Python dapat digunakan sebagai modul dengan menjalankan file importpernyataan yang mengimpor paket lain atau pustaka pihak ketiga. Sintaks yang digunakan adalah sebagai berikut -

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

Ketika interpreter Python menemukan pernyataan import, ia mengimpor modul yang ditentukan yang ada di jalur pencarian.

Example

Perhatikan contoh berikut.

#!/usr/bin/python

# Import module support
import support

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

Ini akan menghasilkan keluaran sebagai berikut -

Sebuah modul dimuat hanya sekali, berapa kali pun modul itu diimpor oleh kode Python.

Dari ... pernyataan impor

Fromatribut membantu untuk mengimpor atribut tertentu dari modul ke dalam namespace saat ini. Berikut sintaksnya.

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

Example

Untuk mengimpor fungsi fibonacci dari modul fib, gunakan pernyataan berikut.

from fib import fibonacci

Menemukan Modul

Ketika modul sedang diimpor, interpreter Python mencari urutan berikut -

  • Direktori saat ini.

  • Jika modul tidak ada, Python akan mencari setiap direktori dalam variabel shell PYTHONPATH.

  • Jika lokasi variabel shell gagal, Python memeriksa jalur default.

Forensik komputasi menggunakan modul Python dan modul pihak ketiga untuk mendapatkan informasi dan mengekstrak bukti dengan lebih mudah. Bab selanjutnya fokus pada implementasi modul untuk mendapatkan output yang diperlukan.

DShell

Dshelladalah toolkit analisis forensik jaringan berbasis Python. Perangkat ini dikembangkan oleh Laboratorium Riset Angkatan Darat AS. Rilis toolkit open source ini dilakukan pada tahun 2014. Fokus utama toolkit ini adalah membuat investigasi forensik dengan mudah.

Toolkit ini terdiri dari sejumlah besar decoder yang tercantum dalam tabel berikut.

Sr.No. Nama & Deskripsi Dekoder
1

dns

Ini digunakan untuk mengekstrak kueri terkait DNS

2

reservedips

Mengidentifikasi solusi untuk masalah DNS

3

large-flows

Daftar netflow

4

rip-http

Ini digunakan untuk mengekstrak file dari lalu lintas HTTP

5

Protocols

Digunakan untuk identifikasi protokol non-standar

Laboratorium Angkatan Darat AS telah mempertahankan repositori klon di GitHub di tautan berikut -

https://github.com/USArmyResearchLab/Dshell

Klon terdiri dari skrip install-ubuntu.py () digunakan untuk instalasi toolkit ini.

Setelah penginstalan berhasil, secara otomatis akan membangun executable dan dependensi yang akan digunakan nanti.

Dependensinya adalah sebagai berikut -

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

Toolkit ini dapat digunakan untuk melawan file pcap (pengambilan paket), yang biasanya direkam selama insiden atau selama peringatan. File pcap ini dibuat oleh libpcap di platform Linux atau WinPcap di platform Windows.

Scapy

Scapy adalah alat berbasis Python yang digunakan untuk menganalisis dan memanipulasi lalu lintas jaringan. Berikut ini adalah tautan untuk Scapy toolkit -

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

Toolkit ini digunakan untuk menganalisis manipulasi paket. Ia sangat mampu untuk memecahkan kode paket dari banyak protokol dan menangkapnya. Scapy berbeda dari toolkit Dshell dengan memberikan penjelasan mendetail kepada penyelidik tentang lalu lintas jaringan. Deskripsi ini telah direkam secara real time.

Scapy memiliki kemampuan untuk membuat plot menggunakan alat pihak ketiga atau sidik jari OS.

Perhatikan contoh berikut.

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"

Skrip ini memberikan penjelasan rinci tentang detail negara dalam paket jaringan, yang berkomunikasi satu sama lain.

Skrip di atas akan menghasilkan keluaran sebagai berikut.

Searchingmerupakan salah satu pilar investigasi forensik. Saat ini, penggeledahan hanya sebaik penyidik ​​yang menjalankan alat bukti.

Mencari kata kunci dari pesan memainkan peran penting dalam forensik, saat kami mencari bukti dengan bantuan kata kunci. Pengetahuan tentang apa yang akan dicari dalam file tertentu bersama dengan yang ada di file yang dihapus membutuhkan pengalaman dan pengetahuan.

Python memiliki berbagai mekanisme bawaan dengan modul perpustakaan standar untuk mendukung searchoperasi. Pada dasarnya, penyelidik menggunakan operasi pencarian untuk menemukan jawaban atas pertanyaan seperti "siapa", "apa", "di mana", "kapan", dll.

Contoh

Dalam contoh berikut, kami telah mendeklarasikan dua string dan kemudian, kami telah menggunakan fungsi find untuk memeriksa apakah string pertama berisi string kedua atau tidak.

# 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)

Skrip di atas akan menghasilkan keluaran sebagai berikut.

“find”fungsi dengan Python membantu dalam mencari kata kunci dalam pesan atau paragraf. Ini penting dalam mengumpulkan bukti yang sesuai.

Indexingbenar-benar memberikan penyidik ​​memiliki tampilan lengkap pada file dan mengumpulkan bukti potensial darinya. Bukti dapat terkandung dalam file, gambar disk, snapshot memori, atau jejak jaringan.

Pengindeksan membantu mengurangi waktu untuk tugas yang memakan waktu seperti keyword searching. Investigasi forensik juga melibatkan fase pencarian interaktif, di mana indeks digunakan untuk menemukan kata kunci dengan cepat.

Pengindeksan juga membantu dalam daftar kata kunci dalam daftar yang diurutkan.

Contoh

Contoh berikut menunjukkan bagaimana Anda dapat menggunakan indexing dengan Python.

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)

Skrip di atas akan menghasilkan keluaran sebagai berikut.

Menggali informasi berharga dari sumber daya yang tersedia adalah bagian penting dari forensik digital. Mendapatkan akses ke semua informasi yang tersedia sangat penting untuk proses investigasi karena membantu dalam mendapatkan bukti yang sesuai.

Sumber daya yang berisi data dapat berupa struktur data sederhana seperti database atau struktur data kompleks seperti gambar JPEG. Struktur data sederhana dapat dengan mudah diakses menggunakan alat desktop sederhana, sementara penggalian informasi dari struktur data kompleks memerlukan alat pemrograman yang canggih.

Perpustakaan Pencitraan Python

Python Imaging Library (PIL) menambahkan kemampuan pemrosesan gambar ke interpreter Python Anda. Pustaka ini mendukung banyak format file, dan memberikan kemampuan pemrosesan gambar dan grafik yang andal. Anda dapat mengunduh file sumber PIL dari:http://www.pythonware.com/products/pil/

Ilustrasi berikut menunjukkan diagram alir lengkap penggalian data dari gambar (struktur data kompleks) di PIL.

Contoh

Sekarang, mari kita memiliki contoh pemrograman untuk memahami cara kerjanya.

Step 1 - Misalkan kita memiliki gambar berikut dari mana kita perlu mengekstrak informasi.

Step 2- Saat kita membuka gambar ini menggunakan PIL, pertama-tama akan dicatat poin yang diperlukan untuk mengekstraksi bukti, yang mencakup berbagai nilai piksel. Berikut adalah kode untuk membuka gambar dan merekam nilai pikselnya -

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 - Kode kami akan menghasilkan keluaran berikut, setelah mengekstrak nilai piksel dari gambar.

Keluaran yang dikirimkan merepresentasikan nilai piksel kombinasi RGB, yang memberikan gambaran lebih baik tentang data apa yang dibutuhkan sebagai bukti. Data yang diambil direpresentasikan dalam bentuk array.

Investigasi forensik dan analisis perangkat keras komputer standar seperti hard disk telah berkembang menjadi disiplin yang stabil dan diikuti dengan bantuan teknik untuk menganalisis perangkat keras non-standar atau bukti sementara.

Meskipun smartphone semakin banyak digunakan dalam investigasi digital, namun tetap dianggap tidak standar.

Analisis forensik

Investigasi forensik mencari data seperti panggilan masuk atau nomor keluar dari smartphone. Ini dapat mencakup pesan teks, foto, atau bukti memberatkan lainnya. Sebagian besar ponsel cerdas memiliki fitur penguncian layar menggunakan sandi atau karakter alfanumerik.

Di sini, kami akan mengambil contoh untuk menunjukkan bagaimana Python dapat membantu memecahkan kata sandi pengunci layar untuk mengambil data dari ponsel cerdas.

Pemeriksaan Manual

Android mendukung kunci kata sandi dengan nomor PIN atau kata sandi alfanumerik. Batas kedua frasa sandi harus antara 4 dan 16 digit atau karakter. Kata sandi smartphone disimpan di sistem Android dalam file khusus yang disebutpassword.key di /data/system.

Android menyimpan SHA1-hashsum dan MD5-hashsum password. Kata sandi ini dapat diproses dalam kode berikut.

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;
}

Tidak mungkin untuk memecahkan kata sandi dengan bantuan dictionary attack karena sandi berciri disimpan di file salt file. Inisaltadalah string representasi heksadesimal dari bilangan bulat acak 64 bit. Sangat mudah untuk mengakses filesalt dengan menggunakan Rooted Smartphone atau JTAG Adapter.

Smartphone yang Di-Root

Tempat pembuangan file /data/system/password.key disimpan dalam database SQLite di bawah lockscreen.password_saltkunci. Dibawahsettings.db, kata sandi disimpan dan nilainya terlihat jelas di tangkapan layar berikut.

Adaptor JTAG

Perangkat keras khusus yang dikenal sebagai adaptor JTAG (Joint Test Action Group) dapat digunakan untuk mengakses file salt. Demikian pula, aRiff-Box atau a JIG-Adapter juga dapat digunakan untuk fungsi yang sama.

Dengan menggunakan informasi yang diperoleh dari Riff-box, kita dapat menemukan posisi dari data yang dienkripsi, yaitu salt. Berikut adalah aturannya -

  • Cari string terkait "lockscreen.password_salt."

  • Byte mewakili lebar garam yang sebenarnya, yaitu miliknya length.

  • Ini adalah panjang yang sebenarnya dicari untuk mendapatkan kata sandi / pin yang tersimpan dari smartphone.

Kumpulan aturan ini membantu mendapatkan data salt yang sesuai.

Protokol yang paling banyak digunakan untuk sinkronisasi waktu dan yang telah diterima secara luas sebagai praktik dilakukan melalui Network Time Protocol (NTP).

NTP menggunakan User Datagram Protocol (UDP) yang menggunakan waktu minimum untuk mengkomunikasikan paket antara server dan klien yang ingin melakukan sinkronisasi dengan sumber waktu yang diberikan.

Fitur Network Time Protocol adalah sebagai berikut -

  • Port server default adalah 123.

  • Protokol ini terdiri dari banyak server waktu yang dapat diakses yang disinkronkan ke laboratorium nasional.

  • Standar protokol NTP diatur oleh IETF dan Standar Yang Diusulkan adalah RFC 5905, berjudul “Network Time Protocol Version 4: Protocol and Algorithms Specification” [NTP RFC]

  • Sistem operasi, program, dan aplikasi menggunakan NTP untuk menyinkronkan waktu dengan cara yang benar.

Dalam bab ini, kita akan fokus pada penggunaan NTP dengan Python, yang dapat dilakukan dari ntplib Perpustakaan Python pihak ketiga. Perpustakaan ini menangani pekerjaan berat secara efisien, yang membandingkan hasil dengan jam sistem lokal saya.

Menginstal Perpustakaan NTP

Itu ntplib tersedia untuk diunduh di https://pypi.python.org/pypi/ntplib/ seperti yang ditunjukkan pada gambar berikut.

Perpustakaan menyediakan antarmuka sederhana ke server NTP dengan bantuan metode yang dapat menerjemahkan bidang protokol NTP. Ini membantu mengakses nilai kunci lainnya seperti detik kabisat.

Program Python berikut membantu dalam memahami penggunaan NTP.

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;

Program di atas akan menghasilkan keluaran sebagai berikut.

Perbedaan waktu dihitung dalam program di atas. Perhitungan ini membantu dalam penyelidikan forensik. Data jaringan yang diperoleh pada dasarnya berbeda dari analisis data yang ditemukan di hard drive.

Perbedaan zona waktu atau mendapatkan zona waktu yang akurat dapat membantu mengumpulkan bukti untuk menangkap pesan melalui protokol ini.

Spesialis forensik biasanya merasa sulit menerapkan solusi digital untuk menganalisis pegunungan bukti digital dalam kejahatan umum. Sebagian besar alat investigasi digital adalah single threaded dan mereka hanya dapat menjalankan satu perintah dalam satu waktu.

Dalam bab ini, kami akan fokus pada kemampuan multiprosesing Python, yang dapat berhubungan dengan tantangan forensik umum.

Multiprocessing

Multiprocessing diartikan sebagai kemampuan sistem komputer untuk mendukung lebih dari satu proses. Sistem operasi yang mendukung multiprosesing memungkinkan beberapa program untuk berjalan secara bersamaan.

Ada berbagai jenis multiprocessing seperti symmetric dan asymmetric processing. Diagram berikut mengacu pada sistem multiprosesing simetris yang biasanya diikuti dalam penyelidikan forensik.

Contoh

Kode berikut menunjukkan bagaimana proses yang berbeda terdaftar secara internal dalam pemrograman Python.

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."

Di sini, fungsinya list_append() membantu dalam membuat daftar rangkaian proses dalam sistem.

Keluaran

Kode kami akan menghasilkan keluaran berikut -

Dalam bab ini, kami akan fokus untuk menyelidiki memori volatil dengan bantuan Volatility, kerangka kerja forensik berbasis Python yang dapat diterapkan pada platform berikut: Android dan Linux.

Memori Volatile

Memori yang mudah menguap adalah jenis penyimpanan di mana konten terhapus saat daya sistem dimatikan atau diinterupsi. RAM adalah contoh terbaik dari memori yang mudah menguap. Artinya, jika Anda sedang mengerjakan dokumen yang belum disimpan ke memori non-volatile, seperti hard drive, dan komputer kehilangan daya, maka semua data akan hilang.

Secara umum, forensik memori volatil mengikuti pola yang sama seperti investigasi forensik lainnya -

  • Memilih target investigasi
  • Memperoleh data forensik
  • Analisis forensik

Dasar volatility plugins yang digunakan untuk mengumpulkan Android RAM dumpuntuk analisis. Setelah dump RAM dikumpulkan untuk dianalisis, penting untuk mulai berburu malware di RAM.

Aturan YARA

YARA adalah alat populer yang menyediakan bahasa yang kuat, kompatibel dengan Ekspresi Reguler berbasis Perl, dan digunakan untuk memeriksa file / direktori yang dicurigai dan mencocokkan string.

Pada bagian ini, kita akan menggunakan YARA berdasarkan implementasi pencocokan pola dan menggabungkannya dengan daya utilitas. Proses lengkap akan bermanfaat untuk analisis forensik.

Contoh

Perhatikan kode berikut. Kode ini membantu dalam mengekstraksi kode.

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)

Kode di atas akan menghasilkan keluaran sebagai berikut.

Jumlah aturan YARA yang diterapkan membantu memberikan gambaran yang lebih baik tentang file yang dicurigai. Secara tidak langsung, daftar file yang dicurigai membantu mengumpulkan informasi yang sesuai untuk forensik.

Berikut ini adalah kode sumber di github: https://github.com/radhikascs/Python_yara

Perhatian utama dari investigasi digital adalah mengamankan bukti atau data penting dengan enkripsi atau format lainnya. Contoh dasarnya adalah menyimpan kata sandi. Oleh karena itu perlu dipahami penggunaan sistem operasi Linux untuk implementasi forensik digital untuk mengamankan data berharga ini.

Informasi untuk semua pengguna lokal sebagian besar disimpan dalam dua file berikut -

  • /etc/passwd
  • etc/shadow

Yang pertama adalah wajib, yang menyimpan semua kata sandi. File kedua adalah opsional dan menyimpan informasi tentang pengguna lokal termasuk kata sandi yang di-hash.

Masalah muncul berkenaan dengan masalah keamanan menyimpan informasi kata sandi dalam sebuah file, yang dapat dibaca oleh setiap pengguna. Oleh karena itu, sandi berciri disimpan di/etc/passwd, di mana konten diganti dengan nilai khusus "x".

Hash yang sesuai harus dicari di /etc/shadow. Pengaturan di/etc/passwd dapat menimpa detail dalam /etc/shadow.

Baik file teks di Linux menyertakan satu entri per baris dan entri terdiri dari beberapa bidang, dipisahkan oleh titik dua.

Format /etc/passwd adalah sebagai berikut -

Sr.No. Nama & Deskripsi Bidang
1

Username

Bidang ini terdiri dari atribut format yang dapat dibaca manusia

2

Password hash

Ini terdiri dari kata sandi dalam bentuk yang disandikan sesuai dengan fungsi crypt Posix

Jika kata sandi hash disimpan sebagai empty, maka pengguna yang bersangkutan tidak akan memerlukan kata sandi apa pun untuk masuk ke sistem. Jika bidang ini berisi nilai yang tidak dapat dihasilkan oleh algoritma hash, seperti tanda seru, maka pengguna tidak dapat masuk menggunakan kata sandi.

Pengguna dengan sandi terkunci masih dapat masuk menggunakan mekanisme otentikasi lain, misalnya, kunci SSH. Seperti yang disebutkan sebelumnya, nilai khusus "x"berarti hash kata sandi harus ditemukan di file bayangan.

Itu password hash termasuk yang berikut -

  • Encrypted salt - Itu encrypted salt membantu menjaga kunci layar, pin, dan sandi.

  • Numerical user ID- Bidang ini menunjukkan ID pengguna. Kernel Linux memberikan ID pengguna ini ke sistem.

  • Numerical group ID - Bidang ini mengacu pada grup utama pengguna.

  • Home directory - Proses baru dimulai dengan referensi direktori ini.

  • Command shell - Bidang opsional ini menunjukkan shell default yang akan dimulai setelah login berhasil ke sistem.

Forensik digital termasuk mengumpulkan informasi yang relevan untuk melacak bukti. Oleh karena itu, id pengguna berguna dalam memelihara catatan.

Menggunakan Python, semua informasi ini dapat secara otomatis dianalisis untuk Indikator Analisis, merekonstruksi aktivitas sistem terkini. Pelacakan sederhana dan mudah dengan penerapan Linux Shell.

Pemrograman Python dengan Linux

Contoh

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:])

Keluaran

Kata sandi disimpan dalam format heksadesimal di pass_db.txtseperti yang ditunjukkan pada tangkapan layar berikut. File teks disimpan untuk digunakan lebih lanjut dalam forensik komputasi.

Indikator Kompromi (IOC) didefinisikan sebagai "potongan data forensik, yang mencakup data yang ditemukan dalam entri atau file log sistem, yang mengidentifikasi aktivitas yang berpotensi berbahaya pada sistem atau jaringan."

Dengan memantau IOC, organisasi dapat mendeteksi serangan dan bertindak cepat untuk mencegah pelanggaran semacam itu terjadi atau membatasi kerusakan dengan menghentikan serangan di tahap awal.

Ada beberapa kasus penggunaan, yang memungkinkan kueri artefak forensik seperti -

  • Mencari file tertentu dengan MD5
  • Mencari entitas tertentu, yang sebenarnya disimpan di memori
  • Entri atau kumpulan entri tertentu, yang disimpan di registri Windows

Kombinasi semua hal di atas memberikan hasil yang lebih baik dalam menelusuri artefak. Seperti disebutkan di atas, registri Windows memberikan platform yang sempurna dalam menghasilkan dan memelihara IOC, yang secara langsung membantu dalam forensik komputasi.

Metodologi

  • Cari lokasi di sistem file dan khusus untuk sekarang ke dalam registri Windows.

  • Telusuri kumpulan artefak, yang telah dirancang oleh alat forensik.

  • Perhatikan tanda-tanda aktivitas yang merugikan.

Siklus Hidup Investigasi

Investigative Life Cycle mengikuti IOC dan mencari entri tertentu di registri.

  • Stage 1: Initial Evidence- Bukti penyusupan terdeteksi baik di host atau di jaringan. Responden akan menyelidiki dan mengidentifikasi solusi yang tepat, yang merupakan indikator forensik konkret.

  • Stage 2: Create IOCs for Host & Network- Setelah data yang dikumpulkan, IOC dibuat, yang dengan mudah dapat dilakukan dengan registri Windows. Fleksibilitas OpenIOC memberikan jumlah permutasi yang tidak terbatas tentang bagaimana Indikator dapat dibuat.

  • Stage 3: Deploy IOCs in the Enterprise - Setelah IOC yang ditentukan dibuat, penyelidik akan menyebarkan teknologi ini dengan bantuan API di register Windows.

  • Stage 4: Identification of Suspects- Penyebaran IOC membantu dalam mengidentifikasi tersangka dengan cara yang normal. Bahkan sistem tambahan akan diidentifikasi.

  • Stage 5: Collect and Analyze Evidence - Bukti-bukti terhadap tersangka dikumpulkan dan dianalisis.

  • Stage 6: Refine & Create New IOCs - Tim investigasi dapat membuat IOC baru berdasarkan bukti dan data yang ditemukan di perusahaan dan intelijen tambahan, dan terus menyempurnakan siklusnya.

Ilustrasi berikut menunjukkan fase Investigasi Siklus Hidup -

Cloud computingdapat didefinisikan sebagai kumpulan layanan yang dihosting yang disediakan untuk pengguna melalui Internet. Ini memungkinkan organisasi untuk menggunakan atau bahkan menghitung sumber daya, yang mencakup Mesin Virtual (VM), penyimpanan, atau aplikasi sebagai utilitas.

Salah satu keuntungan terpenting dari membangun aplikasi dalam bahasa pemrograman Python adalah kemampuan untuk menyebarkan aplikasi secara virtual pada platform apa pun, yang mencakup clouddemikian juga. Ini menyiratkan bahwa Python dapat dijalankan di server cloud dan juga dapat diluncurkan pada perangkat praktis seperti desktop, tablet, atau smartphone.

Salah satu perspektif yang menarik adalah membuat cloud base dengan generasi Rainbow tables. Ini membantu dalam mengintegrasikan versi tunggal dan multiprosesing dari aplikasi, yang memerlukan beberapa pertimbangan.

Pi Cloud

Pi Cloud adalah platform komputasi awan, yang mengintegrasikan bahasa pemrograman Python dengan kekuatan komputasi Amazon Web Services.

Mari kita lihat contoh penerapan awan Pi dengan rainbow tables.

Tabel Pelangi

SEBUAH rainbow table didefinisikan sebagai daftar semua kemungkinan permutasi teks biasa dari kata sandi terenkripsi khusus untuk algoritma hash tertentu.

  • Tabel pelangi mengikuti pola standar, yang membuat daftar kata sandi berciri.

  • File teks digunakan untuk menghasilkan kata sandi, yang menyertakan karakter atau teks biasa kata sandi yang akan dienkripsi.

  • File tersebut digunakan oleh awan Pi, yang memanggil fungsi utama untuk disimpan.

  • Output dari kata sandi yang di-hash disimpan dalam file teks juga.

Algoritma ini juga dapat digunakan untuk menyimpan kata sandi di database dan memiliki penyimpanan cadangan di sistem cloud.

Program built-in berikut membuat daftar kata sandi terenkripsi dalam file teks.

Contoh

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()

Keluaran

Kode ini akan menghasilkan keluaran berikut -

Kata sandi disimpan dalam file teks, yang terlihat, seperti yang ditunjukkan pada gambar layar berikut.