Сейчас на форуме: (+7 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› Визуализация на физическом плане |
Посл.ответ | Сообщение |
|
Создано: 21 марта 2014 16:03 · Поправил: VBA · Личное сообщение · #1 Добрый день! Сейчас с интересом изучаю туториал Рикардо Нарвахи "Введение в крэкинг с помощью OllyDbg". Добрался до 14-ой главы. Там он разбирает крекми по имени "crackmeeasy". В предыдущих главах везде все было относительно легко и понятно, а здесь, можно сказать, "разум за разум заходит", когда пытаюсь проследить весь механизм работы защиты. Он там все очень подробно описывает, откуда что куда перекладывается (в регистрах и в памяти), но я постоянно "теряю нить". Постоянно возникает мысль, что надо бы сделать (из бумаги или еще чего-нибудь) какую-нибудь физическую "ленту" с кармашками, на каждом кармашке скотчем наклеить адреса ячеек памяти, которые нас сейчас интересуют, и такую же "ленту" сделать для регистров, а потом трассировать пошагово в отладчике и одновременно перекладывать бумажки с текущими значениями из одного кармашка в другой. Как думаете, будет ли полезна такая физическая визуализация или это тупиковый путь и надо все стараться просчитывать (представлять) в уме и смотреть только на экран дебаггера? И вообще, хотелось бы узнать, как кто "выкручивается" в таких сложных случаях? Наверняка, у каждого есть какие-то приемы для облегчения такой работы. И еще хотелось бы услышать совет вот такого свойства. У меня сейчас два пути. Первый - читать все подряд в этом руководстве, но при этом пропускать такие сложные ("муторные") места. В конце концов, там впереди, судя по оглавлению, очень много интересного. У этого подхода минус в том, что будет неприятный осадок, что без должной проработки пропущенного материала могу что-то не понять в дальнейшем. А кроме того, как я понимаю, серьезный реверсинг это и есть очень кропотливая работа, и если я не стремлюсь к ней, не получаю от нее удовольствия (как бы ни парадоксально это ни звучало), то это просто "не моё" и тогда лучше заниматься чем-нибудь другим. Второй - прорабатывать все подряд, ничего не пропуская, но тогда я рискую тем, что могу просто отбить себе охоту к реверсингу на всю оставшуюся жизнь ![]() ![]() |
|
Создано: 21 марта 2014 16:14 · Личное сообщение · #2 -Зачем вся эта возня.. в крайнем случае выписываешь себе на бумажку адреса каких-то важных переменных/функций. VBA пишет: И вообще, хотелось бы узнать, как кто "выкручивается" в таких сложных случаях? Наверняка, у каждого есть какие-то приемы для облегчения такой работы. Ага.. с недельку поковыряешь код, он тебе сниться начинает, и тебя начинает неожиданно осенять гениальные идеи. Если нет интереса к каким-то вещам, то и смысл их смотреть. Можно будет потом по мере надобности. Я, честно говоря, вообще не видел этого цикла, ни одной главы. ![]() |
|
Создано: 21 марта 2014 16:15 · Личное сообщение · #3 пиши псевдокод (или на си) и не нужно никаких бумажек или грузи в иду, там есть примерная визуализация ![]() |
|
Создано: 21 марта 2014 16:53 · Личное сообщение · #4 |
|
Создано: 21 марта 2014 19:07 · Личное сообщение · #5 От последнего вменяемого тутора нарвахи прошло лет 5, так что не советую это брать за эталон.... ![]() |
|
Создано: 21 марта 2014 19:58 · Поправил: VBA · Личное сообщение · #6 drone пишет: пиши псевдокод (или на си) и не нужно никаких бумажек... Так в том-то и проблема. Чтобы написать псевдокод, надо сначала понять, что происходит. Там же в дебаггере всё на ассемблере. Честно говоря, я даже не представляю, как можно написать такой псевдокод. Приблизительно вот так что ли? Code:
Но это же получится тот же самый ассемблер, только пересказанный своими словами, и это по-моему еще сильнее все запутает. drone пишет: ...или грузи в иду, там есть примерная визуализация В иду я его не могу загрузить, потому что он упакованный, ида ругается и его выплевывает, я пробовал. А в Олле Нарваха его ловит в том момент, когда он уже распаковался в памяти, и начинает анализировать. Чтобы его засунуть в иду его сначала надо распаковать, а я пока в этом деле не мастак. А вообще-то я в иде блок-схемы видел, но только на других файлах. Согласен, удобно, наглядно. Но если файл большой, то все равно ничего не понятно, замучаешься эти схемы прокручивать. А этот файл относительно маленький (все-таки не полновесная программа, а крекми), наверно, в иде он, и правда, был бы понятнее, если бы его распаковать и туда засунуть. Vovan666 пишет: От последнего вменяемого тутора нарвахи прошло лет 5, так что не советую это брать за эталон.... Ну тогда порекомендуй, пожалуйста, тот туториал, который бы ты сам сейчас начал изучать, если бы был новичком в этом деле. ![]() |
|
Создано: 21 марта 2014 20:23 · Личное сообщение · #7 VBA пишет: Там же в дебаггере всё на ассемблере. Честно говоря, я даже не представляю, как можно написать такой псевдокод. Для этого нужно адекватно владеть по крайней мере двумя языками: Assembly & "C". Тогда можно выражать мысли "высказаные" на одном языке средствами другого языка. Как, например, вы будете переводить с китайского на французский, не зная ни того, ни другого? ----- Give me a HANDLE and I will move the Earth. ![]() |
|
Создано: 21 марта 2014 21:14 · Поправил: VBA · Личное сообщение · #8 plutos пишет: Для этого нужно адекватно владеть по крайней мере двумя языками: Assembly & "C". Тогда можно выражать мысли "высказаные" на одном языке средствами другого языка. Не, ну предлагали же на выбор: псевдокод или си. Ассемблер я более или менее знаю. А для того чтобы "перевести" с ассемблера на псевдокод знание си не обязательно, как мне кажется. Только сам этот перевод будет достаточно трудоемким и не таким наглядным, как перекладывание бумажек по "кармашкам памяти". plutos пишет: Как, например, вы будете переводить с китайского на французский, не зная ни того, ни другого? В такой ситуации приходит на ум только использование Промта ![]() P.S. И вообще, Bad_Guy в своем видеокурсе говорит, что для крэкинга вполне достаточно знать ассемблер и плюс какой-нибудь (любой!) язык высокого уровня. Сам же он в качестве этого второго языка рекомендует вовсе не си, а PHP. Ну вот у меня сейчас так и есть - Ассемблер плюс разные диалекты Бэйсика. ![]() |
|
Создано: 22 марта 2014 00:30 · Личное сообщение · #9 VBA пишет: Ассемблер я более или менее знаю Нет, вы не знаете, иначе не возникли такие бы проблемы. Общая логика работы запоминается прекрасно, без каких либо переводов и независимо от сложности проекта. Переводят лишь детали, то, что вам непосредственно нужно, алгоритм или генерацию SN. VBA пишет: Только сам этот перевод будет достаточно трудоемким Когда вы понимаете, как это работает, то сложность перевода упирается в набор текста. Хотя тут могут быть проблемы с библиотеками, если программа на 90% состоит из вызовов VCL то иногда сложно перевести на чистый си или с++. VBA пишет: И вообще, Bad_Guy в своем видеокурсе говорит Bad_Guy не бог, но отчасти он говорит верно, если бы вы понимали asm, то опять же, не возникали бы такие вопросы. VBA пишет: рекомендует вовсе не си, а PHP. Лол, а если вы завтра про перфокарты прочитаете? ![]() Ctypes конечно рулит, но если нет никакого понимания, как это работает, то вообще труба, быстрее си выучите, к тому же, на пых далеко не все можно перевести. Мну например в качестве скриптов питон юзает и чо? Вы осилите написать расширение для пыха на си? ![]() ![]() |
|
Создано: 22 марта 2014 00:46 · Личное сообщение · #10 Мне просто любопытно, как именно вы себе представляете псевдокод? Вот пример псевдокода: Code:
----- Give me a HANDLE and I will move the Earth. ![]() |
|
Создано: 22 марта 2014 06:47 · Личное сообщение · #11 VBA пишет: Честно говоря, я даже не представляю, как можно написать такой псевдокод. ну, вероятно, стоит определиться с самим Этот цикл (введение в крекинг) можно смотреть после освоения ассемблера. Иначе, после пары тройки глав, начинается вот такая каша. ![]() |
|
Создано: 22 марта 2014 14:20 · Поправил: VBA · Личное сообщение · #12 VBA пишет: P.S. И вообще, Bad_Guy в своем видеокурсе говорит, что для крэкинга вполне достаточно знать ассемблер и плюс какой-нибудь (любой!) язык высокого уровня. Сам же он в качестве этого второго языка рекомендует вовсе не си, а PHP. Сейчас специально заново пересмотрел те 3 урока видеокурса, которые посвящены изучению языка PHP и понял, что допустил ошибку в своем высказывании. Так что на всякий случай приношу свои извинения. На самом деле, точная цитата из урока №4 "delphi_si_ili_php_slozhnyi_vybor" звучит вот так: "Я предпочитаю выбрать для начального изучения программирования такой язык как PHP". F_a_u_s_t пишет: Bad_Guy не бог, но отчасти он говорит верно, если бы вы понимали asm, то опять же, не возникали бы такие вопросы. Ну бог может и не бог, но огромный АКТУАЛЬНЫЙ туториал для новичков (Курс видеоуроков программирования и крэкерства 3.0_выпущен в августе 2013) создан именно им. Про понимание ассемблера это очень всё растяжимо. Разумеется, я не могу сказать про себя, что я ассемблерный гуру, но основные команды я знаю, принцип работы стека (LIFO) понимаю, особенности хранения данных в памяти (в перевернутом виде) тоже понимаю. Ну а что ещё-то требуется для крэкинга? Опыт? Ну да, его пока что маловато, я согласен. Gideon Vi пишет: Этот цикл (введение в крекинг) можно смотреть после освоения ассемблера. Иначе, после пары тройки глав, начинается вот такая каша. Опять же всё упирается в оценку степени освоения ассемблера. Чтобы знать язык на нем надо программировать. А на ассемблере сейчас НИКТО не программирует, поэтому, по большому счету, его сейчас НИКТО не знает. А простенькую программу под 16-битный DOS я тоже могу написать. Под Windows пока еще не могу. Но ведь для этого уже не столько сам ассемблер требуется знать, сколько принципы работы операционной системы и тонкости вызова API функций, и сами эти функции. Ну да, здесь у меня пока ещё слабое место, с этим я не спорю. plutos пишет: Мне просто любопытно, как именно вы себе представляете псевдокод?Вот пример псевдокода: Gideon Vi пишет: ну, вероятно, стоит определиться с самим понятием. Честно говоря, я совсем недавно столкнулся с этим понятием. Сейчас одну книжку начал читать, ну вот там и столкнулся ![]() Вот оттуда цитаты на эту тему: Псевдокод У программистов есть еще один вид языка программирования, называемый псевдокодом. Псевдокод – это естественный язык, по структуре похожий на язык высокого уровня. Его не понимают компиляторы, ассемблеры и какие-либо компьютеры, но он помогает программистам организовать инструкции. Псевдокод не имеет четкого определения. Разные люди пишут на псевдокоде немного по-разному. В некотором роде, это туманное отсутствующее звено между естественными языками, например английским, и языками программирования высокого уровня вроде C. Псевдокод помогает понять общие стандартные принципы программирования. .................. В этой книге используется псевдокод, похожий на C, поэтому каждая инструкция оканчивается точкой с запятой, а наборы инструкций определяются с помощью фигурных скобок и отступов. Если приведенную выше схему проезда преобразовать в псевдокод, получится примерно следующее: Code:
Ну вот приблизительно так я представляю себе псевдокод ![]() Основные понятия программирования В следующих разделах мы познакомимся с другими общими понятиями программирования. Эти понятия используются во многих языках программирования с некоторыми синтаксическими различиями. По ходу представления этих понятий я буду иллюстрировать их примерами псевдокода с C-образным синтаксисом. К концу псевдокод станет очень похож на C. Ну вот, а поскольку я до этого самого конца еще не дочитал, то пока еще представляю себе псевдокод именно так, как процитировано выше ![]() P.S. Ну ладно, в принципе ответ на главный вопрос этой ветки я уже услышал. И он состоит в том, что для визуализации никто не использует никаких физических приспособлений. Ну значит и я тоже не буду. ![]() |
|
Создано: 22 марта 2014 14:43 · Личное сообщение · #13 VBA пишет: но основные команды я знаю Мало знать команды, нужно еще знать алгоритмы и понимать общий принцип работы оси. VBA пишет: Чтобы знать язык на нем надо программировать. Что бы знать язык на нем не обязательно писать, его нужно просто знать, тогда появится понимание этого самого языка. Я например на VB не пишу, но спокойно перевожу код с VB на другие языки. VBA пишет: У программистов есть еще один вид языка программирования, называемый псевдокодом. Псевдокод просто удобная запись алгоритма, причем удобная как правило лично для себя самого. В некоторых книгах "псевдокод" вполне себе компилится, просто псевдокодом оказался паскаль. ![]() Записывайте так, как вам удобно, не оглядывайтесь на других. В частных случаях псевдокод должен быть оторван от специфики платформы, но это практикуется в обучении языкам. Например: флаг = создать файл( "тест.текст" ) если флаг == истина то записываем_в_файл( буффер ) .... описываем логику работы с файлами без специфических флагов и языковых конструкций. ![]() |
|
Создано: 22 марта 2014 16:03 · Личное сообщение · #14 VBA пишет: А на ассемблере сейчас НИКТО не программирует Вы таки будете удивлены ![]() ![]() |
|
Создано: 22 марта 2014 19:05 · Личное сообщение · #15 VBA пишет: А для того чтобы "перевести" с ассемблера на псевдокод знание си не обязательно, как мне кажется. Думаю что обязательно. Так же имхо обязательно самому написать тысячи(сотни тыщь) строк кода, и самое главное, отладить его!, и тогда открыв любую прогу в оле и пройдя в любую функцию, у тебя перед глазами будет исходник ![]() ![]() |
|
Создано: 22 марта 2014 23:29 · Поправил: VBA · Личное сообщение · #16 |
|
Создано: 23 марта 2014 00:16 · Поправил: F_a_u_s_t · Личное сообщение · #17 VBA пишет: После такого "тренинга" любой код в отладчике будет знакомым и родным Это действительно так. Помимо этого могу добавить, старайтесь сами решать задачи, то что непонятно гуглить, здешние "пенсионеры" начинали ломать, когда еще и туторов то было целых полторы штуки. Если что то не получается, то отложите на потом, возьмите что проще и через время вернитесь к той задаче и скорее всего вы сможете ее решить. Без трудностей не бывает личностного роста. Нет никакой серебряной пули, все, кто более менее чего то достиг таки напрягали мозг, собственно после чего он и развивается. Не бойтесь трудностей и не ищите легких путей, тогда все у вас получится, лишь бы был интерес. ![]() |
|
Создано: 23 марта 2014 02:02 · Поправил: VBA · Личное сообщение · #18 F_a_u_s_t пишет: Это действительно так. И наверно, лучше начать с 32-битной консольной си под Windows, правильно я понимаю? Я как раз недавно скачал видеокурс вот отсюда: http://www.youtube.com/playlist?list=PLgPPmowqnDALAbF64bgr39RFoRwqQc89O Сегодня посмотрел первый урок. Вроде бы вполне толково мужик всё объясняет, доходчиво. ![]() |
|
Создано: 23 марта 2014 07:37 · Личное сообщение · #19 Используйте учебники. Видеокурсы - сурогат, без плюсов физически доступного лектора (очное образование) или источника фундаментальных знаний (учебники). ![]() |
|
Создано: 23 марта 2014 08:00 · Личное сообщение · #20 VBA пишет: И наверно, лучше начать с 32-битной консольной си под Windows Именно так, 16 бит это уже история, 64 по сути своей тоже самое, только каши в голове еще больше добавит чем 32 бита. По поводу уроков, тут разделяю мнение Gideon Vi, читайте книги, в голове больше задержится. При сборке сишного кода можно генерировать асм листинг с сишными комментариями и таки посмотреть что получается и из чего оно получилось. ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Визуализация на физическом плане |