В этой захватывающей турецкой драме под названием "Не для записи", вы познакомитесь с опасным миром преступности, интриг и борьбы за правду. Силовые структуры Турции проводят жесткую операцию по разоблачению преступных схем и незаконной торговли алмазами, которая находится под контролем крупного мафиози Экрема. Главный герой сериала - Али Кемаль Атеш, агент, который должен внедриться в крыло мафии, чтобы раскрыть их зловещие планы. Его задача - проникнуть внутрь и раскрыть схемы, связанные с незаконной торговлей дра��оценными камнями. Ставка огромна, и каждый шаг Али Кемаля насыщен еще большим напряжением и риском. Одновременно, пока Али Кемаль занят своей смертельно опасной миссией, на передний план выходит сестра Экрема, Зейнеп. Она отправляется в Афганистан как часть программы "Доктор без границ", стремясь помочь и приносить пользу тем, кто в этом нуждается. Но ее добрые намерения оборачиваются кошмаром, когда она становится жертвой похищения неизвестными. Ситуация развивается сложным образом, и разведка решает использовать это для своих целей, чтобы завоевать доверие Экрема и проникнуть в его круг. Задача становится еще сложнее, и на помощь приходит Али Кемаль Атеш, готовый пойти на все, чтобы спасти похищенную Зейнеп. Его задача становится настоящим испытанием, где каждая секунда играет решающую роль. Сериал "Не для записи" обещает зрителям захватывающее погружение в мир интриг и секретов, где месть, любовь, предательство и спасение соседствуют в лихом турецком стиле. Будет очень интересно следить за тем, как Али Кемаль будет справляться со своей опасной миссией и как развиваются отношения между ним и Зейнеп, которые становятся все более сложными и напряженными. 0.0044 52documentclass[12pt]{article} usepackage{amsmath} usepackage{hyperref} usepackage{graphicx} begin{document} title{CSE 264: Assignment 2} author{Pedro Contreiras CSE 264: Introduction to Digital/Multimedia Evidence} date{today} maketitle To be eligible for points, a document must pass validation in at least one category, and may pass in multiple. If more than two categories are defined for a single argument or command line, the first two that pass are used for validation (in the order listed in each table). section{texttt{JFIF}} Loosely speaking, this is a standard format for lossy compression of digital images. It allows for arbitrary metadata in the form of various kinds of tags, which is how we'll access most of the data about the image. IPython provided a library called texttt{PIL} that's used for reading and manipulating image files. subsection{First steps} Like last time, begin{itemize} item Make sure you can import all the libraries. The biggest hurdle here is finding the one called texttt{PIL}. You should install it like so: begin{verbatim} $ pip install pillow end{verbatim} If you don't have texttt{pip}, install it too. item Set up your workspace in a way that works for you (e.g. set up any variables you plan to use). One option is: begin{verbatim} %matplotlib inline import PIL from PIL import Image from IPython.display import display import numpy as np from pprint import pprint end{verbatim} item Images can be saved in any one of a number of formats that texttt{PIL} recognizes. But some formats loose more information than others. For this reason, we suggest you always save in the portable network graphics format (texttt{.png}). You can do this through the method texttt{save()} for an image object or through texttt{Image.save()}. Many options are available, but if you don't provide a path and an extension, both seem to know to use the directory you're working in and the extension texttt{.png}. end{itemize} subsection{texttt{PIL.Image}} The bulk of this library is made up of the texttt{Image} class, which represents a given image. To open an image file (e.g. texttt{/home/user/foo.jpeg}) into an texttt{Image} object called texttt{myimage}, do begin{verbatim} myimage=PIL.Image.open("/home/user/foo.jpeg") end{verbatim} From here on we'll refer to texttt{myimage} as an image file object" even though it's an instance of a class. Many of the attributes and methods for texttt{Image} objects are documented by IPython, i.e., you can use tab-completion after a dot operator to see what's available. However, some of the most significant ones are: begin{enumerate} item texttt{format}: A text string with the format name of the file. In our example we would find, for instance, texttt{"JPEG"}. item texttt{size}: This value is a 2-tuple of the pixel dimensions of the image, for instance texttt{(2448,3264)}. item texttt{load}: This method is how the data is actually loaded. You won't actually have to call it yourself most of the time. item texttt{save}: We've already mentioned this. The texttt{PIL.Image} version just closes the file automatically for you (in a context manager). end{enumerate} subsection{texttt{PIL.JpegImagePlugin}} This module has some functions and structures that are used, shy of type checking, to sniff out some metadata. begin{enumerate} item texttt{PIL.JpegImagePlugin.get_id3}: Returns a dictionary whose keys are text strings by which individual items of metadata may be accessed. For the files assigned to them, these strings are basically constant. But they can vary from file-type to file-type. item texttt{PIL.JpegImagePlugin.get_exif}: Returns an instance of a class called texttt{PIL.ExifTags}. It contains an texttt{ifd_dict} attribute that is key-ed by the names of tags appearing in the image's exif section. Unfortunately, those names in turn are numbers, representing the different ways to tag a piece of EXIF data. So we can convert them as: begin{verbatim} my_exif_dict={} for this_key,this dtype in exif_info.ifd.tag.values(): my_exif_dict[exif_tags.EXIF_TAGS[this_key]]=my_exif_dict.get(this_key) end{verbatim}. We've identified three types for the values in the tuple returned by texttt{ifd.tag.values()}: begin{enumerate} item A scalar value (e.g. texttt{0x00040005}, texttt{1}, or texttt{352}). item An array (e.g. a long list of component values for the camera's internal clock when the image was taken, or a list of RGB values). item A structure. This is an array of items that have fixed names. As an example of what might be returned by one of these, consider the case where texttt{exif_info.ifd.tag[tag_id].type==3}. The returned value will be a sequence of 4 byte integers, in the form texttt{[year, month, day, hour, minute, sec]}. Note that there are some version fields that exist as an array of bytes rather than an array of integers; you'll have to do that conversion yourself, if needed. item Do note that I found some of the data types to be ambiguous, so I would advise checking the enumerable keys in the texttt{PIL.ExifTags.TAGS} dictionary for whichever tags you're interested in and being quite explicit about the type. item Returning to our example, we'd start by creating a string called e.g. texttt{"DateTimeOriginal"} which could be used to address the right field in the texttt{ifd_dict} attribute. Enjoy that with, for instance: begin{verbatim} my_exif_dict[DateTimeOriginal] end{verbatim} item If you're not using IPython and you don't want to use the meta-tag names, you can access them as a "tuple" for begin{verbatim} exif_info.ifd[key][0] end{verbatim} Here it seems to break down JPEG metadata by the name of an inner tag. The first line declaration and ownership of reads backwards: begin{verbatim} exif_info=im._getexif() from PIL.ExifTags import TAGS as exif_tags [[key,exif_tags[key]] for key in exif_tags.keys() if key in exif_ifd.keys()] end{verbatim}. end{enumerate} end{enumerate} subsection{texttt{Steganography}--Hiding and Finding Data in Metadata} Metadata can be inserted into a JPEG file using various tools. You could even write one! We found some public code for doing this. The example we'll present is called texttt{Metamorphosis}. First off, let us break down the source code: begin{itemize} item If you're running into trouble with e.g. your command line tools in IPython, you may need to open your image file at the terminal: begin{verbatim} $ ipython In [1]: cd /home/user/wherever In [2]: %run my_steganograph_image.jpeg end{verbatim} or use begin{verbatim} %run -i mystegfile.py end{verbatim} What changed? begin{verbatim} # In case you don't want to use a GUI for whatever reason: def imread(filename): f=open(filename,"r") i=PIL.Image.open(f) return np.array(i) def imsave(filename,array): PIL.Image.fromarray(np.uint8(array)).save(filename) np.Im = imread np.Q = imsave # Parse the input commands if sys.argv[0].endswith("jpg"): jpgfile=np.array(PIL.Image.open(sys.argv[0])) else: raise Exception ipil=jpgfile # So the image is just a matrix with entries you might expect: # A build-up of: # ... method, mode, color tables or perhaps matrices which represent pixels to be displayed on a screen as color values. color_matrix = jpgfile[100:120,0:20,0:10] end{verbatim} Metadata may contain multiple data fields. Here's what we'll work with: begin{verbatim} def filter_floats(string_field): return [decimal.Decimal(item.rstrip(")")) for item in string_field.split("n") if ")" in item] # We can recover this information in a different way: import decimal encoded_bytes=jpgfile[-2,-1,-8:] exif_bytes=filter_floats(str(ipil.info["exif"])) easy_quad=str("'".join([a for a in exif_bytes if ord(a) Смотрите турецкий сериал Не для записи онлайн на русском языке в отличном качестве на ТуркПлей.ТВ абсолютно бесплатно! Наслаждайтесь новыми сериями подряд в удобном формате — с мобильных устройств на iOS и Android, iPad, iPhone, а также на телевизоре или SmartTV в HD качестве. После просмотра оставляйте комментарии и делитесь впечатлениями!