В этом треде мы изучаем самый компактный и низкоуровневый язык Ассемблер и смежную с ним область: Реверс-инженеринга (RE).
Вы пишите на ассемблере или собираетесь начать на нём писать? Программируете микроконтролёры, пишете драйвера для ОС, а то и саму ОС? Вам сюда. Вы изучаете алгоритмы работы закрытого софта, пишите патчи бинарников? Вам тоже сюда.
Попрошайки с "решите лабу по асме за меня" идут в общий тред, а лучше нахуй.
Я конечно понимаю, что попрошайки идут нахуй и т.д., в общий тред написал, но думаю там не помогут. Препод задал написать на ассемблере 2 проги: одна складывает двоичные числа размером 1 байт без учёта знака, другая - с. Либо всё это в одном, я хз. Может помочь кто-нить?
>>960670 А чому сам не можешь? Ведь вы всего лишь учитесь. Сиди, пробуй, эксперементируй. На время учёбы в универе ты должен самостоятельно делать подобные вещи, ибо из тебя даже червя-пидора не выйдет
В инете полазил, нашёл оба варианта (там разница судя по всему только в sing и unsign, более менее понятно всё), но компилятор ругается на команду movzx, не подскажете, что с этим делать? >>960670 - анон
>>960640 (OP) Спрошу тут может кто знает как в VS2017 С++ проект скомпилить в исполняемый файл с одной секцией. в 2013 получалось в 2017 всегда создает .rdata и .text
>>960713 У меня вот такой закомментированный код есть. //#pragma comment(linker, "/SECTION:.text,EWR") //#pragma comment(linker, "/MERGE:.data=.text") //#pragma comment(linker, "/MERGE:.rdata=.text") А как ты делал в VS2013? >>960694 Ты хотя бы ошибку напиши и компилятор укажи.
>>960746 в vs2013 если не использовать внешних библиотек и указать точку входа получалось + оптимизация на минамальный размер, интересно почему .rdata всегда вставляется перед .text если использовать #pragma comment(linker, "/MERGE:.rdata=.text") и причем она генерится одинаковая для разного кода.
>>960783 Я имею ввиду, они-то объединяются в одну, но данные секции вставляются перед .text, причем её можно просто удалить(.rdata) и работоспособность программы будет в норме. Мне интересно зачем vs2017 вставляет эту херню в каждый исполняемый файл.
>>960640 (OP) Как вы думаете реально ли быть профессионалом в программировании(неважно на каком языке) не работая нигде и никогда, но имея образование. И какое больше направление подходит для людей который не хотят(или не могут) с этим иметь дело?
>>961080 В смысле нужно или не нужное для себя? Просто заметил на собеседованиях неуважительное отношение когда узнавали, что не работал, а проекты мои личные. Ребята которые сидят на работе мнят себя спецами.
1. VEH потокобезопасен? Одновременно может быть только один вызов? 2. Когда сработало исключение PAGE_NOACCESS, что делать дальше? Как разрешить чтение/запись только одной инструкции? Дизассемблировать и смотреть, какие регистры участвуют и самому копировать необходимые данные? 3. Как действовать после брекпойнта (программа не под отладчиком, брекпойнты мои)? Как отладчик делает, когда останавливается на брекпойнте? Ведь один байт затёрт, нужно восстановить его и заново выполнить инструкцию. А после как устанавливают брекпойнт? Отладчик включает пошаговую трассировку и после одного шага устанавливает байт?
>>961129 1) Очень вряд ли. 2) Проверяешь тип исключения, возвращаешь родной доступ к странице, выставляешь TF в Eflags в сохраненном контексте, говоришь continue execution, получаешь исключение, проверяешь тип, восстаналвиваешь NO_ACCESS, ну ты понял (как вариант, можно ставить PAGE_GUARD вместо NO_ACCESS, тогда будет одним системным вызовом меньше). Если ты про совет из прошлого треда, то да, немного дизасма понадобится: табличка с типами инструкций (можно спиздить из опенсорсных движков) и разбор всяких SIB/ModRM/displacement (можно взять опенсорсный движок целиком). 3) Да. Алсо, есть хардварные точки останова, с ними жизнь проще.
>>961391 1. Проверил, для каждого потока свой вызов. Поэтому не потокобезопасен. 2. Видимо, это самый простой способ. Неужели в отладчиках так же сделано? Ведь между тем, когда доступ разрешён и повторным исключением пройдёт много времени, хитро настроенный второй поток может успеть между этими событиями прочитать или запись данные и останется незамеченным. Тут нужен бы эмулятор. >тогда будет одним системным вызовом меньше Ты про то, что PAGE_GUARD сбрасывается? А то смотрю, что возвращает VirtualProtect, а этот бит уже сброшен. >можно взять опенсорсный движок целиком Взял дизассемблер от OllyDbg, а он XMM инструкций не понимает. Краем глаза посмотрел на x64dbg, так там враппер вокруг дизассемблера больше по размеру, чем сам дизассемблер. Надо от qemu ещё посмотреть. Как и ожидал, после установки TF бита отладчик сам останавливается на следующей инструкции. Не очень удобно. 3. Слишком много мест, их не хватит.
>>961788 >В x64dbg capstone вроде. Одуреть, это ты по памяти помнишь, какой дизассемблер в отладчике. Сам только вчера смотрел, но, тем не менее, не вспомнил бы названия. Меня отпугнуло то, что очень большой враппер был вокруг него, хотя и не смотрел, что там, думал, что заставить работать его будет трудно. А оказалось, что пользоваться им очень легко. И главное, он XMM понимает, чего мне не хватало. Может подскажешь какой-нибудь эмулятор х86. Очень бы не хотелось писать самому, долго будет очередной велосипед делать. Нужен достаточно простой, но с установкой своих начальных значений регистров и некоторых обработчиков типа записи и чтения памяти. Как в плагине к ida x86 emulator.
>>961863 Чего-то запутался уже с исключениями. Если, попав в VEH обработчик, взвести бит TF, то после выхода из него и возобновления работы программы будет исключение EXCEPTION_SINGLE_STEP. Но флаг остаётся взведённым? Потому что у меня никак не получается поймать это исключение. Как только управление передаётся в юзер спейс, опять будет это исключение? И так до STATUS_STACK_OVERFLOW. Читаю про dr-регистры. Их-то можно поймать в VEH обработчике? Или надо отдельный процесс делать? Первая попытка не удачная.
Анон, либо я дурак, либо создатель проги поехавший. Рассуди нас. Есть два числа C6 и 40. При сложении получаем 106. Что мы получаем во флаге SF на деле? Значение D7 или значение самого старшего бита? Заранее благодарю.
>>962632 Компилятор из C может собирать что угодно. Тебе надо сделать дизассемблер с asm, перевести его в промежуточный опкод, а потом конвертировать в ассемблер твоего специфичного кода. В llvm есть что-то подобное с возможностью переводить из одного языка программирования в другой. Тебе нужно будет написать соответственно для асма x86 и своего языка.
Не могу понять, откуда берутся вот эти функции в IDA. Притом даже компиля свой файл, у меня получается одна из них, но я всё равно не въезжаю, как это выходит. Вроде как _fin_1 похож на код обработки исключения из finally, но не совсем.
>>964383 Да, так и есть, воткнул в except вызов функции- этот самый RtlZeroHeap_filt_0 объявился сам. Правда не очень понимаю, как мой код трансформируется в эту фигатень. Ладно, буду экспериментировать и читать про структурированную обработку исключений.
>>965975 А что тебе пояснять? Мануалы есть в сети. Сам по себе он 16-битное говно мамонта, про многие инструкции не знает. Если есть конкретная проблема - спрашивай.
>>966098 Да, OllyDbg намного лучше. А возможно, стоит сразу на x64dbg посмотреть. > Есть ли какие нибудь задачки Как же вы заебали. Придумай сам себе задачу. Отлаживай собственные программы. Возьми коллекцию крякми и взломай их все.
Написал небольшую программку для линукса (хеловорлд) https://pastebin.com/d6Zfm8Rn Когда скомпилировал через gcc hello.s -o hello вышло 8200 байтов. Почему?
>>967390 >Написал небольшую программку для линукса (хеловорлд) https://pastebin.com/d6Zfm8Rn >Когда скомпилировал через gcc hello.s -o hello вышло 8200 байтов. Почему? А почему ты GCC юзал? Есть as(часть gcc), и другие ассемблеры. strip -s helloworld не забудь.
Компиляция и декомпиляцияАноним09/04/17 Вск 15:05:10#51№969991
Всем здарова. Вкатываюсь в реверс после курсов по ОС, архитектуре и 16-битному асму моего универа (асм на бумажке писал только). Хочу как у Юрича в Reverse Engineering писать простые программы и дизасемблировать их, но получаю гигантские простыни кода. Компилирую через gcc code.c -o code. "-O2" не меняет ситуацию. Смотрю через objdump -d. Что я не так делаю?
>>969991 >Смотрю через objdump -d. Поэтому люди и пользуются продвинутыми средствами типа IDA, которые пропускают лишний код и показывают сразу точку входа, минуя библиотечные функции.
[C/C++] Возможно ли даемону в фоне с правами 0й сессии отслеживать такие штуки как -открытие процесса(OpenProcess) -чтение(ReadProcessMemory) -запись(WriteProcessMemory) -выделение памяти (VirtualMemoryAlloc) -создание потока выполнения (CreateRemoteThread) И прочие штуки. Должны же как-то работать антивирусные и античит системы, информации в сети мало. Читал, например, что VAC использует динамически загружаемые с их сервера тесты для памяти и на основе статистик принимают решения.
>>970803 Когда придёт прошаренный человек, он тебе разъяснит. А у меня такие мысли. >с правами 0й сессии Что это означает? Из третьего кольца? Если из нулевого, то всё понятно. Значит юзерспейс. Да, можно. И без даемона (просто не знаю, как по другому). Подгружаешь свою dll во все процессы (с помощью реестра, загуглишь) и ставишь переходы на интересующие тебя вещи. Учитывай, что многие защиты не любят, когда на системных функциях стоит jmp в самом начале, добавь мусорных команд. >Должны же как-то работать антивирусные Они работают на нулевом кольце. >и античит системы А у этих такие же возможности, как и у тебя, если в тихую не устанавливают драйвер. >Читал, например, что VAC использует динамически загружаемые с их сервера тесты для памяти и на основе статистик принимают решения. Тоже читал, что VAC ищет читы по сигнатурам. Изменил опции компиляции - изменилась сигнатура. Учитывая, что существует столько читов - это очень ненадёжная система.
Аноны, где достать последнюю ИДУ$можно не самую последнюю, интересует только поддержка плагинов на питоне$ для mac os? Все что удалось найти - какой-то обрезок, где нет половины функционала(есть поддержка idc, но нет поддержки плагинов на питоне)
>>970917 Но вайршарк слушает то, что проходит через сетевую карту. А у меня веб приложение уже запущено, я туда уже зашел, и теперь оно взаимодействует с сервисом напрямую локально.
>>971117 >Ты поехавший? Что не так? Все лаунчеры ммо, которые запускаются с сайта, так работают. Или у тебя другие сведения? Изложи их тогда. тогда. >Алсо в этой вашей балмерне есть свои замуты с WinPcap и loopback Ничего об этом не слышал.
>>971126 Какой апач, ты что несёшь? Сервисом (daemon), а не сервером. Во всех игрушках это работает так: у тебя есть игра, клиент которой запускается через обычный экзешник; авторизируешься на сайте -> сервер сайта в бекенде выдаёт шифрованный ключ, который передаётся в сервис, который постоянно его мониторит -> если ключ правильный, сервис запускает экзешник клиента с параметрами, вроде этого ключа. Я хочу прослушать, чем сервис на пекарне обменивается с веб приложением, и потом с самым клиентом.
>>971135 Смотри, либо ты нормальным человеческим языком описываешь все части этой системы и все протоколы, по которым они взаимодействуют, либо ты официально признаешься поехавшим, у которого демон мониторит шифрованные ключи.
>>971139 >все части этой системы и все протоколы Если бы у меня был доступ к исходникам, так бы и сделал. А сейчас мне как раз нужно в них разобраться, я хочу сделать обход запуска с сайта. >либо ты официально признаешься поехавшим, у которого демон мониторит шифрованные ключи Папики пришли учить, не давая никаких ответов на конкретные вопросы. Я тебя сразу спросил, если у тебя есть другая информация, говори, каким образом кнопка на сайте запускает экзешник клиента.
>>971149 То есть от того, что я пропустил по незнанию аддон в списке сайт -> сервис -> клиент, я и стал поехавшим в твоих глазах, ясно.
Мой вопрос остается в силе, каким образом я должен влезть между сайтом (аддоном) и сервисом, чтобы прослушать их обмен? И если такой вариант тебе не нравится, то вариант номер два - какие образом прослушать, с какими конкретно параметрами запускается клиентский экзешник?
>>971146 >каким образом кнопка на сайте запускает экзешник клиента Быстрое гугление выдало такие ссылки: https://toster.ru/q/89523 https://toster.ru/q/3704 Это так же, как магнет-ссылки и прочие приложения, которые можно запустить из браузера. >>971159 И будь спокойнее. >каким образом я должен влезть между сайтом (аддоном) и сервисом MIMT-прокси.
>>971141 Внезапно на винде удобнее. Но если хочешь стать годным специалистом, без погружения в ядро линукса ты не обойдешься, и это погружение даст тебе много знаний и скиллов.
Пытаюсь разобраться с прошивкой ARM микроконтроллера. Отладка в IDA через JTAG работает, все вроде бы хорошо. Но проблема в том что трудно разобраться с регистрами периферии. И в документации на микроконтроллер не указаны абсолютные адреса регистров, а их смещения относительно разных базовых адресов. Можно ли в IDA настроить нормальное отображение регистров периферии? Мне бы для начала разобраться с тем как там настроена периферия.
>>971178 Их сертификат генерируется, когда в опциях разрешишь перехват SSL трафика. При этом создаётся новый сертификат для каждого сайта (валидный год или даже больше) и он устанавливается в систему. Вот за последнее свойство и пишу сам наипростейший mitm-прокси, который не захламляет систему левыми сертификатами, а генерирует их налету и не сохраняет никуда. >>971180 Простите, опечатался.
>>971191 >Их сертификат генерируется, когда в опциях разрешишь перехват SSL трафика. Тебе за софтину, которую ломают. Она может хуй класть на общесистемное хранилище.
>>971191 Ещё раз. Клиент может: 1) Использовать свой сертификат, а не скачивать его по http 2) Скачивать его по http и проверять, например, что он выдан верисигном, а не вася-пупкин-ца Сейчас 2017 год, даже хром что-то подобное делает. А тут речь идет о нативном клиенте который может извращаться с ссл как угодно.
>>971159 >то вариант номер два Проверил этот путь, все тухло. На остальных локализациях можно было выдрать отсюда параметры запуска клиента, но в даном случае ничего нет. При чем я точно знаю, что параметры передаются, так как экзешник клиента можно запустить вручную.
>>971200 >>971201 Ну ты чего? Один из вариантов ему предложил. Пусть смотрит, как работает софт. Очень часто он использует движок IE или использует корневые сертификаты системы. Где-то же он берёт сертификат, которому доверяет. >Использовать свой сертификат Заменим на свой. >Скачивать его по http и проверять, например, что он выдан верисигном Создать свой самоподписанный сертификат со всеми полями верисигна и установить его в систему. >даже хром что-то подобное делает Он использует хранилище сертификатов Windows. Mitm работал на нём, сам лично проверял, все сайты, даже гугловские. >А тут речь идет о нативном клиенте который может извращаться с ссл как угодно. Особенно замечательно, когда есть две dll: libeay32.dll и ssleay32.dll, достаточно две функции изменить, чтобы писали весь трафик в лог. Но всё, само собой, зависит от приложения. Оно может параноидально проверять всё, быть зашифрованным, закриптованным, использовать VM и прочее. А может и ничего из перечисленного. >>971204 Запусти от администратора.
>>971206 Знакомый параметр /username, как от Sony, одна из их игр FreeRealms, которую безуспешно пытался запустить ввиду отсутствия нужных файлов. Ты немного тупишь, тебе правильно написали. Запусти Wireshark и посмотри что и куда передаётся. А чтобы не было левого трафика, закрой все приложения, которые используют сеть. Там (возможно) должен запускаться загрузчик, который общается с сервером по UDP. Ты где пароль вводишь: на сайте или в клиенте?
Так и есть >>971206 Смог запустить клиент без сайта, ебаться с сертификатами точно теперь не буду. Проблема только в том, что нужно знать шифрованный логин и пароль, в других локализациях этого не требовалось. Да и местный защитник Фрост тоже стартует.
>>971216 Собственно, вот и всё. Достаточно один раз подсмотреть логин и пароль у фроста и потом можно запускать так. Как видно, фрост больше не является главным процессом.
>>971218 Вот видишь, а ты все демоны, апач, веб-приложения. А оказалось что параметры через командную строку передаются. Алсо если ты запустишь без их античит поеботы ты можешь попасть в чорный список и твоего перса посадят на бутылку. А можешь и не попасть.
>>971256 Вспомнил, что в запакованных файлах есть параметр use-web-launcher, перезапаковал со значением false. Теперь могу доходить до стандартного окна входа, как в других локализациях, вот только ни мыло, ни айди не подходят как логин. Мда уж, чего они наворотили там.
>>970832 Права 0й сессии = права сервиса = делай что хочешь. То есть любой античит может подгрузить в любой процесс свою длл и перехватывать вышеописанное апи? Меня приницп интересует, а не где оно работает. То есть, имея физический доступ к игровому клиенту можно творить всякую дичь до тех пор, пока античит не вклинил свою длл в твой процесс? Или есть другие техники? CreateRemoteThread - вызывает какое-либо апи в атакуемом процессе, или эту функцию можно хукануть только из самого чита?
>>971280 Я вот перечитал все посты, я не могу понять, что ты, собственно хочешь с игрой сделать?
>>971312 1. Сканируешь память на наличие самого значения ячейки памяти 2. В CE запускаешь дебаггер и смотришь who writes/accesses this address, это для оффсетов
>>971327 Кстати, насчет CE. Часто не могу найти текстовое значение, хотя на экране в дрочильне четко видно текст а значит он обязан где-то храниться. С чем может быть связано?
>>971349 Ну нихуя себе нет! ASCII или UTF-8 для латиницы - один байт на символ, UTF-16 (UCS-16) - два байта на символ, UTF-32 (UCS-32) - четыре байта на символ. А еще могут быть шифрованные строки.
>>971363 > Да это никто и не использует в здравом уме. Вся Windows API использует UTF-16 (прошлые версии - UCS-16). В крестах wstring использует UTF-16. В ресурсах PE-файлов строки хранятся как UTF-16. В андроиде нативные либы используют UTF-32. Я видел и виндовые приложения, в которых внутри UTF-32, им так проще - не нужно обрабатывать суррогатные пары.
> Разница в поиске между этими кодировками есть? Для латиницы нет.
SUP Не понимаю, что происходит после написания кода, но перед получением исполняемого файла. Компилю все клангом или gcc, и всегда получаю кучу левого кода в файл. Где почитать об этом?
https://challenges.re/53/ Мне кажется я решил, но не знаю правильно или нет. Проверьте, пожалуйста. На винде строки хранятся в DATA-сегменте, а на линуксе в .rodata. В DATA можно писать, а в .rodata нельзя. Поэтому на винде все работает, а на линуксе нет.
>>972182 > Поэтому на винде все работает Какой-то странный челлендж. Вопрос уровня i += i++ + ++i. Особенности компилятора, которые могут изменяться от версии к версии, зачем их знать? В гцц строковые литералы ридонли по умолчанию, но у кого-то в системе зачем-нибудь может быть -fwritable-strings в CFLAGS, и тогда все будет работать. То же и с MSVC. По умолчанию строки доступны для записи (хуй знает насчет новых версий), но есть /GF, тогда будет как в гцц. А ответ простой: писать в строковый литерал - это undefined behavior, и все, что нужно про это знать - так делать нельзя.
>>960640 (OP) Изучаю системные вызовы линукса путём чтения менпейджей и экспериментов и не могу разобраться со вторым сискаллом, а именно с функцией open. А именно я не могу понять как ставятся флаги. Вот у меня получается создавать файл, но в нём всё запрещено. Я экспериментами нашёл что седьмой справа бит отвечает за создание файла, но как сделать так чтобы он был разрешён к читанию и писанию и выполнению я незнаю. Как это сделать?
>>973119 Как это ты читаешь маны, но man open не читал и флагов там не увидел, и грепнуть/printf-нуть флаги или заинклудить соответствующий .h ты не можешь?
>>973119 Смотри, у тебя есть аргумент flags. Каждый флаг, типа O_RDONLY расценивай как двоичное число типа 0000001000000. Разные флаги имеют единички в разных местах. Чтобы совместить два флага, типа O_RDWR и O_CLOEXEC, надо включить еденички с обоих позиций, то есть на позициях обоих флагов. Чтобы проставить единички с включением обоих флагов пиши так: open(file, O_RDWR | O_CLOEXEC); Побитовое ИЛИ проставит единички, как сумму всех флагов. Удачи в понимании этого сообщения
>>973250 > А оно разве не таким и есть? Существуют флаги с дублирующимися битами. Если сложить 0x11 и 0x09 - получится не то, что ожидается от флагов, а вот | отработает как положено.
Как найти поинтеры, если повесить брейкдаун в дебаггере невозможно - вылетает онлайн-игрушка? Нет, я не хочу ничего редактировать, я просто хочу считывать значения.
>>973401 >брейкдаун Наверное, брейкпойнт. >вылетает онлайн-игрушка Какой дебаггер, как проявляется вылет. Плагины не помогают? >я не хочу ничего редактировать, я просто хочу считывать значения Можно через ReadProcessMemory попробовать, если знаешь точные адреса или можешь их найти.
>>973401 Вангую использует olly для поиска указателей в играх , используй CE лучше для этого,(он не останавливает процесс что в итоге не дропает процесс.
>>973628 >Наверное, брейкпойнт. Да, сорян. >Какой дебаггер, как проявляется вылет. Плагины не помогают? CE, выбираю пункт меню с брейкпоинтом на любой найденный адрес со значением, и игрушка моментально вылетает без ошибок. Каких heartbeat в игрушке нет, античит защита отключена разрабами. >Можно через ReadProcessMemory попробовать, если знаешь точные адреса или можешь их найти. Можно поподробнее? Не знаю адресов, как раз их и пытаюсь найти, ради этого и затевал.
>>973727 >Вангую использует olly для поиска указателей в играх , используй CE А я и использую CE.
>>973730 Запутанно ты пишешь. Если нет никакой защиты в приложении, тогда ничего и не должно срабатывать. Не знаю, как ведёт себя CE, он как отладчик присоединяется к процессу? Программа своим поведением на точку останова напоминает реакцию на исключение в каком-нибудь VEH, когда else { ExitProcess(...); } Попробуй OllyDbg для разнообразия и поставь точку останова на ExitProcess, посмотри, кто её вызывает. >Не знаю адресов, как раз их и пытаюсь найти Что ты ищешь-то? Что за игра, дай немного информации, что уже сделал, что нужно сделать.
>>973740 >как ведёт себя CE, он как отладчик присоединяется к процессу? Ах если бы я знал. По внешним признакам НИЧЕГО не происходит, просто вылетает игрушка. >Попробуй OllyDbg для разнообразия и поставь точку останова на ExitProcess, посмотри, кто её вызывает. Попробую сегодня, как доберусь домой. >Что ты ищешь-то? Что за игра, дай немного информации, что уже сделал, что нужно сделать. Да ничего ещё не сделал. Есть группа из нескольких игроков, я хочу считывать их имена в string, а потом уже проводить с ними операции, которые не касаются этого треда. Ищу string, нахожу имя на экране, при перезапуске игрушки имени по тому адресу уже нет, очевидно. Поэтому мне и нужны указатели на эти надписи. Правой кнопкой мыши по найденному адресу и выбираю пункт меню для поиска поинтеров, игрушка моментально вылетает.
>>973756 >при перезапуске игрушки имени по тому адресу уже нет, очевидно Скорее всего, игра написана на C++. Нужно искать, где хранятся (создаются) имена, а по ним выходить по цепочке на глобальный класс. А когда найдёшь, уже с помощью ReadProcessMemory в обратном (в данном случае, прямом) направлении пройдёшь. Ну это в теории. Надо реверсить игру, искать, где, кто и что создаёт. Сам бы так делал. Возможно, можно проще.
>>973765 >Нужно искать, где хранятся (создаются) имена, а по ним выходить по цепочке на глобальный класс. А когда найдёшь Алло, это я и пытаюсь делать с первого поста.
>>973780 Твои советы слишком абстрактные для ньюфага. Ты можешь сказать, что конкретно мне нужно делать для того, чтобы найти корневые адреса и офсеты?
>>973756 > Ищу string, нахожу имя на экране, при перезапуске игрушки имени по тому адресу уже нет, очевидно. В CheatEngine есть охуенный туториал, где на примерах показывается как искать статические адреса указателей. https://youtu.be/5us6a9b2zDk
>>960640 (OP) ПРОГРАММИРУЕШЬ НА АССЕМБЛЕРЕ @ НЕ МОЖЕШЬ РЕШИТЬ ЧЕМ ПОЖЕРТВОВАТЬ @ СЭКОНОМИТЬ ОПЕРАТИВНУЮ ПАМЯТЬ, НО УМЕНЬШИТЬ СКОРОСТЬ ПРОГРАММЫ @ ИЛИ УВЕЛИЧИТЬ СКОРОСТЬ, НО ЗАНЯТЬ ЕЩЁ ПАМЯТИ @ ТВОЯ ПРОГРАММА ВЕСИТ 5 КБ
>>973961 >ТВОЯ ПРОГРАММА ВЕСИТ 5 КБ @ ТЫ ДОБАВЛЯЕШЬ ИКОНКУ @ ДЛЯ ОТОБРАЖЕНИЯ В ПРОВОДНИКЕ ШИНДОФС @ ПРОГРАММА НАЧИНАЕТ ВЕСИТЬ 30КБ @ ПИШЕШЬ КОД НА АСМЕ ДЛЯ СЖАТИЯ ИКОНОК
дайте мне, пожалуйста, аналог printf() из си на ассемблере для линукса в архитектуре x86-64. Желательно в коде фасма. А то у меня какое-то говно получается.
поможите, невкурю, в IDA мучаю ехешник сибирии 1. http://rgho.st/8Jhz5nlVz если рядом кинуть player.ini с соджержимым 800 600 32 0 BaseCMO.cmo то игра запустится в окне и все хорошо (ну относительно, есть бага что свернуть развернуть и она растягивается в фулскрин) Хочется сделать окно побольше, а то мелковато. спрятать курсор, рамку и т.д. это решается за счет ultimate-ASI-Loader Вроде нашел место где проверяются значения. Файл открывается тут :0040437D Но что то раскурить проверку не получается, вообще не пойму что она делает. через читэнджи искать адреса где хранится значение для разрешения - дохлый номер, в игре нельзя переключать. хелпплз.
>>974153 >Хочется сделать окно побольше Там ниже переписываются значения разрешения экрана. По адресам 00404413 и 00404423. nop'ами попробуй их заменить. Как мне кажется, в этом месте баг. Вероятно, хотели значения присваивать до открытия файла, а то какой смысл после открытия и считывания переписывать.
>>974237 или отключенного за ненадобностью. Типа не на чем запустить такое. хехе. Игра то старая. в сибирии 2 так же, только там разрешение жестко забито в ехешнике. Ндо андроид версию ковырнуть будет. Где то да должно быть масштабирование текстур.
>>960640 (OP) только что экспериментальным путём узнал что syscall (по крайней мере тот, который write) в линуксе изменяет значение r11. Какие ещё регистры он изменяет?
не подскажите что нибудь типа GAP ( https://goo.gl/SuWQuG ), раньше при разборе алгоритмов, на ней частенько вычисления гонял, была отличная оболочка для нее GGAP, которая увы не развивается и не поддерживает актуальные версии. Из того, что мне оч нравилось в ней, что просчитаные данные, хранятся как есть пока функцию не перезапустишь, и можно один раз обсчитав все, потом исопльзовать снова и снова.
удобно было что пишшеь функцию, и сразу видишь результат (так же с уже просчитаннми данными все можно сохранить)
нужно что нибудь подобное, и не оч громоздкое/
Пробовал LUA использовать для этого, не т само собой. Матлаб что ли? есть у кого идеи.
>>974370 Научился для COFF вроде как. Но отдельной утилитой. Плюс на fasmg можно сделать любой формат отладочной инфы, но надо понимать, что fasmg - это тормоза и костыли.
Есть ли какие-нибудь opensource C-библиотеки для работы с pe файлами? Без их загрузки в память, само собой. А то понадобилось мне восстановить импорт в дампе программы, такого велосипедостроения понаписал. А готового найти не смог.
>>960640 (OP) Хочу на ассемблере сделать консольную игру с аскии-графикой. Но как это сделать? С выводом разноцветных символов я уже разобрался. Как сделать так чтобы либо каждый раз символы стирались и заново писались либо чтобы курсор переходил на сколько-то строк и символов вверх и заново писал символы? Это чтобы добиться изменения изображения. Может надо использовать сискалл, который переводит курсор в файле? Ведь у консольки есть свой файловый дескриптор
>>960640 (OP) Привет, программач. Пишу на NASM и сижу на Debian. Мне надо считать любой возможный сектор ЖД. С сделал INT 13h, на что получил закономерный Segmentation Fault. Попытался в гугл, а гугл говорит, что иди-ка ты нахуй с прерываниями к BIOS'у из под пинуса и пиздуй в DOS. Собственно вопрос. Можно ли мне, дегенерату, обойтись без DOS'а получить результат из Debian'а? Если нет, то помоги с материалом для дальнейшей работы. Что ставить, как сделать бочку работать и поставить свой кал NASM на на него?
>>976377 > получить результат из Debian Если тебе именно прочитать нужно, то лучше возьми Си, open(/dev/sdX) (где X - нужный тебе накопитель), seek, read, close (в принципе на асме то же самое, можно сисколлами, можно с libc линковаться). Если это какая-то лаба, ставь DOSBox.
>>976377 > С сделал INT 13h, на что получил закономерный Segmentation Fault. А вот нехуй в защищенном режиме прерывания теребить. > гугл говорит, что иди-ка ты нахуй с прерываниями к BIOS'у из под пинуса Не только из под пинуса. > Можно ли мне, дегенерату, обойтись без DOS'а получить результат из Debian'а? Очевидная виртуалка очевидна. Либо пили свой загрузчик, пиши его на загрузочный носитель и в нем еби свой жд хоть через порты. Только сначала лучше убедись, что на канале есть ответ от жд.
Аноны, помогите. Попался в руки исходный код ядра одного китайского андроид-девайса. Одна треть фалов в нем оказалась бинарными. Сделал hexdump, в первых 256 байт хранятся символы E-SaFeNet LOCK и пустые байты. Чем эту хуергу реверсить?
>>976527 Душевное. >А если у тебя исходники на руках, посмотри в них, как с бинарными файлами работать Это должны быть тексты на Си, при компиляции таких файлов компилятор выдает ошибку и сборка не идет. Первые 256 байтов - литералы E-SafeNet LOCK и нулевые байты. После первого 256байт-сектора начинается шифрокаша.
>>976537 Доки прочитал, и еще в нете навернул. И попробовал атаки по паттернам и известному тексту. Известный текст под рукой оказался, но не подходил из-за того, что файлы неодинаковые и это были сорцы с другого ведра. По паттернам не выдает адекватные ключи и не расшифровывает. А что с атакой по шифротексту - выдается текст, который нужно очень долго править. Хз что делать.
>>976545 Тогда мой первый вопрос. Открываю exe в олли и ищу в string references строку, которую программа сохраняет в файл, а именно AuthnToken. Но в string references по какой-то причине этой строки нет. Что делать дальше? Я даже не знаю, как такую проблему гуглить.
>>976868 >Или она не сохраняет релоки при редактировании длл? А кто-то их вообще сохраняет? Кроме как при редактировании ресурсов увеличивать строки никто не умеет, кмк.
>>976968 Ну, во-первых, изменялку строк в .exe только ленивый не писал. Это совсем просто для длл и чуть посложнее (требует предварительного анализа в IDA, хотя бы автоматического) для exe без релоков. Во-вторых, я думал, может быть, олька при сохранении дллки дропает релоки. Но если еще подумать, то ей незачем это делать.
>>977264 >научиться Теории Галуа за короткий срок Проиграл с вкатывающихся в математику легкой дорогой. Пиздуй доказывать теоремы, чушок, Галуа этим и занимался в 18 лет.
В общем есть одна программа на Go. Мне нужно заменить значение в уже скомпиленом экзешнике константы mystring на "Hi!" . Как это можно сделать? В реверсе нуб.
>>977262 Сам отвечу на вопрос для архивача и гугла. Можно распаковать в два этапа: 1. upx.exe -d -o temp.exe ..\FooBar_install.exe 2. unzip.exe temp.exe -d .\unzip\
>>977377 Я ссылки не дал, потому что это делается скриптом строк за 20 от силы. Длл и exe с релоками: 1) Идем по релокам, смотрим, не указывают ли адреса, к которым применяются поправки, на строку (без дизасма, тупо взяли адрес и сравнили). Собираем такие адреса. В качестве парсера можно взять pefile для питона. 2) Кладем куда-нибудь новую строку: в хвост существующей секции (если есть место), в заголовок, можно новую секцию создать и т. д. 3) Патчим адреса, собранные на шаге 1 новым адресом строки. Для exe без релоков: 1) Натравливаем на бинарник IDA, а когда анализ завершится, скриптом выдираем все ссылки на строку (idc.DfirstB/idc.DnextB). 2-3) Аналогично. Есть случаи, когда все это не работает (хитрые ссылки, ида не распознала весь код, не ссылки из секции данных или слажала еще как-то и т. д.), но чаще всего этого более чем достаточно.
>>977453 >Я ссылки не дал, потому что это делается скриптом строк за 20 от силы. Ага. И где готовый для тех, кто вообще не в теме, а просто проходил мимо и решил заменить пару строк в бинарнике?
>>977458 > кто вообще не в теме, а просто проходил мимо Скрипткиддисы нинужны. Но в виде исключения вот тебе самый простой случай для 32-битных бинарников с релоками. И это только патч ссылок, саму строку легко и вручную в хекс-редакторе воткнуть: https://gist.github.com/anonymous/8deb02d068182119b344d30617c64030
>>977524 Ну так ты ведь мог и сам написать такое же по описанию на любом известном тебе языке. И написав сам, ты бы приобрел знания и навыки, которые иногда пригождаются. Например, я писал подобное, когда нужно было массово перемещать глобальные инстансы классов из одной секции длл в другую - хуй бы я готовый скрипт под это нашел.
>>977590 >S-box-ы ищи сигнатурно Эээ... А можно ли так, чтобы я мог загуглить и найти какие-то туторталы или аналогичные кейсы?
Со своей стороны я глянул туторталы по ollydbg на ютубах, и ВО ВСЕХ они ищут текст из окошка в стиле "Ваш пароль неверный", подогрел с этого. У меня нет никаких окошек, я просто знаю, что где-то в коде есть мой AES ключ.
>>977591 Ну сходи в вики, прочитай описание алгоритма для начала, потом почитай https://en.wikipedia.org/wiki/Rijndael_key_schedule. Потом ищи S-box-ы, потом ищи, кто на них ссылается, т.е., где развертывается ключ. А заодно почитай хотя бы что-нибудь обзорное про поля Галуа. Можешь вот этого дядьку глянуть: https://www.youtube.com/playlist?list=PL6N5qY2nvvJE8X75VkXglSrVhLv1tVcfy (лекции 7-8 или даже весь плейлист целиком). Алсо, по лекциям есть книжка. > туториалы Хуй знает. Тут чисто логически понятно, что нужно делать. > загуглить Я тебе уже дал кейворд: peid+kanal, ты поискал сигнатуры? > формируется AES ключ И вообще, ты весьма расплывчато расписал задачу. Может, тебе вообще не AES-ключ, а ключ для AES нужен? Какие-нибудь рандомные байты, которые используются в качестве входа для KDF?
>>977592 >Ну сходи в вики, прочитай Почитаю и посмотрю прямо сейчас. >Хуй знает. Тут чисто логически понятно, что нужно делать. Ну я вообще ничего не знаю про реверс, я просто пишу на разных языках всякую фигню как хобби. >Я тебе уже дал кейворд: peid+kanal, ты поискал сигнатуры? Я даже не знаю, что такое сигнатуры, лол. Вот про PEiD знаю, это тулза для просмотра не упакован ли экзешник (у меня как раз упакован, кстати, но судя потому, что я нагуглил, это не важно в моем случае). >И вообще, ты весьма расплывчато расписал задачу. Может, тебе вообще не AES-ключ, а ключ для AES нужен? Нужен именно AES ключ. Смотри, программка обменивается с серверами какими-то своими ключами, потом на основе этих ключей внутри себя формирует ключ, которым потом шифрует свои данные с помощью AES ECB. И чтобы расшифровать данные мне и нужен этот ключ. >Какие-нибудь рандомные байты, которые используются в качестве входа для KDF? Тут без понятия вообще.
Задача для меня очень сложная, но я хотел бы разобраться с реверсом на основе этого практического примера. Проблема ещё в том, что экзешник 64битный и в ollydbg не открывается.
>>977593 > разобраться с реверсом на основе этого практического примера Упаковщик, 64 бита, криптография (да не простая, а AES та же RSA гораздо понятнее для прогуливавших математику, сервер - все вместе это очень хуевый выбор для первой задачи.
> упакован, кстати, но судя потому, что я нагуглил, это не важно в моем случае В IDA код смотреть гораздо проще, чем в отладчике. Упакованный бинарник смотреть в IDA бессмысленно. Поэтому как бы напрашивается задача "сначала распаковать, если возможно".
> ключ, которым потом шифрует свои данные с помощью AES ECB Т.е., у программки есть реализация AES, или она использует CryptoAPI. Во втором случае все просто, в первом случае есть функция шифрования, и тебе ее надо найти - ей на вход придет блок данных и контекст с преобразованным ключом. Также есть функция, которая инициализирует контекст, ее тоже стоит найти, ей на вход придет исходный ключ. Функции эти, во-первых, более-менее рядом, а во-вторых, характерно выглядят (алгоритм гораздо проще найти в бинарнике, если ты уже реализовывал его сам).
> Я даже не знаю, что такое сигнатуры Многие алгоритмы используют различные константы (например, у CRC32 будет полином) и массивы констант (табличка в табличной реализации CRC32 или S-box в том же Rijndael), могут быть какие-то общие для архитектуры куски кода. Все это позволяет определить алгоритм, называется сигнатурами. Ссылки на константы позволяют выйти на использующие их функции, но вручную все проверять заебешься, поэтому есть всякие скрипты и плагины, которые знают дохуя сигнатур, и показывают все, что найдется в указанном бинарнике.
>>977596 Спасибо за пояснения, да выбор не очень, но мне бы хотелось именно этого. Ксати, есть и 32битный экзешник, так что за 64бита можно не парится. Точно известно, что как минимум два человека написал утилиты, которые этот ключ автоматически вытаскивают без распаковки (делиться, конечно же, не хотят). Пикрилейтед нашел про мой случай.
Проверил peid+kanal и ничего не нашел. Даже не знаю, как подступиться.
>>977608 >Ох лол, начал смотреть видео из лекций, что ты сбросил, оказалось что это лекции и преподаватель из моего университета. Укачало с первых 10 сек видео. Кто додумался это снимать ТАК. Там Филтифранк с смартфоном в качестве оператора?
Суть такая. Я несколько дней разбирался с интерфейсом OLE/COM для них и пришел к выводу, что нужную мне функцию снаружи не вызвать. Т.е. через публичный интерфейс там можно только менять параметры.
Какая функция мне нужна? Преобразование MathML в VoiceXML.
Работы этих либ выглядит так: 1. Они загружаются, как плагины для IE. 2. Открываешь html страничку, где есть формулы в виде тегов MathML. 3. Плагины сначала рендерят формулы. 4. По формуле можно кликнуть правой кнопкой мыши и нажать "прочитать выражение". 5. Либа запустит голосовой движек в отдельном потоке и прочитает его.
Непонятные моменты: когда они производят конвертацию MathML в VoiceXML -- в момент рендеринга страницы или после щелчка "прочитать выражение"?
Я поставил брейкпоинт на момент создания контекстного меню, но до обработки щелчка по нему еще очень много процессорных инструкций. Деббагинг какой-то не очень удобный, т.к. постоянно сыпятся исключения и то IE сдохнет, то IDA войдет вечный цикл.
Прошу любых советов по теме.
Моя цель такая: преобразовать эти либы в консольные утилиты, где можно запихнуть файл (строку) с MathML и получить в ответ VoiceXML. Для начала нужно понять как оно вообще работает.
>>977264 чувак, она не для учебы. Она для работы. С группами кольцами и т.д. Это полный бесплатный, кросплатформенная херовен для объемных вычислений. Более грубый аналог Maple. один из кучи вариантов (на википедии есть) а еще есть группа программ для численных вычислений , матлаб и прочыее прочее. всё оно для своих целей. Но не для обучения. Грубо говоря навароченные калькуляторы. В математике научиться чему то можно только многократно прорешивая руками. чем больше тем лучше. В мое время препод матрицы 5х5 в квадрат умел возводить без проблем. А так же на ходу считать для адекватных размерностей определеители и прочую херь. Хочешь научиться - берешь задачи и решаешь решаешь решаешь. Заебные места с вычислениями конечно можно в любой из софтин (хоть тупо самому написать) реализовать, чтоб время не тратить. но надо идею и ход мыслей всегда понимать.
>>977458 для полных нулей, качай с трекеров exelab dvd, там видеокурс, или гугли Нарваха Рикардо. Введение в крэкинг с нуля вообще, в шапке инфы предостаточно, достаточно вечерок посидеть, и такие банальные задачи проблемой не будут.
Допустим, я знаю, что программа обращается ко всем файлам в папке, и например расшифровует один из них "data.dat". Как поставить брейкпоинт на именно этот момент?
>>960640 (OP) >Для ковыряющих винду и софт под неё, сайты с описанием структур со смещениями и разными версиями оных: Блин, они все ущербны. Вот вижу я структуру, которая по смещению 0х30 содержит PFILE_OBJECT, а дальше что? Все эти сайты никак не помогают это найти. Это просто статические страницы. Хочу написать нормальный сайт с возможностью поиска по списку смещений и их содержимому. То есть вводишь типа список используемых смещений "0x18 0x10 0x8", или например "0х10 POBJECT_TYPE 0х30 PFILE", а он тебе "Это возможно структура struct_name_1, struct_name_2". Кто со мной?
>>978409 >Дали им windbg, дали команду dt, что еще нужно? Как с помощью dt найти >>978286 >То есть вводишь типа список используемых смещений "0x18 0x10 0x8", или например "0х10 POBJECT_TYPE 0х30 PFILE", а он тебе "Это возможно структура struct_name_1, struct_name_2". ???
>>978506 Ага. Записать, написать скрипты обработки, поиска и удобный интерфейс. >Только данные подготавливать муторно и долго Это как раз автоматизируется скриптами. Никто руками забивать все 9000 структур не будет.
>>978566 >Кстати, их много там? Штук 10. >Ищу все их упоминания в dll. А потом придётся выяснять, какие параметры у функций реестра, чтобы понять, какие ключи читаются. А параметры могут (и будут) формироваться динамически, и не факт, что удастся понять из кода без его запуска. >Может эта задача как-то проще решается? Что за библиотека то?
>>978591 >Что за библиотека то? Для чтения формул. См. скриншоты выше. Правда, это уже другая версия. С другим COM интерфейсом.
Запустил под Sandboxie ее хост-программу. Анализирую куда оно писало. Чтобы понять есть ли там защита вообще или нет. В интерфейсе есть функции для работы с лицензиями, но пока не ясно используются ли они в данной версии.
>>978566 > узнать какие ключи реестра она может читать? 1) Пишется минимальный хост, берется ProcMon/RegMon от SysInternals. Так оно быстрее всего будет. 2) Можно хукнуть RegQueryValueExW/RegSetValueExW и подобные, анализировать адрес возврата, проверяя, из длл ли оно вызвано. Есть готовые утилиты для трейса API.
Посоны, скомпилил этот плагин: https://github.com/alexhude/FRIEND Осталось сделать к нему конфиг для Intel (ну или другой процессор, если вам надо). Не хотите со мной?
>>978735 Вот если бы оно чтение/изменение отдельных битов в memory-mapped-регистрах документировало - была бы сказка, а референс по инструкциям нахуй не нужен. Посмотреть документацию по регистру в мануале я и сам могу.
>>978693 Блин, а ведь даже PDB дампить нечем. pdbdump пишет The specified module could not be found и вообще древний как говно мамонта, Dia2Dump выдаёт нечитаемую хуиту, pdbxtract гуевый и вообще проёбывает типы, pdbripper врлде норм, но тоже гуевый, pdbdump.py требует какой-то модуль winnt, который я не нагуглил. Везде хреново.
Но ни он, ни моя собственная версия так и не заработали. Плагин подгружается, в консоль пишет, гуи-настройки работают. А хинтов как не было, так и нет.
>>978860 Осталось разобраться в 400+ кб сорцов и переписать половину, чтобы выдавала правильно. Делов на пару дней, ага, один из которых я буду учить плюсы, на которых ни строки не написал.
>>978904 Ах да, оно ещё и не компилится, о чём и написано в репозитории. Так что перед переписыванием его ещё дописать нужно. И это явно не на пять минут, иначе кто-нибудь эту задачу уже выполнил бы.
Нихуя не понимаю. Список нубских вопросов: 1. Когда ищешь значения в Cheat Engine и находишь адрес вида 00000000, то это адрес RAM, который занимает это знание, правильно? 2. Ollydbg в основном окне показывает дизасемблированный код экзешника не запуская его? То есть по сути это то же, что и открыть экзешник в текстовом редакторе и вручную перевести все в ассемблерный код? 3. Если всё же OllyDbg запускает экзешник, то как этот экзешник может работать правильно, когда в при настоящем запуске в него передаются команды вроде --command и подтягиваются библиотеки? 4. Если экзешник запускается, то зачем говорят, что нужно его распаковать перед дизасмом, если он в RAM находится в распакованном виде? Он же сам распаковывается при запуске, разве нет? 5. Если в запакованной программе есть ключ, то можно ли его вытащить без предварительной распаковки? Можно ли автоматизировать вытаскивание этого ключа при каждом запуске этой запакованной программы (написать небольшую утилиту)? 6. Ключ будет хранится в регистрах вроде EIX при выполнении какой-то строчки кода, правильно? А если программа запакована?
>>978912 Ты почитай какую-нибудь книжку для начинающих. Много вопросов отпадёт. "Техника отладки программ без исходных текстов", например. 1. Да. Если придираться к словам, то это виртуальный адрес, он может быть и не в RAM. 2. Ollydbg запускает его, но останавливает выполнение программы (в зависимости от настроек). Поэтому нет, это не одно и тоже. 3. Экзешник запускает операционная система, Ollydbg здесь выступает как Explorer, то есть создаёт процесс, но Ollydbg запускает его как отладчик (такие опции есть при создании процесса, также можно подключиться к уже запущенному процессу). Поэтому операционная система уведомляет отладчик о событиях, таких как загрузка/выгрузка dll, создание/удаление потока, исключения в программе и некоторые другие. Это не эмулятор, это приложение запускается и работает так же, как и любое другое. С некоторыми нюансами, про которые уже написал. 4. Программа запаковывается для защиты от статического анализа, т.е. без запуска приложения (в Ida, например). При динамическом, т.е. когда программа запускается в реальной среде, проще противостоять отладке, поэтому и пакуют. Не каждая программа упакована, соответственно, не каждую надо распаковывать. Не уверен на счёт правильности терминов, но общая идея, надеюсь, понятна. 5. Нет, нельзя. Упаковка - это, с некоторыми оговорками, архив. Ты не сможешь даже узнать, что в нём, пока не распакуешь. Да, можно, даже в отладчике можно скрипт написать, есть соответствующий плагин для Ollydbg. 6. Где угодно. Зависит от того, как программист написал это. Может в секции, может в коде, в регистрах он будет, если этот участок кода написан на ассемблере, иначе как решит компилятор. Но в регистр попасть он откуда-то должен.
>>978912 1. Не совсем правильно. Это виртуальный адрес. Виртуальные адреса создают для процесса иллюзию, что кроме него и куска системы в памяти больше ничего нет. 2. OllyDbg - отладчик, отладчики запускают код. Но OllyDbg останавливается еще в системных библиотеках, до того, как код из exe получит управление. И нет, если попросишь, олька тебе покажет дизасм хоть от аллаха, это не обязательно будет код из exe. 3. Это и есть настоящий запуск. Библиотеки подтягиваются, аргументы командной строки можно указать. Процесс точно так же работает и управляется системой, как и при запуске без отладчика (есть некоторые исключения, их используют для детекта отладчика). 4. Упакованный exe - это тебе не архив. Он запускается, выделяет память (или не выделяет), распаковывает или расшифровывает сам себя, копирует распакованные данные поверх себя (или не копирует). Поэтому чтобы увидеть настоящий дизасм, а не код упаковщика и мусор в виде упакованного кода, нужно распаковать или дождаться, пока само распакуется. Очевидно, что если ты хочешь начать отладку с самого первого байта распакованной программы, просто подождать не получится. Алсо, многие протекторы не держат код в рам целиком в распакованном виде, а распаковывают по требованию и/или выполняют код на вм. 5. Да можно, но чтобы узнать как там все устроено, тебе нужно видеть настоящий код. 6. Регистров EIX в x86 нет, в регистрах подолгу ничего не хранится, они нужны для выполнения операций над данными. Ключ будет лежать в памяти. А может и не будет. Не перестаю проигрывать с треда. Скрипт-кидди и ньюфаг, полезший пилить читы.
>>978911 В общем нашёл нормальный проект, допиленное говно мамонта. Требует msdia120.dll, но не особо об этом распространяется, можно просто скачать её из интернета и кинуть рядом, так как с разными студиями ставится разная версия этой либы, у меня она была msdia80.dll, от чего программа и помирала с невнятным The specified module could not be found. https://redplait.blogspot.fr/2010/09/patched-pdbdump.html
>>979380 grep (но он под винду обычно без -P собран, а -P желательно иметь, чтобы паттерн писать без боли), bgrep (но он не умеет в glob, просто обходит указанную директорию рекурсивно). Поэтому проще всего все же написать примерно 4 строки на питоне под себя. А так, я обычно просто фаром ищу, он умеет в хексы.
>>979538 Не согласен, насчёт видео. Мне НАМНОГО легче заходит такой способ, даже с корявым диктором.
Но если нравится текстовая версия, то вот тут есть ещё более удобная в одном файле https://yadi.sk/d/EGv70o9F3ChD9N Добавьте в шапку на перекате, для нуфагов самое то.
>>979235 Блин, а оно не умеет в безымянный union, то есть структуру типа typedef struct _QUAD { union { __int64 UseThisFieldToCopy; double DoNotUseThisField; }; } QUAD; Превращает в struct _QUAD {
// non-static data -------------------------------- /<thisrel this+0x0>/ /|0x8|/ __int64 UseThisFieldToCopy; /<thisrel this+0x0>/ /|0x8|/ double DoNotUseThisField; }; // <size 0x8> Окей, у них одинаковое смещение, нужно детектить по нему и впихивать в юнион. Заодно перепишу для дампа в базу данных напрямую (SQLite, а оттуда уж перелью в мускул).
Ещё одна проблема- проёб именованных union, она их записывает как union <unnamed-tag> u и всё, концов её не найти. pdbripper выдаёт им номера, хотя, как по мне, лучше их встроить, так как все встреченные мною такие объединения были встроены.
Какие ещё заумности есть в структурах, на которых может споткнутся утилита?
>>981040 >какое? Выясняй методом половинного деления. И лучше на тестовой доске. По вопросу- многозадачность работает на прерываниях. Системный таймер генерирует прерывание, которое прерывает работу любого пользовательского потока и запускает системный код, который и определяет, можно ли дальше работать программе или ей уже хватит.
>>960640 (OP) Как переделать программу одной ОС в программу другой ОС? Вот, допустим, у меня программа gcc для линукса. Хочу я её перенести на мою собственную ОС. По сути надо не сильно изменить. Ведь да? Надо только поменять сигнатуру исполняемого файла, если надо, и заменить системные вызовы на вызовы специальных процедур, которые будут эмулировать системные вызовы в Линуксе. Я всё учёл?
>>981527 Всё учёл, кроме того, что люнЮфъсь — это не операционная система, а прежде всего религия. А так-то да, зделой POSIX API, купи торговую марку, догадайся как попадать в новостные ленты (это вот не так легко, как кажется) и вперёд, у тебя есть своя ОС.
>>981527 >Вот, допустим, у меня программа gcc для линукса. У неё есть исходные коды, изменяй @ компиляй. >Надо только поменять сигнатуру исполняемого файла, если надо Сами форматы исполняемых файлов отличаются, так что не всё так просто. Целевую программу и ОС не назовёшь, или нам дальше давать общие советы?
Репост из мертвого треда Неофит ИТТ. Поясните пж за следующую вещь. В hex-редакторе при анализе структуры PE файла (pic 1) вижу, что VA OEP = 10212, а ImageBase = 4194304, тогда абсолютный адрес точки входа = 4194304 + 10212 = 4204516 = 0x004027E4, и вроде как в дебаггере именно это число я и должен увидеть помеченным как entry point, но чому то в ollyDbg2.01 я вижу (pic 2) 0х00CE27E6. Я неправильно считаю точку входа? Неправильно трактую значение адресов в левом столбце в ollyDbg? Или еще что то делаю не так?
Алсо, я понимаю, что в olly я вижу образ процесса, а не дизассемблированный исполняемый файл, и загрузчик может выравнивать образ по размеру страницы оперативной памяти, но не настолько много ж блеть. Или настолько? И да, исполняемый файл не упакован/не зашифрован, т.к. написан мной.
>>983183 Во-первых, в ольке ты видишь EP = 0xce27e4, а не 0xce27e6. Во-вторых, если в образе есть релоки, и линкер поставил в IMAGE_OPTIONAL_HEADER.DllCharacteristics флаг IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE (в современной студии /DYNAMICBASE у линкера по умолчанию), то система считает себя вправе использовать ASLR для образа, т.е., выбирать рандомный базовый адрес.
На первом пике: DllCharacteristics лежат по 0x15e, это 0x8140 = ...DYNAMIC_BASE, ...NX_COMPAT, ...TERMINAL_SERVER_AWARE.
Поясните суть дауну, пожалуйста. Ковыряю туториал чит энджина, часть с поинтерами.
Нахожу поинтер и смещение (здесь равно нулю), которые всегда правильно указывают на значение, даже после перезапуска программы (на скрине правильное значение 325). Решаю глянуть в память, перехожу по актуальному адресу (01892950) и что я вижу? А нихуя я не вижу.
1. Почему в памяти по адресу 01892950 нет значения 325? 2. Если прочитать значения оффсета 00634630 в какой-то левой программе, то в нем не будет адресса 01892950. Почему так? 3. 01892950 это значение, которое должно лежать в (00634630 + BaseAddress)?
Теперь остаются остальные вопросы. Я написал маленькую тулзу, которая читает память.
Пик1. Читаю значение по финальному адресу 017F29E0, вытаскиваю правильное 545. Тут всё ок.
Пик2. Читаю значение по оффсету 00634630 в надежде получить свой финальный адрес (в нем же должен храниться указатель, разве нет?), и получаю совсем не то значение. Что я делаю не так?
Допустим, я дизассемблировал программу и мне нужно заменить команду cmp eax, 0 на cmp eax, ebx
Как мне это сделать в ida pro? Что то там по дабл клику только eax можно заменить на другой регистр, но вот константу никак. Или в ida pro нет такого функционала, потому что при некоторых заменах придётся учитывать появившиеся сдвиги, ведь в машинном коде размер команды может измениться? Тогда мне, я так понимаю, остаётся только вручную править байты в hex редакторе. И тут вопрос, как мне понимать, что писать, чтобы получить нужные команды, регистры и тд? Типа, cmp eax, 0 === 83 f8 00, ага. Эмпирическим путём я установил, что cmp транслируется в 0x83f, 8 означает eax (9 уже почему то ecx), а 00 - константный байт, но из каких соображений мне вбивать необходимую команду?
>>983820 Кажись нашёл онлайн конвертер. Втыкать NOP на место лишних байт нормальный подход, или плохой тон? И еще, Это сейчас мне повезло, и cmp eax, eax занимает 2 байта, а cmp eax, 0 - 3. В другой ситуации мне придётся сдвигать машинный код на n байт вправо от места вставки? Я так понимаю, это может отразиться негативно, ведь в программе есть ссылки на константные переменные. Или если константные переменные в секции .data, а хуячу я в .text, то можно не ссать и вообще полный вперёд?
>>983820 По даблклику там переименование регистров, просто для удобства чтения дизасма. Сам код от этого не меняется. А чтобы пропатчить код есть Edit->Patch program->Assemble, но это пропатчит только базу. Чтобы сохранить изменения, там же есть Apply patches to input file.
>>983826 Втыкать нопы норм. Единственная проблема с патчами - релоки. Если ты правишь код, на который есть релоки, нужно убирать соответствующую запись из релоков, если втыкаешь абсолютый адрес - добавляешь запись. Если релоков нет, и >>983230 ASLR отключен, то просто патчишь.
>>983829 Всего 5 минут в этом вашем RE и эти релоки уже начинают мне надоедать. Чем чревато просто уебать в pe optional header в dll characteristics аргумент, в который не входит dynamic relocation? Зойчем он вообще нужен? Или в особо больших программах, которые потребляют много ОЗУ это будет полезно?
>>983936 Да и в читенджине должно быть основа плюс смещение... Вот только у меня ничего не выходит, теперь уже в 64битном приложении. Основа у него 1400000000 и даже без смещения это уже больше, чем нужно.
Можно ли как-то Hex-Rays заставить показать псевдокод ассемблерного листинга структурной обработки исключений? Просто он выдаёт код как-будто никаких try с except вообще не существует. А то я скоро Asm начну понимать. Версия Ida 6.8, по понятным причинам.
Надеюсь можно порекламировать тут свой тред: https://2ch.hk/pr/res/985780.html Надо было наверное тут спрашивать, но не увидел, а копировать не хорошо.
>>986156 А мне вот тоже интересно зачем нужны релоки, только вообще. Как это работает, как подгружаются либы и где в памяти они размещаются, как происходит патчинг кода при загрузке. Для прыщей есть книжка Линкерс-анд-лоадерс, а для спермы что есть?
>>986213 > Для прыщей есть книжка Линкерс-анд-лоадерс, а для спермы что есть? Книжка линкерс энд лоадерс (там PE вниманием не обходят, да и базовые принципы везде одинаковые), книжка виндоуз интерналс, спека формата PE и многочисленные статьи.
Допустим есть строка с байтами из памяти cc 02 77 5e e7 02 02 10 14 00 0e 00 88 18 00 и тд. Как понять, где заканчивается одно значение и начинается другое? Тут могут быть строки, 1-байтные, 2-байтные, 4-байтные переменные, я хз.
>>986663 У меня программа запакована. Допустим, я часть этих данных экспериментально могу узнать просто меняя данные. Например, я так вытащил имя пользователя, длину имени и еще пару значений. Но что с остальными, если доступа к нормальному коду нет?
>>986664 Можно менять данные и смотреть поведение программы. Можно собрать больше таких данных, и на основе статистики что-то разбирать. Все же можно ставить бряки и смотреть код - обращаться к ним будет уже распакованная программа, если это не протектор, конечно. Можно разбирать частные случаи (как твоя длина имени) - искать длины/смещения, указатели, числа с плавающей точкой, круглые/известные/магические числа. Магии, которая позволит однозначно определить всю структуру на основании одного куска данных нет.
>>986665 >Магии, которая позволит однозначно определить всю структуру на основании одного куска данных нет. А жаль, именно это мне и нужно было. Игрушка онлайновая, размер огромный, библиотек тысячи, клиент запакован... тут брейкпоинты не помогут.
>>986856 >оно падает при каждом разъединении Ну не просто обваливается, а культурно выдает красивую ошибку с кнопочкой ОК, после нажатия на которую процесс завершается.
>>986860 Чую, что это уже высший пилотаж, мне такое не понять без детальных пояснений.
Но суть в том, что я уже написал все то, что мне нужно - программку, которая из памяти итой игры выдирает нужный кусок, парсит его на состав группы, с сайтов собирает рейтинг по именам и выдает эту инфу в красивый списочек. Проблема только в том, что игра периодически, если долго ничего не происходит, начинает записывать поверх нужных адресов какую-то левую инфу, так что иногда в списке появляется что-то вроде OIUYaiq3q222ItGI_yG. Ну и похуй. А, еще работает только с 64битным клиентом, надо дописать 32битные оффсеты, но мне лень.
>>960640 (OP) ЗА ЩО во многих исходных кодах используется синтаксис AT&T? Он же неудобный. Или авторы специально нам дают код в AT&T, а сами используют intelовский синтаксис?
Бампну прогрессом реверса WRK что ли... Убавил ntoswrk.lib на 520кб, вышло 922кб кода. Брал самое лёгкое, дальше сложнее. Видимо, работа эта непосильна для одного человека за разумное время. Продолжаю.
>>989024 Пидорас, я знаю хот кеи. Ты дал очень точный, но абсолютно бесполезный ответ, как в анекдоте про неудачливого парашютиста и программиста. Я имел в виду, как мне в интерфейсе ollydbg найти кнопку (например, по тексту на ней), и воткнуть БП на событие нажатия. вот этот господин >>989029 дал информативный ответ на вопрос, за что ему спасибо. правда я уже делал это, просто забыл как, но всё равно спасибо.
>>989033 Когда я в подходящем настроении, я не могу пройти мимо тупых пидорасов в /pr/, не назвав их тупыми пидорасами. У меня хоть и был ДИАЛАП, когда я делал первые попытки писать кейгены, но я себе не мог позволить задать ньюфажный вопрос, не прошерстив архив статей на жестком диске на предмет информации, которая бы помогла мне самостоятельно найти ответ на свой вопрос. В каждом, сука, треде регулярно появляются аноны, которые путают форму ответа в зекаче с поисковой строкой.
Раньше трава была зеленее и на форумах ридонли за такое давали.
>>989106 > на форумах ридонли за такое давали Пиздишь. Мне в конце 90-х в IRC, не жалея своего времени, объясняли базовые, в общем-то, вещи, на разный лад, пока я не понял. И я не помню, чтобы на каком-нибудь васме давали ридонли за вопросы по теме. Или, может быть, ты сидел в каком-нибудь ололо-преватном какерском форуме среди илиты, которая возгордилась и не могла снизойти?
>>989990 Говоришь в гугле Intel Software Developers Manual. В начале instruction set reference будет глава про форматы, в конце - овердохуя таблиц.
>>989992 010 editor и моск. Можешь посмотреть на Kaitai Struct, но я лично считаю говном и сам кайтай, и его автора разумных доводов приводить не буду.
>>990001 >Говоришь в гугле Intel Software Developers Manual Сложна. Короче, я просто через хекс-эдитор проверю как компилит фасм в разных комбинациях операндов и возьму результат. Я делаю компилятор своего личного языка программирования.
>>990008 > делаю компилятор своего личного языка программирования Можешь поступить, как авторы PowerBasic - генери асм-код, используй fasm для сборки (алсо существует fasm as dll, гуглится). Ну или осиль LLVM, это гораздо более правильный подход.
>>990012 Ох, нет, это ещё сложнее, я ничего не понял что в википедии о нём написано. Я лучше буду использовать примеры gcc, как он оптимизирует код, плюс попробую придумать своё.
>>990014 Оно решает задачи, если примириться с предлагаемым подходом. Подход говно, некоторые форматы этим не описать, некоторые существующие описывать максимум неудобно. А автор ниразбирается в реверсе файловых форматов, на многие фичи его уговаривали месяцами. Про генератор парсеров на джаве просто молчу.
>>990029 Я и так пишу компилятор на си, я офигею его на ассемблере писать, тем более с моими сотнями ифов и елсе. Потом постораюсь перевести си-код на код своего языка и скомпилить.
>>960640 (OP) Изучал тут команду mov с помощью того что мне выдавал фасм. И тут я наткнулся на что-то странное. Если ввести mov [r12],r13, то вместо обычных трёх байтов мне выдаёт 4. Добавляется байт 24h. Какого фига? Я и насмом проверил, он тоже добавляет такой же байт. Это что? Какой-то костыль x86-64?
>>990461 >>990460 Щито? Не совсем понял, но возможно тебе помогут битовые сдвиги. shr это сдвинуть вправо, а shl влево. Сдвинутый бит помещается в флаг cf. далее условными переходами jc (если cf = 1) и jnc (если cf = 0)
>>960640 (OP) Почему у меня не получается дизассемблировать через objdump исполняемый файл, который я скомпилировал фасмом? Мне выводит только, что формат ELF-x86-64
>>990545 Динамическую библиотеку через data import и макросы library и import. Гуглится, есть в мануале. Статическую, считай, никак. Линкера в фасме нет, он сразу генерит исполняемый файл. Делай format elf или format ms coff и линкуй любым внешним линкером.
>>990460 mov EAX,%хранилище числа% AND EAX,1 ;в результате логического умножение с 1 результат будет 1, если первый бит =1 и 0 если нет JZ EIP+X ;проверяешь флаг Z и переходишь куда тебе надо.
>>990555 >дизассемблировать через objdump А разве objdump это дизассемблер?
АЛСО, у меня такой вопрос. При сравнении кода в объектниках WRK и кода, скомпилированного из Win2000, часто замечаю, что вместо вызова RtlInitUnicodeString с константным значением выполняется просто присваивание размеров и строки в буфер переменной типа UNICODE_STRING. Собственно вопрос- они это блядь, в ручную меняли, или это действие какого-то макроса? Я для себя запилил INIT_CONSTANT_UNICODE_STRING и заменяю RtlInitUnicodeString на этот макрос, когда это нужно для соответствия коду XP, но не уверен, что моё решение рассово правильное, так как не нашёл подходящего готового макроса или инлайновой функции, и при этом видел, как в некоторых файлах присваивание идёт напрямую (что имхо хуита какая-то).
>>990785 Рассмотрим функцию MapperMarkKey из файла mapper.c. В сорцах Win2000 она выглядит как buffer = 1; RtlInitUnicodeString(&unicodeName, REGSTR_VAL_FIRMWAREMEMBER); Всё ожидаемо и предсказуемо, компилируется в аналогичный код, только вместо константы какая-то переменная, ну это видимо особенность HexRay.
При реверсе же WRKшной функции из файла MAPPER.obj получается (после именования и расстановки типов) типа этого unicodeName.Buffer = L"FirmwareIdentified"; buffer = 1; unicodeName.MaximumLength = 38; unicodeName.Length = 36;
Когда я в своём коде меняю RtlInitUnicodeString на свой макрос имена придумывать не умею, определённый как #define INIT_CONSTANT_UNICODE_STRING(dest, source) \ dest.MaximumLength = sizeof(source);\ dest.Length = sizeof(source) - sizeof(WCHAR);\ dest.Buffer = (PWSTR)source; То всё встаёт на свои места, код выходит аналогичным WRKшному с точностью до байта. Вот и думаю, правильно ли я делаю, или нужно хреначить код напрямую, как это сделано в некоторых файлах WRK, десятки их. Или вообще пойти отрефакторить этот десяток файлов, ибо нехуй код повторяющийся держать.
>>990819 > на свой макрос И чего ты выделываешься тогда? Твой макрос абсолютно идентичен RTL_CONSTANT_STRING, за исключением того, что ты присваиваешь почленно, а макрос генерит литерал. И да, RTL_CONSTANT_STRING - это общепринятый способ, когда ты инициализируешь UNICODE_STRING строковым литералом.
Пытаюсь освоить переполнение буфера Я должен заполнить массив char своими адресами возврата, чтобы программа прыгнула на нужное мне место (пик1). проблема в том, что эксплоит работает в виде пик2 (не обязательно именно так, но допустим программа с дырой работает через командные аргументы), и символ, нужный для верного адреса - \x00, что является терминальным символом. Насколько я знаю, не существует способа передачи этого символа через аргументы. Конечно же, я могу переписать код, чтобы передавать не массив char , а скажем, массив интов или чего-то подобного, но это будет уже не то. Интересно, как поступать в ситуации, в которой есть именно эта дыра, код программы - пик3, или, к примеру, нужный адрес имеет вид пик4.
Автор книги, Эриксон, для демонстрации использует никс, а там адреса с 0xffffffff идут
>>991707 Очевидно, что RTL_CONSTANT_STRING работает только при инициализации переменной, иначе error C2275: 'UNICODE_STRING' : illegal use of this type as an expression
Кстати, мой код даёт в одном месте, как и дизасм оригинального кода WRK, какой-то мусор: db 66h, 66h xchg ax, ax Нафига он? Выравнивание?
>>991837 Ты так говоришь, как будто твой макрос в такой ситуации "работает". Алсо: SomeFunc(&(UNICODE_STRING) RTL_CONSTANT_STRING(L"Если компилятор не совсем протухший, он умеет в compound literals"));
> какой-то мусор Возможно выравнивание, возможно кусок таблицы переходов. Покажи скриншот с кодом до этой херни.
>>991858 >Ты так говоришь, как будто твой макрос в такой ситуации "работает". Таки да, работает. И генерит код, аналогичный WRK. >Если компилятор не совсем протухший Собираю я всё тем же компилятором, которым собирался остальной код (cl.exe 14 версии), и более новый мне в моей задаче будет мешать выверять код. Обновлю потом, как всё декомпилирую. >скриншот Окей. Весь метод принтсринить было лень, думаю хватит. Нужное отметил стрелочкой.
>>991896 Ясно. Странно конечно, что компилятор не делает это выравнивание при использовании RTL_CONSTANT_STRING и делает при использовании моей фиготени, притом что остальной код одинаков и замена происходит достаточно далеко от этого кода. Впрочем ладно, спишу на причуды компилятора.
В общем сейчас переношу rules.c, там идёт работа с памятью. Файл из Win2000 гвоздями прибит к 32 битам, что очевидно. Как я понимаю, для портирования на x64 мне нужно поменять тип переменных, связанных с памятью, с ULONG на ULONG_PTR, посмотреть насчёт констант и прочее из https://www.viva64.com/ru/a/0042/ ? Вот например инициализация переменной, которая будет шестым параметром при вызове ZwMapViewOfSection. В Win2000 она выглядит так: viewBase.LowPart = Address & ~(0xFFF); viewBase.HighPart = 0; Правильно ли я сделал, заменив определение переменной Address с ULONG на ULONG_PTR и заменив инициализацию на #if defined(_AMD64_) viewBase.QuadPart = Address & (ULONG_PTR)~(0xFFF); #elif defined(_X86_) viewBase.LowPart = Address & ~(0xFFF); viewBase.HighPart = 0; #else ASSERT(FALSE); // Кому понадобилось компилить не под х86? #endif
>>991925 > делает при использовании моей фиготени Это имеет смысл перед адресом, на который будет возвращаться jmp где-то в конце цикла. Гугли intel lsd например.
> Правильно ли я сделал Каст к ULONG_PTR тебе не нужен в данном случае, Address уже ULONG_PTR, посмотри как Си integer promotions делает. Мало того, #ifdef тебе тоже не нужен, ты можешь просто писать в QuadPart в обоих случаях, не старайся быть умнее компилятора. Соответственно, код сводится к: viewBase.QuadPart = Address & ~0xFFF;
>>991945 >intel lsd А это вообще законно? >Каст к ULONG_PTR тебе не нужен в данном случае Ага, верно. Я сначала добавил каст, а уж потом сменил тип переменной. >ты можешь просто писать в QuadPart в обоих случаях, не старайся быть умнее компилятора Тоже верно. Просто хотел оставить вариант кода для х86 как было, мол, так вернее. Окей, так даже проще, видимо, компиляторы со времён Win2000 стали немного умнее.
>>960640 (OP) Сегодня ночью у меня болела голова, я находился в полудрёме и мне казалось что моё одеяло это кучка ассемблерных команд, а изгибы на одеяле обозначают ту или иную команду. И мне надо было по определённому их соотнести чтобы получить нужный кусок ассемблерного кода. Но я не хотел этого делать, я хотел спать. Потом голова перестала болеть и я заснул.
>>995109 Ты от соседей? Тот кун с протектором? Очевидно, что не зная адреса функции, нельзя ее вызвать. Адрес можно узнать, но асм для этого не нужен. Нужно найти kernel32 и пройтись по его экспортам: readfsdword/readgsqword, PEB, PEB_LDR_DATA, InLoadOrderModuleList, IMAGE_EXPORT_DIRECTORY - вот это все. Алсо, > GetProcedureAddress вот такого в винде нет, есть GetProcAddress.
>>995181 Да, в С-треде был я. Спасибо за совет. А разве адрес LoadLibrary и GetProcAddress будет одним и тем же например между win7 и win10? Или мне нужно как то в процессе выполнения программы прошелестить у пользователя kernel32.dll?
>>995264 Нет, адрес будет разным, и то, что я написал постом выше, как раз и позволяет пройтись по служебным переменным загрузчика исполняемых файлов, найти там kernel32, пройтись по его экспортам и узнать адреса, при этом не вызывая вообще никаких внешних функций. Каждый первый шелкод для винды рано или поздно к этому сводится.
Сап реверсач. Познаний в асм нихуя. Есть желание пердолиться на живом примере. В общем суть такова. Есть функция расчета упреждения. Она по идее должна выдавать 2 значения с запятой. Потом, эти значения скармливаются другим функциям. Так вот, каким образом передаются значения? Они закидываются в стек, и всё что мне понадобиться сделать, повесить бряк на функцию и просто смотреть что там лежит?
>>995499 > повесить бряк на функцию и просто смотреть что там лежит? Да. Смотреть стек ниже адреса возврата, искать указатели на структуру или на каждое из возвращаемых значений, смотреть на состояние FPU заодно. Можешь покидать сюда скрины - посмотрим и посоветуем.
>>995501 >>995501 Госпаде как сложно. Вот этот кусок вроде как должен отвечать за рассчет, до этого функция принимала доп параметры для всех рассчетов. Куда тыкать даже не не знаю.
>>995788 С фрилансером я тут мотался год назад наверно. Тогда пытался хукать с помощью левых либр, но только ещё больше запутался. Потом обновилась винда и фрил перестал запускаться, сейчас поставил семерку на другой диск. Сейчас же просто хочу выцепить данные и как нибудь передать другой функцие. Но в прошлый раз была другая функция котороя внезапно не тригерится и не учавствует в обсчете, так что может попутал.
после установки обновы от wannacrypt винда хр стала глючить странным, не похожим на глюк образом. Возможно это мс так стимулирует переход на 10ку. Не могли бы вы проверить обновы?
>>995780 Вот такой вопрос созрел. Если я например в CE напишу новый скрипт, который при вызове функции перекинет нас в другую функцию, которую я и буду писать, но которая отличается только тем, что будет иметь в начале вызов другой функции, которая должна будет передать данные внутри нашей новой функции, которые в естественном виде раньше приходили из другого места. Сработает?
>>996258 Чет как всегда не подумал, но написал. Сработает, но на всех. А чтоб отличить от игрока, ужно найти структуру игрока, но эти структуры ебанутые, и не умею ходить по ветке вверх. Так например есть функция is_player, она передает значения 1 и в зависимости от того, есть ли в округе ещё нпс. Значений столько, сколько и нпс. 1 есть всегда и постоянно считывается, скорей всего игрок. Но как дальше от этого плясать? Вызывающая функция не вызывает эту функцию для проверки, и в условие просто не написать проверку по смещению.
>>996138 Ответ нуба, не написавшего ни строчки на асм Так же, как и положил. Массивы в памяти- просто идущие подряд элементы, так что номер элемента, помноженный на его размер, даст адрес от начала массива. Так что LEA для вычисление эффективного адреса да MOV для загрузки.
>>996290 Хотябы кто-то ответил. Спасибо, я что-то про это читал но ничего не понял да и fasm ошибку выдавал с командой lea наверное я не правильно ее использовал. А есть какие нибудь примеры?
>>996298 Напиши на плюсах заполняющейся масив. Ну или на любом другом языке, да глянь. Как только найдешь переменные, которые меняются в диапазоне размерности массива, то по идее за ними, должны быть команды, отвечающие за то, что положется в этот массив. Ну и мониторь стэк. мимо другой нуфаг
Привет, уебки. Никогда раньше ничего не реверсировал, но тут появилась необходимость в одном установщике убрать проверку на наличие файла на компьютере. То есть установщик (обычный .exe-файл) запускается, проверяет, нет ли на пека такой-то установленной программки, если есть - работает, если нет - пишет "Нетустановленногофайла". Как-то так. Я его дизассемблировал ИДАй, но ничегонепонятно. Как познать тонкости? Я просто наудачу потыкал, убрав пару первых джампов, вернее, сделав их безусловными в надежде, что это и будет перепрыгивание условия, но хуй вам. Что делать, ребята?
>>996601 С такими вопросами меня игнорили или посылали читать манулы. Ну и по сути надо достаточно много понимать, чтоб что то сделать, так что вполне резонно, что никто не хочет все объяснять. Слишком долго и не известно, будешь ли усваивать
>>996601 Запатчить чужой инсталлятор очень сложно. Там обычно кастомный байткод, декомпиляторы не для всех есть. Лучше возьми песочницу, посмотри, что и куда пишет инсталлятор и сделай свой такой же. Чтобы узнать, что именно он проверяет, спользуй Filemon/Regmon/ProcMon от Руссиновича и компании.
Написал демо программу на крестах, скомпилировал. Сижу короче туплю в дизассемблер. Я нашел ассемблерный код работы своей программы, но вызывается он хуй знает когда. Пошёл от точки входа, а там call-call-je-jnz-call-jmp просто пиздец бесконечная цепь вызовов функций и переходов. Собсно вопрос: что за хуйня происходит при запуске программы? Почему собсна моя функция main начинает работать после стопицот всеразличных джампов, коллов и прочего? Разве все предварительные подготовки не загрузчик делает?
>>997182 > Почему собсна моя функция main начинает работать после стопицот всеразличных джампов Потому что у твоей функции есть аргументы, их нужно получить и подготовить. А еще у рантайма есть состояние, его нужно инициализировать.
> Разве все предварительные подготовки не загрузчик делает? Разным языкам нужна разная инициализация. Загрузчик не зависит от языка, поэтому для инициализации рантайма линкер втыкает соответствующий код в бинарник. Можешь сказать линкеру этого не делать (по крайней мере, в винде - в линуксах все слегка сложнее), и тогда сразу начнет работать твой код, но работать он будет с голой жопой.
>>997259 >Загрузчик не зависит от языка, поэтому для инициализации рантайма линкер втыкает соответствующий код в бинарник А никто не писал ОС, где это будет встроено? >>997182 >Сижу короче туплю в дизассемблер. Нужно использовать продвинутые инструменты. IDA умеет пропускать всю эту библиотечную мишуру и сразу показывать точку входа в приложение.
>>997267 > А никто не писал ОС, где это будет встроено? Что встроено? У нас одних компиляторов Си только под винду десяток. У всех разные рантаймы, их по-разному нужно инициализировать. Если встроить рантайм в ОС, получится msvcrt.dll, наполненный багами и несовместимостями, который даже обновить нельзя, никому ничего не сломав.
> Нужно использовать продвинутые инструменты. Можно просто подумать и посмотреть листинг. main() не так уж глубоко от точки входа.
>>997270 >Если встроить рантайм в ОС, получится msvcrt.dll, наполненный багами и несовместимостями, который даже обновить нельзя, никому ничего не сломав. Под каждую версию свою либу. Зато можно будет вырезать однотипный код инициализации рантайма из каждого приложения. Но конечно же это нужно закладывать на этапе разработки ОС, к существующим это уже не прикрутить.
>>997298 > Под каждую версию свою либу. А потом я изобрету язык YobaLang, мне в спортлото писать, чтобы мой рантайм встроили? А если я завтра YobaLang 2.0 сделаю, мне снова писать? А пока я изобретаю, чем мне пользоваться? Зачем вообще напрягаться ради экономии сраных 10 КБ (сишечка или кресты) на каждое приложение? Есть лишь одна реальная причина: статическая линковка = невозможность фиксить баги, но инициализации не так много, код вылизывается за пару версий до совершенства, и никаких сколько-нибудь критичных багов там уже нет.
>>997298 Алсо, > однотипный Давай возьмем винду и Visual Studio. Будут разные варианты инициализации для: MBCS/Unicode, Debug/Release, Exe/Dll, Single-/Multithreaded, не считая всяких телеметрий, TLS и прочих __fltused. Итого, у нас уже 24 = 16 вариантов (я слегка преувеличиваю - на самом деле поменьше, это на закате DOS их реально дохуя было в каждом компиляторе). И это только одна студия, а их, сколько-нибудь пригодных для кодинга под современные винды, 9 или 10 версий, не считая сервиспаков. В общем, какая-то надуманная проблема, учитывая, что писать без CRT никто, в общем-то, не запрещает.
Привет, анончик, начал я тут читать теорию, и у меня возник вопрос. Вот тут http://life-prog.ru/1_29310_protsessori-Intel-.html пишут, что в состав блока исполнения в процессоре входят 10 регистров, при этом на пикче там же их 8 + flag register. Потом смотрю, этих флагов вообще 9 штук. Так какие же регистры входят в блок исполнения? Если конкретно? AX, BX, CX, DX, SP, BP, SI, DI... Какие еще?
Анон, помоги ньюфагу. Есть одна прога, которая подгружает dll написанную на сильно обвусифицированном Си. В нее передаются указатели на массивы, которая эта dll модифицирует по неведомому ебанму алгоритму. И я хуй знает как мне прицепиться отладчиком к этой dll, т.к. после выполнения функции она тут же выгружается. Как мне ее отладить?
>>997421 В OllyDbg в настройках есть Break on dll load. Когда это происходит, расставляешь бряки на EP, TLS initializers (если есть), эксортируемые функции.
>>997401 Не заморачивайся этой хуйней. С тех пор регистры потолстели в 4 раза, их стало намного больше, и вообще, то, что ты видишь в асме, не совсем отражает реально происходящие процессы внутри камня. На самом деле, машинный код для x86 - это лишь самый низкий уровень, который доступен для написания кода рандомкунами, но не самый низкий уровень, который существует в x86. Внутри проца сейчас по сути эмулятор набора инструкций x86, который транслирует его в микроинструкции для RISC-like ядра.
>>997302 >А потом я изобрету язык YobaLang, мне в спортлото писать, чтобы мой рантайм встроили? Очевидно, что это просто пакет ОС, от которого будут зависеть соответствующие программы. С версиями, ага.
Репост из крестового треда, тематика вроде соответствует Тамплиеры, помогите. Хочу вызвать LoadLibraryA по адресу в виртуальной памяти, при этом адрес я хочу получить сам, основываясь на данных таблицы импорта скомпилированного PE файла и ImageBase, который я получаю через FindImageBase(). Я скомпилировал приложение (код 1.png), вытащил из получившегося PE RVA функции LoadLibraryA. Как я понял, это RVA, в который будет записан VA той самой функции, но тем не менее получаемый адрес отличается от того, что я получаю по auto x = LoadLibraryA. ЧЯДНТ?
>>998116 Это может быть как нибудь связано с relocation'ами? Типа, мне чтоб получить действительный RVA, нужно к значению из PE файла прибавить фактический ImageBase - номинальный ImageBase?
>>998116 Опиши еще раз подробно, что ты делаешь? Может, ты смотришь RVA в собранном файле, а потом его пересобираешь? И зачем тебе читать адрес LoadLibrary из собственных импортов в рантайме, когда компилятор может (и делает) то же самое, когда ты делаешь auto x = LoadLibraryA? И хватит в оба треда срать.
>>998158 Я пытаюсь вручную получить VA LoadLibraryA, основываясь на ImageBase и RVA в таблице импорта PE файла. Это лишь подготовительная мера для кое чего другого. Да, смотрю RVA в скомпилированном файле, да, потом подставляю константу и пересобираю. НО! Я смотрел в пересобранный .exe, RVA LoadLibraryA таким и остаётся, я проверяю при каждом изменении кода. Зачем срать через ноздрю, а не использовать LoadLibraryA? Потому что я компилирую код, чтобы потом его выдернуть и вставить в оверлей секции произвольного .exe файла, и там я уже я не могу расчитывать на что либо, кроме данных самого PE-файла. На ассемблере писать не хочу, я на нём только читаю хотя это громко сказано, но не пишу. В другие треды сру, тому шо не знаю, кто где ответит. Вдруг кто нибудь сидит в С-треде, но не в asm треде ну и наоборот.
>>998166 Окей, а почему 0xb93c8 (RVA IMAGE_IMPORT_BY_NAME, т.е., строчки "LoadLibrraryA" с хинтом), а не 0xb4c00 (RVA ячейки IAT, куда попадет адрес LoadLibraryA при загрузке)? Это если я правильно понимаю ту мешанину, которую выдает дампер на скриншоте. Хексы и то легче читать.
>>998166 А, я тебя вспомнил. Расскажи, что за протектор, почему это называется протектор, что ты собираешься протектить, и почему ты собираешься протектить именно так? Мы с тобой общались уже про LoadLibrary в одном их тредов.
>>998167 Потому что address - это raw offset в самом файле, а value - это то, что там находится. >>998169 Протектор - курсовая работа. Протектор, потому что предполагается, что это говно будет защищать проприетарное ПО от какиров хотя целью было вообще в RE вкатиться, просто тема курсовой позволила совместить приятное с полезным . Учитывая, что дедлайн уже через пару недель, хуй я успею написать DENUVO 2, хотя "научрук" сказал, что тема годная и можно сейчас на пол карасика сделать и сказать типа на дипломе доделаю бля буду. Я застрял на создании инжектора. Мне нужно как то загрузить либу протектора через LoadLibrary, потом вызвать пару функций из либы. Однако, для этого мне нужно получить VA LoadLibraryA и GetProcAddress не говоря уже о том, что мне нужно запихать в импорт защищаемого PE файла LoadLibraryA, если её там нет по умолчанию. Как это делать - не ебу представляю, но мне страшно от объема необходимых фиксов и даже не думаю на данный момент., с чем я сейчас и сражаюсь.
>>998183 > Потому что address - это raw offset Охуенная программа. Тогда смотри. FirstThunk - это массив, лежащий в IAT и состоящий из 32- или 64-битных слов. Последний элемент массива - 0. Пока файл не загружен (или не связан), там лежат ординалы (если импорт по ординалу) или RVA структур IMAGE_IMPORT_BY_NAME (если по имени). Когда файл загружается, туда кладутся уже адреса функций. Ты сейчас пытаешься читать значение не оттуда, а из IMAGE_IMPORT_BY_NAME, и в твою переменную z (если смотреть вычесть непонятно зачем прибавленный image_base) попадают кусок хинта и имени: 1879507877 = 0x700703A5 - 12255232 = 6F4C03A5 = 0x03a5 хинт и 4c 6f - байты 'L' 'o'. Решение: взять любой нормальный вьювер с функций FLC (file location calculator). Преобразовать файловый офсет 0xb4c00 (адрес элемента массива FirstThunk, ссылающегося на нужный IMAGE_IMPORT_BY_NAME) в RVA. Если верить скриншоту, то получится 0xb9000. Использовать этот RVA. Не прибавлять базу к z, потому что загрузчик пишет в IAT уже готовые VA.
>>998202 Спасибо, понял. Да, В RVA под FirstThunk и всех последующих словах лежит уже VA. Не подскажешь случайно софт, который позволяет добавлять импортируемые функции в PE-файл?
Есть экзешник написанный на с++ и запакованный "Armadillo Pro Version v9.64 [ Private build stub ] 06-09-2013". На сколько я в жопе? Есть шансы распаковать?
>>998569 Учиться патчить не на туториалах, а на настоящей программе. Я только что сидел с этим скриптом, перепробовал все варианты ответов, но отсосал. Все вроде идет нормально, но потом программа крашится. В треде могут с таким помочь или это фантастика и можно забыть?
>>999542 А если дамп с программы снять, что внутри? Протектор содержит виртуальную машину? Как мне кажется, ты взялся не за то. Нужно начинать с чего-нибудь более простого.
>>999581 Я прошел гайды Навахо, могу снимать защиту с простых крэкми. Что учить дальше, чтобы поднять уровень, раз подобные прикладные задачи я еще не в состоянии решить?
>>999661 Я серьезно вообще-то. Во время написания своего аналога чего бы то ни было приходится вникать в детали. И по мере вникания появляется куча специальных знаний, которые иначе пришлось бы год собирать по разным блогам.
Реверсач, в игроразделе подняли тему с отучением игрового бота от жадности. Захотел тоже поучаствовать, можешь помочь с ответом на пару вопросов? Экзешник бота запакован хз чем заголовок на первой пикче. После останова на EOP по мнению x64dbg и пары джампов появляется конструкция со второго пика. Если выполнить шаг не заходя в вызов F8 вываливается ворнинг, но если провалиться внутрь по F7 и затем продолжить выполнение, то никаких проблем. Это проверка присутствия отладчика, как ее можно обойти?
> Это проверка присутствия отладчика, как ее можно обойти? Ну, например, в качестве самого идиотского варианта оно проверяет наличие байта 0xcc (int3) по 0x3dc19f6, или, например, просто считает чексумму всей кодовой секции.
>>1000514 > в чем их разница? Аппаратные точки останова пишутся в отладочные регистры (dr0-dr3, dr7), изменения кода не происходит. Single step можно делать установкой TF в Eflags, изменения кода не происходит. Для Step over приходится втыкать брейкпоинт. Если он программный, то по адресу, следующему после интересующей инструкции, втыкается int3, он вызывает exception при выполнении, отладчик его ловит и восстанавливает код, который там был изначально.
Хочу шифровать практически целиком или частично, произвольными кусками секции PE файла, у которых есть флаги executable и/или read, расшифровывать буду импортируемой функцией из dll, подключаемой через LoadLibrary в ран тайме, этот блок кода не шифруется. Какие подводные камни меня ожидают? Загрузчик в кодовую секцию вроде подставляет адреса вызова импортируемых функций или какие то там другие данные подставляет в секции, или я не прав? Если это так, то значит, что в шифрованный файл адреса уже подставляться не будут, значит он и работать не будет, или еще того хуже, они будут подставляться, и при расшифровке я уже не получу оригинальный машинный код?
И еще, расскажите о функциях или ходя бы скажите что и где можно прочитать, используемых в активации ПО по ключу. Имею в виду, мне нужна функция, которая для некоторого множества чисел выдавала бы один и тот же результат. Типа, f(x) = x2 даёт одинаковые значения для любых чисел a,b: a =-b. По сути, это сюръективная функция, но я не могу найти примера именно для моих нужд.
>>1000728 Добавляй свою секцию, перенаправляй все необходимые IMAGE_NT_HEADERS.OptionalHeader.DataDirectory в свою секцию (экспорты не трогай или копируй, ресурсы... ну можно сделать свои только с иконкой и манифестом, про релоки не забудь). Директорию импортов генери свою, там будет только импорт твоей длл. Когда расшифруешь, обработаешь оригинальные импорты вручную, релоки применишь, DataDirectory восстановишь.
>>1000505 >Экзешник бота запакован хз чем VMProtect v.3.00 - 3.0x (по мнению Exeinfo). >После останова на EOP Программа запакована, хотя многие проверки от VMProtect убраны (обнаружение отладчика, запрет работы в виртуальной машине). Поэтому есть возможность поизучать работу программы. Чтобы получить более-менее хороший дамп, надо поставить брейкпойнт на какую-нибудь системную функцию, например, GetSystemTimeAsFileTime. Эта функция, как правило, вызывается одной из первых при запуске приложения. И после этого можно сливать дамп или ставить брейкпойнты там, где нужно. Подозреваю, что функция проверки ключа защищена VMProtect'ом. Не смог запустить программу на виртуальной машине, поэтому не знаю, как происходит проверка ключа. Если программа стучится на сервер, можно подделать ответ. Если где-то в программе, придётся искать место проверки. Программа статически слинкована с Qt, а там виртуальный вызов на виртуальном вызове вызывает виртуальную функцию. Хотя, если знать, как работает Qt, возможно, трудностей и не будет.
>>1000769 >Если программа стучится на сервер, можно подделать ответ. Нашёл через гугл тред с обсуждением в vg. Так и есть, стучится на сервер. Делается мегапростой прокси и отвечает, сколько осталось боёв. Запрос идёт через HTTP, значит, не придётся заморачиваться с сертификатами, OpenSSL и прочим MITM'ом.
>>1000733 А как работать с секциями PE файла в ран тайме вообще? Мне на ум приходит только одно - я могу определить ImageBase в ран тайме, он указывает на начало IMAGE_DOS_HEADER, и, я так понимаю. там последовательно загружены и IMAGE_NT_HEADER, там же Optional header, значит можно и в таблицу секции заглянуть, и найти RVA начала шифрованной секции. НО! Читал я о таком забавном механизме, как ASLR, который может распидорасить образ по памяти в случайном порядке, и инфа из таблицы секций мне уже ничем не поможет, или я заблуждаюсь?
>>1000769 >>1000770 Там помимо проверки ключей есть криптованный запрос с ключом, в ответ на который прилетает криптованный ответ с какими-то данными, без которых бот отказывается работать. Я похоже переоценил свои силенки и дальше брейкпоинта на чтение dword-а из памяти, где лежат константы, для формирования конструкции этого запроса, уйти не смог. Кстати, этот VMProtect стоит приличных денег, неужели автор навесил такую махину, на десятирублевого бота?
И еще нах, я правильно понимаю, что если у секции PE файла нет атрибута IMAGE_SCN_MEMORY_WRITE, то в ран тайме попытка изменения произвольного значения в какой либо из страниц виртуальной памяти, в которых располагается секция, выдаст мне исключение? Решит ли эту проблему предварительный вызов VirtualProtect с флагом PAGE_EXECUTE_READWRITE?
>>1000927 Ещё вариант придумал. Что, если вводить один и тот же ключ и с помощью прокси отправлять один и тот же ответ. Или это не один способ подсчёта в программе? Она ещё как-то общается с сервером разработчика? Или только при запуске? Ключ, как понимаю, к оборудованию не привязывается, раз в том треде был разговор о передаче ключа. Значит, вполне возможно лениво обойти проверку ключа, даже не разбираясь, что там разработчик напридумывал. Будет желание - посмотрю. И ещё один момент - эти строки предполагается перепечатывать с экрана?
>>1000891 > Читал я о таком забавном механизме, как ASLR ASLR выбирает рандомную ImageBase. А образ так называется как раз потому, что более-менее четко описывает содержимое оперативной памяти после загрузки (по большей части). По большей части внутри PE все, что касается адресов - RVA, которые как раз от базы и расчитываются. Для всего остального существуют поправки (relocations).
Так что да, парсишь заголовки, добираешься до нужных структур. Спецификация PE лежит на сайте майкрософта, гуглится; в интернетах куча исходников; в winnt.h есть несколько макросов, которые могут оказаться удобными (особенно в тех местах, где дело касается секций и выравнивания).
>>1000923 > Уверен, что он его спиздил. Ну загрузите на вирустотал. У автора вмпротекта бизнес по-русски, поэтому спизженные/сдохшие лицензии детектятся как малварь.
>>1000948 Правильно понимаешь. VirtualProtect проблему решит, не забудь потом восстановить обратно, как было. Алсо, PAGE_EXECUTE_READWRITE не любят антивирусы. Если есть возможность, делай просто RW, а потом X вернешь.
Кто-нибудь знает, как в Wireshark написать диссектор, который разбирает результат другого протокола. TCP->WebSocket->Data Вот для Data мне и надо написать. Как сделать для TCP/UDP - знаю, а как для такого случая - даже найти пример не могу.
>>997984 > Не получается его заставить реагировать на загорузку dll Очень странно. Потому что настройка на самом видном месте мало ли, еще актуально, скриншот валяется.
Какие элементы PE файла подлежат перемещению через таблицу релокаций? Там же вроде как все адреса - RVA? Имею в виду, вот есть таблица релокаций, каждая структура которой - RVA, по которому находится перемещаемый элемент, а также размер блока памяти. Дак вот RVA чего именно будет помещаться в таблицу релокаций?
>>1001766 Можешь считать, что таблица релокаций - это список патчей. Что положишь, то и пропатчит, никаких проверок (ну, кроме границ). В нормальных приложениях релоки касаются только кода и данных, больше VA нигде нет просто.
>>1001769 Но что именно туда закладывает компилятор? И что именно использует VA-адресацию в коде? Всякие вызовы функций, условные и безусловные переходы? А в секции данных - VA области памяти, где хранится переменная, которая по тем или иным причинам не попала в стек? То есть, если у меня стопицот джампов и вызовов функции, то в таблице релокаций будет стопицот записей?
И еще, почему я не могу просто взять и зашифровать секцию .text и .data в исполняемом файле, а потом в ран тайме расшифровать и передать управление в .text? Я понимаю, что есть подводные камни, придется некоторые задачи загрузчика брать на себя, но я не знаю какие именно. Достаточно будет просто осуществить релокацию по таблице в pe файле, или придется еще шаманить над вызовом импортируемых функций, потому что неизвестно, по какому адресу загрузится dll?
>>1001776 > Но что именно туда закладывает компилятор? Ну епт, возьми IDA, там в Edit->Plugins есть Jump to next fixup. Очевидно, что релокации нужны для обращений по абсолютному адресу, всегда, когда в инструкции или в данных явно или неявно встречается VA. Данные: mov eax, offset foo ; foo - VA, фиксап. mov dword ptr[foo],edx ; Тоже. Функции: push offset compare_func ; VA функции compare_func - фиксап. push size push num push dword ptr[ebp-8] call qsort ; Относительный call, нет фиксапа.
Не обязательно в асме. В секции данных, например: static int foo; // Чтение-запись - фиксап. static int ∗bar = &foo; // Взятие адреса - конечно же фиксап, обращения к bar - тоже. static int some_array[100]; static int ∗element_ptr = somearray + 3; // И тут тоже. Лишь бы был VA, а указывает он на начало объекта или в середину - похуй.
Вызовы и джампы по умолчанию EIP-relative, поэтому обходятся без поправок. Но, например, switch может сгенерировать таблицу переходов: mov eax,[ecx∗4+table] ; Обращаемся к table по VA - фиксап. jmp eax table dd case_1, case_2, case_3 ; Три поправки подряд.
> И еще, почему я не могу просто взять и зашифровать секцию .text и .data в исполняемом файле, а потом в ран тайме расшифровать и передать управление в .text? Можешь. Упаковщики так и делают. >>1000733 Возможен любой вариант. Тебе нужно лишь, чтобы после окончания твоих выкрутас образ в памяти выглядел так, как он ожидает. Как именно ты будешь этого достигать - похуй. И вообще, почитал бы ты по упаковщикам/протекторам хотя бы список терминов - вопросов гораздо меньше было бы.
> придется некоторые задачи загрузчика брать на себя, но я не знаю какие именно Пройтись по импортам, применить фиксапы. Писал же уже выше.
> или придется еще шаманить над вызовом импортируемых функций На VA элемента IAT в теле инструкции call будет очевидный фиксап.
>>1001776 И вообще, забей на релоки. У тебя же exe. Удаляй релоки, ставь файлу relocations stripped, убирай флаг dynamic base впизду, и ASLR сосет хуй, а у тебя гораздо меньше проблем. Потом добавишь корректную обработку, если желание будет.
>>1001790 То есть, если удалить релоки и изменить флаги, то вообще не нужно будет ничего перемещать? И еще, флаги менять в поле Characteristics FileHeader или в поле DlCharacteristics у OptionalFileHeader?
>>1001843 Ну загугли где какой флаг лежит. Их всего два. И да, если у образа стоит relocations stripped, то загрузчик не будет его перемещать по неродной базе, а значит даже смотреть на релоки не будет.
>>1001318 Нашёл костыльное решение. 1. В функции plugin_register регистрируется диссектор с помощью функции register_dissector. 2. В функции plugin_reg_handoff с помощью функции heur_dissector_add регистрируется функция, которая будет вызываться всякий раз, когда у предыдущего диссектора останутся данные (если это им предусмотрено). Первый параметр - не название диссектора, а "heuristic sub-dissector list". Для, к примеру, WebSocket это ws. 3. Как обычно, с помощью dissector_add_uint добавляется порт или что-то другое, что будет связано с диссектором. Только проблема в том, что параметр proto_tree всегда валидный и узнать, что пакет анализируется первый раз можно через pinfo->fd->flags.visited.
>>1003736 Прерывание - это процесс, начинающийся, когда процессор дергают за ногу (или он сам себя дергает), а заканчивающийся восстановлением и возобновлением выполнявшейся задачи после обработки прерывания. Вектор прерывания - это адрес обработчика прерывания. Процессор читает вектор из таблицы векторов, таблица векторов лежит в каком-то известном месте. Всего прерываний может быть сколько угодно, если считать аппаратные и считать мультиплексоры прерываний. Векторов в таблице векторов обычно фиксированное количество, 256 в x86.
>>1003751 int 21h - это инструкция, вызывающая обработчик прерывания. Она идет по 0000:21*4, читает оттуда вектор (сегмент/оффсет), и вызывает обработчик (ну и там текущий cs:ip сохраняет и т.п.).
IDA 6.8 + IDAStealthДмитрий10/06/17 Суб 11:34:49#501№1003934
Доброго времени суток, товарищи реверсеры. У кого-нить работает IDAStealth на IDA 6.8? (Win 10). У меня постоянно сыпет в output ошибку "IDAStealth: Error in IDA callback: Unable to locate RtlDispatchException in KiUserExceptionDispatcher" и нифига не прячет отладчик. Понимаю, что исходники есть, но править их нет никакого желания пока.
>>960640 (OP) Например, есть библиотека so (elf-файл), можно ли каким-то образом добавить в нее свои строки кода, а то и новую функцию из другой библиотеки? Ветки перенести не проблема, а вот как со смещением быть? Android-реверсер итт.
>>1013107 Я с реверсом ядра застопорился, а кроме меня тут было 2,5 калеки, которые видимо отвалились. Впрочем, скоро запилю перекат, до бамплимита тут джва поста. ОП
Вы пишите на ассемблере или собираетесь начать на нём писать? Программируете микроконтролёры, пишете драйвера для ОС, а то и саму ОС? Вам сюда.
Вы изучаете алгоритмы работы закрытого софта, пишите патчи бинарников? Вам тоже сюда.
Попрошайки с "решите лабу по асме за меня" идут в общий тред, а лучше нахуй.
Шапка треда в процессе пополнения, пока так.
Сайты по RE:
http://wiki.yobi.be/wiki/Reverse-Engineering
https://www.reddit.com/r/ReverseEngineering/comments/hg0fx/a_modest_proposal_absolutely_no_babies_involved/
http://www.program-transformation.org/Transform/ReengineeringWiki
http://blog.livedoor.jp/blackwingcat/
https://yurichev.com/blog/
Список книг по RE:
https://www.goodreads.com/shelf/show/reverse-engineering
Все книги и статьи Криса Касперски (R.I.P.)
https://yadi.sk/d/CxzdM1wyea4WP
Книги по ассемблеру:
"Архитектура компьютера" Э. Таненбаум
С.В. Зубков: Assembler. Язык неограниченных возможностей.
Сайты по ассемблеру:
Замена почившему wasm.ru- https://wasm.in/
https://www.unknowncheats.me/wiki/Assembly
http://asmworld.ru/
https://software.intel.com/en-us/articles/intel-sdm
http://www.nasm.us/doc/
https://sourceware.org/binutils/docs/as/index.html#Top
https://msdn.microsoft.com/en-us/library/afzk3475.aspx
Для ковыряющих винду и софт под неё, сайты с описанием структур со смещениями и разными версиями оных:
http://geoffchappell.com/
http://msdn.moonsols.com/
http://terminus.rewolf.pl/terminus/
Пополнения и исправления приветствуются.