0
Home  ›  C++

HIDE SECRET MESSAGES SISTEM DIGITAL FORENSIK


Berikut ini adalah kodenya 

from PIL import Image

from numpy import asarray

import os

                               

def file_exists(file_path):

                return os.path.isfile(file_path)

def valid_image(file_ext):

                return file_ext in [".jpg", ".jpeg", ".png"]

def set_message(msg_src):

                global len_str, bin_str, max_str

                if(not file_exists(msg_src)):

                                print("   /!\\ File doesn't exist")

                                print()

                                return 0

 

                msg_str = open(msg_src, "rb").read()

                len_str = len(msg_str)

                fmt_msg = os.path.splitext(msg_src)[1]

               

                print("   +> Message length (", len_str, ")")

                if(len_str > max_str):

                                print("   /!\\ Message is too long")

                                return 0

 

                if((len(fmt_msg) - 1) > 10):

                                print("   /!\\ File format is too long (Max: 10)")

                                return 0

 

                bin_str = ""

                data_str = fmt_msg + "*" + str(len_str) + "*"

                byte_str = bytearray(data_str, "utf8") + bytearray(msg_str)

                for x in byte_str:

                                bin_str += "{0:08b}".format(x)

                print()

                return 1

 

def set_image(img_src):

                global base_img, max_str, _menu

 

                if(not file_exists(img_src)):

                                print("   /!\\ File doesn't exist")

                                print()

                                return 0

 

                fmt_msg = os.path.splitext(img_src)[1]

                if(not valid_image(fmt_msg)):

                                print("   /!\\ Invalid file format")

                                print()

                                return 0

 

                base_img = Image.open(img_src)

                mode_img = base_img.mode

                fmt_img = base_img.format

                size_img = base_img.size

 

                print("   +> Dimension (", size_img[0], "x", size_img[1], ") pixel")

                print("   +> Format (", fmt_img, ")")

                print("   +> Color mode (", mode_img, ")")

 

                if(mode_img != "RGB"):

                                print("   /!\\ Can't use image with ", mode_img, " color")

                                print("   /!\\ Use image with RGB color")

                                print()

                                return 0

                if(_menu == "hide"):

                                max_str = int((size_img[0] * size_img[1] * 3) / 8)

                                max_str = max_str - len(str(max_str)) - 15

                                if(max_str < 1):

                                                print("   /!\\ Image dimension is too small")

                                print("   +> Max message length (", max_str, ") !important")

                print()

                return 1

 

def hide_message(out_src):

                global base_img, bin_str

 

                array_img = asarray(base_img)

                array_img = array_img.copy()

 

                i_char = 0

                len_char = len(bin_str)

                is_char = True

                for h in range(len(array_img)):

                                if(not is_char): break

                                for w in range(len(array_img[h])):

                                                if(not is_char): break

                                                for c in range(len(array_img[h][w])):

                                                                if(not is_char): break

                                                                bin_color = "{0:08b}".format(array_img[h][w][c])

                                                                new_color = bin_color[0:7] + bin_str[i_char]

                                                                array_img[h][w][c] = int(new_color, 2)

 

                                                                i_char += 1

                                                                if(i_char == len_char): is_char = False

 

                if(not is_char):

                                steg_img = Image.fromarray(array_img)

                                steg_img.save(out_src)

                                print("   (!) Done. Output file (", out_src, ")")

                                print()

 

def read_message(img_src):

                global base_img

 

                set_image(img_src)

 

                array_img = asarray(base_img)

                array_img = array_img.copy()

 

                is_char = True

                is_msg = False

 

                d_char = ""

                n_char = 0

 

                mode_msg = 0

 

                len_msg = 0

                fmt_msg = ""

                byte_msg = b""

                for h in range(len(array_img)):

                                if(not is_char): break

                                for w in range(len(array_img[h])):

                                                if(not is_char): break

                                                for c in range(len(array_img[h][w])):

                                                                if(not is_char): break

                                                                bin_color = "{0:08b}".format(array_img[h][w][c])

                                                                d_char += bin_color[7:8]

                                                                n_char += 1

                                                                if(n_char == 8):

                                                                                g_byte = bytes([int(d_char, 2)])

                                                                                if(mode_msg == 0):

                                                                                                if(g_byte.decode("utf-8") == "*"):

                                                                                                                fmt_msg = byte_msg.decode("utf-8")

                                                                                                                if(fmt_msg[0] == "." or fmt_msg == "" and len(fmt_msg) <= 10):

                                                                                                                                print("   +> Detected file format (", fmt_msg, ")")

                                                                                                                                byte_msg = b""

                                                                                                                                mode_msg = 1

                                                                                                                else:

                                                                                                                                is_char = False

                                                                                                else:

                                                                                                                byte_msg += g_byte

                                                                                elif(mode_msg == 1):

                                                                                                if(g_byte.decode("utf-8") == "*"):

                                                                                                                len_msg = int(byte_msg.decode("utf-8"))

                                                                                                                print("   +> Message length (", len_msg, ")")

                                                                                                                byte_msg = b""

                                                                                                                mode_msg = 2

                                                                                                                is_msg = True

                                                                                                else:

                                                                                                                byte_msg += g_byte

                                                                                elif(mode_msg == 2):

                                                                                                byte_msg += g_byte

                                                                                                len_msg -= 1

                                                                                                if(len_msg == 0): is_char = False

                                                                               

                                                                                n_char = 0

                                                                                d_char = ""

                print()

                if(not is_char and is_msg):

                                out_name = input("+--Output filename (default = steg_message)\n+--> ")

                                out_name = "steg_message" if(out_name=="") else(out_name)

 

                                out_src = out_name + fmt_msg

                                msg_file = open(out_src, "wb")

                                msg_file.write(byte_msg)

                                msg_file.close()

                                print("   (!) Done. Output file (", out_src, ")")

                else:

                                print("   (!) Can't read or no hidden message")

                print()

 

def show_banner_menu():

                print("""

+--------+      +--------+

|00110010|      | __  () |

|01001101| __\\  |/  \\ __ |

|11001000|   /  |____/__\\|

|01000101|      |+ ./:| .|

+--------+      +--------+

 

RGB Steganografi (beta)

+------------------------+

""")

 

def show_help_menu():

                print("""

Command

---------------

    help          Show available command.

    hide          Hide message into image.

    read          Read hidden message from image.

    exit          Exit RGB Steganografi.

""")

 

def show_hide_menu():

                print("""

+------------------------+

       Hide Message

+------------------------+

""")

                _img_ok = 0

                while(_img_ok != 1):

                                _img_path = input("+--Image file path (Image with RGB Color)\n+--> ")

                                _img_ok = set_image(_img_path)

 

                _msg_ok = 0

                while(_msg_ok != 1):

                                _msg_path = input("+--Message file path (Image with RGB Color)\n+--> ")

                                _msg_ok = set_message(_msg_path)

               

                _out_path = input("+--Output file path (default = steg_result.png)\n+--> ")

                _out_path = "steg_result.png" if(_out_path=="") else(_out_path)

                hide_message(_out_path)

 

def show_read_menu():

                print("""

+------------------------+

       Read Message

+------------------------+

""")

                _img_path = input("+--Image file path (Any File Format)\n+--> ")

                read_message(_img_path)

 

if __name__ == '__main__':

                global _menu

                _menu = "menu"

                while(_menu != "exit"):

                                if(_menu == "menu"):   show_banner_menu()

                                elif(_menu == "help"): show_help_menu()

                                elif(_menu == "hide"): show_hide_menu()

                                elif(_menu == "read"): show_read_menu()

                                elif(_menu == "exit"): print()

                                else:

                                                print("   /!\\ Unknown command")

                                                print()

 

                                if(_menu != "exit"): _menu = input("stega > ")


Fansyah dwi krisnady
Fansyah Dwi Krisnady Content Creator dan Pegawai di perusahaan Swasta
Posting Komentar
Additional JS