<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4128461228562744870</id><updated>2024-10-05T07:51:29.853+04:00</updated><title type='text'>Программируем вместе сознание и алгоритмы.</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mydiary-musiclife.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://mydiary-musiclife.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Олег Плотников</name><uri>http://www.blogger.com/profile/09565341549892337662</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>92</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4128461228562744870.post-7825222487992668834</id><published>2014-05-27T17:54:00.000+04:00</published><updated>2014-06-01T07:59:41.330+04:00</updated><title type='text'>Система OpenGL взгляд на 3D графику...</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;Система OpenGL взгляд на 3D графику...&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Итак все начинается с того что мы хотим чего то нарисовать или отобразить на экране, может это игра, или график функции а может это полноценный 3д редактор или какая то отдельная его часть нуу полет фантазий понятен ;)&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
С чего начать и куда копать? Помимо того что необходимо изучить новую не известную вам графическую систему, так еще требуется желательно большой опыт в программировании, вспомнить или хорошо знать школьную геометрию и немного математики не помешает.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Думаю для начала стоит написать тестовый инструмент, наглядный инструмент который поможет быстрее понять графику изнутри:&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMngPyLJlEoi7az8pTbmOzc4zvItEDlu6566D7oVxHbPFF4d584pBN8SQ2WT-ZXXDbb0VOw9lVV_KOghLkJXW-Yyw4nCVV8vfj54bB2h29wlnEeDFtqh9DadbqrB1q-GVdB698BGkWpHE/s1600/%D0%91%D0%B5%D0%B7%D1%8B%D0%BC%D1%8F%D0%BD%D0%BD%D1%8B%D0%B9.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMngPyLJlEoi7az8pTbmOzc4zvItEDlu6566D7oVxHbPFF4d584pBN8SQ2WT-ZXXDbb0VOw9lVV_KOghLkJXW-Yyw4nCVV8vfj54bB2h29wlnEeDFtqh9DadbqrB1q-GVdB698BGkWpHE/s1600/%D0%91%D0%B5%D0%B7%D1%8B%D0%BC%D1%8F%D0%BD%D0%BD%D1%8B%D0%B9.jpg&quot; height=&quot;228&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Будем писать на C# MS VS 2012 но можно и на С++ позднее опишу тонкости кстати использовать буду библиотеку Tao framework 2.2 можно использовать и Glut, FreeGlut,ClanLib и много чего еще другого, но пока что нужно ознакомится с основами.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&amp;nbsp;Мы должны понять что такое проекция, как рисовать графические примитивы, как устроена координатная система, как перемещать фигуры, вращать но попробую по порядку.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Рисовать мы будем в декартовой системе координат и тут самое интересное что оси х, у, z могут быть направлены как угодно и куда угодно все это мы задаем сами или используем установки по умолчанию. Ось Z не будем использовать это как позже выясним будет глубина или как говорят художники перспектива.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Что такое проекция?&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Посмотрим на рисунки их бывает две (ну есть еще третья изометрическая но не будем трогать ее) прямоугольная и пирамидальная&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://irrlicht.ru/wp-content/uploads/2012/12/2-11.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://irrlicht.ru/wp-content/uploads/2012/12/2-11.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
пирамидальная проекция&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
и прямоугольная&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://irrlicht.ru/wp-content/uploads/2012/12/2-21.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://irrlicht.ru/wp-content/uploads/2012/12/2-21.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Между ближней плоскостью и дальней мы как раз и рисуем нашу графическую сцену если слишком близко к ближней плоскости выведем к примеру куб то часть куба будет урезана - отсечена аналогично и с дальней границей, куда важней не промахнутся при &quot;рисовании&quot; 3д фигур т.к мы можем выйти из проекции и никогда не увидим на экране наш результат, так что с этим осторожнее ;)&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Свойства данных проекций как и + и - можно лишь увидеть на практике изменяя параметры и видя как они влияют на отображение сцены.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Пока что перейдем к С++ я использовал MS VS 2010 но вообще конечно не критично использовать какой либо язык, критично будет когда нужно выпустить конечный продукт и там будут конкретные требования и условия которые ваш выбранный язык может не обеспечить так что выбирать вам. И последнее использовал на данном примере я GLUT&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Вот главная функция :&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
int main ( int argc, char** argv)&lt;br /&gt;
{&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;glutInit(&amp;amp;argc, argv);&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH|GLUT_RGBA);&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;glutTimerFunc(500,glutTimer,1); - фу-ия таймера&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;glutInitWindowSize( w, h ); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - инициализируем окно &amp;nbsp;с размерами w,h&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;glutInitWindowPosition(50,50); &amp;nbsp;- позиция окна на экране&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;glutCreateWindow(&quot;OpenGL 3D System&quot;); - само окно и заголовок к нему&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;InitGL(); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - здесь задаем некоторые надстройки&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;glutDisplayFunc(Draw); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - указуем что фу-ия Draw будет рисовать&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;glutSpecialFunc(getkeys_down); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - обработка клавиатуры&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;glutReshapeFunc(reshape); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - изменение размеров окна и соответственно проекции&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;glutMouseFunc(mouseFunc); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;обрабатываем мышь&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;glutPassiveMotionFunc(moveMouse);&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;glutMainLoop(); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;глобальное зацикливание&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Создаете консольное приложение и прописуем данный код&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void Draw()&lt;br /&gt;
{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);&lt;br /&gt;
очищаем экран - сцену рассмотрим в теме буферов&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; glLoadIdentity();&lt;br /&gt;
сброс матрицы это будем разбирать в теме матриц&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; glBegin(GL_LINE_STRIP); рисуем связанные линии - 2д оси графика&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; glColor3f( 0.0, 1.0, 0.0 ); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; цвет в формате float чисел&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt; glVertex3f(0.9f, -0.9f, &amp;nbsp;-0.9f); задаем вершины прямых тот же формат&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt; glColor3f( 1.0, 0.0, 0.0 );&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt; glVertex3f( -0.9f, -0.9f, &amp;nbsp;-0.9f);&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt; glVertex3f( -0.9f, &amp;nbsp;0.9f, &amp;nbsp;-0.9f);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;glEnd(); заканчиваем рисовать&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; glFlush(); не замедлительно нарисовать&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; glutSwapBuffers(); переключаем буферы для отображения нарисованного на экране&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void reshape (int w, int h)&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; если случайно размеры окна станут 0 то сделаем их по 100&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;if ( w == 0 &amp;amp;&amp;amp; h == 0) { w = 100; h = 100; }&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;if ( w == 0 || h == 0 ) &amp;nbsp;{ w = 100; h = 100; }&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp;glMatrixMode(GL_PROJECTION); режим матрицы проекций&lt;br /&gt;
&amp;nbsp; &amp;nbsp;glLoadIdentity(); матрицу проекций в 0 иначе будет каша на экране&lt;br /&gt;
&amp;nbsp; &amp;nbsp;матрицы имеют свойство накапливать результат&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp;glViewport(0,0,GLsizei(w),GLsizei(h)); &amp;nbsp;размер окна где будем рисовать&lt;br /&gt;
&amp;nbsp; &amp;nbsp;glMatrixMode(GL_MODELVIEW); а здесь матрица отображения фигур&lt;br /&gt;
&amp;nbsp; &amp;nbsp;glLoadIdentity();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
создаем заголовки функций не возвращающих результата - void &amp;nbsp;прописанных в main смотрим заголовки gl.h glut.h&lt;br /&gt;
&lt;br /&gt;
void getkeys_down()&lt;br /&gt;
void glutTimer()&lt;br /&gt;
смотрим входящие аргументы там же&lt;br /&gt;
&lt;br /&gt;
Не забываем подключать либы *.lib и заголовки *.h&lt;br /&gt;
я делаю это так&lt;br /&gt;
&lt;br /&gt;
#pragma comment(lib,&quot;glut32.lib&quot;)&lt;br /&gt;
&lt;br /&gt;
Что бы уменьшить время копания что и где не работает из-за чего и почему попробуем идти путем наименьшего сопротивления:&lt;br /&gt;
&lt;br /&gt;
для этого изменим цвет фона экрана если это произойдет то система OpenGL GLUT инициализирована правильно и будем рисовать если нет то будем копать почему не работает&lt;br /&gt;
&lt;br /&gt;
glClearColor( 0, 0, 0.0, 0.0 );формат rgbA А это альфа канал как в фотошопе ))) прозрачность короче говоря пока что лучше не изменять а ставить 0.&lt;br /&gt;
&lt;br /&gt;
Еще чуть-чуть отвлечемся и посмотрим как мы можем задавать в каком формате цвет и вершины&lt;br /&gt;
&lt;br /&gt;
glColor3i -число обозначает количество компонент цвета а буква после числа формат здесь int&lt;br /&gt;
т.е как обычно glColor3i(123,34,12);&lt;br /&gt;
&lt;br /&gt;
glColorvi(@clr); &amp;nbsp;укажем массив цвета&lt;br /&gt;
&lt;br /&gt;
Остальное открываем заголовки и смотрим все описанные фу-ии.&lt;br /&gt;
Если цвет экрана изменился то отлично начинаем рисовать,&lt;br /&gt;
самый простой способ через&lt;br /&gt;
&lt;br /&gt;
glBegin(&lt;br /&gt;
GL_POINT - рисуем точки&lt;br /&gt;
&amp;nbsp;а так изменим размер точки glPointSize(10) );&lt;br /&gt;
GL_LINE - естественно линии&lt;br /&gt;
GL_POLYGON - многоугольники&lt;br /&gt;
&lt;br /&gt;
glEnd();&lt;br /&gt;
&lt;br /&gt;
проще показать рисунок чем описывать&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://what-when-how.com/wp-content/uploads/2012/05/tmp532442.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://what-when-how.com/wp-content/uploads/2012/05/tmp532442.png&quot; height=&quot;320&quot; width=&quot;242&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Позже продолжим изучать и рисовать и понимать все моменты графики...&lt;br /&gt;
&lt;br /&gt;
Чуть не забыл )))&lt;br /&gt;
по умолчанию у нас вот такие координаты&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjKhroOqcL1sIlaFc5DHbojCvsSOyWkpnxSinYA3ey1v605gWalOuuiZu_UJivTamjklRvnM71fYDN4oTR_GP1U-Ue3Qe9Ei4aHqY4figFhQGf2FuNPtOlKVxMwNx33mE9wE_DQJy6Jmw/s1600/w0KWMOY1iyI.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjKhroOqcL1sIlaFc5DHbojCvsSOyWkpnxSinYA3ey1v605gWalOuuiZu_UJivTamjklRvnM71fYDN4oTR_GP1U-Ue3Qe9Ei4aHqY4figFhQGf2FuNPtOlKVxMwNx33mE9wE_DQJy6Jmw/s1600/w0KWMOY1iyI.jpg&quot; height=&quot;139&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
и в InitGL задаем проекцию&lt;br /&gt;
&lt;br /&gt;
void InitGL()&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp;glMatrixMode(GL_PROJECTION);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; glLoadIdentity();&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;gluPerspective(45.0f,(GLfloat)w/(GLfloat)h, 0.1 ,15000.0);&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp;glViewport(0,0,w,h);&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp;glMatrixMode(GL_MODELVIEW);&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp;glLoadIdentity();&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
}&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;
и последнее w and h это у нас размеры окна&lt;br /&gt;
int w = 800;&lt;br /&gt;
int h = 600;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://mydiary-musiclife.blogspot.com/feeds/7825222487992668834/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://mydiary-musiclife.blogspot.com/2014/05/opengl-3d.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/7825222487992668834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/7825222487992668834'/><link rel='alternate' type='text/html' href='http://mydiary-musiclife.blogspot.com/2014/05/opengl-3d.html' title='Система OpenGL взгляд на 3D графику...'/><author><name>Олег Плотников</name><uri>http://www.blogger.com/profile/09565341549892337662</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMngPyLJlEoi7az8pTbmOzc4zvItEDlu6566D7oVxHbPFF4d584pBN8SQ2WT-ZXXDbb0VOw9lVV_KOghLkJXW-Yyw4nCVV8vfj54bB2h29wlnEeDFtqh9DadbqrB1q-GVdB698BGkWpHE/s72-c/%D0%91%D0%B5%D0%B7%D1%8B%D0%BC%D1%8F%D0%BD%D0%BD%D1%8B%D0%B9.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4128461228562744870.post-9050409092362321302</id><published>2014-05-27T15:41:00.000+04:00</published><updated>2014-05-27T15:41:06.876+04:00</updated><title type='text'>Переходим на C++, C#</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;Переходим на C++, C#&lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
Попробую написать заметки о переходе с делфи на MS VS C++, C# это было связано с 3D графикой на платформе OpenGL под паскаль существует конечно много всего но это много переделанно и требуется много изворотов, вместо этого можно перейти на стандарт в графике, игростроении на C++ а сейчас уже Си шарп.&lt;br /&gt;
&lt;br /&gt;
Я попробую описать систему OpenGL как я ее увидел, что в ней меня удивило, что понравилось, свое мировозрение на данную графическую систему, конечно все началось с желания написать небольшую игрушку а закончилось ( ну надеюсь еще не закончилось ))) геометрией, математикой и прочими смежными задачами без которых дальнейшее продвижение практически не возможно.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://mydiary-musiclife.blogspot.com/feeds/9050409092362321302/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://mydiary-musiclife.blogspot.com/2014/05/c-c.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/9050409092362321302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/9050409092362321302'/><link rel='alternate' type='text/html' href='http://mydiary-musiclife.blogspot.com/2014/05/c-c.html' title='Переходим на C++, C#'/><author><name>Олег Плотников</name><uri>http://www.blogger.com/profile/09565341549892337662</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4128461228562744870.post-8581357201484413195</id><published>2013-02-10T17:25:00.000+04:00</published><updated>2013-02-10T17:25:39.273+04:00</updated><title type='text'>Поиск самого себя или запутался в себе</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;Поиск самого себя или запутался в себе...&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Хочу предложить выводы по этому поводу как многие заблуждаются, если они думают иначе то это их путь развития ни кого не хочу осуждать.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
В чем заключаются заблуждения?&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Проведя более недели в поисках ответов различными методиками, эксперементируя над собой прикасаясь к психологии и к обществу делаю вывод над извечным вопросом который многие себе задают &quot;Для чего я живу, Кто я есть? Как мне найти самого себя? Что делать и куда двигаться? &quot;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Когда появляется ощущение это именно ощущение при том ложное что ты запутался,заблудился или попал в замкнутый порочный круг, как говорят безвыходная ситуация, то знайте что проблема в том что мы не видим выхода, он есть, но мы его не видим.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Туман который застилает нам глаза дабы оттолкнуть нас от истинной причины которая конечно же прячется внутри нас. В качестве этого тумана выступает государство вот оно такое и такое то и из-за него все проблемы, или вот моя подруга или жена такая ... и такая то что проблема вот в ней а не во мне ну и многие другие не буду их озвучивать.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Что это за причина? Конечна у каждого она своя так сказать индивидуальна по другому и не может быть. Эта причина защищает нашу психику от изменений ( ведь все мы любим стабильность и не любим что-то менять) это и хорошо и плохо. Эта причина закрывает другую более мощную или более высокую проблему личностного характера,своего Я и т.п. Если это мешает можно попробывать разобраться и если это возможно то удалить, конечно без адской работы здесь не обойтись здесь не будет магических заклинаний после прочтения которых мы искореним нашу проблему нет конечно, нужно что-то изменять в себе что бы что то получить.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Насчет заблуждений или тупиков или безвыходных положений назовите как нравится.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Если вы находитесь в таком состоянии то нужен лист бумаги, клочек газеты, блокнот, компьютерный редактор вообщем любая вещь в которой можно сделать записи.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Это трудная вещь но если другого выхода нет то попробуйте этот, не получится значит нет, а если получится? Нужно задавать себе вопросы и пытаться на них отвечать честно и добросовестно, перед этим вероятно нужно очистить разум от мыслей, сделать физические упражнения (буквально нужно измотать себя физиологически) короче говоря отключить разум и не вести внутренний диалог, как это сделать это отдельная тема, самое &quot;простое&quot; это смотреть на один предмет стараясь ни о чем не думать, можно попробывать считать от 100 до 1 или от 1000 кому сколько надо времени )))&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Нужно расслабится как физически так и умственно. После этого велика вероятность положительного исхода нашего теста. Задаем себе вопрос в чем моя проблема? что я хочу добиться в моем случае излагаете вашу ситуацию, для чего это я делаю.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
И тут мы приходим к одной очень важной вещи это чужие цели,намерения,стремления,желания и свои собственные. Свои собственные можно отличить если думая о них мы испытываем что-то положительное в душе, в теле иначе это не наше, а если не наше зачем это нам? Это внушение друзей,окружения,соседей, рекламы,общества и т.д Это они потребители, а вы действуете для их них целей. Для чего это вам?&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Итак забрели мы глубоко будем выбираться. Все безвыходные ситуации заключены в ПРОТИВОРЕЧИИ и в не видении выхода. Как разрешить противоречия? Здесь просто необходимо отделить свои цели от чужих и установить приоритеты важности. Это действительно важно вам? и с привязкой ко времени тот же вопрос Это нужно мне будет завтра? и для чего и т.д&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Почему мы не видим выход? Потому что мы находимся на другом уровне мировозрения ну это конечно я слишком утрировал, сейчас поясню. Вы находитесь в другой модели мира, когда ищите выход, но выход находится на ступень выше в более высокой модели вашей ситуации.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Нужно подняться над своей проблемой и осмотреться что находится вокруг нее и рядом.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Приведу пример приходит мой друг и начинает фактически жаловаться на своего начальника что вот он сегодня злой какой то, ну как собака кидается на всех включая и его, и перечисляет,перечисляет и не может понять что там такое случилось с начальником (ну это еще хорошо) в более тяжелых случаях скажем мой друг принимает нападки начальника на себя всерьез ну мол вот он объявил меня неспособным, не умелым ,ленивым и т.д список продолжается.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Мораль такова начальник получил неудовлетворение своих желаний или ему передали подобное как он передает сотрудникам, вариантов может быть много но суть в одном человек чего то не получил (внимание от своей жены или любви как физической так и душевной) и вот он испускает пар. Если ему это дать или дать что-то похожее то он конечно начнет успокаиваться постепенно,но это мы уже зашли не в ту степь не будем решать проблему оставим это в стороне.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Вот она и модель другого виденья проблемы, можно часами искать почему он придирается, почему он такой злой, почему не справедливый и т.д и т.п&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Как военные так и государственные структуры любят пускать дезинформацию в народ дабы сбить со следа что еще хуже так это когда человеку подсовывают две лжи что бы человек метался в противоречии т.е искал выход где его нет ( в двух ложных ценностях их нет) он находится выше этих &quot;истин&quot;. Нас пытаются приучить к тому что чем быстрее что-то работает тем оно лучше,круче и полезней, все это чушь.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Нас постоянно хотят чем то занять играми,телефонами,супер плазмами и т.д и т.п что бы мы не могли копатся внутри себя что бы мы не могли найти критериев истины, иначе мы будем расти как личность, а не как потребитель. Это тяжело,трудно, но полезно и это единственный путь стать свободным и разумным человеком.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://mydiary-musiclife.blogspot.com/feeds/8581357201484413195/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://mydiary-musiclife.blogspot.com/2013/02/blog-post_10.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/8581357201484413195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/8581357201484413195'/><link rel='alternate' type='text/html' href='http://mydiary-musiclife.blogspot.com/2013/02/blog-post_10.html' title='Поиск самого себя или запутался в себе'/><author><name>Олег Плотников</name><uri>http://www.blogger.com/profile/09565341549892337662</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4128461228562744870.post-4534315287405977930</id><published>2013-02-02T01:15:00.000+04:00</published><updated>2013-02-02T01:15:11.342+04:00</updated><title type='text'>Как выучить английский</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Совсем недавно узнал как быстро выучить английский язык есть такая методика как метод Ильи Франка вот пару сайтов которые я посетил&amp;nbsp;&lt;a href=&quot;http://lib.rus.ec/&quot; target=&quot;_blank&quot;&gt;Книги&lt;/a&gt;&amp;nbsp;и&amp;nbsp;&lt;a href=&quot;http://www.franklang.ru/&quot; target=&quot;_blank&quot;&gt;Метод&lt;/a&gt;. Данная технология очень проста и следовательно очень эффективна! вы скачиваете любую интересную вам книгу специально обработанную в которой после каждого предложения имеется перевод не только самого предложения но и значения конкретных слов в контексте данного предложения далее идет оригинальный текст на английском дабы потренироваться. Посмотрите эту эффективную методику.&lt;br /&gt;
&lt;br /&gt;
Также посоветую посмотреть курс &quot;Полиглот изучаем английский за 16 уроков&quot; данный курс проходил по тв каналу культура в данный момент идет такой же курс но только французского можно посмотреть на ютубе вот ссылочка&amp;nbsp;&lt;a href=&quot;http://www.youtube.com/watch?v=xIqeuGKGiVw&quot; target=&quot;_blank&quot;&gt;Английский за 16 уроков&lt;/a&gt;&amp;nbsp;либо можете сами найти по названию курса.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://mydiary-musiclife.blogspot.com/feeds/4534315287405977930/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://mydiary-musiclife.blogspot.com/2013/02/blog-post_8144.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/4534315287405977930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/4534315287405977930'/><link rel='alternate' type='text/html' href='http://mydiary-musiclife.blogspot.com/2013/02/blog-post_8144.html' title='Как выучить английский'/><author><name>Олег Плотников</name><uri>http://www.blogger.com/profile/09565341549892337662</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4128461228562744870.post-7157392594316944870</id><published>2013-02-02T00:53:00.001+04:00</published><updated>2013-02-02T00:53:09.585+04:00</updated><title type='text'>Тип личности</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
Если вы еще не опредились кто вы по характеру то вот вам стоящая книга&amp;nbsp;&lt;a href=&quot;http://royallib.ru/get/html/ediges_arkadiy/kak_nauchitsya_razbiratsya_v_lyudyah.zip&quot; target=&quot;_blank&quot;&gt;Основные типы личности&lt;/a&gt;.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://mydiary-musiclife.blogspot.com/feeds/7157392594316944870/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://mydiary-musiclife.blogspot.com/2013/02/blog-post_2.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/7157392594316944870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/7157392594316944870'/><link rel='alternate' type='text/html' href='http://mydiary-musiclife.blogspot.com/2013/02/blog-post_2.html' title='Тип личности'/><author><name>Олег Плотников</name><uri>http://www.blogger.com/profile/09565341549892337662</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4128461228562744870.post-1961954141354436187</id><published>2013-02-02T00:50:00.001+04:00</published><updated>2013-02-02T00:50:39.248+04:00</updated><title type='text'>Психологические лекции</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Натолкнулся недавно на одного очень интересного человека вот его видео&amp;nbsp;&lt;a href=&quot;http://www.youtube.com/playlist?list=PL3BC74430E0CE6904&amp;amp;feature=edit_ok&quot; target=&quot;_blank&quot;&gt;Интересные видео&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Посмотрите стоящие просмотра так сказать мини лекции и заставляют о многом задуматься.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://mydiary-musiclife.blogspot.com/feeds/1961954141354436187/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://mydiary-musiclife.blogspot.com/2013/02/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/1961954141354436187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/1961954141354436187'/><link rel='alternate' type='text/html' href='http://mydiary-musiclife.blogspot.com/2013/02/blog-post.html' title='Психологические лекции'/><author><name>Олег Плотников</name><uri>http://www.blogger.com/profile/09565341549892337662</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4128461228562744870.post-536798663469522165</id><published>2013-01-07T00:55:00.003+04:00</published><updated>2013-01-07T00:55:53.108+04:00</updated><title type='text'>Стихи-проза :)</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;++++&lt;br /&gt;&lt;br /&gt;Я знаю... жизнь описую годами&lt;br /&gt;В стремлениях к свободе... и любви&lt;br /&gt;Мы обретаем и теряем сами&lt;br /&gt;Не успевая получать... что ждем внутри&lt;br /&gt;Но посуди... ведь мы изгнанники, своего же рая&lt;br /&gt;О чем желеем? И о чем грустим?&lt;br /&gt;Быстрей хотим, а время не охотно отдавая&lt;br /&gt;Скорбим о том чего не получая&lt;br /&gt;А суть ведь в том, что нужно жить играя&lt;br /&gt;Не в просьбах и молитвах увядаяя&lt;br /&gt;А просто брать, взамен надежд&lt;br /&gt;Мечты увянут и надежды сгинут&lt;br /&gt;А тело превратится в прах&lt;br /&gt;Мы страстно, все годы желаем&lt;br /&gt;В фантазиях долго блуждаем&lt;br /&gt;Реальность сменив, на сказочный сон&lt;br /&gt;А утро опять же встречаем&lt;br /&gt;В разбитых надеждах&lt;br /&gt;В осколках от сна&lt;br /&gt;Мы вновь пелену на себя одеваем&lt;br /&gt;И тяжко шагаем на встречу судьбе&lt;br /&gt;Очнись от фантазий&lt;br /&gt;Уйди от внушений&lt;br /&gt;Годами накопленных&lt;br /&gt;Тяжких цепей&lt;br /&gt;Взгляни по другому&lt;br /&gt;На жалости дней&lt;br /&gt;Уйди от сплетений&lt;br /&gt;Моралей и страхов&lt;br /&gt;Ты очень силен&lt;br /&gt;И свобода в тебе&lt;br /&gt;Проблема в внушеньях мира сего&lt;br /&gt;Не поддавайся системе кнутов&lt;br /&gt;Не стоит бежать за стадом быков&lt;br /&gt;&lt;br /&gt;***&lt;br /&gt;Ты говоришь себе &lt;br /&gt;Что одинок?&lt;br /&gt;Но что ты знаешь&lt;br /&gt;Приводя свой довод?&lt;br /&gt;Мне говорят что одинок&lt;br /&gt;В душе ты сам&lt;br /&gt;Когда не в силах&lt;br /&gt;Обуздать все чувства&lt;br /&gt;Всему виной эмоции и чувства&lt;br /&gt;Куда без них ответит мне глупец&lt;br /&gt;Нет я не стал с годами всех мудрей&lt;br /&gt;Я просто отыскал одну лишь мудрость&lt;br /&gt;Шагай вперед и думай о своем&lt;br /&gt;Когда терпение превысит чащу грусти&lt;br /&gt;Ты не сомненно обретешь&lt;br /&gt;То что, так сильно, в этой жизни ждешь&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://mydiary-musiclife.blogspot.com/feeds/536798663469522165/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://mydiary-musiclife.blogspot.com/2013/01/blog-post_5474.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/536798663469522165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/536798663469522165'/><link rel='alternate' type='text/html' href='http://mydiary-musiclife.blogspot.com/2013/01/blog-post_5474.html' title='Стихи-проза :)'/><author><name>Олег Плотников</name><uri>http://www.blogger.com/profile/09565341549892337662</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4128461228562744870.post-6206421285650985183</id><published>2013-01-05T20:57:00.001+04:00</published><updated>2013-01-05T20:57:18.527+04:00</updated><title type='text'>Потоки и вирусы</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;strong&gt;Выявление вирусов через потоки&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
Итак приступим к действиям выявления вредоносных &quot;программ&quot; с основных понятий без которых ну ни как не обойтись.&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Мы должны четко и ясно разделять две вещи: &lt;br /&gt;&lt;br /&gt;1. процессы они же программы могут работать на низком привелигированном уровне ( User mode - 3 ring - пользовательский режим  - 3 кольцо процессора )&lt;br /&gt;2. процессы работающие на высоком уровне доступа к ОСи (Kernel mode - 0 ring - ядерный режим нулевое кольцо процессора) ядерный в смысле ядро ОСи&lt;br /&gt;&lt;br /&gt;Для простоты будем рассматривать ядерные процессы или структуры если не указаны они значит мы обсуждаем пользовательский режим.&lt;br /&gt;&lt;br /&gt;На сегоднящний день мы знаем что технология файлового заражения все больше и больше отступает  вирусам (любой вредоносный код) которые не заражают файлы и не создают отдельные файлы т.к это слишком подозрительно и любой сегоднящний антивирус умеет найти новый или зараженный файл.&lt;br /&gt;&lt;br /&gt;Можно даже смело сказать что серьезные вирусные вещи забыли что такое файл и процесс. Почему это так я объсню.&lt;br /&gt;&lt;br /&gt;С далеких времен пошло что внедрятся в чужой процесс вирусам намного легче и менее заметно чем устаревшие технологии заражения файлов или что еще хуже создавать свой файл как бы он не назывался не суть важно. Заражение чужих процессов такое как внедрение библиотеки *.dll или внедрение вирусного потока threads в потоки законной программы это сегоднящний уровень развития малвари ( малварь будет короче и звучнее вирусов )&lt;br /&gt;&lt;br /&gt;Итак что мы имеем? Имеется программа к примеру винамп лежит себе спокойно на любом известном нам носителе и никого не трогает. Все изменяется при запуске винампа&lt;br /&gt;а что происходит при запуске винампа? да то что и при запуске любой программы - происходит проэцирование файла программы в оперативку ОСи фактически можно сказать что ОСь копирует файл с диска в память это будет конечно не правильно с точки зрения программиста, ну да мы сейчас не об этом ведем речь.&lt;br /&gt;&lt;br /&gt;Проэцируясь в память программа переходит на новый этап создавая процесс в системе. Процесс имеет код, ресурсы, потоки и многое другое. Код это конечно сам алгоритм программы выраженный в машинных кодах ресурсы это данные над которыми работает программа включая различные необходимые вещи как иконки курсоры картинки строки и пр.&lt;br /&gt;&lt;br /&gt;Все это понятно, но что такое поток? Многие из нас слышали про многопоточные программы к примеру брутофорсеры. Понятие потока заводит нас в тему однозадачных и многозадачных ОСей в первом случае это ms dos во втором win98 и все остальные. В однозадачных системах в любой момент времени выполнялась всего лишь одна задача и не более, если нужно было к примеру подсчитать что нибудь математическое то требовалось закрыть текстовый редактор а потом открыть калькулятор, выполнив вычисления закрыть программу и открыть снова редактор дабы продолжить записывать то с чем мы работали. &lt;br /&gt;&lt;br /&gt;Вот такое вот неудобство было в далеком времени но слава Богу эти времена канули в прошлое и мы сегодня можем запустить бесконечное количество программ и переключатся между ними в любое удобное нам время. В многозадачных системах решение было найдено путем переключения процессов по сути это кратковременное выделение времени процессора какому либо одному процессу, а т.к мы сегодня имеем большие мощности процессоров то мы не можем заметить как система успевает обслужить все процессы в системе а их не мало! и уделить внимание любой нуждаещейся в этом программе.&lt;br /&gt;&lt;br /&gt;В понятиях системы время - это период начинающийся с переключения одного процесса на другой. Раз мы можем запускать энное количество процессов то почему бы нам не запускать внутри любого процесса энное количество потоков ( подпрограмм ) так и поступили разработчики осуществив эту задачу.&lt;br /&gt;&lt;br /&gt;Самый простой пример потоков какой только приводят в подобных статьях это офиссный пакет не важно ворд или эксель важно то что один поток проверяет орфографию текста другой подсчитывает количество слов в документе третий вообще может проверять текст на внедренный макровирусы (макросы внутри доков). С точки зрения программирования т.е практики то здесь все намного проще когда ваша написанная программа будет довольно значительное время занята работой ( долгая закачка файла из сети, обработка базы данных, смещивание фотографий или наложение на них различных эффектов ну и т.д) и выводить как положено временную шкалу указывающую сколько осталось до конца операций с данными то фактически программа не сможет реагировать на действия пользователя, а пользователь может захотеть залезть в настройки вашей программы или побегать по меню посмотрев чем же богата программа и каков ее потенциал то в этот момент программа даже не сможет себя прорисовать т.е свой интерфейс не то что бы выполнить еще одну задачу это говорит о том что программа не выделяет потоки для одновременной обработки данных.&lt;br /&gt;&lt;br /&gt;В таком случае приходят к многопоточности которую нужно реализовать в программе. Не вдаваясь в технические подробности как писать потоки и как их реализовать в своем софте можно смело сказать что поток это подпрограмма и не более того. В таком случае выходит что система мало того что переключает процессы и каждому выделяет квант времени да к тому же еще переключает и потоки процесса. Ну да мы слегка отвлеклись вернемся к тому как же выявить чужеродный поток в законном процессе.&lt;br /&gt;&lt;br /&gt;Открыв карту памяти любого процесса ( к примеру это можно сделать в любом вам известном отладчике, а тем кому это не известно используем отладчик OllyDbg) в ольке ))) OllyDebuger хорошо сейчас опишу по проше.&lt;br /&gt;&lt;br /&gt;Открываем отладчик шагаем в file -&amp;gt; attache запускаем блокнот notepad.exe или что вам хочется эт по вкусу и выбираем блокнот в списке процессов нажав атач.&lt;br /&gt;Дальше не обращая внимание на все окна в программе смело шагаем в меню view-&amp;gt;Memory и вот перед нами открывает карта процесса блокнота.&lt;br /&gt;&lt;br /&gt;Не спешите разбиратся что здесь к чему это отдельная тема нам нужна всего лишь одна колонка Type т.е тип памяти. Каждая область памяти имеет атрубуты :&lt;br /&gt;&lt;br /&gt;только для чтения, выполнение и другие это похоже на файловые атрибуты. Важно понять что атрибуты эти указывают права для данного участка памяти т.е либо на страницу памяти стоит запрет на запись и тогда при попытке записать что-то либо произойдет исключение аля критическая ошибка.&lt;br /&gt;&lt;br /&gt;Так вот код программы должен находится в секции памяти с типом Image ( Imag 0100 лично у меня так отображает отладчик ) если он код программы находится в приватном типе Priv то это очень подозрительно и так не должно быть. Есть еше один тип Map это мэппирование файлов ( читай проэцирование больших объемных файлов в память ) по этому поводу листай темы по функциям CreateFileMapping(); Mapviewoffile(); конечно же это не принципиально важно в делфи в си или си++ вы будете писать, структуры и апи одни и теже разница только в оформлении и синтаксисе вашего языка программирования. &lt;br /&gt;&lt;br /&gt;Короче говоря вы должны усвоить важное понятие что в каком бы участке памяти процесса не был бы код нужно смотреть на ассемблерный листинг что там происходит а это конечно же уже отдельная тема и здесь я об этом не буду говорить.&lt;br /&gt;&lt;br /&gt;Вы спросите меня причем здесь внедренный код в память процесса ? когда я собирался говорить о потоках.&lt;br /&gt;Да здесь я немножко виноват забыв описать одну технологию внедрения кода малвари во все процессы к примеру проэцирование кода малварной библиотечки.&lt;br /&gt;&lt;br /&gt;Имеется такая функция VirtualAlloc(Ex) которая может выделить из кучи памяти необходимый вам буфер нужного вам размера потом с помощью WriteProcessMemory мы внедряем вирусный код. Вот для этого я и описывал эту технологию.&lt;br /&gt;&lt;br /&gt;А теперь шагаем дальше и посмотрим потоки блокнота view-&amp;gt;Threads не знаю как у вас у меня их обнаружилось всего лишь два ну да ничего это не страшно два или десять )))&lt;br /&gt;&lt;br /&gt;Что бы понять что поток наш а не внедренный вирусом необходимо все таки поднатаскатся опыта либо взламывания программ ( www.exelab.ru вам в помощь ) либо практика программирования системы плюс ко всему необходимо хотя бы минимальное знание ассемблера - машинного кода который отображает нам отладчик только тогда будет понятно что делает код потока или процесса.&lt;br /&gt;&lt;br /&gt;Диспетчер задач Марка Руссиновича показывает довольно подробные сведенья о потоках можно по надеятся на аномальные показатели в количестве потоков в процессе или очень большое время процессор выделяет какому либо процессу ну и как следствие потоку или потокам но это как говорится как повезет 50 на 50 по крайней мере знать об этом полезно, но в большинстве случаев необходимо разбиратся с кодом и смотреть что он делает и что может сделать.&lt;br /&gt;&lt;br /&gt;Варианты когда вирус мог сильно нагружать систему как по процессору так и по памяти ушли в далекие времена,а если и будет что-то подобное то это скорее исключение чем правило либо вирус далеких времен. Сейчас малварь сидит тихо ( если вообще сидит ? собрали пароли,скопировали важные данные и ушли зачем сидеть в системе? ) и не делает критических ошибок и не пожирает память неимоверно.&lt;br /&gt;&lt;br /&gt;Еще стоит нам рассмотреть такую тему как чем же отличается получение списка процессов в 3м кольце со списком процессов в нулевом кольце?&lt;br /&gt;&lt;br /&gt;В нулевом кольце аля ядре системы имеется двусвязный список - замкнутый кольцевой список в этом списке и имеются все процессы ОСи.&lt;br /&gt;Стоит сравнить результаты получения списка процессов в пользовательском режиме и в ядерном и будет сразу видно скрытые процессы - руткиты или поточнее скрытый процесс малвари использующей руткитные технологии. С уровня пользователя мы не сможем увидеть все скрытые процессы ( если конечно малварь закрепилась в ядре ОС) только нырнув глубже ближе к ядру ОС теплее ))) &lt;br /&gt;&lt;br /&gt;И в ядре малварь может себя скрыть, но там это будет легко узнать,а вот с высоты пользовательского режима это сделать не возможно.&lt;br /&gt;Доступ к ядру имеют драйверы поэтому диспетчер задач если будете писать его должен использовать драйвер для перехода в режим ядра либо в другой какой нибудь антивирусной утилитке. Ну про это как нибудь напишу в другой раз.&lt;br /&gt;&lt;br /&gt;Ну и для закрепления всей описанной мной теории стоит попрактиковатся и посмотреть кто есть кто&lt;br /&gt;советую почитать книгу по руткитам вирусам Олега Зайцева автора антивируса AVZ&lt;br /&gt;&lt;br /&gt;вот пример который взят из его книги это по поводу внедрения дллки в процесс.&lt;br /&gt;&lt;br /&gt;1.Собираем библиотечку test_td в делфи&lt;br /&gt;2.собираем программу код ее ниже и запускаем ее смотрим как происходит это на практике&lt;br /&gt;&lt;br /&gt;Если не знаете как это делать то значит пока еще рано к этому переходить начните с азов, а для тех кто в силах провести испытание&lt;br /&gt;сразу предупреждаю что код я не тестировал просто валялся в далеком уголке винта и я решил добавить его сюда, если есть страх &quot;заражения&quot; то лучше&lt;br /&gt;не пробуйте это на практике. Сама суть этой же практике довольно подробно описана у Зайцева читайте.&lt;br /&gt;&lt;br /&gt;И еще изучайте ассемблер,программируйте побольше и конечно же приобретите навыки крякера будет полезно в любом случае. Удачи вам в борьбе добра со злом :)&lt;br /&gt;&lt;br /&gt;=============================== Код самой дллки ================================&lt;br /&gt;&lt;br /&gt;    library test_td;&lt;br /&gt;&lt;br /&gt;uses&lt;br /&gt;  wintypes,&lt;br /&gt;  winprocs,&lt;br /&gt;  messages;&lt;br /&gt;&lt;br /&gt;var HookHandle :hHook;&lt;br /&gt;&lt;br /&gt;function HookProc(ncode:integer;wparam:word; lparam:longint):longint;stdcall&lt;br /&gt;&lt;br /&gt;begin&lt;br /&gt;         result:=callnexthookex(hookhandle,ncode,wparam,lparam);&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;function sethook(hookhandle:hhook):hhook;stdcall;&lt;br /&gt;begin&lt;br /&gt;       if hookhandle=0 then &lt;br /&gt;    result:=setwindowshookex(wh_getmessage,@hookproc,hinstance,0);&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure DelHook;stdcall;&lt;br /&gt;begin&lt;br /&gt;        if HookHandle&amp;lt;&amp;gt;0 then begin&lt;br /&gt;   UnHookWindowsHookEx(HookHandle);&lt;br /&gt;    HookHandle:=0;&lt;br /&gt;  end;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;exports SetHook,DelHook;&lt;br /&gt;&lt;br /&gt;begin&lt;br /&gt;HookHandle:=0;&lt;br /&gt;end.&lt;br /&gt;&lt;br /&gt;================================= конец дллки =============================&lt;br /&gt;&lt;br /&gt;================================= код программы инжектора =================&lt;br /&gt;unit Loader_Injecter;&lt;br /&gt;&lt;br /&gt;interface&lt;br /&gt;&lt;br /&gt;uses&lt;br /&gt;  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,&lt;br /&gt;  Dialogs, Menus, StdCtrls;&lt;br /&gt;&lt;br /&gt;type&lt;br /&gt;  TForm1 = class(TForm)&lt;br /&gt;    Button1: TButton;&lt;br /&gt;    PopupMenu1: TPopupMenu;&lt;br /&gt;    SetHook1: TMenuItem;&lt;br /&gt;    DelHook1: TMenuItem;&lt;br /&gt;    procedure Button1Click(Sender: TObject);&lt;br /&gt;    procedure SetHook1Click(Sender: TObject);&lt;br /&gt;    procedure DelHook1Click(Sender: TObject);&lt;br /&gt;    procedure FormCreate(Sender: TObject);&lt;br /&gt;  private&lt;br /&gt;    { Private declarations }&lt;br /&gt;  public&lt;br /&gt;    { Public declarations }&lt;br /&gt;  end;&lt;br /&gt;  &lt;br /&gt;   const&lt;br /&gt;         MyHookDllName=&#39;test_td.dll&#39;;&lt;br /&gt;   function SetHook:LongInt;stdcall;external MyHookDllName;&lt;br /&gt;   function DelHook:LongInt;stdcall;external MyHookDllName;&lt;br /&gt;var&lt;br /&gt;  Form1: TForm1;&lt;br /&gt;&lt;br /&gt;implementation&lt;br /&gt;&lt;br /&gt;{$R *.dfm}&lt;br /&gt;&lt;br /&gt;procedure TForm1.Button1Click(Sender: TObject);&lt;br /&gt;begin&lt;br /&gt;       popupmenu1.Popup(mouse.CursorPos.X,mouse.CursorPos.Y);&lt;br /&gt;       &lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TForm1.SetHook1Click(Sender: TObject);&lt;br /&gt; var recipients:dword;&lt;br /&gt;begin&lt;br /&gt;&lt;br /&gt;sethook;&lt;br /&gt;&lt;br /&gt;    recipients:=bsm_allcomponents;&lt;br /&gt;     BroadCastSystemMessage(bsf_forceifhung or bsf_ignorecurrenttask,@recipients,wm_null,0,0);&lt;br /&gt;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TForm1.DelHook1Click(Sender: TObject);&lt;br /&gt;begin&lt;br /&gt;&lt;br /&gt;delhook;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;var hlib:cardinal;&lt;br /&gt;begin&lt;br /&gt;    hLib:=loadlibrary(pchar(&#39;test_td.dll&#39;));&lt;br /&gt;     if hLib=0 then begin showmessage(&#39;Library is not found&#39;);exit;end;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;end.&lt;br /&gt;&lt;br /&gt;================================ Конец инжектора ))) ==============================&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://mydiary-musiclife.blogspot.com/feeds/6206421285650985183/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://mydiary-musiclife.blogspot.com/2013/01/blog-post_7475.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/6206421285650985183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/6206421285650985183'/><link rel='alternate' type='text/html' href='http://mydiary-musiclife.blogspot.com/2013/01/blog-post_7475.html' title='Потоки и вирусы'/><author><name>Олег Плотников</name><uri>http://www.blogger.com/profile/09565341549892337662</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4128461228562744870.post-5624378641099003910</id><published>2013-01-05T13:32:00.001+04:00</published><updated>2013-01-05T13:37:44.748+04:00</updated><title type='text'>Диспетчер задач руткиты,вирусы и многое другое</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;b&gt;Диспетчер задач руткиты,вирусы и многое другое&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Я покажу как написать на паскале аля делфи диспетчер задач как с помощью него искать руткиты (скрытые вредоносные процессы) используя проверку процессов в ядре ОСи и как на основе статистики о потоках процессов можно выявить внедренный &quot;вирусный&quot; код инжектированный поток adware,spyware etc конечно одним диспетчером задач мы не обойдемся и прийдется использовать отладчик фактически любой как вариант OllyDbg&amp;nbsp;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://mydiary-musiclife.blogspot.com/feeds/5624378641099003910/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://mydiary-musiclife.blogspot.com/2013/01/blog-post_5.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/5624378641099003910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/5624378641099003910'/><link rel='alternate' type='text/html' href='http://mydiary-musiclife.blogspot.com/2013/01/blog-post_5.html' title='Диспетчер задач руткиты,вирусы и многое другое'/><author><name>Олег Плотников</name><uri>http://www.blogger.com/profile/09565341549892337662</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4128461228562744870.post-7987612384877722949</id><published>2013-01-05T13:24:00.000+04:00</published><updated>2013-01-05T13:24:10.117+04:00</updated><title type='text'>Напишем банальный калькулятор</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;strong&gt;Обычный калькулятор на Паскале.&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
Калькулятор как калькулятор,правда не смейтесь с кода я писал его довольно давно на заре начинания в азах программирования сейчас бы я уж точно так не написал бы )))&lt;br /&gt;
&lt;br /&gt;
Для начинающих думаю сгодится хотя бы даже как пример как не стоит писать калькулятор.&lt;br /&gt;
Код ниже а не понятные места возможно я разберу в следующей статье&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unit Unit1;&lt;br /&gt;
&lt;br /&gt;
interface&lt;br /&gt;
&lt;br /&gt;
uses&lt;br /&gt;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,&lt;br /&gt;
Dialogs, Buttons, StdCtrls,Math, Menus;&lt;br /&gt;
&lt;br /&gt;
type&lt;br /&gt;
TForm1 = class(TForm)&lt;br /&gt;
Edit1: TEdit;&lt;br /&gt;
SpeedButton1: TSpeedButton;&lt;br /&gt;
SpeedButton2: TSpeedButton;&lt;br /&gt;
SpeedButton3: TSpeedButton;&lt;br /&gt;
SpeedButton4: TSpeedButton;&lt;br /&gt;
SpeedButton5: TSpeedButton;&lt;br /&gt;
SpeedButton6: TSpeedButton;&lt;br /&gt;
SpeedButton7: TSpeedButton;&lt;br /&gt;
SpeedButton8: TSpeedButton;&lt;br /&gt;
SpeedButton9: TSpeedButton;&lt;br /&gt;
SpeedButton10: TSpeedButton;&lt;br /&gt;
SpeedButton11: TSpeedButton;&lt;br /&gt;
SpeedButton12: TSpeedButton;&lt;br /&gt;
SpeedButton13: TSpeedButton;&lt;br /&gt;
SpeedButton14: TSpeedButton;&lt;br /&gt;
SpeedButton15: TSpeedButton;&lt;br /&gt;
SpeedButton16: TSpeedButton;&lt;br /&gt;
SpeedButton17: TSpeedButton;&lt;br /&gt;
SpeedButton18: TSpeedButton;&lt;br /&gt;
SpeedButton19: TSpeedButton;&lt;br /&gt;
SpeedButton20: TSpeedButton;&lt;br /&gt;
SpeedButton21: TSpeedButton;&lt;br /&gt;
SpeedButton22: TSpeedButton;&lt;br /&gt;
SpeedButton23: TSpeedButton;&lt;br /&gt;
PopupMenu1: TPopupMenu;&lt;br /&gt;
N1: TMenuItem;&lt;br /&gt;
procedure SpeedButton8Click(Sender: TObject);&lt;br /&gt;
procedure SpeedButton16Click(Sender: TObject);&lt;br /&gt;
procedure SpeedButton1Click(Sender: TObject);&lt;br /&gt;
procedure SpeedButton2Click(Sender: TObject);&lt;br /&gt;
procedure SpeedButton3Click(Sender: TObject);&lt;br /&gt;
procedure SpeedButton5Click(Sender: TObject);&lt;br /&gt;
procedure SpeedButton6Click(Sender: TObject);&lt;br /&gt;
procedure SpeedButton7Click(Sender: TObject);&lt;br /&gt;
procedure SpeedButton10Click(Sender: TObject);&lt;br /&gt;
procedure SpeedButton14Click(Sender: TObject);&lt;br /&gt;
procedure SpeedButton15Click(Sender: TObject);&lt;br /&gt;
procedure SpeedButton12Click(Sender: TObject);&lt;br /&gt;
procedure SpeedButton9Click(Sender: TObject);&lt;br /&gt;
procedure SpeedButton13Click(Sender: TObject);&lt;br /&gt;
procedure SpeedButton4Click(Sender: TObject);&lt;br /&gt;
procedure SpeedButton11Click(Sender: TObject);&lt;br /&gt;
procedure SpeedButton17Click(Sender: TObject);&lt;br /&gt;
procedure SpeedButton18Click(Sender: TObject);&lt;br /&gt;
procedure SpeedButton19Click(Sender: TObject);&lt;br /&gt;
procedure SpeedButton20Click(Sender: TObject);&lt;br /&gt;
procedure SpeedButton21Click(Sender: TObject);&lt;br /&gt;
procedure SpeedButton22Click(Sender: TObject);&lt;br /&gt;
procedure SpeedButton23Click(Sender: TObject);&lt;br /&gt;
procedure N1Click(Sender: TObject);&lt;br /&gt;
private&lt;br /&gt;
{ Private declarations }&lt;br /&gt;
public&lt;br /&gt;
{ Public declarations }&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
Form1: TForm1;&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
{$R *.dfm}&lt;br /&gt;
var&lt;br /&gt;
plus,minus,del,umnoj:boolean;&lt;br /&gt;
a,b:real;&lt;br /&gt;
st:string;&lt;br /&gt;
r:real; //result operation&lt;br /&gt;
kn:tspeedbutton;&lt;br /&gt;
memory:string;//закинем в память&lt;br /&gt;
&lt;br /&gt;
Procedure GetOp;&lt;br /&gt;
var str:string;&lt;br /&gt;
i:integer;&lt;br /&gt;
pos_op:integer;&lt;br /&gt;
a_,b_:string;&lt;br /&gt;
begin&lt;br /&gt;
With Form1 do&lt;br /&gt;
begin&lt;br /&gt;
str:=edit1.Text;&lt;br /&gt;
For i:=0 to Length(str) do&lt;br /&gt;
begin&lt;br /&gt;
if str[i]=&#39;+&#39; then&lt;br /&gt;
plus:=true;&lt;br /&gt;
if str[i]=&#39;-&#39; then&lt;br /&gt;
minus:=true;&lt;br /&gt;
if str[i]=&#39;*&#39; then&lt;br /&gt;
umnoj:=true;&lt;br /&gt;
if str[i]=&#39;/&#39; then&lt;br /&gt;
del:=true;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
if plus then&lt;br /&gt;
pos_op:=pos(&#39;+&#39;,str);&lt;br /&gt;
if minus then&lt;br /&gt;
pos_op:=pos(&#39;-&#39;,str);&lt;br /&gt;
if del then&lt;br /&gt;
pos_op:=pos(&#39;/&#39;,str);&lt;br /&gt;
if umnoj then&lt;br /&gt;
pos_op:=pos(&#39;*&#39;,str);&lt;br /&gt;
&lt;br /&gt;
a_:=copy(str,1,pos_op-1);&lt;br /&gt;
b_:=copy(str,pos_op+1,length(str));&lt;br /&gt;
&lt;br /&gt;
a:=strtofloat(a_);&lt;br /&gt;
b:=strtofloat(b_);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
Procedure Calc;&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
if plus then&lt;br /&gt;
r:=a+b;&lt;br /&gt;
if minus then&lt;br /&gt;
r:=a-b;&lt;br /&gt;
if del then&lt;br /&gt;
begin&lt;br /&gt;
if b=0 then&lt;br /&gt;
form1.Edit1.Text:=&#39;del na zero!&#39;&lt;br /&gt;
else&lt;br /&gt;
r:=a / b;&lt;br /&gt;
end;&lt;br /&gt;
if umnoj then&lt;br /&gt;
r:=a * b;&lt;br /&gt;
&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
Procedure FormatEnter;&lt;br /&gt;
var buffer,buffer2:string;&lt;br /&gt;
i:integer;&lt;br /&gt;
d:string;&lt;br /&gt;
begin&lt;br /&gt;
d:=form1.Edit1.Text;&lt;br /&gt;
if length(d)=3 then&lt;br /&gt;
buffer:=d;&lt;br /&gt;
if length(d)=6 then&lt;br /&gt;
buffer2:=d;&lt;br /&gt;
if buffer2=&#39;&#39; then&lt;br /&gt;
r:=strtofloat(buffer)&lt;br /&gt;
else r:=strtofloat(buffer+&#39;&#39;+buffer2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.SpeedButton8Click(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
close;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.SpeedButton16Click(Sender: TObject);&lt;br /&gt;
var c:integer;&lt;br /&gt;
buffer,buffer2 :string;&lt;br /&gt;
i,j:integer;&lt;br /&gt;
dec:array of real;&lt;br /&gt;
res,s:string;&lt;br /&gt;
begin&lt;br /&gt;
getop;&lt;br /&gt;
calc;&lt;br /&gt;
edit1.Clear;&lt;br /&gt;
setlength(dec,20);&lt;br /&gt;
s:=floattostr(r);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//res:=(buffer+&#39;&#39;+buffer2);&lt;br /&gt;
edit1.Text:=buffer+&#39;&#39;+buffer2;&lt;br /&gt;
&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.SpeedButton1Click(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
if edit1.Text &amp;lt;&amp;gt; &#39;&#39; then&lt;br /&gt;
st:=edit1.Text;&lt;br /&gt;
edit1.Text:=st+&#39;+&#39;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.SpeedButton2Click(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
if edit1.Text &amp;lt;&amp;gt; &#39;&#39; then&lt;br /&gt;
st:=edit1.Text;&lt;br /&gt;
edit1.Text:=st+&#39;-&#39;;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.SpeedButton3Click(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
if edit1.Text &amp;lt;&amp;gt; &#39;&#39; then&lt;br /&gt;
st:=edit1.Text;&lt;br /&gt;
edit1.Text:=st+&#39;*&#39;;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.SpeedButton5Click(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
if edit1.Text &amp;lt;&amp;gt; &#39;&#39; then&lt;br /&gt;
st:=edit1.Text;&lt;br /&gt;
edit1.Text:=st+&#39;/&#39;;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.SpeedButton6Click(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
if edit1.Text &amp;lt;&amp;gt; &#39;&#39; then&lt;br /&gt;
st:=edit1.Text;&lt;br /&gt;
edit1.Text:=st+&#39;0&#39;;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.SpeedButton7Click(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
if edit1.Text &amp;lt;&amp;gt; &#39;&#39; then&lt;br /&gt;
st:=edit1.Text;&lt;br /&gt;
edit1.Text:=st+&#39;1&#39;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.SpeedButton10Click(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
if edit1.Text &amp;lt;&amp;gt; &#39;&#39; then&lt;br /&gt;
st:=edit1.Text;&lt;br /&gt;
edit1.Text:=st+&#39;2&#39;;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.SpeedButton14Click(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
if edit1.Text &amp;lt;&amp;gt; &#39;&#39; then&lt;br /&gt;
st:=edit1.Text;&lt;br /&gt;
edit1.Text:=st+&#39;3&#39;;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.SpeedButton15Click(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
if edit1.Text &amp;lt;&amp;gt; &#39;&#39; then&lt;br /&gt;
st:=edit1.Text;&lt;br /&gt;
edit1.Text:=st+&#39;4&#39;;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.SpeedButton12Click(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
if edit1.Text &amp;lt;&amp;gt; &#39;&#39; then&lt;br /&gt;
st:=edit1.Text;&lt;br /&gt;
edit1.Text:=st+&#39;5&#39;;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.SpeedButton9Click(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
if edit1.Text &amp;lt;&amp;gt; &#39;&#39; then&lt;br /&gt;
st:=edit1.Text;&lt;br /&gt;
edit1.Text:=st+&#39;6&#39;;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.SpeedButton13Click(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
if edit1.Text &amp;lt;&amp;gt; &#39;&#39; then&lt;br /&gt;
st:=edit1.Text;&lt;br /&gt;
edit1.Text:=st+&#39;7&#39;;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.SpeedButton4Click(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
if edit1.Text &amp;lt;&amp;gt; &#39;&#39; then&lt;br /&gt;
st:=edit1.Text;&lt;br /&gt;
edit1.Text:=st+&#39;8&#39;;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.SpeedButton11Click(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
if edit1.Text &amp;lt;&amp;gt; &#39;&#39; then&lt;br /&gt;
st:=edit1.Text;&lt;br /&gt;
edit1.Text:=st+&#39;9&#39;;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.SpeedButton17Click(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
edit1.Clear;&lt;br /&gt;
st:=&#39;&#39;;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.SpeedButton18Click(Sender: TObject);&lt;br /&gt;
var q:real;&lt;br /&gt;
begin&lt;br /&gt;
q:=strtofloat(edit1.Text);&lt;br /&gt;
if q=0 then exit&lt;br /&gt;
else&lt;br /&gt;
q:= sqr(q);&lt;br /&gt;
edit1.Clear;&lt;br /&gt;
edit1.Text:=floattostr(q);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.SpeedButton19Click(Sender: TObject);&lt;br /&gt;
var q:real;&lt;br /&gt;
begin&lt;br /&gt;
q:=strtofloat(edit1.Text);&lt;br /&gt;
if q=0 then exit&lt;br /&gt;
else&lt;br /&gt;
q:= sqrt(q);&lt;br /&gt;
edit1.Clear;&lt;br /&gt;
edit1.Text:=floattostr(q);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.SpeedButton20Click(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
memory:=edit1.text;&lt;br /&gt;
speedbutton20.Flat:=false;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.SpeedButton21Click(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
edit1.Text:=memory;&lt;br /&gt;
speedbutton20.Flat:=true;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.SpeedButton22Click(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
memory:=&#39;&#39;;&lt;br /&gt;
speedbutton20.Flat:=false;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.SpeedButton23Click(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
edit1.Text:=&#39;3,1415926535897932384626433832795&#39;;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.N1Click(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
edit1.SelectAll;&lt;br /&gt;
edit1.CopyToClipboard;&lt;br /&gt;
&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
end.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://mydiary-musiclife.blogspot.com/feeds/7987612384877722949/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://mydiary-musiclife.blogspot.com/2013/01/blog-post.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/7987612384877722949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/7987612384877722949'/><link rel='alternate' type='text/html' href='http://mydiary-musiclife.blogspot.com/2013/01/blog-post.html' title='Напишем банальный калькулятор'/><author><name>Олег Плотников</name><uri>http://www.blogger.com/profile/09565341549892337662</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4128461228562744870.post-406479136762752747</id><published>2012-10-10T00:24:00.003+04:00</published><updated>2012-10-12T06:41:53.203+04:00</updated><title type='text'></title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;b&gt;Взлом шифра Цезаря часть 2.&lt;/b&gt;
&lt;br /&gt;
Итак приступим компилируем наш &quot;кодировщик&quot; Crypt запускаем и вводим любой текст для шифрования,я взял к примеру фразу &quot;Our world is abstraction&quot; и ключ key=26 вот что у нас выходит:&lt;br /&gt;
&lt;br /&gt;
}C@ EY@ZV [E WPEFDSUF_]X&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
Откроем файл result.txt где сохранили шифротекст и будем думать как его взломать,а долго не будем думать а лучше прочитаем&lt;br /&gt;
&lt;br /&gt;
&quot;Прикладную криптографию&quot; Брюса Шнайера.&lt;br /&gt;
&lt;br /&gt;
Не буду выдумывать и перефразировывать Брюса Шнайера а просто его процитирую:&lt;br /&gt;
&lt;br /&gt;
&quot;Предположим,что открытый текст использует английский язык.Более того,пусть длина ключа любое небольшое число байт.Ниже описано,как взломать этот шифр:&lt;br /&gt;
&lt;br /&gt;
1.Определим длину ключа с помощью процедуры,известной как ПОДСЧЕТ СОВПАДЕНИЙ.&lt;br /&gt;
Применим операцию XOR к шифротексту,используя в качестве ключа сам шифротекст с различными смещениями,и подсчитаем совпадающие байты. Если величина смещения кратна длине ключа,то совпадет свыше 6 процентов байтов. Если нет,то будут совпадать меньше чем 0.4 процента( считая,что обычный ASCII текст кодируется случайным ключом,для других типов открытых текстов числа будут другими). Это называется показателем совпадений. Минимальное смещение от одного значения,кратного длине ключа,к другому и есть длина ключа.&lt;br /&gt;
&lt;br /&gt;
2. Сместим шифротекст на эту длину и проведем операцию XOR для смещенного и оригинального шифротекстов.Результатом операции будет удаление ключа и получение открытого текста,подвергнутого операции XOR с самим собой,смещенным на длину ключа. Так как в английском языке на один байт приходится 1.3 бита действительной информации,существующая значительная избыточность позволяет определить способ шифрования.&quot;&lt;br /&gt;
&lt;br /&gt;
После многочисленных экспериментов я обнаружил одну маааленькую &quot;неточность&quot; которая делала эксперименты не совсем объективными.&lt;br /&gt;
Дело в том что просматривая различные проекты различных авторов находим все возможные модификации шифра цезаря,которые как можно понять&lt;br /&gt;
ограничиваются только фантазией и задумкой автора. Возможно я и ошибаюсь но мне кажется что в древней системе шифрования врят ли было допустимо использование&lt;br /&gt;
спецвимволов ]{_ + псевдографические символы эпохи ms-dos как в этом шифротексте }C@ EY@ZV [E WPEFDSUF_]X .&lt;br /&gt;
Проще говоря захотелось мне использовать только буквы алфавита и ничего более.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вот к примеру посмотрим на не точность (которая вкралась в программу Crypt) которая искажает стандартный&lt;br /&gt;
шифр Цезаря вместо ключа key=3 ключ получается равным 3333333... исправим эту не точность &lt;br /&gt;
&lt;br /&gt;
удалим этот цикл:&lt;br /&gt;
&lt;br /&gt;
for i := 0 to (length(text) div length(key)) do&lt;br /&gt;
longkey := longkey + key;&lt;br /&gt;
&lt;br /&gt;
а внутри другого цикла исправим longkey на кey&lt;br /&gt;
toto := chr((ord(text[i]) XOR ord(key[i])))&lt;br /&gt;
&lt;br /&gt;
Проверяем и опять получаем туже ситуацию хоть и поменьше,что бы понять в чем &quot;ошибка&quot; посмотрим на таблицу всех символов и их кодов&lt;br /&gt;
для этого напишем маленькую программку&lt;br /&gt;
&lt;br /&gt;
program Project1;&lt;br /&gt;
&lt;br /&gt;
{$APPTYPE CONSOLE}&lt;br /&gt;
&lt;br /&gt;
uses&lt;br /&gt;
SysUtils, classes, windows;&lt;br /&gt;
&lt;br /&gt;
var s:tstringlist; st:string; i:integer;&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
s:=tstringlist.Create;                                 // Создаем список строк&lt;br /&gt;
&lt;br /&gt;
for i:=1 to 1000 do&lt;br /&gt;
&lt;br /&gt;
st:=st+&#39; &#39;+inttostr(i)+&#39;= &#39;+char(ord(i))+#13; // пишем в одну строку код символа = символ+перенос на следующую строку&lt;br /&gt;
&lt;br /&gt;
s.Add(st);                                    // добавляем строку в список&lt;br /&gt;
&lt;br /&gt;
s.SaveToFile(&#39;c:\chars.txt&#39;);                // сохраняем список в файл&lt;br /&gt;
&lt;br /&gt;
s.Free;                                     // уничтожаем список&lt;br /&gt;
&lt;br /&gt;
winexec(pchar(&#39;c:\windows\notepad.exe c:\chars.txt&#39;),sw_show); // что бы вручную не открывать сделаем это автоматически&lt;br /&gt;
end.&lt;br /&gt;
&lt;br /&gt;
Желательно прописывать блокнот который поддерживает форматирование,а то выйдет не читабельно.&lt;br /&gt;
И вот что мы получаем большие символы английского начинаются с 65 по 90 малые с 97...122 русские с 128...175 и 224...239&lt;br /&gt;
Все остальные находящиеся в промежутках нужно вырезать т.е делать обработку после шифрования или что еще лучше внести в код&lt;br /&gt;
поправку которая будет не принимать лишний мусор.&lt;br /&gt;
&lt;br /&gt;
На практике запускаем Crypt берем строчку из шифра и применяем ее в качестве пароля к целому шифротексту смотрим на результат&lt;br /&gt;
небольшая поправочка что бы программа не затерла шифротекст внесем еще изменения (либо просто переименуйте файл result.txt) &lt;br /&gt;
&lt;br /&gt;
удалим вот эти строки из кода они нам уже не понадобятся&lt;br /&gt;
&lt;br /&gt;
if c in [&#39;Y&#39;,&#39;y&#39;] then begin&lt;br /&gt;
AssignFile(F,&#39;result.txt&#39;);&lt;br /&gt;
Rewrite(F);&lt;br /&gt;
&lt;br /&gt;
Напишим новые &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if fileexists(f) then renamefile(oldname,oldname);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Можно придумать любую модификацию имени,добавлять к имени result порядковый номер &lt;br /&gt;
или время ну или конечно свой вариант какой прийдет в голову.&lt;br /&gt;
&lt;br /&gt;
Теперь у нас будет масса файлов что тоже не хорошо,винт заваливать лучше уж дописывать в один файл(append в помощь).&lt;br /&gt;
Делать все вручную согласитесь не очень то приятное занятие (и как раньше ученые обходились только карандашем и бумагой )))&lt;br /&gt;
Писать целую программу тоже не хочется,по двум причинам первая это лень а вторая как же вы тогда научитесь думать и решать?&lt;br /&gt;
если все за вас сделаю я :) Это не интересно и к тому же вредно )))&lt;br /&gt;
&lt;br /&gt;
Итак продолжим &quot;Если величина смещения кратна длине ключа,то совпадет свыше 6 процентов байтов&quot;&lt;br /&gt;
следовательно нужно написать фу-ию или процедуру ( хватит уже отдельные программы писать пора писать одну цельную )))&lt;br /&gt;
по подсчетам одинаковых байтов и получить процентное отношение. &lt;br /&gt;
Логика проста если больше либо равно 6% то переходим к пункту 2.&lt;br /&gt;
Можно конечно написать в фу-ии перебор всех возможных длин текста но если подумать здраво то зачем нам пароль длинной с сам текст&lt;br /&gt;
или даже половина его это не разумно возьмем к примеру 20 символов длину ключа от 3х до 20ти думаю это стоит учесть в будущей фу-ии.&lt;br /&gt;
&lt;br /&gt;
Алгоритм следующий берем строку из шифрованного текста и накладываем на шифротекст получаем ответ вызываем фу-ию подсчета одинаковых символов&lt;br /&gt;
если фу-ия возвращает свыше 6% совпадение то пункт 2 иначе продолжаем цикл до конца текста.&lt;br /&gt;
Это домашним заданием будет для вас.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Минимальное смещение я думаю вы уже догадались как можно будет считать ну а 2ой пункт тем более понятен.&lt;br /&gt;
Желаю удачи и побольше эксперементируйте не доверяйте теории лучше ее проверяйте, сомневайтесь во всем, истина только в практических результатах.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://mydiary-musiclife.blogspot.com/feeds/406479136762752747/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://mydiary-musiclife.blogspot.com/2012/10/2.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/406479136762752747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/406479136762752747'/><link rel='alternate' type='text/html' href='http://mydiary-musiclife.blogspot.com/2012/10/2.html' title=''/><author><name>Олег Плотников</name><uri>http://www.blogger.com/profile/09565341549892337662</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4128461228562744870.post-2979684916855092392</id><published>2012-09-06T10:39:00.000+04:00</published><updated>2012-09-06T10:39:10.288+04:00</updated><title type='text'>Как взломать шифр Цезаря?</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Мы вместе научимся как создавать простейший блочный шифр он же шифр Цезаря и как его программным путем взломать.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;Данная система шифрования является моноалфавитной подстановкой. Что это значит? это значит что алфавит применяется один в отличии от полиалфавитной подстановки. Алфавит всего лишь сдвигается на число K (которое является ключем) т.е если ключ 3 и алфавит английский то бука С=А D=B E=C и всего лишь.&lt;br /&gt;
&lt;br /&gt;
Насколько мы помним в английском алфавите 26 символов(не считая 26 заглавных если конечно мы их будем учитывать в шифре,учитывать регистр букв) а ключ является просто числом. То возникает вопрос а что будет если ключ превысит число 26 ?&lt;br /&gt;
&lt;br /&gt;
Очень интересный вопрос :) Ответ найдем в коде программы. Данный шифр имеет одну особенность он симметричный т.е операция шифрования и дешифрования одна и таже XOR.&lt;br /&gt;
&amp;nbsp; Если брать стандартный метод взлома шифра те что использовали ранее криптоаналитики&lt;br /&gt;
&amp;nbsp; то мы увидим что они следовали протоптанной тропой а точнее брали очень большой текст - книгу энциклопедию из английского репертуара (если шифр написан на английском) и совершали обряд :) подсчета одинаковых символов во всем тексте дабы выяснить какие буквы в алфавите самые часто употребляемые.&lt;br /&gt;
&lt;br /&gt;
Для нетерпеливых скажу что это t,h,e - the в русском это гласные а,и,е если не ошибаюсь проверьте сами посмотрев таблицу или написав программу для подсчета буковок.&lt;br /&gt;
Дальнейшее действие какое? У нас есть таблица алфавита основного языка шифрования (на каком языке зашифрованно) и теперь мы составляем вторую таблицу делая такой же поиск одинаковых символов в шифре. Далее просто действуем путем подстановки самый часто употребляемый символ в шифре Цезаря должен быть тем самым что в первой таблице&lt;br /&gt;
достаточно пару букв представить и если получается осмысленный текст то дело в шляпе,&lt;br /&gt;
иначе у нас либо мало шифрованного текста либо это не шифр Цезаря либо что-то с чем то (модификация данного шифра,да и вообще кто вам сказал что это шифр Цезаря? ))))&lt;br /&gt;
&lt;br /&gt;
Теперь перейдем к другому методу т.к операция шифрования по сути является XOR то &lt;br /&gt;
посмотрим как здесь обстоит дело с расшифровкой.&lt;br /&gt;
&lt;br /&gt;
Не буду лить воду а опишу всю поднаготную.Берем части- кусочки шифра и налаживаем на сам шифр берем от 3х символов кода до длинны всего шифра и смотрим что получается,длину ключа мы определим когда разница между двумя кусочками шифра будет минимальна.&lt;br /&gt;
Зная длину ключа-пароля мы просто начнем сдвигать алфавит и проверять.&lt;br /&gt;
&lt;br /&gt;
Может объяснил сумбурно и не понятно,но надеюсь в коде будет все понятно и мы вместе разберемся. А пока приведу код самого шифра,а точнее это будут две программы одна шифрует другая расшифровывает по традиции они будут консольными, ничего не стоит их переписать под &quot;окошный&quot; вид.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;program Crypt;&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;strong&gt;{$APPTYPE CONSOLE}&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;strong&gt;uses Windows,sysutils;&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;strong&gt;var key, text, longkey, result : string;&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;strong&gt;    i : integer;&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;strong&gt;    toto, c : char;&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;strong&gt;&amp;nbsp;   F : TextFile;&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;strong&gt;begin&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;strong&gt;  writeln(&#39;Enter the key:&#39;);&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;strong&gt;  readln(key);&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;writeln(&#39;Enter text:&#39;);&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;strong&gt;&amp;nbsp; readln(text);&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;strong&gt;  for i := 0 to (length(text) div length(key)) do&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;strong&gt;      longkey := longkey + key;&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;strong&gt;  for i := 1 to length(text) do begin&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;strong&gt;      toto := chr((ord(text[i]) XOR ord(longkey[i]))); // XOR algorithm&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;strong&gt;      result := result + toto;&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;strong&gt;  end;&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;strong&gt;  writeln(&#39;The crypted text is:&#39;);&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;strong&gt;  writeln(result);&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;strong&gt;  write(&#39;Should i save it to result.txt ?&#39;);&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;strong&gt;  read(c);&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;strong&gt;  if c in [&#39;Y&#39;,&#39;y&#39;] then begin&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp;&lt;/strong&gt;&lt;strong&gt;     AssignFile(F,&#39;result.txt&#39;);&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;strong&gt;     Rewrite(F);&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;strong&gt;     Writeln(F,result);&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;strong&gt;     CloseFile(F);&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;strong&gt;  end;&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;strong&gt;end.&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt; &lt;strong&gt;И программа расшифровки&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;&lt;br /&gt;
program Decrypt;&lt;br /&gt;
{$APPTYPE CONSOLE}&lt;br /&gt;
uses Windows;&lt;br /&gt;
&lt;br /&gt;
var key, c_text, longkey, result : string;&lt;br /&gt;
i : integer;&lt;br /&gt;
toto : char;&lt;br /&gt;
F : TextFile;&lt;br /&gt;
begin&lt;br /&gt;
writeln(&#39;Enter the key:&#39;);&lt;br /&gt;
readln(key);&lt;br /&gt;
writeln(&#39;Please make sure you have the file &quot;result.txt&quot; in the current directory&#39;);&lt;br /&gt;
// it takes the output file from Crypt.exe&lt;br /&gt;
AssignFile(F,&#39;result.txt&#39;);&lt;br /&gt;
Reset(F);&lt;br /&gt;
Readln(F,c_text);&lt;br /&gt;
CloseFile(F);&lt;br /&gt;
&lt;br /&gt;
for i := 0 to (length(c_text) div length(key)) do&lt;br /&gt;
longkey := longkey + key;&lt;br /&gt;
&lt;br /&gt;
for i := 1 to length(c_text) do begin&lt;br /&gt;
toto := chr((ord(c_text[i]) XOR ord(longkey[i]))); // XOR algorithm&lt;br /&gt;
result := result + toto;&lt;br /&gt;
end;&lt;br /&gt;
writeln(&#39;The decrypted text is:&#39;);&lt;br /&gt;
writeln(result);&lt;br /&gt;
readln;&lt;br /&gt;
end.&lt;br /&gt;
&lt;/strong&gt;&lt;br /&gt;
Все просто и понятно,далее опишу как изменить программы под взлом и сделать их более удобными возможно даже рассмотрим окошный вид а не консольный стиль,ну и конечно же реализуем алгоритм взлома шифра.&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mydiary-musiclife.blogspot.com/feeds/2979684916855092392/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://mydiary-musiclife.blogspot.com/2012/09/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/2979684916855092392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/2979684916855092392'/><link rel='alternate' type='text/html' href='http://mydiary-musiclife.blogspot.com/2012/09/blog-post.html' title='Как взломать шифр Цезаря?'/><author><name>Олег Плотников</name><uri>http://www.blogger.com/profile/09565341549892337662</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4128461228562744870.post-3829838420652695729</id><published>2012-06-15T18:08:00.002+04:00</published><updated>2012-06-15T18:08:55.810+04:00</updated><title type='text'>В ближайшее время появятся уроки по фотошопу</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Покажу какие нибудь интересные вещи которые можно сделать в фотошопе&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mydiary-musiclife.blogspot.com/feeds/3829838420652695729/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://mydiary-musiclife.blogspot.com/2012/06/blog-post_15.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/3829838420652695729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/3829838420652695729'/><link rel='alternate' type='text/html' href='http://mydiary-musiclife.blogspot.com/2012/06/blog-post_15.html' title='В ближайшее время появятся уроки по фотошопу'/><author><name>Олег Плотников</name><uri>http://www.blogger.com/profile/09565341549892337662</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4128461228562744870.post-7780006886009081617</id><published>2012-06-03T02:44:00.000+04:00</published><updated>2012-06-03T02:44:36.953+04:00</updated><title type='text'>Что-то хочется написать,а что не знаю )))</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;a href=&quot;http://euroset.ru/catalog/audio/players/canyon/  style=&quot;color:#FF0000; text-decoration:none&quot;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&amp;nbsp; &lt;strong&gt;Размышления по поводу программирования&lt;/strong&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;И что бы такое рассказать?&amp;nbsp;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Давай рассмотрим структуры данных, везде и всюду про них говорят и говорят.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Что же это такое? если не вдаваться в технические подробности то это можно сказать скелет программы, кости программы на которых будут держаться код,логика,алгоритм программы.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;/div&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;По другому это просто можно сказать&lt;strong&gt; как мы будем хранить&amp;nbsp;&lt;/strong&gt;наши самые важные данные,данные как те что должны поступить на вход в программу ( возьмем абстрактный черный ящик это программа,в него входят данные,и на выходе появляются результаты) входящие данные, и исходящие данные-результат,тот результат ради которого и была создана программа.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;А как нам уже известно данные мы можем хранить в переменных, в массивах,в записях, в классах, в файлах,в списках и т.д&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Для этого много придуманно структур данных, так как простейшие можно сказать примитивы массивы и переменные нам не всегда могут помочь решить задачу,а точнее не всегда помогут правильно хранить данные.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Как говорится что толку посадить в огороде овощи,вырастить их,собрать урожай,если их не правильно хранить то они просто пропадут,испортятся,сгниют точнее здесь я указал аналогию на результат выращивания,но нас больше интересует процесс хранения в момент от начала посадки до момента сбора урожая, тогда здесь будет уместно сравнение с методом поливки,прополки,борьбы с вредителями, и здесь начинается полная свобода хочешь&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;поливай с ведра,хочешь насосом,хочешь вообще построй авто систему поливки и все остальное в таком же духе.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Вопрос как правильно хранить данные не совсем будет правильным,он будет правильным если мы укажем конкретную ситуацию и конкретную задачу, если это программа архивации данных то здесь уместно работать с двоичными деревьями,списками и т.п&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Если это программа для поиска строк то тут нам пригодятся массивы,теже списки и любой тип данных в зависимости от ситуации сколько будет строк обрабатываться 1 млн, 500 000 или вообще громадный объем в гигабайтах.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Здесь я хочу показать просто важность выбора структур данных, как скелет программы, будет кривой скелет так же и все остальное пойдет в кривь и в кось.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Это тот момент когда программист должен ясно и четко себе представить как и в чем он будет хранить все данные использующиеся в программе включая конечно и промежуточные данные их тоже не стоит упускать из виду.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Что здесь можно посоветовать?&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Посоветовать можно многое,а вот это многое поможет ли вам в вашей ситуации или нет,на 99% нет если не думать самому,а применять чужие решения и советы, без практики и опыта, это путь в никуда, с точки зрения развития самого программиста,делай как я приведет только к результату,если все конечно правильно сделать и добиться его, в другом случае начинающий или не думающий программист начнет опять искать чужое, и так будет просто копирование,шаблонный метод без личного размышления,ну каждый конечно выбирает свой метод.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;От структуры данных может зависить буквально все,скорость работы программы,время отладки, не разборчивость кода (в случае работы нескольких программистов-общий проект) размер кода,и размер программы и многое другое. В любом случае скажу что использование одних типов данных вместо других может принципиально изменить программу,а следовательно и алгоритм в целом,практически это уже будет другая версия программу которую лучше начать писать с начала чем пытаться ее переделать,переписать.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Пример очень простой взять хотя бы сравнение строк на не допустимые символы (будем фильтровать спец символ !&quot;#$ ) когда я был не знаком со множествами (a: set of char) приходилось делать тупое сравнение в цикле со счетчиком если это не допустимый символ удалить,да можно было конечно использовать и встроенные фу-ии в списках TStingList и многое другое, но на данный момент я знал лишь массивы,записи и различные циклы,самое простое и самое примитивное, какое же было озарение и радость когда познал множества,&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;код программы практически стал ясным и понятным без всяких комментариев и кучи не нужных строк кода были выкинуты в мусорку, всего лишь одна операция со множеством&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;показала красоту решения и изящность кода эта операция проверки входит ли данный символ&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;в разрешенный или это спец символ,все просто и понятно.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Я бы мог еще привести примеры правильных и не правильных структур данных,но в целом думаю понятно из всех моих слов в чем задача программиста, ЧЕМ ЯСНЕЕ АЛГОРИТМ и понятнее на бумаге,тем проще и изящней код самой программы,и самое главное конечно что бы алгоритм помещался в голове пищущего программу,иначе не избежать путаницы и не разберихи,а еще ужаснее будет отладка и тестирование такой программы.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Сюда еще можно приплести принцип юниксоидов и их идеальный подход к программированию, если код используется повторно хотя бы в двух местах программы,напиши фу-ию,если код используется хотя бы двумя программами напиши библиотеку (*.dll) и вынеси ее в папку что бы ее смогли использовать другие программы. Да это тоже верно в каких то случаях это применимо в каких то не стоит так добиваться идеальности.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Идеальность стоит искать в модели программы в модели структуры данных.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;С фотографией можно работать на разных уровнях,на одном уровне можно работать с пикселами,на другом с графическими распознанными образами, на еще одном уровне можно работать с яркостью, с частотной состовляющей (дискретно косинусное преобразование ) и таких вариантов множество,включая их комбинации,и не созданные новые модели.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Желаю вам открыть свои модели,структуры,алгоритмы, на своем опыте и на своих ошибках,ведь это действительно очень тяжелый путь,путь исследователя,но и в тоже время самый лучший и полезный и практичный.&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mydiary-musiclife.blogspot.com/feeds/7780006886009081617/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://mydiary-musiclife.blogspot.com/2012/06/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/7780006886009081617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/7780006886009081617'/><link rel='alternate' type='text/html' href='http://mydiary-musiclife.blogspot.com/2012/06/blog-post.html' title='Что-то хочется написать,а что не знаю )))'/><author><name>Олег Плотников</name><uri>http://www.blogger.com/profile/09565341549892337662</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4128461228562744870.post-4423430147502331178</id><published>2012-05-30T20:42:00.001+04:00</published><updated>2012-05-30T20:50:14.342+04:00</updated><title type='text'>Меллируем волосы</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;a href=&quot;http://euroset.ru/catalog/audio/players/canyon/  style=&quot;color:#FF0000; text-decoration:none&quot;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;b&gt;Подготовка к покраске :)&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Хватаем кисть в фотошопе перед этим открыв фото девушки, выбираем в контекстном меню мягкую кисть, подбираем размер кисти и в перед :)&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;/div&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7fcvq9PN03BUDCVYFelD3ynh1GVm9vOQ6aZfS6_MTDMO5-5F8hsxKCuEFf5vaamLcoFiD751wbW5zY4f3K2UOtI7-2RCXxBdHQJK0Q2_PEyzY5Wb_NjApsgPupEiwDjRoMHsfSfXMtC0/s1600/30.05.2012+03-10-49++664.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;191&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7fcvq9PN03BUDCVYFelD3ynh1GVm9vOQ6aZfS6_MTDMO5-5F8hsxKCuEFf5vaamLcoFiD751wbW5zY4f3K2UOtI7-2RCXxBdHQJK0Q2_PEyzY5Wb_NjApsgPupEiwDjRoMHsfSfXMtC0/s320/30.05.2012+03-10-49++664.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqsmNy9FAhNi6nJRbN6IP6QSrLHRpL3y0SGQ0Hig1e5C540W_WYU0vZp2eFmYDEoWewVrSwIE7SYEuIow3UhxABbIjmuJXHluoinM6FrIhdfG6ZTNoAKNb8qSyfaX6IBEWvXl9_523j-U/s1600/30.05.2012+03-12-44++78.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;189&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqsmNy9FAhNi6nJRbN6IP6QSrLHRpL3y0SGQ0Hig1e5C540W_WYU0vZp2eFmYDEoWewVrSwIE7SYEuIow3UhxABbIjmuJXHluoinM6FrIhdfG6ZTNoAKNb8qSyfaX6IBEWvXl9_523j-U/s320/30.05.2012+03-12-44++78.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEik6geF7OnoyNUtfyjY9ZRdkMMOEYObmZerEemXWaVDgXn5ampi7w5tJqPUXBfos8XNdkV6EUX8bkkn8q_ZvQt1utEG-Fd4IkIlV5TraxKxJZNoDfpr582x9XMGkzA04hAhdkrsWQSr8l0/s1600/30.05.2012+03-11-38++242.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;184&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEik6geF7OnoyNUtfyjY9ZRdkMMOEYObmZerEemXWaVDgXn5ampi7w5tJqPUXBfos8XNdkV6EUX8bkkn8q_ZvQt1utEG-Fd4IkIlV5TraxKxJZNoDfpr582x9XMGkzA04hAhdkrsWQSr8l0/s320/30.05.2012+03-11-38++242.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjegICTQIP7mjAGtOwuyU5vcXagB6LgwR8LrH9cGQv83v64bafs5PgwgKnJ10ZTVxuuBZO0xGBRXte4-11NczZMzjTmDJbSRJ6boNnRWDLteiyN4TlMLTRAhPy7H4LtV8-JcMHoPOpIz2w/s1600/100_1334.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjegICTQIP7mjAGtOwuyU5vcXagB6LgwR8LrH9cGQv83v64bafs5PgwgKnJ10ZTVxuuBZO0xGBRXte4-11NczZMzjTmDJbSRJ6boNnRWDLteiyN4TlMLTRAhPy7H4LtV8-JcMHoPOpIz2w/s320/100_1334.jpg&quot; width=&quot;262&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;вроде как результат... не супер но пойдет как пример&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Создаем как всегда дублирующий слой главного фото,потом создаем новый слой и просто рисуем кистью волосы,повторяя контуры волос героини, нарисовали готово, теперь этот слой с новыми волосами размоем, применим гаусовское размытие и будем повторять его Ctrl+F до тех пор пока нам не понравится их вид,что бы не слишком было видно что это рисунок.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Если что-то нельзя размыть лучше стереть и сделать копию слоя, потом трансформация Ctrl+T и отобразить по горизонтали или по вертикали (смотря как у вас и что за ситуация) или вообще развернуть как хочется. Можно применить слой-маску это такой значек внизу панели слоев&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxA0mJayzD503o9Gf5TmyEOcb-vFKXXtg-Fc4wX-HA7Rq9UuyWmQz4EzDDOZzK2zrr6qDp4kw3IzPJ5HjBT3I6KEbbJIH8ypNBS3bQ5Zi1qhYxIPlemmhwrbjslE1tXZ418Z2YoxkOgec/s1600/30.05.2012---.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxA0mJayzD503o9Gf5TmyEOcb-vFKXXtg-Fc4wX-HA7Rq9UuyWmQz4EzDDOZzK2zrr6qDp4kw3IzPJ5HjBT3I6KEbbJIH8ypNBS3bQ5Zi1qhYxIPlemmhwrbjslE1tXZ418Z2YoxkOgec/s1600/30.05.2012---.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmdzhu3h5-k3mhnG7lCvhyphenhyphen6ktOfRcaSur5YqmdvfHiRzvFgSiD2VzkZh5NH2Dc56H27xUqf2bkJkwb7KsTJmxOIuV_1pNjl4jB4wqg0jerXTrpNwDQ9SetvVloqAXg26l2CynhV-Zdqg4/s1600/30.05.2012+20-17-46++02.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmdzhu3h5-k3mhnG7lCvhyphenhyphen6ktOfRcaSur5YqmdvfHiRzvFgSiD2VzkZh5NH2Dc56H27xUqf2bkJkwb7KsTJmxOIuV_1pNjl4jB4wqg0jerXTrpNwDQ9SetvVloqAXg26l2CynhV-Zdqg4/s320/30.05.2012+20-17-46++02.jpg&quot; width=&quot;128&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;а вот и сама слой-маска&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Жмем его и появляется со слоем слой-маска берем черную кисть (ей мы будем стирать ошибки,а белой возвращать назад стертое) и убираем лишние моменты и прочее,далее правой кнопкой мышки и выбираем применить слой маску.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Полезно как всегда экспериментировать создавать парочку дубликатов слоев в одном из них что-то изменять например подтереть часть волос,применить тень или еще какой нибудь эффект (фильтр-галлерея фильтров в помощь) потом начинать смешивать эти два слоя меняя прозрачность, и режимы наложения,потом смещиваем слои Ctrl+E если результат устраивает.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Далее как только волосы стали похожи на что-то реальное вызываем окошко насыщенности Ctrl+U ставим галочку тонировать и начинаем подбирать цвет перемещая бегунки, добавляя яркость если не слишком видно или насыщенность регулируя всю эту красоту.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Можно поступить проще создаем слой пустой, берем заливку G выбираем цвет и заливаем полностью весь слой, ставим его сверху волос, и выбираем режим наложения цветность, волосы должны стать цветом первого слоя,далее опять можем применить слой маску стирая лишний цвет оставляя его только на волосах.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhb7iCR8_Aqj8T7XPqfP1gclW53PmQ8phtGQzHOrHQgkEJkPMVehYLgISlzzDca8FtM3Q9MBnQZNmrZjzEJIbtGDl3tLqb4rB4VbvEEEH3WdNP8txk6oG_lZ2jmjFFMHnFQnylheeXFEyU/s1600/30.05.2012+20-35-12++677.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;163&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhb7iCR8_Aqj8T7XPqfP1gclW53PmQ8phtGQzHOrHQgkEJkPMVehYLgISlzzDca8FtM3Q9MBnQZNmrZjzEJIbtGDl3tLqb4rB4VbvEEEH3WdNP8txk6oG_lZ2jmjFFMHnFQnylheeXFEyU/s320/30.05.2012+20-35-12++677.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;В принципе как всегда ничего сложного нет, просто нужно проявлять фантазию и чувствовать свободу действий а эт от теории и практики зависит&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mydiary-musiclife.blogspot.com/feeds/4423430147502331178/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://mydiary-musiclife.blogspot.com/2012/05/blog-post_30.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/4423430147502331178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/4423430147502331178'/><link rel='alternate' type='text/html' href='http://mydiary-musiclife.blogspot.com/2012/05/blog-post_30.html' title='Меллируем волосы'/><author><name>Олег Плотников</name><uri>http://www.blogger.com/profile/09565341549892337662</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7fcvq9PN03BUDCVYFelD3ynh1GVm9vOQ6aZfS6_MTDMO5-5F8hsxKCuEFf5vaamLcoFiD751wbW5zY4f3K2UOtI7-2RCXxBdHQJK0Q2_PEyzY5Wb_NjApsgPupEiwDjRoMHsfSfXMtC0/s72-c/30.05.2012+03-10-49++664.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4128461228562744870.post-7513400424990369396</id><published>2012-05-25T04:58:00.000+04:00</published><updated>2012-05-25T04:58:33.125+04:00</updated><title type='text'>В следующий раз покажу как покрасить девушке волосы без ее спроса в фотошопе конечно :)</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mydiary-musiclife.blogspot.com/feeds/7513400424990369396/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://mydiary-musiclife.blogspot.com/2012/05/blog-post_6896.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/7513400424990369396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/7513400424990369396'/><link rel='alternate' type='text/html' href='http://mydiary-musiclife.blogspot.com/2012/05/blog-post_6896.html' title='В следующий раз покажу как покрасить девушке волосы без ее спроса в фотошопе конечно :)'/><author><name>Олег Плотников</name><uri>http://www.blogger.com/profile/09565341549892337662</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4128461228562744870.post-7269445022297219818</id><published>2012-05-25T04:47:00.000+04:00</published><updated>2012-05-25T04:47:16.611+04:00</updated><title type='text'>Как очистить фото от лишних надписей или ненужных элементов</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;strong&gt;Удаление лишних элементов на фото&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;
Если вы не хотите что бы дата на фото не маячила глаза,или вообще стереть лишний предмет который как вам кажется мешает общей композиции&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
ну или по любой другой причине тогда&lt;br /&gt;
будем использовать инструмент фотошопа штамп жмем S правда есть еше один штамп с узорами он нам не нужен выбираем простой штамп,дальше зажимаем Alt &amp;nbsp;и появляется курсор в виде прицела,теперь укажем место откуда нам брать копирующие пикселы образцы,которые заменят нашу дату или что-то еще, обычно следует брать рядом образец,отпускаем альт и уже зарисовываем не понравившееся место.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiL5im7Fpn2YqoP67VfkoBncMC4wZIftULUrCmEg0wiEmJj63srA3H35dCMu95oYZ_Fo1gPPGLvwOxTS8NByGIio3nHiC5CosyJN6EgmGEy2nwceyYinuOfcKckdtO9Ccxx-MiVyJ3z9Io/s1600/original.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiL5im7Fpn2YqoP67VfkoBncMC4wZIftULUrCmEg0wiEmJj63srA3H35dCMu95oYZ_Fo1gPPGLvwOxTS8NByGIio3nHiC5CosyJN6EgmGEy2nwceyYinuOfcKckdtO9Ccxx-MiVyJ3z9Io/s320/original.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;была дата&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE0ch2Zz3WqvDmiKa9yMkP2F0OK1eFE0qY3AcSTufR6WP-XncVW5nBWMYn5hixeBRqjoHQj_FVqESKpYdLRFMz1Zm2O1FACMz4ih1kLIFUW8ccWnHsL5WBnDlkqgT72BfUcwJUsWZYJS0/s1600/100_1330.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE0ch2Zz3WqvDmiKa9yMkP2F0OK1eFE0qY3AcSTufR6WP-XncVW5nBWMYn5hixeBRqjoHQj_FVqESKpYdLRFMz1Zm2O1FACMz4ih1kLIFUW8ccWnHsL5WBnDlkqgT72BfUcwJUsWZYJS0/s320/100_1330.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;упс и нету :)&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8fraYUTRVvKBvu4mu1o3hEFOD1PLCJdJ63B148za-U5nc5bZrQRIy6OFBFokrT59pw73OZ6kYWszWQzNuQwKKiYDpiQGFVdSWoV4lKvqA62BYFs2Kzina5seXKiqJnbmNFEBtUskJiiE/s1600/%25D0%25B1%25D0%25B5%25D0%25B7+%25D1%2584%25D0%25BE%25D0%25BD%25D0%25B0%25D1%2580%25D1%258F.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8fraYUTRVvKBvu4mu1o3hEFOD1PLCJdJ63B148za-U5nc5bZrQRIy6OFBFokrT59pw73OZ6kYWszWQzNuQwKKiYDpiQGFVdSWoV4lKvqA62BYFs2Kzina5seXKiqJnbmNFEBtUskJiiE/s320/%25D0%25B1%25D0%25B5%25D0%25B7+%25D1%2584%25D0%25BE%25D0%25BD%25D0%25B0%25D1%2580%25D1%258F.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;упс и фонарик исчез :)&lt;br /&gt;
&lt;br /&gt;
Вот к примеру я стер один фонарь,все бы хорошо когда смотреть из далека но если увеличить то можно увидеть изъяны :) (без мышки на ноуте не порисуешь сильно ))) просто здесь нужно очень долго работать над таким сложным фоном,меняя диаметр штампа,постоянно сменяя копируемые пикселы,и вообще надо рисовать,&lt;br /&gt;
&lt;br /&gt;
а не водить как будто красите забор :) ведь эти мазки налаживаются на друг друга,так что здесь нужно чувство изящности,дизайнерства так сказать, вообщем показал как это выглядит а как должно и как получится это время практики покажет ничего сложного в этой процедуре нет,так что практика и все у вас получится.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mydiary-musiclife.blogspot.com/feeds/7269445022297219818/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://mydiary-musiclife.blogspot.com/2012/05/blog-post_6820.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/7269445022297219818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/7269445022297219818'/><link rel='alternate' type='text/html' href='http://mydiary-musiclife.blogspot.com/2012/05/blog-post_6820.html' title='Как очистить фото от лишних надписей или ненужных элементов'/><author><name>Олег Плотников</name><uri>http://www.blogger.com/profile/09565341549892337662</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiL5im7Fpn2YqoP67VfkoBncMC4wZIftULUrCmEg0wiEmJj63srA3H35dCMu95oYZ_Fo1gPPGLvwOxTS8NByGIio3nHiC5CosyJN6EgmGEy2nwceyYinuOfcKckdtO9Ccxx-MiVyJ3z9Io/s72-c/original.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4128461228562744870.post-2207652609740752635</id><published>2012-05-25T04:27:00.000+04:00</published><updated>2012-05-25T04:27:03.447+04:00</updated><title type='text'>Эффект радиального размытия</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;strong&gt;Используем эффект радиального размытия&lt;/strong&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Открываем фото в фотошопе и выделяем девушку на фото в режиме быстрой маски&amp;nbsp;&lt;a href=&quot;http://mydiary-musiclife.blogspot.com/2012/05/blog-post_65.html&quot; target=&quot;_blank&quot;&gt;как это сделать&lt;/a&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;/div&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;потом делаем очистку,растушевку и делаем новый слой с девушкой отдельно от главного фото&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;итого у нас должно получиться два слоя, выбираем слой главного фото и ползем в меню фильтр-размытие-радиальное размытие метод кольцевой ставим 5 в количество (нуу тут на ваш выбор и глаз ) и качество хорошее ок и получаем вот такой эффект,сводим все слои в один и сохраняем фото в понравившийся формат.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE0ch2Zz3WqvDmiKa9yMkP2F0OK1eFE0qY3AcSTufR6WP-XncVW5nBWMYn5hixeBRqjoHQj_FVqESKpYdLRFMz1Zm2O1FACMz4ih1kLIFUW8ccWnHsL5WBnDlkqgT72BfUcwJUsWZYJS0/s1600/100_1330.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE0ch2Zz3WqvDmiKa9yMkP2F0OK1eFE0qY3AcSTufR6WP-XncVW5nBWMYn5hixeBRqjoHQj_FVqESKpYdLRFMz1Zm2O1FACMz4ih1kLIFUW8ccWnHsL5WBnDlkqgT72BfUcwJUsWZYJS0/s320/100_1330.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiV9gjA_1jYbVeJ628OEo8NPNLlqFwV7c8LiNsp7z1logEdBdMzken1gpnlPELLJOz1zmXwt34WqDrUINvcNxrG-Q6iRbsj33hpk26krHDK71ZaPrx5mcr07wx25VDSSW5oZSNQ7I_6beQ/s1600/effect-radial.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiV9gjA_1jYbVeJ628OEo8NPNLlqFwV7c8LiNsp7z1logEdBdMzken1gpnlPELLJOz1zmXwt34WqDrUINvcNxrG-Q6iRbsj33hpk26krHDK71ZaPrx5mcr07wx25VDSSW5oZSNQ7I_6beQ/s320/effect-radial.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mydiary-musiclife.blogspot.com/feeds/2207652609740752635/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://mydiary-musiclife.blogspot.com/2012/05/blog-post_9275.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/2207652609740752635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/2207652609740752635'/><link rel='alternate' type='text/html' href='http://mydiary-musiclife.blogspot.com/2012/05/blog-post_9275.html' title='Эффект радиального размытия'/><author><name>Олег Плотников</name><uri>http://www.blogger.com/profile/09565341549892337662</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE0ch2Zz3WqvDmiKa9yMkP2F0OK1eFE0qY3AcSTufR6WP-XncVW5nBWMYn5hixeBRqjoHQj_FVqESKpYdLRFMz1Zm2O1FACMz4ih1kLIFUW8ccWnHsL5WBnDlkqgT72BfUcwJUsWZYJS0/s72-c/100_1330.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4128461228562744870.post-4456618959653713486</id><published>2012-05-25T03:59:00.000+04:00</published><updated>2012-05-25T03:59:52.717+04:00</updated><title type='text'>Вот пример программы для проверки сжатия от Bad_guy</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;a href=&quot;http://euroset.ru/catalog/audio/players/canyon/  style=&quot;color:#FF0000; text-decoration:none&quot;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;strong&gt;Вот пример программы для проверки сжатия от Bad_guy&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
можете скачать с сайта или собрать из этой страницы&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxuUPJ9KHDYlJwcXJFo9gb9mLmE4OqUfCTnuebN1oXK14i9U3BMIAAnqVPHP2VPJ9sthi3QQwlnEWqwvjS7aECliRfMt45v4WxQhgeW6oZPIWme7RgNf6oO-Zk0HHRzr3sGS4XSS8N_O4/s1600/25.05.2012+03-40-12++377.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;217&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxuUPJ9KHDYlJwcXJFo9gb9mLmE4OqUfCTnuebN1oXK14i9U3BMIAAnqVPHP2VPJ9sthi3QQwlnEWqwvjS7aECliRfMt45v4WxQhgeW6oZPIWme7RgNf6oO-Zk0HHRzr3sGS4XSS8N_O4/s320/25.05.2012+03-40-12++377.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUU88AVrag4vMKvLVAI8jFaPv5Sz8fVPIhfKtYQHur79ZQxoScz66P0NQC_1390e7hoAnvC7lxoYBMrn45o3Y_l7IpoJb_5JqoMeRFdI5Rs65Z2C47OALPSTubecqzeCr6QcAoK9nEGkU/s1600/25.05.2012+03-35-10++629.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;224&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUU88AVrag4vMKvLVAI8jFaPv5Sz8fVPIhfKtYQHur79ZQxoScz66P0NQC_1390e7hoAnvC7lxoYBMrn45o3Y_l7IpoJb_5JqoMeRFdI5Rs65Z2C47OALPSTubecqzeCr6QcAoK9nEGkU/s320/25.05.2012+03-35-10++629.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgelwFumAZ8fQmLK0dRlY6CmirTNVdlzDYYPJ2KMl97bC_GXKpAOIcxC0RMTwqFz11B0JLKGI1q9UioQyUUT9gD76MllRQ42Uu_gyJEkf2Nq_9p43RcSIgFFyovKOOD1gk9flk6Rsti9M/s1600/25.05.2012+03-25-49++937.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;105&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgelwFumAZ8fQmLK0dRlY6CmirTNVdlzDYYPJ2KMl97bC_GXKpAOIcxC0RMTwqFz11B0JLKGI1q9UioQyUUT9gD76MllRQ42Uu_gyJEkf2Nq_9p43RcSIgFFyovKOOD1gk9flk6Rsti9M/s320/25.05.2012+03-25-49++937.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjj-PFGNm7QJEr4KOJYE7seWmDoHwsV8nq8pvWH6pYSESvMzr-b5Piosl8M2qGfUK6QCQzTZTfTr4eWCImhsYcsHMOviG72Yraugir2z0LbtJiuXcwJqVePrJUOzVdMvCJVMcssK4UcQqc/s1600/25.05.2012+03-26-44++890.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;169&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjj-PFGNm7QJEr4KOJYE7seWmDoHwsV8nq8pvWH6pYSESvMzr-b5Piosl8M2qGfUK6QCQzTZTfTr4eWCImhsYcsHMOviG72Yraugir2z0LbtJiuXcwJqVePrJUOzVdMvCJVMcssK4UcQqc/s320/25.05.2012+03-26-44++890.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;А это дерево ссылок (теория графов) из такой хорошей программы IDA самого лучшего дизассемблера и отладчика и вообще это целая лаборатория для исследователя и взломщика&lt;br /&gt;
&lt;br /&gt;
Компоненты все известные вам,компонент xp manifest можно не ставить если не найдете его в делфи,да и вообще он ненужен это настройка визуальности,короче применение тем.&lt;br /&gt;
&lt;br /&gt;
{SpectroByte IX&lt;br /&gt;
---&lt;br /&gt;
Автор: Bad_guy [CRACKL@B Team]&lt;br /&gt;
Сайты: www.cracklab.ru, www.clteam.net&lt;br /&gt;
&lt;br /&gt;
О программе&lt;br /&gt;
---&lt;br /&gt;
Программа предназначена для построения &quot;спектра&quot; файла. То есть программа&lt;br /&gt;
считает количество каждого байта (от 0 до FFh) в файле и строит график&lt;br /&gt;
зависимости количества байт от их номинала. Это может быть полезно для&lt;br /&gt;
визуального анализа сжимаемости файла (его энтропии). Для файлов, имеющих много&lt;br /&gt;
одних байт и очень мало других, присутствует возможность отобразить график в&lt;br /&gt;
логарифмическом масштабе. Также программа вычисляет интеграл (площадь)&lt;br /&gt;
полученной функции. Исходники на Delphi прилагаются.}&lt;br /&gt;
&lt;br /&gt;
unit Unit1;&lt;br /&gt;
&lt;br /&gt;
interface&lt;br /&gt;
&lt;br /&gt;
uses&lt;br /&gt;
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,&lt;br /&gt;
StdCtrls, ExtCtrls, math, XPMan;&lt;br /&gt;
&lt;br /&gt;
type&lt;br /&gt;
TForm1 = class(TForm)&lt;br /&gt;
Image1: TImage;&lt;br /&gt;
Button1: TButton;&lt;br /&gt;
Opn: TOpenDialog;&lt;br /&gt;
Edit1: TEdit;&lt;br /&gt;
Edit2: TEdit;&lt;br /&gt;
CheckBox1: TCheckBox;&lt;br /&gt;
Shape1: TShape;&lt;br /&gt;
XPManifest1: TXPManifest;&lt;br /&gt;
Label1: TLabel;&lt;br /&gt;
Label2: TLabel;&lt;br /&gt;
procedure Button1Click(Sender: TObject);&lt;br /&gt;
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,&lt;br /&gt;
Y: Integer);&lt;br /&gt;
procedure CheckBox1Click(Sender: TObject);&lt;br /&gt;
procedure FormCreate(Sender: TObject);&lt;br /&gt;
private&lt;br /&gt;
{ Private declarations }&lt;br /&gt;
public&lt;br /&gt;
{ Public declarations }&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
Form1: TForm1;&lt;br /&gt;
a, k: array [0..255] of longint;&lt;br /&gt;
r: trect;&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
{$R *.DFM}&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.Button1Click(Sender: TObject);&lt;br /&gt;
var f: file of byte;&lt;br /&gt;
Buf: array[0..4095] of byte;&lt;br /&gt;
b, b1: byte;&lt;br /&gt;
c, ReadBytes, x: longint;&lt;br /&gt;
S: TFileStream;&lt;br /&gt;
begin&lt;br /&gt;
//Initialize&lt;br /&gt;
c := 0;&lt;br /&gt;
r.Left := 0;&lt;br /&gt;
r.Top := 0;&lt;br /&gt;
r.Bottom := Image1.Height;&lt;br /&gt;
r.Right := Image1.Width;&lt;br /&gt;
ZeroMemory(@a, SizeOf(a));&lt;br /&gt;
Image1.Canvas.Brush.Color := $A28A89;&lt;br /&gt;
Image1.Canvas.FillRect(r);&lt;br /&gt;
// Open file&lt;br /&gt;
if Opn.Execute then&lt;br /&gt;
begin&lt;br /&gt;
S := TFileStream.Create(Opn.Filename, fmOpenRead);&lt;br /&gt;
try&lt;br /&gt;
S.Seek(0, soFromBeginning);&lt;br /&gt;
repeat&lt;br /&gt;
ReadBytes := S.read(Buf, SizeOf(Buf));&lt;br /&gt;
for c := 0 to ReadBytes - 1 do&lt;br /&gt;
begin&lt;br /&gt;
b := Buf[c];&lt;br /&gt;
inc(a[b]);&lt;br /&gt;
end;&lt;br /&gt;
until ReadBytes &amp;lt;&amp;gt; SizeOf(Buf);&lt;br /&gt;
finally&lt;br /&gt;
S.Free;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
CheckBox1Click(Sender);&lt;br /&gt;
&lt;br /&gt;
end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,&lt;br /&gt;
Y: Integer);&lt;br /&gt;
begin&lt;br /&gt;
Edit1.Text := IntToStr(x);&lt;br /&gt;
Edit2.Text := IntToStr(Image1.height - y);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.CheckBox1Click(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
b, b1: byte;&lt;br /&gt;
c, x: longint;&lt;br /&gt;
begin&lt;br /&gt;
// Log&lt;br /&gt;
if CheckBox1.Checked then&lt;br /&gt;
for b := 0 to 255 do&lt;br /&gt;
k[b] := Round(Log10(a[b] + 1) * 100)&lt;br /&gt;
else&lt;br /&gt;
for b := 0 to 255 do&lt;br /&gt;
k[b] := a[b];&lt;br /&gt;
&lt;br /&gt;
// Normzlize;&lt;br /&gt;
c := 0;&lt;br /&gt;
x := 0;&lt;br /&gt;
for b := 0 to 255 do&lt;br /&gt;
c := Max(c, k[b]);&lt;br /&gt;
if c = 0 then c := 1;&lt;br /&gt;
&lt;br /&gt;
for b := 0 to 255 do&lt;br /&gt;
k[b] := Round(k[b] / c * 100);&lt;br /&gt;
&lt;br /&gt;
for b := 0 to 255 do&lt;br /&gt;
x := x + k[b];&lt;br /&gt;
x := Round(x / 256);&lt;br /&gt;
Label2.Caption := IntToStr(x) + &#39;%&#39;;&lt;br /&gt;
&lt;br /&gt;
// Erase Picture&lt;br /&gt;
r.Left := 0;&lt;br /&gt;
r.Top := 0;&lt;br /&gt;
r.Bottom := Image1.Height;&lt;br /&gt;
r.Right := Image1.Width;&lt;br /&gt;
Image1.Canvas.Brush.Color := $A28A89;&lt;br /&gt;
Image1.Canvas.FillRect(r);&lt;br /&gt;
&lt;br /&gt;
// Draw;&lt;br /&gt;
for b := 0 to 255 do&lt;br /&gt;
for b1 := 1 to k[b] do&lt;br /&gt;
begin&lt;br /&gt;
Image1.Canvas.Pixels[b, 101 - b1] := $052068;&lt;br /&gt;
end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
// Erase Picture&lt;br /&gt;
r.Left := 0;&lt;br /&gt;
r.Top := 0;&lt;br /&gt;
r.Bottom := Image1.Height;&lt;br /&gt;
r.Right := Image1.Width;&lt;br /&gt;
Image1.Canvas.Brush.Color := $A28A89;&lt;br /&gt;
Image1.Canvas.FillRect(r);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
end.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mydiary-musiclife.blogspot.com/feeds/4456618959653713486/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://mydiary-musiclife.blogspot.com/2012/05/badguy.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/4456618959653713486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/4456618959653713486'/><link rel='alternate' type='text/html' href='http://mydiary-musiclife.blogspot.com/2012/05/badguy.html' title='Вот пример программы для проверки сжатия от Bad_guy'/><author><name>Олег Плотников</name><uri>http://www.blogger.com/profile/09565341549892337662</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxuUPJ9KHDYlJwcXJFo9gb9mLmE4OqUfCTnuebN1oXK14i9U3BMIAAnqVPHP2VPJ9sthi3QQwlnEWqwvjS7aECliRfMt45v4WxQhgeW6oZPIWme7RgNf6oO-Zk0HHRzr3sGS4XSS8N_O4/s72-c/25.05.2012+03-40-12++377.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4128461228562744870.post-173167628678506366</id><published>2012-05-25T03:15:00.001+04:00</published><updated>2012-05-25T03:17:51.600+04:00</updated><title type='text'>Исследование неизвестных форматов файлов...</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;a href=&quot;http://euroset.ru/catalog/audio/players/canyon/  style=&quot;color:#FF0000; text-decoration:none&quot;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;b&gt;Исследование неизвестных форматов файлов&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
Есть такая серия игр Максима Хорина  &lt;a href=&quot;http://freesweetgames.ru/&quot; target=&quot;_blank&quot;&gt;вот здесь можете посмотреть&lt;/a&gt; всякие там пятнашки,карты,логические и прочие эротического содержания выигрываем переходим на следующий уровень,получаем раздетую девушку по частям :)&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Так вот захотелось не играть а просто просмотреть все фото и все :) ну я и раньше так играл&lt;br /&gt;
в простые игры,скачивал какую нибудь простую игрушку,открывал в reshacker и вытягивал все фото из ресурсов программы,прога выкидывалась,так как уже была взломана и интереса больше не представляла, так и началось &lt;b&gt; исследование неизвестных форматов файлов&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Но вот попались игры Максима Хорина,и тут я зубы обламал, так как не сломать регистрацию и не разобраться в формате хранимых фото.&lt;br /&gt;
&lt;br /&gt;
Если мы заглянем в папку где игрушка наша лежит то находим странные файлы *.sgdt&lt;br /&gt;
&lt;br /&gt;
Привожу свои размышления на счет ковыряния в этом формате &lt;br /&gt;
&lt;br /&gt;
Открываем в тотале любой файл такого формата F3-3 что бы видеть в хекс виде или в любом хекс редакторе советую WinHex в нем жмем F2 и можем посмотреть энтропию (сжат файл или нет)&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8TClKaZ1c-S6cZdPv8xlBybWOz8UDQjmPhvi4PESHJPJVcjjBR82K1NPlRIUKCwveqnp7Lx-r-KDypOTeBzpzr1VzxpAyyHtrs-6G06l76hKbe8evncOMMGyDQvL-L-zkNevcHt0Tmm4/s1600/25.05.2012+02-56-37++369.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;179&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8TClKaZ1c-S6cZdPv8xlBybWOz8UDQjmPhvi4PESHJPJVcjjBR82K1NPlRIUKCwveqnp7Lx-r-KDypOTeBzpzr1VzxpAyyHtrs-6G06l76hKbe8evncOMMGyDQvL-L-zkNevcHt0Tmm4/s320/25.05.2012+02-56-37++369.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Индикатор сжатия&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2splB1_WAZRhnuWLUBMfyeAhGKQlmqsifBgdErVwa4ftr3NsNaZHpbcuMfHyfieNdYH1brJkzA0UYMrORe54yLgTSSsQecyrNzPlr847RB3AUm3tF-r9kiZgaBY-o12BpIS0ls_xD0UA/s1600/25.05.2012+02-55-04++481.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2splB1_WAZRhnuWLUBMfyeAhGKQlmqsifBgdErVwa4ftr3NsNaZHpbcuMfHyfieNdYH1brJkzA0UYMrORe54yLgTSSsQecyrNzPlr847RB3AUm3tF-r9kiZgaBY-o12BpIS0ls_xD0UA/s320/25.05.2012+02-55-04++481.jpg&quot; width=&quot;291&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Идут сжатые данные&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxCECu62lv1rPcFgUCGG1L9gx2wT4XJ8Ku3cPXfy7g8IAoIQkM_JHUBeGKz-qBfTq8zxtgdKnn3YvKLQVtME7ILoTxTQg7_Cfq3spUkbTS3IY1KaxhyphenhyphenFgDYsf8J5T_MzEZ1ewUpOEgL-Y/s1600/25.05.2012+02-55-42++248.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxCECu62lv1rPcFgUCGG1L9gx2wT4XJ8Ku3cPXfy7g8IAoIQkM_JHUBeGKz-qBfTq8zxtgdKnn3YvKLQVtME7ILoTxTQg7_Cfq3spUkbTS3IY1KaxhyphenhyphenFgDYsf8J5T_MzEZ1ewUpOEgL-Y/s320/25.05.2012+02-55-42++248.jpg&quot; width=&quot;288&quot; /&gt;&lt;/a&gt;&lt;/div&gt;А этот блок без сжатия&lt;br /&gt;
&lt;br /&gt;
2010005.sgdt&lt;br /&gt;
==============&lt;br /&gt;
И так мы знаем что данный файл это набор фото до 10 штук максимус&lt;br /&gt;
в среднем 5..6 фото&lt;br /&gt;
&lt;br /&gt;
со смещения 00001750 начинаются упакованные или зашифрованные данные&lt;br /&gt;
возможно и то и другое вместе и/или вариант X(неизвестный алгоритм).&lt;br /&gt;
&lt;br /&gt;
==============================================&lt;br /&gt;
Разделим файл на несколько логических блоков объединненых&lt;br /&gt;
каким либо общим свойством&lt;br /&gt;
==============================================&lt;br /&gt;
1.Если бегло просмотреть весь файл то мы и увидим все эти блоки.&lt;br /&gt;
Друг от друга они отличаются графически (ну псевдографически)&lt;br /&gt;
&lt;br /&gt;
1.1 Желательно бы написать программу которая будет выделять разные&lt;br /&gt;
блоки разными цветами.Для начала можно пользователю доверить&lt;br /&gt;
что и каким цветом выделять.&lt;br /&gt;
&lt;br /&gt;
Вариант первый это сделать пару скриншотов,обрезать лишнее и подать&lt;br /&gt;
программе(ну возьмем фотошоп).Открываем в фотошопе,включаем сетку&lt;br /&gt;
далее настраиваем клетки сетки под размер байта.&lt;br /&gt;
Находим хотя бы одну строчку с одинаковыми байтами (0x00 or 0xFF or etc)&lt;br /&gt;
Закрашиваем эту строчку каким либо светлым цветом.&lt;br /&gt;
&lt;br /&gt;
Программа в идеале конечно должна сама искать одинаковые строки&lt;br /&gt;
по заданным шаблонам(маски пользователя) и конечно сама перебирать&lt;br /&gt;
различные варианты.Но оставим это реализацию для домашнего задания.&lt;br /&gt;
&lt;br /&gt;
Второй вариант это использование компонента RichEdit или любого другого удобного для изменения подсветки в тексте.Так даже&lt;br /&gt;
проще и легче.Программа ишет строку из n байт равных 0х00 или 0хFF как самый простой вариант.&lt;br /&gt;
Далее изменяет цвет данной строки(подкрашивает её).Вот и все.&lt;br /&gt;
&lt;br /&gt;
Мы немного отвлеклись от главной темы.Продолжим.И так что же нам дает это разделение на блоки?&lt;br /&gt;
&lt;br /&gt;
Это дает нам информацию из чего же состоит данный файл.Из каких частей он смастерен.&lt;br /&gt;
Хорошо к примеру мы нашли 10 крупных блоков при беглом осмотре файла (утопили клавишу вниз и отмечали маркером нужные места) &lt;br /&gt;
и n-ое кол-во мелких блоков.Что мы можем с них получить? Как они подведут к тому что же они хранят и что с них можно практического получить?&lt;br /&gt;
&lt;br /&gt;
Ответ прост нужно начинать анализ каждого отдельного блока.Забегая вперед скажу что необходимо найти ссылки(links offset&#39;s) с одного блока на другой&lt;br /&gt;
это можно сделать используя теорию графов (да конечно это целый раздел математики,но мы будем использовать малую долю которая применяется только в программировании&lt;br /&gt;
минуя лишнюю теорию и громоздкие непонятные формулы).&lt;br /&gt;
&lt;br /&gt;
Именно она позволит найти ссылки между всеми нашими блоками.Что делать с блоками которые могут не иметь&lt;br /&gt;
ссылок? Вариантов несколько либо это мусор и нас пытаются запутать,либо это какой нибудь информативный блок (его просто считывает программа используя жесткие смещения)&lt;br /&gt;
и использует в своих целях.Блок не имеющий ссылок может даже играть главную роль в разгадывании тайны формата файла.Ну об этом позже.&lt;br /&gt;
&lt;br /&gt;
Первое что мы можем отыскать в блоке это конечно же текст.Используя различные кодировки мы можем прогнать данный блок через такой анализатор кодировок ( конечно и его &lt;br /&gt;
необходимо написать) анализатор будет просто сменять одну кодировку на другую и ждать действий пользователя (пользователь увидел осмысленный текст,пускай даже&lt;br /&gt;
не зная языка на котором он написан,но все же).Не забываем про такие техники как кодировка base-64 uue и т.п.&lt;br /&gt;
&lt;br /&gt;
Итак текст мы получили.Дальше проведем такую проверку как сжат ли блок.Все тоже просто используем чужой или свой анализатор-сканер,сканер проверяет энтропию файла&lt;br /&gt;
Уравнение энтропии простое и найти его можно в любом поисковике ну так уж и быть вот оно: ent=-log2P где p=f(s) это фу-ия вероятности появления символа в данном блоке(либо в файле),подсчитуется кол-во одинаковых символов и делим на размер файла или блока(смотря что мы берем).Если энтропия больше 1 тогда нет сжатия иначе есть.Сканируем и получаем результат файл сжат или нет.Другой вопрос если сжат то чем?&lt;br /&gt;
&lt;br /&gt;
Это пожалуй самая волнующая тема,которую только можно открыть.Опять же возвращаемся к тому с чего и начинали.Нужно брать несколько известных алгоритмов сжатия&lt;br /&gt;
и шаблонным путем пытаться находить закономерности используя все теже графы и теорию автоматов и кучу других прибамбасов по вкусу.&lt;br /&gt;
&lt;br /&gt;
Шагаем дальше.Как отличить зашифрованный файл от запакованного? Размышляем логически,запакованный файл становится меньше чем был.А вот шифрованный файл может остаться&lt;br /&gt;
таким каким и был,а может даже стать большим чем есть (используя тот же мусор,к тому же криптографический алгоритм сам в своей идеи может нести &quot;эффект&quot; увеличения размера&lt;br /&gt;
&lt;br /&gt;
это нечто похожее на форматирование типов данных,например пароль должен быть 14 символов,а пользователь ввел только 10,программа сама добавляет 4 недостающих символа).&lt;br /&gt;
Одно можно сказать точно.Это то что&lt;br /&gt;
- во-первых делая частотный анализ блока или файла мы не найдем избыточную информацию(она присутствовала только в старых блочных шифрах)&lt;br /&gt;
- во-вторых не будет ни какой!!! закономерности в соседних байтах,словах,даже строчках и т.п это практически просто хаос-мусор&lt;br /&gt;
&lt;br /&gt;
Вот мы и пришли к тому как узнать запакован или зашифрован.Если в файле часто повторяются некие символы,байты,находятся закономерности увеличения или другие подобные&lt;br /&gt;
то файл либо запакован,либо находится в чисто девственном виде.Если ничего подобного не обнаружили значит файл шифрован.&lt;br /&gt;
&lt;br /&gt;
Самый простой шифр который мы можем взломать это xor (логическая операция ислючающее ИЛИ) ну и конечно различные примитивные шифры:шифр Вижинера,шифр Цезаря,и другие&lt;br /&gt;
подобные шифры использующие подстановку,замену,моноалфавитную и полиалфавитную,короче говоря блочные синхронные шифры.Ну а ксор само просто ломать технология такая:&lt;br /&gt;
Из ксоренного файла мы выбираем блоки различной длинны начиная от байта и до вкючая пол файла или более.Этот блок мы используем в качестве ключа,подавая на вход программе&lt;br /&gt;
&lt;br /&gt;
расшифровки как только мы находим на выходе закономерность читаемость некоторых слов(слогов) то продолжаем менять размер блока.Длина ключа будет равна&lt;br /&gt;
разности двух блоков которые дают читабельность текста.Далее зная длину ключа.Мы просто используем цикл от 1 до n длины ключа.И начинаем прогонять весь шифр,&lt;br /&gt;
беря из него уже строчку нужной длины и в конце концов мы найдем сам ключ или даже расшифруем без ключа.Вот и все.&lt;br /&gt;
&lt;br /&gt;
Дальнейший анализ уводит нас в глубь информатики.Нам просто необходимо выяснить как блок хранит в себе информацию.Т.е каким способом он это делает.&lt;br /&gt;
А делать он это может только используя стандартные типы данных которые имеются в любом языке программирования.Это byte,word,dword,integer,string,char etc&lt;br /&gt;
это что касает паскаля.Начнем форматировать блок в начале по байтам,потом по словам и т.д.Смотря на результат.&lt;br /&gt;
&lt;br /&gt;
Результат может быть таким, блок изначально мы форматировали по байтно,а после использования по словам мы увидели текст (Unicode использует 2 байта для одной буквы&lt;br /&gt;
вместо старых кодировок используюших по байту на символ).Или будет видно что появилась новая псевдо графика.&lt;br /&gt;
&lt;br /&gt;
Если нет текста,нет сигнатур известных файлов,нет сжатых данных,то начинаем искать на эти байты слова ссылки из других файлов,возможно что это двоичные данные&lt;br /&gt;
которые используются в других блоках или программа сама считывает для своих каких то нужд.&lt;br /&gt;
&lt;br /&gt;
Если вернуться с небес на землю.То мы сразу видим огромный блок сжатый по самые яйца и кучу мелких блоков.Теперь нам надо разжать этот блок чтобы получить&lt;br /&gt;
n-ое кол-во фоток.Как мы будем действовать.Для начала необходимо прогнать на хоr по простейшим цифровым ключам 000 111 222 и т.п. и заново взглянуть на блоки&lt;br /&gt;
может и поможет.&lt;br /&gt;
&lt;br /&gt;
Далее читаем метод кодирования хафмена и создаем такое же дерево разбора(это уже мы лезем к спискам,графам и различным деревьям,их обходам,но когда&lt;br /&gt;
то же надо начинать) получая промежуточные данные и так далее пока не получим расжатое изображение.Как мы узнаем что расжали? Да очень просто&lt;br /&gt;
посмотрим на любую фоту и увидим как она изменяется и строится.&lt;br /&gt;
&lt;br /&gt;
Ключ для разгадки лежит конечно в смежных пикселах,грубо говоря соседние пикселы не начинают&lt;br /&gt;
резко изменять свои цвета(в нашем случае этот так) цвета не могут резко скакать иначе это будет не фото а пожеванное фото.Знающие люди конечно скажут что просто так&lt;br /&gt;
ничего не получится в jpg используется Дискретно Косинусное Преобразование (ДКС) матрицы квантования и т.д.Да это все там есть,но я и не даю конкретных решений,&lt;br /&gt;
я всего лишь размышляю,и сам являюсь бестолковым двоишником :) Описываю всего лишь множества идей может даже и не верных.&lt;br /&gt;
&lt;br /&gt;
Для этого нам нужен архиватор jpg ну или кодировщик/декодировщик.Мы просто подадим ему целый блок и посмотрим что выйдет,изменяя размеры блока мы должны&lt;br /&gt;
получить целое фото вот и все.Нам повезет если этот блок не будет вначале шифрован а после сжат,тогда уж без великого опыта программирования и чтения кучи&lt;br /&gt;
томов высшей математики мы ничего не сможем сделать,кроме как позвать на помощь других опытных и знающих людей и конечно же можно использовать чужой софт&lt;br /&gt;
с открытыми исходниками,различные примеры сжатия и т.п. И помните что отклоняться от примеров не только не возбраняется,а даже приветствуется.&lt;br /&gt;
&lt;br /&gt;
Удачи в исследовании.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mydiary-musiclife.blogspot.com/feeds/173167628678506366/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://mydiary-musiclife.blogspot.com/2012/05/blog-post_25.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/173167628678506366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/173167628678506366'/><link rel='alternate' type='text/html' href='http://mydiary-musiclife.blogspot.com/2012/05/blog-post_25.html' title='Исследование неизвестных форматов файлов...'/><author><name>Олег Плотников</name><uri>http://www.blogger.com/profile/09565341549892337662</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8TClKaZ1c-S6cZdPv8xlBybWOz8UDQjmPhvi4PESHJPJVcjjBR82K1NPlRIUKCwveqnp7Lx-r-KDypOTeBzpzr1VzxpAyyHtrs-6G06l76hKbe8evncOMMGyDQvL-L-zkNevcHt0Tmm4/s72-c/25.05.2012+02-56-37++369.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4128461228562744870.post-6512638033025936694</id><published>2012-05-20T14:46:00.001+04:00</published><updated>2012-05-20T14:47:25.896+04:00</updated><title type='text'>Хватит ломать будем строить</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;strong&gt; Ломать не строить... &lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
Скоро продолжим путь строительства программ,постараюсь дать теорию которая поможет самостоятельности в написании программ и алгоритмов,ожидайте новых статей&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mydiary-musiclife.blogspot.com/feeds/6512638033025936694/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://mydiary-musiclife.blogspot.com/2012/05/blog-post_20.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/6512638033025936694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/6512638033025936694'/><link rel='alternate' type='text/html' href='http://mydiary-musiclife.blogspot.com/2012/05/blog-post_20.html' title='Хватит ломать будем строить'/><author><name>Олег Плотников</name><uri>http://www.blogger.com/profile/09565341549892337662</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4128461228562744870.post-8849044409381067848</id><published>2012-05-17T21:33:00.001+04:00</published><updated>2012-05-17T21:33:40.153+04:00</updated><title type='text'>Обходной путь взлома программ...</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;b&gt;Обход защиты&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
Расскажу не совсем про взлом,скорее это обход защиты чем взлом,но все же это можно использовать.&lt;br /&gt;
&lt;br /&gt;
Кто-то может знает такой видео конвертер как ImToo не помню какой версии я тестировал,но была довольно старая версия сейчас проверял вот на этой ImToo video converter ultimate 6.0.15 build-1110.&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В чем заключается обход защиты? Дело в том что если запустить конвертер указать какой либо видео или аудио файл и начать конвертировать то в незарегестрированной версии нам дают от двух до трех минут и все остальное видео или звук не перекодируется, жестокий конечно облом,но попробуем его убрать без регистрации и без ковыряний в коде программы.&lt;br /&gt;
&lt;br /&gt;
Запускаем стандартный диспетчер задач или у кого какой есть (никак не поставлю себе нормальный диспетчер :( и смотрим при нажатии конвертировать видим новый процес avc.exe это и есть сам конвертщик (консольная программа ),а сама программа это обложка визуальная оболочка для передачи параметров преобразования файлов, как же эти параметры передаются программе конвертору? Да очень просто для этого существует коммандная строка не cmd.exe а такой аргумент который можно задать перед запуском программы,не только консольно но и обычной.&lt;br /&gt;
&lt;br /&gt;
Для того что бы увидеть эту строку заходим в диспетчере вид-выбрать столбцы и там коммандная строка растягиваем ее как можем на весь экран,и делаем скриншот,потом можно запихнуть его в какую либо распознавалку текста или переписать с фото кому как нравится.Теперь переходим в папку конвертера и вызываем cmd.exe я вызываю с панели тотала командера,у кого нет тотала то пуск-выпонить или кнопычку виндовс+R и пишем cmd.exe enter потом переходим в папку командой cd c:\... только не забываем что длинные пути не воспринимаются не более 6 символов&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdiEHu0a3Bwi-moVFVjHgHHou8WsTPVFgYpYDFLp928C2eMhstq8dEMnEHgvzPysvKl82wa9hI4j2kzWnDv_0H7oNSTzU61jILFPX3xzdSCXDYh8WNq7Bl3mNA40bhprwc3kmE8_a-gBo/s1600/17.05.2012+20-50-54++134.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;10&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdiEHu0a3Bwi-moVFVjHgHHou8WsTPVFgYpYDFLp928C2eMhstq8dEMnEHgvzPysvKl82wa9hI4j2kzWnDv_0H7oNSTzU61jILFPX3xzdSCXDYh8WNq7Bl3mNA40bhprwc3kmE8_a-gBo/s320/17.05.2012+20-50-54++134.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBX12KRb79bhnOGYJe8Z3X90JqKJ4tKNh4MLwjnwEavWs004kjzQ3RAn_xrX_r4Z6OBM2pTa0onCagobNpgaoGDkbJNOJjCeHaGMiYBRtGQBRcP3UkQDtmo5c07rCjtCJEZURGFTboqc4/s1600/17.05.2012+20-43-00++668.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;107&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBX12KRb79bhnOGYJe8Z3X90JqKJ4tKNh4MLwjnwEavWs004kjzQ3RAn_xrX_r4Z6OBM2pTa0onCagobNpgaoGDkbJNOJjCeHaGMiYBRtGQBRcP3UkQDtmo5c07rCjtCJEZURGFTboqc4/s320/17.05.2012+20-43-00++668.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Это пережиток прошлого делается так после 6 символов идет ~1\imtoo\ и так далее гемморой конечно а что сделаешь,может и существуют другие методы но мне они не знакомы в тотале это не надо делать там все автоматом присваивается,ну да продолжим в консоли пишем avc.ece и копируем коммандную строку,только стоит убрать -t 180 это как раз ограничение на время кодирования без него видео или аудио будет кодироваться полностью. Вот и все дела.&lt;br /&gt;
&lt;br /&gt;
Скажу только что чуть ли не с первой версии это сохраняется,и думаю и по сей день это работает,если не сменили там чего нибудь на новое,но это врятли. К чему я это пишу,сейчас да большинство программ поставляются и пропатченные и с кряками и с чем только не комплектуются,но думаю это интересно,хоть и кажется что возиться долго,но это на первых порах,даже возникала идея сделать свою обложку и через нее выбирать что хочу конвертнуть,&lt;br /&gt;
ну так эта идея и осталась на этапе не завершения проекта.&lt;br /&gt;
&lt;br /&gt;
А рассказываю это для того что бы было понятно,что многие вещи какими бы не были защищенными все равно можно обойти и проще чем ломать защиту,зачем лезть через каменный забор с колючей проволкой  если на углу есть трещина в стене или яма под забором ))) Взять хотя бы программы которые ограничивают вывод фото на экран все сделал создал к примеру скрин а печатать нельзя это фото или сохранить нельзя ну и фиг с ним,если фото(если результат работы программы выводится на экран,звук можно прослушать,текст просмотреть) то это можно скопировать себе &lt;br /&gt;
только вот не совсем простым способом. В большинстве достаточно снять дамп (копирование участка памяти с нашим фото,текстом или еще с чем то там), для этого можно использовать хекс редактор такой как WinHex&lt;br /&gt;
&lt;br /&gt;
Выбираем Tools-Open RAM выбираем нужный нам процесс в примере я выбрал оперу браузер и отыскал там фото&lt;br /&gt;
по сигнатуре jpg про сигнатуру я еще расскажу, это всего лишь маркеры-байты указывающие на принадлежность к какому либо формату.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMfYQWGj8WEc0NB57Kl7qJ_eXLHlAaXllC66unJ93Q4AV9sC331fj5obX7CSQ57hHIw0lb-PwQMzseLNdxeKgFb8Xg8Z01cpCCh-LPtlPPvBa_ybIGjBwr6loneE20pCbuQMN5aRwqnec/s1600/17.05.2012+21-15-14++794.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;238&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMfYQWGj8WEc0NB57Kl7qJ_eXLHlAaXllC66unJ93Q4AV9sC331fj5obX7CSQ57hHIw0lb-PwQMzseLNdxeKgFb8Xg8Z01cpCCh-LPtlPPvBa_ybIGjBwr6loneE20pCbuQMN5aRwqnec/s320/17.05.2012+21-15-14++794.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mydiary-musiclife.blogspot.com/feeds/8849044409381067848/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://mydiary-musiclife.blogspot.com/2012/05/blog-post_17.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/8849044409381067848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/8849044409381067848'/><link rel='alternate' type='text/html' href='http://mydiary-musiclife.blogspot.com/2012/05/blog-post_17.html' title='Обходной путь взлома программ...'/><author><name>Олег Плотников</name><uri>http://www.blogger.com/profile/09565341549892337662</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdiEHu0a3Bwi-moVFVjHgHHou8WsTPVFgYpYDFLp928C2eMhstq8dEMnEHgvzPysvKl82wa9hI4j2kzWnDv_0H7oNSTzU61jILFPX3xzdSCXDYh8WNq7Bl3mNA40bhprwc3kmE8_a-gBo/s72-c/17.05.2012+20-50-54++134.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4128461228562744870.post-3652100584825306601</id><published>2012-05-16T15:04:00.001+04:00</published><updated>2012-05-16T15:08:22.311+04:00</updated><title type='text'>Diamond Puzzle v1.0</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;a href=&quot;http://euroset.ru/catalog/audio/players/canyon/  style=&quot;color:#FF0000; text-decoration:none&quot;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;strong&gt;Удалим срок годности в игре...&lt;/strong&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;В &lt;a href=&quot;http://mydiary-musiclife.blogspot.com/2012/05/blog-post_13.html&quot; target=&quot;_blank&quot;&gt;прошлой статье&lt;/a&gt; &amp;nbsp;я обещал продолжение и вот оно :)&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Давным давно поставил себе такую игрушку от безделия и заметил как-то что на диске с появился новый драйвер лежал себе спокойно в корне диска и конечно же привлек мое внимание df.sys во-первых странно что драйвер лежит не на своем месте в системной папке а во-вторых еще странней это драйвер в 4 !!! байта F3 в тотале и все стало ясно не какой это не драйвер а счетчик триала (кол-во дней,в нашем случае кол-во запусков). Выглядит так 14 00 00 00 переводим 14 из хекс вида в десятичный получаем 20 не правда ли совпадение? :)&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;/div&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhscbLIYO0BjCWUHb3SMFh6JF-bY125TrMjXehQt8hp_yQIpXYg_bLyqwiWqjx01n0Z4IzHFjnZ8iN1KSveWaTQeFQO9J3Adm4w8N9CTlah2hyVKy4WTqaGAcqgwiR438fDVBUho-yRMJk/s1600/16.05.2012+14-39-36++604.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;221&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhscbLIYO0BjCWUHb3SMFh6JF-bY125TrMjXehQt8hp_yQIpXYg_bLyqwiWqjx01n0Z4IzHFjnZ8iN1KSveWaTQeFQO9J3Adm4w8N9CTlah2hyVKy4WTqaGAcqgwiR438fDVBUho-yRMJk/s320/16.05.2012+14-39-36++604.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Не долго думая я пишу &quot;загрузчик&quot; (Loader) это такая микро программулька которая вначале подготавливает место для шароварной программы (shareware soft) удаляет ключи триала из реестра,с винта,подчищает их или исправляет а потом уже запускает саму программу.&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Принцип простой так что код думаю не стоит приводить удаляем файл или изменяем в нем число на 14 и все,запускаем программку. Будет снова 20 новых запусков.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Это конечно простая защита от дураков,а вот касаемо &amp;nbsp;регистрации то тут я так и не смог разобраться в ней.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Касаемо теории триала: программа просто обязана держать счетчик дней,запусков где то на винте, бывает что лежит в папке но вот формат этого триала либо защифрован,либо его структура будет вызывать недоумение здесь как повезет бывает такое что в файле записываются не дни а милисекунды дней,часы или что-то подобное,это сложная тематика ключевые файлы одна из сложных систем защиты это же касается и ключевого файла регистрации когда его требует программа как в явном так и в не явном виде.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Скажу почему мы не будем рассматривать сегоднящние программы для взлома, дело в том что 90% сегоднящних программ имеют защиту либо антиотладку (борьба против отладчика) шифрование, применение архиваторов-пакеров(которые сжимают программу дабы мы не смогли изучить код в дизассемблере,отладчик тот же дизассемблер с той лишь разницей что он может пошагово запускать программу и показывать результаты,дизассемблер просто показывает код) при запуске пакер находящийся внутри программы сам начинает постепенно распаковывать или расшифровывать код возможно порциями(дабы мы не смогли сделать дамп-копию программы в памяти) возможно целиком.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Так что пока нам рано такими системами защиты заниматься. Конечно скажу что изредка ну покрайней мере не очень часто выпускаются автоматические распаковщики,расшифровщики, но&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;в 99% появляются статьи реверсеров(исследователи кода,более опытные крякеры если можно так назвать их) в которых описано как самому вручную распаковать программу,но требуется большой опыт и знания для чтения таких статей. Многое можете узнать на сайте cracklab.ru сегодня он был переименован в другой ну думаю без проблем найдете его.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;А пока я поищу простую программу без упаковки дабы показать как ломать защиту.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mydiary-musiclife.blogspot.com/feeds/3652100584825306601/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://mydiary-musiclife.blogspot.com/2012/05/diamond-puzzle-v10.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/3652100584825306601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/3652100584825306601'/><link rel='alternate' type='text/html' href='http://mydiary-musiclife.blogspot.com/2012/05/diamond-puzzle-v10.html' title='Diamond Puzzle v1.0'/><author><name>Олег Плотников</name><uri>http://www.blogger.com/profile/09565341549892337662</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhscbLIYO0BjCWUHb3SMFh6JF-bY125TrMjXehQt8hp_yQIpXYg_bLyqwiWqjx01n0Z4IzHFjnZ8iN1KSveWaTQeFQO9J3Adm4w8N9CTlah2hyVKy4WTqaGAcqgwiR438fDVBUho-yRMJk/s72-c/16.05.2012+14-39-36++604.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4128461228562744870.post-4024130829849206518</id><published>2012-05-13T14:57:00.001+04:00</published><updated>2012-05-13T14:58:09.317+04:00</updated><title type='text'>Делаем патч</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;a href=&quot;www.press.uamir.org/article/5834.html style=&quot;color:#FF0000; text-decoration:none&quot;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;strong&gt;Патч patch в программе...&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;
Итак начнем тренироваться ломать программы,и начнем конечно же со своей так проще и так будет понятней&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
создаем &lt;a href=&quot;http://mydiary-musiclife.blogspot.com/2012/04/delphi.html&quot; target=&quot;_blank&quot;&gt;консольное приложение&lt;/a&gt;&amp;nbsp;и пишем такой простейший код:&lt;br /&gt;
&lt;br /&gt;
program Project1;&lt;br /&gt;
&lt;br /&gt;
{$APPTYPE CONSOLE}&lt;br /&gt;
&lt;br /&gt;
uses&lt;br /&gt;
SysUtils;&lt;br /&gt;
const pas=&#39;password&#39;;&lt;br /&gt;
var pass:string;&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
writeln(&#39;Enter code&#39;);&lt;br /&gt;
readln(pass);&lt;br /&gt;
if pass=pas then writeln(&#39;Welcom to the system...&#39;)&lt;br /&gt;
else writeln(&#39;Code is wrong...&#39;);&lt;br /&gt;
&lt;br /&gt;
end.&lt;br /&gt;
&lt;br /&gt;
Все просто и понятно если пароль введенный пользователем не совпадает с константой pas то не судьба иначе&lt;br /&gt;
нас приветсвуют в системе.&lt;br /&gt;
&lt;br /&gt;
Написали сохранили,скомпилировали и запустили. Попробуйте и правильный вариант&lt;br /&gt;
и не правильный,все работает. Теперь как же нам исправить программу что бы она при ЛЮБОМ!!! пароле давала положительный результат?&lt;br /&gt;
&lt;br /&gt;
Для этого прийдется зайти в инструментарий крякера и обзавестись отладчиком я использую OllyDbg v1.10&lt;br /&gt;
можно и поновее и постарее,в принципе не важно какой использовать отладчик,но пока что на стадии обучения лучше&lt;br /&gt;
следовать моим советам,а дальше сами уже выберите чем лучше пользоватся.&lt;br /&gt;
&lt;br /&gt;
Что такое отладчик? Это программа которая позволяет отлаживать код нашей программы,искать ошибки в только что написанной программе,с той лишь разницей что у нас нет исходника *.pas для паскаля или вообще с++ есть результат компиляции т.е просто исполнимый файл.Так вот отладчик позволяет не только найти ошибку но и исправлять прямо в *.exe . Но не пугайтесь если увидете не тот код который вы хотели увидеть,это машинный код - ассемблер. этот язык сложен и красив по своему, ассемблер готов уже для переваривания процессором.&lt;br /&gt;
&lt;br /&gt;
Пока что не будем учить ассемблер,сейчас другая задача,да может и вообще не стоит его учить :)&lt;br /&gt;
Я покажу самые частые команды которые потребуются для взлома.&lt;br /&gt;
&lt;br /&gt;
Итак открывает отладчик и открываем в нем нашу тестовую программу,и вот что мы видим в окне отладчика а точнее в окнах.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH-QnCYtBm2juWa0YJlXeRQRrZZqJbBFx84wC9EUNjYuAZRPH_dCbL2wYRz0lJKtAabSVv5vXmoSraNHM2iz2MOGcAOLZ1D11WAH6oOXA43aVcUiU1sxHvFZV0iRndNzWnVPjsPm9okYI/s1600/olly-start.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;165&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH-QnCYtBm2juWa0YJlXeRQRrZZqJbBFx84wC9EUNjYuAZRPH_dCbL2wYRz0lJKtAabSVv5vXmoSraNHM2iz2MOGcAOLZ1D11WAH6oOXA43aVcUiU1sxHvFZV0iRndNzWnVPjsPm9okYI/s320/olly-start.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
конструкция if pass=pas then... превращается в JNE address это переход на данный адресс если срабатывает другое условие ИНАЧЕ else writeln(&#39;Code is wrong&#39;); просто сотрем это условие в ассемблере это NOP (0x90 в шестнадцатеричном редакторе) отладчик автоматически добавляет два нопа для &quot;выравнивания&quot; кода иначе будет фатальная ошибка,не будем сейчас залезать&lt;br /&gt;
в дебри ассемблера,скажу что это очень важно соблюдать количество исправленных байт.&lt;br /&gt;
&lt;br /&gt;
Итак исправляем и сохраняем все запускаем и проверяем все работает на ура.&lt;br /&gt;
Просто подходим к строке где надо исправить и давим пробел,вводим NOP и ок&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAjFrFjWgdvehQLrm4hWTy9HPd6YMo9Rv2sMtOnbC447FhW9r5SH50gRPEH7Z2u8jm0hhVYUjMj8hPwk3_Co3vkzqBb0pMmK2OWFoIDsVsZ9yWbvnaVF_c-u-t3xkQhO8YaKm6NNXfezE/s1600/patch.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;121&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAjFrFjWgdvehQLrm4hWTy9HPd6YMo9Rv2sMtOnbC447FhW9r5SH50gRPEH7Z2u8jm0hhVYUjMj8hPwk3_Co3vkzqBb0pMmK2OWFoIDsVsZ9yWbvnaVF_c-u-t3xkQhO8YaKm6NNXfezE/s320/patch.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
В версии 1.10 это выглядит так в контекстном меню, скопируем все исправления в программе&lt;br /&gt;
в новую экзешку&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgw5p50cjOuIiqfoC0aXDb4S28OcTc4TJJKzgHB-unPtxUJ6WFmo94O0SfCc8S1KXOXVu0viVc4c6JBCNsrzlFrzdv1jnM7OpmaZ3joXuvz971S1EI56-vAKUn2cx0lyELALdqWRxjlwFg/s1600/copy-old.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;238&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgw5p50cjOuIiqfoC0aXDb4S28OcTc4TJJKzgHB-unPtxUJ6WFmo94O0SfCc8S1KXOXVu0viVc4c6JBCNsrzlFrzdv1jnM7OpmaZ3joXuvz971S1EI56-vAKUn2cx0lyELALdqWRxjlwFg/s320/copy-old.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
А вот в более новой версии: (у меня почему то не получилось,программа падает как раз с фатальной ошибкой,не стал разбираться в чем дело в настройках,просто использовал старую версию)&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhW3pKjfDm8ij44mrKpwPWiplXjCsUN8UrIxarMA3zehCXQgsALETBU19ABjmQv69yDdGE5nq0A9tV82l68rdIf8UYbBN6mzgpmAbmFOmcqcXZZzXhgFfpP72HkDUbMs4CcKtLxdeRhDA4/s1600/copy.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;237&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhW3pKjfDm8ij44mrKpwPWiplXjCsUN8UrIxarMA3zehCXQgsALETBU19ABjmQv69yDdGE5nq0A9tV82l68rdIf8UYbBN6mzgpmAbmFOmcqcXZZzXhgFfpP72HkDUbMs4CcKtLxdeRhDA4/s320/copy.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Это был всего лишь патч patch исправление нескольких байт для получения хорошего результата.&lt;br /&gt;
Порой этого бывает достаточно для домашнего использования :) бывает так что проше и легче исправить код&lt;br /&gt;
чем выяснять сложный алгоритм генерации проверочного кода.&lt;br /&gt;
&lt;br /&gt;
Ведь это только у нас в тестовой программе хранился сам код (раньше так и было в 99% программ ) который можно было бы просто подсмотреть вытянув все текстовые строки из программы и введя правильный вариант даже не ломая программы,но это время уже давно ушло и сегодня код регистрации вычисляется динамически,&lt;br /&gt;
&lt;br /&gt;
в одном случае просто считывает имя машины и на основе его к примеру XORится каким либо ключем или используется моноалфавитная подстановка - шифр цезаря или что-то простое в этом духе, в другом случае считывается серийный номер винта или любого другого компонента компа и на основе него вычисляется код,поразному бывают разные навороты алгоритмов.&lt;br /&gt;
&lt;br /&gt;
чаще всего используется имя пользователя записанного в ОСи или же введенного в окне регистрации и с этим именем тоже происходит какая либо обработка, потом происходит сравнение кода введеного пользователем с кодом сгенерированным программой если совпадает то все ок иначе нет регистрации.&lt;br /&gt;
&lt;br /&gt;
По поводу демо программ бывает такое что ломаешь ломаешь а ломать то там и нечего в программе действительно &lt;br /&gt;
отсутствует нужный код (к примеру распечать результат программы на принтере, или нет больше 3х уровней в игре и т.д и т.п) здесь все чаще программисты,а точнее те кто пытается заработать на таких программах (шароваршики) приходят к такому выводу что лучше выпустить действительно демо версию в которой будут работать пару функций а остальные будут в полнофункциональной версии за деньги,иначе взломщики часто ломают демо версии и включают все функции(которых по заверениям авторов там нет). &lt;br /&gt;
&lt;br /&gt;
Вся суть взлома сводится к изменению условия проверки кода на обратные или делается безусловный переход на место удачной регистрации. Но об этом я еще подробно опищу,а пока что давайте поломаем реальную программу...&lt;br /&gt;
&lt;br /&gt;
Будем исправлять триал (ограниченное время работы программы,или количество запусков,или дней и т.п) в игре&lt;br /&gt;
Diamond Puzzle v1.0 именно эту версию незнаю сможете ли вы отыскать эту старую версию,я даже не в курсе есть ли новые версии.&lt;br /&gt;
&lt;br /&gt;
В новых версиях на 90% будет совершенно другой алгоритм защиты,так что постарайтесь найти версию 1.0 или просто поверьте на слово в крайнем случае, хотя я подумаю и вероятно выложу для скачивания данную игрушку дабы потренироваться во взломе.&lt;br /&gt;
&lt;br /&gt;
Но это будет уже в другой статье...&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mydiary-musiclife.blogspot.com/feeds/4024130829849206518/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://mydiary-musiclife.blogspot.com/2012/05/blog-post_13.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/4024130829849206518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/4024130829849206518'/><link rel='alternate' type='text/html' href='http://mydiary-musiclife.blogspot.com/2012/05/blog-post_13.html' title='Делаем патч'/><author><name>Олег Плотников</name><uri>http://www.blogger.com/profile/09565341549892337662</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH-QnCYtBm2juWa0YJlXeRQRrZZqJbBFx84wC9EUNjYuAZRPH_dCbL2wYRz0lJKtAabSVv5vXmoSraNHM2iz2MOGcAOLZ1D11WAH6oOXA43aVcUiU1sxHvFZV0iRndNzWnVPjsPm9okYI/s72-c/olly-start.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4128461228562744870.post-2733367846620033210</id><published>2012-05-12T04:46:00.000+04:00</published><updated>2012-05-12T04:46:57.825+04:00</updated><title type='text'>Ожидается</title><content type='html'>Ожидается описание двух моментов первый это применение какого либо спецэффекта в фотошопе и показать как же взломщики ломают программы и делают кряки патчи и генераторы ключей,и конечно же суть взлома программ, супер сжатую теорию так сказать самые сливки</content><link rel='replies' type='application/atom+xml' href='http://mydiary-musiclife.blogspot.com/feeds/2733367846620033210/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://mydiary-musiclife.blogspot.com/2012/05/blog-post_9935.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/2733367846620033210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4128461228562744870/posts/default/2733367846620033210'/><link rel='alternate' type='text/html' href='http://mydiary-musiclife.blogspot.com/2012/05/blog-post_9935.html' title='Ожидается'/><author><name>Олег Плотников</name><uri>http://www.blogger.com/profile/09565341549892337662</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>