Перейти к содержанию
49406

Haven

Участник
  • Постов

    17
  • Зарегистрирован

  • Посещение

  • Победитель дней

    14
  • NSC

    0 [ Donate ]

Haven стал победителем дня 14 мая 2023

Haven имел наиболее популярный контент!

2 Подписчика

Информация о Haven

  • День рождения 06.05.2004

Информация

  • Пол:
    Мужчина
  • Интересы:
    Программирование, реверс-инжиниринг, криптография, математика, химия, вирусология.

Контакты

Посетители профиля

537 просмотров профиля

Достижения Haven

  1. Очень забавно смотреть, как ты пытаешься "пробраться" к "концу интернета" (или глубинам, кому как удобнее), не разобравшись в принципах и некоторых идеях субкультуры. То, чем ты сейчас занимаешься - игра в мертвую ARG (если можно так выразиться). Кончай заниматься фигней и начни делать что-то нормальное.
  2. Весьма интересное дело, этот реверс инжиниринг, столько всего интересного и недокументированного можно увидеть, с ума сойти! Эта статья посвящена реверсу фирмвари (или прошивки) всеми любимой PSP и моей лени, тому, чем я занимаюсь вместо подготовки к экзаменам. Мной за основу была взята прошивка от PSP Go, версии 6.60 на официальном сайте. Я не очень опытен в реверсе, поэтому буду рад любым замечаниям. Ну что же, наверное не стоит медлить. Первым делом конечно же стоит взять прошивку, опять же это можно сделать на официальном сайте Sony. Имя файла в принципе классическое для этой платформы - EBOOT.PBP. Со скачиванием проблем особых быть не должно, а вот что дальше... Вообще есть несколько путей добычи декриптованной прошивки. Все выбирают классический: через PSARDumper и prxtool. К сожалению, этот способ мне не помог; PSARDumper не понимал как упакован файл, а при дальнейших махинациях (которые я опишу далее) prxtool не мог загрузить ELF-структуры: Существует еще одна тулза: prxdecrypter, но и она мне не смогла помочь, она тоже не понимала как упакован .prx файл. Что ж, мне пришлось добираться до заветной цели на костылях, а я и не против. На каком-то сайте я нашел psptool некоего DaveeFTW, уже улучшенный другим человеком: zecoxao. Хорошо, что на github лежит этот репозиторий, иначе бы я перерыл бы всю историю браузера. Так получилось, что я сишник, да и оригинальную версию не видел, чтоб сравнить и проанализировать в каких местах оно стало лучше. Скорее всего вы на ОС Windows (на UNIX-like системах все +- так же), поэтому команда будет такова: C:\Users\<user_name>\path\to\Python\Python38\python.exe pcard.py EBOOT.PBP EBOOT.PSARНа самом деле можно и обойтись без EBOOT.PSAR, по крайней мере у меня это получилось. И вот, наконец-то мы получили заветные разделы /flash0 и /flash1, я их уже перенес в отдельную папку проекта. Как раз таки на этом моменте и отказались работать prxtool и prxdecrypter. Скорее всего это связано с самим алгоритмом дешифровки, который видимо что-то либо пропускает, либо не дешифрует до конца. Декриптовав EBOOT.PBP встает следующий вопрос: "А как мне получить листинги, если и prxtool, и prxdecrypter отказываются работать?". Существует такой замечательный инструмент, как Ghidra - дизассемблер от NSA (стремно, не так ли?). Но теперь возникает и еще один вопрос: "А как мне резолвить psp-шные функции?". Я тоже задался этим вопросом и буквально через часа так 1.5 вспомнил, что я еще в марте рылся в pspsdk и пытался что-то написать под саму PSP. Зайдя на github проекта pspsdk я наткнулся на нужные скрипты, обнаруживающие psp-шные функции, они были как раз для Ghidra. Так что я незамедлительно сохранил скрипты на диск и пошел их пихать в Гидру. Краткий гайд по Ghidra. Думаю, вы разберетесь, как её запустить, по крайней мере на оф. сайте есть туториал, если вдрыг будут проблемы. Давайте создадим новый проект: File -> New Project. Далее выбираем Non-Shared Project: Затем просто вводите имя своего проекта и укажите для него папку: Для того, чтоб установить скрипты для реверса psp-шных файлов нам нужно зайти в дизассемблер, это такой зеленый дракончик во вкладке Tool Chest. Нажимайте на него и вам откроется дизассемблер, перейдите в Script Manager: Выберите нужную директорию в Script Directories (там будет зелененький +, нажмите на него) с скриптами для psp-функций и сохраните (не нажимайте dismiss), они нам пригодятся. Выходим из дизассемблера. Далее нам в проект нужно импортировать файл, это делается через File -> Import File, затем выбрать нужный файл. Если вы собрались реверсить .prx, то рекомендую вам в следующем контекстном меню выбрать "Batch", после просто нажмите "OK". Я импортировал avcodec.prx (остальным файлам по 3-4 дня): Откройте нужную папку с расширением .prx и кликните 2 раза по "gzip_decompressed", снова откроется дизассемблер. Теперь нам предложат проанализировать файл: Выбираем да. В следующем окне оставляем все как есть: Вуаля, у нас теперь есть листинг. Перед вами MIPS архитектура, используемая Sony, как раз для PSP и некоторых других приставок и вещей. Предварительно пройдитесь установленным плагином, чтоб было понятнее где какие функции. Я это как раз забыл сделать, так что пришлось мне частично переписывать полученный С-псевдокод кое-какого модуля. Для понимания архитектуры MIPS я оставлю вам вот этот документик + вы можете руководствоваться этим и вот этим, а так же эмулятором самой архитектуры. Я же пройдусь по самому интересному без углубления во что, да как, почему и зачем, иначе статья получится очень большой, поэтому все интересное будет разобрано на псевдокоде. Я начал с анализа sircs.prx. Правда анализ на данный момент все равно не полный, так что будут некоторые неточности. Боль и хардварь. Первым делом мне нужно дать вам расшифровку SIRCS - Sony Integrated Remote Control System. Протокол существует в 3-х версиях: 12, 15 и 20 битная. К сожалению, я не могу сказать какая версия у PSP Go, для этого мне нужна сама плата, которой я сейчас не обладаю. Но думаю, что либо 15, либо 20 битная. Вот как оно выглядит: Полную информацию о протоколе можно найти здесь. Как и говорил ранее - я упомяну здесь самые интересные и главные на мой взгляд куски. main функция, понятно сразу, что она делает: uint entry(void) { int iVar1; iVar1 = FUN_00000000(); return (uint)(iVar1 < 0); } Следом за ней идет некая функция FUN_00000000(), предполагаю, что она инициализирует сам модуль: int FUN_00000000(void) { int iVar1; /* 0x00000094 - 0x000000BO, 0x000000BC & 0x000000B4 - 0x000000B8 are R/0 addresses and uses RAM */ uRam00000094 = 0; uRam00000098 = 0; uRam0000009c = 0; uRam000000a0 = 0; uRam000000a4 = 0; uRam000000a8 = 0; uRam000000ac = 0; uRam000000b0 = 0; iRam000000b4 = 0; iRam000000b8 = 0; uRam000000bc = 0; iVar1 = FUN_00002440(); if (iVar1 < 0x500000) { uRam00000094 = 1; FUN_000023e0(2,0); } iVar1 = FUN_00002310(0xe,2,0x140,0); if (-1 < iVar1) { iVar1 = FUN_000023b8("SceSIRCS",1,1,1); if (-1 < iVar1) { iRam000000b4 = iVar1; iVar1 = FUN_00002378("SceSIRCS",1,0,0); if (-1 < iVar1) { uRam000000bc = 0; uRam00000098 = 0; iRam000000b8 = iVar1; iVar1 = FUN_00001b34(); if (-1 < iVar1) { FUN_00001b28(0xa8c); return 0; } FUN_000023c8(0xc0008de); } FUN_00002350(0x3821); } FUN_00002328(0xe); } return iVar1; } SceSIRC скорее всего принадлежит include-файлу аля pspsirc.h, который я попробую в скором времени вытащить. Дальше тут идут два больших куска, они реально большие и наверное отвечают за логику таймера, поэтому вы сможете найти их на github, ссылка будет в конце статьи. Вот это задает портам какие-то базовые значения: undefined4 FUN_000016b8(void) { int iVar1; iVar1 = sceSysregGetTachyonVersion(); if (iVar1 < 0x500000) { sceGpioPortClear(4); } sceSysregUartIoEnable(5); sceSysregUartClkEnable(5); _DAT_be540004 = 0xffff; _DAT_be54001c = 0x280; _DAT_be540020 = 0xd; _DAT_be540024 = 0; _DAT_be540028 = 0; _DAT_be54002c = 0x70; _DAT_be540030 = 0x307; _DAT_be540034 = 0; _DAT_be540038 = 0x50; return 0; } Примечателен undefined4, скорее всего это какой-то пользовательский тип данных. Здесь примечателен некий SceIrdaDriver, сложно сказать, есть ли у PSP ИК-порт или это просто моя ошибочная ассоциация: undefined4 FUN_00001828(void) { int iVar1; undefined4 uVar2; /* R/O address */ /* SceIrdaDrive - InfraRed Data Association Driver? */ iRam00000078 = sceKernelCreateFpl("SceIrdaDriver",1,1,0x3c070000); uVar2 = 0x802a0006; if (-1 < iRam00000078) { iVar1 = sceKernelTryAllocateFpl(iRam00000078,0x88); uVar2 = 0x802a0006; if (-1 < iVar1) { iVar1 = sceKernelTryAllocateFpl(0x4021,0x84); uVar2 = 0x802a0006; if (-1 < iVar1) { sceKernelRegisterIntrHandler(0x25,2,FUN_000020e8,0x40); sceKernelEnableIntr(0x25); /* R/O address */ iRam0000008c = sceKernelEnableIntr("SceIrdaDriver",0x201,0,0); uVar2 = 0x802a0006; if (-1 < iRam0000008c) { uVar2 = 0; } } } } return uVar2; } Еще несколько интересных, но жирнючих функций в конце файла, не уверен, но возможно они отвечают за "Bit Counter" и так же таймер. end-point: undefined4 module_stop(void) { FUN_00001b54(); sceGpioPortSet(4); sceSysregSircsClkDisable(); sceSysregSircsIoDisable(); sceKernelReleaseIntrHandler(0xe); sceKernelDeleteSema(0x3821); sceKernelDeleteEventFlag(0xc0008de); FUN_00001b54(); FUN_00000a4c(); return 0; } ==================================== Конечно, дело это долгое и муторное, но все же интересное. Не знаю, смогу ли я закончить или я брошу это. В любом случае вы можете следить за моим прогрессом на github. Надеюсь, вам было интересно скроллить это чтиво. SHELLSHOCK: тык Буду так же рад, если вы будете помогать мне, это конечно только при особом желании. Если у вас возникли вопросы, то можете обратиться ко мне в теме, лс или в телеге. В телеге я немножечко активнее. tg: @kreophagia
  3. Rescor, удали, пожалуйста, оно не дописано и почему-то запостилось, когда комп перезагружал, буду благодарен
  4. "Если рассматривать пиратство ПО как решение очередного crackme, то это вполне легально" Перед началом статьи наверное стоит сразу сказать, что я новичок в этом деле, а следовательно я могу допускать довольно грубые ошибки в интерпретации темы, так что сразу прошу прощения, если вдруг что-то оказалось вам неоднозначным и не понятным. Если вы опытный в реверсе и заметили какие-то неточности, буду рад вашим замечаниям в комментариях к теме. Наверное это все, что я хотел сказать. Когда-то давно я нашел пак с различными crackme по сложности, пока я решил только 2 из него. Это будет еще один. Что же, я выбрал для себя подходящий и запустил его. Забавно, но он вполне себя нормально ведет, несмотря на его возраст: 20 лет. Вот как он выглядит + окно About: Как видно из окна About, нам запрещено патчить и использовать брут-форс, зато можно дампить. Первым делом приступим к анализу PE. Для этого я использую PEiD. Если совсем кратко, то это сканер, показывающий нам всю информацию о файле. PEiD говорит, что файл упакован с помощью UPX: Ок, т.к файл упакован, его нужно сначала распаковать. Существуют программы распаковщики для (логично) распаковки целевой программы и восстановления последующих данных, но я считаю, что на первых порах распаковывать стоит вручную, что я и буду делать. Запускаем всеми любимый OllyDbg (далее - дебаггер) и выбираем нужный файл для отладки. Загрузили программу и наблюдаем вот такую картину: Адрес 0046BD40, как не трудно догадаться - наша входная точка с мнемоникой: 0046BD40PUSHAD Не все так просто как кажется, т.к это входная точка не в программу, а в упаковщик. Поэтому нам нужно найти оригинальную входную точку (часто её называют OEP). Давайте сделаем аппаратное прерывание по адресу 0046BD3F. Немного теории и зачем нам это нужно: ОАОАОА ммм)
  5. Доки и дизайны от Mediatek. GitLab: тык Dropbox (если "сломался" GitLab): тык
  6. Собрал маленькую библиотеку для начинающих реверсеров: # Книги по RE: Денис Юричев - "Reverse Engineering для начинающих" - бесплатная книга на русском языке, тык Рикардо Нарваха - "Введение в реверсинг с нуля, используя IDA PRO" - gitbook (к сожалению сломались картиночки) Еще книги - тык-тык-тык# Инструменты для RE: IDA (без PRO) - оф. сайт IDA PRO - rutracker Radare2 - они смогли прикрутить GUI - оф. сайт# Книги по асму: Э. Таненбаум - "Архитектура Компьютера" - pdf Юров В.И. - "Assembler" - pdf Зубков С.В. - "Assembler для DOS, Windows и UNIX - еще pdf Daniel Kusswurm - "Modern X86 Assembly Language Programming" - выкладывал её ранее на форуме, но ссылка сыграла в ящик - вк# Сайты по асму: https://www.unknowncheats.me/wiki/Assembly Доки от Intel NASM MASM FASM# misc. : Michael Abrash - "Michael Abrash's Graphics Programming Black Book Special Edition" - тык https://www.sandpile.org/ http://ref.x86asm.net/index.html Структуры.png Intel Code Table - тык-тык Для ковыряющих винду и софт под неё, сайты с описанием структур со смещениями и разными версиями оных:http://msdn.mirt.net/win7rtm_x64.htmlhttp://terminus.rewolf.pl/terminus/
  7. Haven

    vvvv

    Чисто случайно нашел гибридную IDE, так еще и визуальную! (Чем-то кстати похожа на Pure Data) Выглядит довольно вкусно, из плюсов могу отметить работу с HLSL. Оф. Сайт
  8. Если выйдет что-то толковое - покажу с:
  9. Немного увлекся темой разработки ОС и хотел бы поделиться кое-какой литературой. asm (x86): «Programming from the ground up» - одна из основных книг по изучению асма. «Modern x86 assembly language programming» - хорошая и интересная книга, которую я уже упоминал на форуме. C: «The C programming language» - классическая книга для изучения С. Просто "мастхэв". Также в дополнение есть другие обучающие ресурсы, которые описаны здесь. Книги по ОС: «The little book about OS development» - маленькая книжка по разработке ОС. Читается легко и доступно. «Modern Operating Systems» - здесь все разложено по полочкам и "разбито" на детали. Разное: «Intel 64 and IA-32 Architectures Software Developer Manuals» - описание архитектуры и разработки приложений. Вики по разработке ОС. Сетап VS для работы с асмом.
  10. А вот и маленькая проблемка - репозиторий недоступен..
  11. Nobody Asked To Be Born.

  12. Причина создания данной темы - дефицит информации о Dead Drop в "рунете". Я постараюсь рассказать об этом "явлении" ясно и кратко. Что такое Dead Drop? Dead Drop - это оффлайн публичная пиринговая сеть для обмена файлами. В ней можно, записывать, считывать или копировать информацию. А если быть проще - это тайник в виде флешки, к которой можно подключится любому человеку. В основном флешка замурована в стену или корягу. Простой, но относительно "безопасный" способ передачи информации. Содержание Dead Drop Dead Drop может содержать в себе абсолютно любую информацию и не всегда законную. Начиная с книг и заканчивая ЦП. Также каждый Dead Drop содержит в себе 2 основных текстовых файла: MANIFESTO и README. Они создаются для незнающих людей, случайно наткнувшихся на флешку. MANIFESTO и README рекомендуют переводить на несколько языков. В последнее время в Dead Drop-ах можно увидеть текстовый файл chat. В этом файле юзеры просто общаются. Где найти Dead Drop? Существует специальная карта Dead Drop-ов - https://deaddrops.com/db-map-2/ На этом же сайте присутствует много полезной информации по типу: "How To Dead Drop", ссылки на манифесты и пр. Вы также можете создать свой Dead Drop и залить его на карту, про это я постараюсь рассказать совсем скоро. Предостережения Вы идёте на свой страх и риск. Люди могут сыграть в злую шутку с вами и подсунуть USBKiller и прочий вредоносный стафф. ====================== Пока закончу первую часть. На днях постараюсь запилить вторую с подготовкой флешки и созданию Dead Drop-a. Надеюсь, что кому-то это было интересно, хех.
  13. Забыл прикрепить репозиторий с исходниками: https://github.com/Apress/modern-x86-assembly-language-programming
  14. Haven

    Книга по Assembly

    Нашел на днях книгу по ассемблеру. Может быть кому-то будет интересно почитать. https://doc.lagout.org/programmation/asm/Modern%20X86%20Assembly%20Language%20Programming_%2032-bit%2C%2064-bit%2C%20SSE%2C%20and%20AVX%20%5BKusswurm%202014-11-25%5D.pdf
×
×
  • Создать...