Всем привет,

*ВАЖНО* прежде чем читать этот блог, необходимо знать основные принципы языка C, чтобы полностью понять эту тему.

Сегодня я хочу написать блог о указателях в языке C. Я предполагаю, что большинство людей боролись с этой концепцией C, поэтому я решил написать блог с отличным объяснением. Я также подумал, что это было бы здорово для этичных хакеров программного обеспечения в сообществе CyberSec, потому что мы будем использовать много. Теперь давайте углубимся в это.

Я покажу вам 2 отличных примера, как они объясняются и отображаются в отладчике «gdb».

Указатели были, возможно, популярным выбором среди программистов, а также среди хакеров программного обеспечения, когда речь идет об оптимизированном использовании памяти. Указатели сделали возможным доступ к содержимому любой переменной, такой как; массив или тип данных. Вы можете использовать указатели для низкоуровневого доступа к любому содержимому и повысить общую производительность.

Хорошо, я объяснил, что он делает, но еще не объяснил, что это такое?

Что такое указатель?

Указатель — это переменная, которая содержит адрес памяти другой переменной, массива или строки. Когда указатель содержит адрес чего-либо, говорят, что он указывает на этот объект. Регистр EIP — это указатель, который «указывает» на текущую инструкцию во время выполнения программы, содержащий ее адрес в памяти. Идея указателей используется и в C. Поскольку физическую память фактически нельзя переместить, информацию в ней необходимо скопировать. Копирование больших блоков памяти для использования разными функциями или в разных местах может быть очень затратным с вычислительной точки зрения.

То, что я собираюсь вам проиллюстрировать, будет иметь решающее значение для учащихся, потому что после краткого объяснения вы столкнетесь с двумя примерами.

Пример-1

Зачем нам указатели? теперь ответ очень прост. Они нужны нам, потому что они делают следующее:

  • облегчает динамическое выделение памяти
  • он предоставляет альтернативный способ доступа к типу данных, помимо имен переменных, вы можете получить доступ к содержимому переменной через указатели.
  • это также позволяет нам возвращать более одного значения из функции

когда вы определяете целочисленную переменную, для нее в памяти выделяется два байта. К этому набору из двух байтов может получить доступ память, которая довольно велика и имеет шестнадцатеричный формат.

Я также указал некоторые комментарии для простоты.

Как видно из комментариев в коде, первый указатель устанавливается в начале массива символов. Когда мы объявляем массив, на который на самом деле ссылаются, таким образом, он сам является указателем. Теперь внимательно прочитайте комментарий и поймите поток этого кода.

Я собираюсь использовать отладчик «GDB», чтобы увидеть больше деталей.

Программа перекомпилируется, и на десятой строке кода устанавливается точка останова. Это остановит программу после «Hello hacker\n», поскольку вы можете видеть, что строка была скопирована в буфер «str», а переменная указателя установлена ​​в начало

Когда указатель рассматривается как строка, очевидно, что данная строка существует и находится по адресу памяти «0x7fffffffdf10», помните, что хранится только адрес памяти «0x7ffffffffdf10».

При использовании адреса оператора переменная-указатель располагается по адресу «0x7ffffffffdf38» в памяти и содержит адрес «0x7ffffffffdf10»

Пример-2

Я знаю, что эта концепция может сбивать с толку, но если вы разберете все в правильном порядке, вы сможете глубже изучить и понять атаки на переполнение буфера. Я поставлю несколько ссылок, где вы также можете попрактиковаться в указателях и других концепциях.

Теперь я собираюсь написать короткий код, который будет демонстрировать намного проще, чем предыдущий.

Теперь мы собираемся использовать GDB, чтобы полностью понять адрес памяти.

Как обычно, устанавливается точка останова, и программа выполняется в отладчике. На данный момент большая часть программы выполнена. Первая команда печати показывает значение «var», а вторая показывает свой адрес, используя адрес оператора

Использование указателей позволяет нам получать доступ к содержимому именно из нужных областей памяти, но выделение памяти с помощью указателей и невысвобождение ее по завершении работы может привести к проблемам.

Я также рекомендую вам использовать понятные отладчики GDB, чтобы получить полную информацию о расположенном адресе памяти этой используемой переменной, в моем случае я так и сделал.

Краткое содержание

Мне нравится использовать указатели и структуры (о чем я объясню позже), как этичному хакеру, полезно изучить любой язык программирования. Я бы предпочел изучить C/C++, чтобы понять распределение памяти, а также структуру данных алгоритма. Большинство людей смущаются, выбирая конкретную область в области кибербезопасности, как хакер программного обеспечения, я должен пойти на кодирование с помощью C и языка ассемблера, если вы хотите разработать свою RATS, вредоносное ПО, конечно, в образовательных целях, но в целом вам это не нужно, но будет здорово, конечно, проанализировать материал. На этой платформе будет размещено больше этического взлома, вредоносного ПО, взлома программного обеспечения, и я почти забыл сказать, что анализ эксплойтов на моем канале YouTube будет опубликован :)

Большое спасибо за чтение этого блога. Я знаю, что этого блога будет недостаточно, но не волнуйтесь, будут написаны и объяснены другие статьи и блоги, мы углубимся в эту область. Я стремлюсь стать первоклассным хакером и хотел бы поделиться своим опытом со своими зрителями и людьми, которые тоже станут первоклассным хакером.

Я поставлю несколько ссылок, где вы можете изучить и улучшить свое оружие )









Социальные платформы:

Linkedin: https://www.linkedin.com/in/ahmetg%C3%B6ker/

Ютубер: https://www.youtube.com/c/TurkishHoodie

Твиттер: DarkGhost (@TurkishHoodie_) / Twitter

Ахмет Гокер | Эксплойт исследователь | Исследователь вредоносных программ | Ютубер