В этом треде мы изучаем самый компактный и низкоуровневый язык Ассемблер и смежную с ним область: реверс-инженеринг.
Вы пишите на ассемблере или собираетесь начать на нём писать? Программируете микроконтролёры, пишете драйвера для ОС? Вам сюда. Вы изучаете алгоритмы работы закрытого софта, пишите патчи бинарников? Вам тоже сюда.
Попрошайки с "решите лабу по асме за меня" идут в общий тред, а лучше нахуй.
>>891716 (OP) Плохой заголовок для треда, не одобряю. Пожалуюсь модератору, пусть переименует. >>891719 >jmp ." в GAS Мегабыстрое гугление говорит, что jmp label1 Может быть, это метка? Скомпелируй и посмотри результат. >>891728 >2. Что-нибудь о программровании на асме под x64, а то васм со статьями закрылся. Прямо программирование? Или ты подразумеваешь реверс?
Ну и у меня вопрос. Как реверсить приложение (x64 в данном случае), напичканное антиотладочными приёмами? Нужен нормальный отладчик. Глючный x64dbg такой глючный, что лучше без него. Какой-нибудь эмулятор цп?
>>891749 >Прямо программирование? Или ты подразумеваешь реверс? И то, и другое. Например, хочу разбираться в том, как настраивается контекст процессов на x64.
>>891749 >>jmp ." в GAS >Может быть, это метка? Скомпелируй и посмотри результат. Это уже листинг декомпельнутого ядра. Системщики опять забыли принять таблетки. >Как реверсить приложение (x64 в данном случае)? Только с MSIL работал, декомпил в C#, далее стандартные средства рефакторига студии, после этого решарпером пройтись. Становится вполне читабельным.
>>891754 Ссылок не подскажу, т.к. меня только реверс интересует. Но отличий от x86 не настолько и много. Если умеешь в него, то и с этим асмом проблем быть не должно. >как настраивается контекст процессов на x64 Это что значит?
>>891761 Прям с изменённой структурой кода? Ну вообще обычно такое не юзается в языках, где важен порядок операторов(многопоточность и всё такое). Я видел только с изменёнными идентификаторами по типу axxxx, но большая часть из них восстанавливается.
>>891768 Не знаю, что там было. Пытался его декомпилировать, но не получилось. В IDA так же не понятно, потому что код приложения запакован. Но мне интересно про декомпиляцию не C# приложений, а нативных. Какой отладчик, кроме WinDbg ещё можно использовать?
>>891749 >Плохой заголовок для треда, не одобряю. Пожалуюсь модератору, пусть переименует. Ага, обосрался с ним. >>891761 >А если обфусцирован? Ищи деобускатор. Если его нет- пишешь его и выкладываешь на радость остальным. >>891774 >Какой отладчик, кроме WinDbg ещё можно использовать? OllyDbg.
>>891760 >Это что значит? Настройка структуры CONTEXT при инжекте в процесс. Видел, как у кого-то возникли проблемы на XP при настройке процесса в приостановленном состоянии.
Собственно ради чего я создал тред. Сейчас я ковыряю ядро винды, мечтаю подпилить его для запуска семёрочных приложений. Интересуют 64 битные версии. В итоге должно получится что-то типа http://blog.livedoor.jp/blackwingcat/archives/1706829.html Это патч от японского хакера, но он для 32 битной версии.
Для создания подобных патчей на х64 не хватает инструментов, а именно 1) Возможность добавления записей в ExportTable 2) Перемещение и изменение размера таблицы секций 3) Релокации для функций, чтобы после выполнения предыдущих действий всё работало 4) Контрольные суммы для PE. Собственно я их разыскиваю. В идеале следовало бы декомпилировать нужные файлы полностью, или допилить соответствующие исходники вынь2000.
Так же я разыскиваю дебажные сборки семёрки и десятки, авось пригодятся. Такие сборки для XP x32 SP2 и Server 2003 x64 beta у меня есть, но не откажусь от XP x64 и релиза Server 2003.
>>891788 Ошибка там. Хотели, наверное ZeroMemory(data, strlen(data)). Потому что указатель можно занулить и без использования ZeroMemory. Но тред не об этом, тебе в прикреплённый. >>891792 Что значит "настройка"? Ты и так можешь установить любые значения регистров в нём, чего настраивать то? Сейчас такую программу реверсю, в ней через векторные исключения проверяется состояние регистра dr7 и сбрасывается флаг TF (а ещё он же устанавливается для чего-то). Чтобы установить контекст, нужно вызвать GetThreadContext приостановленного потока (в документации так написано). Или через исключения. Но всё заранее должно быть создано, что нужно для передачи управления на инжект-код. Ты сформулируй вопросы, а то очень уж общий вопрос задаёшь. Или даже так: в чём у тебя возникли сложности?
>>891801 Немного специфичные требования к софту. 1, 2 и 4. LordPE посмотри. 3. Это не знаю. Наверное, тебе придётся самому написать. Посмотри книгу К.Касперски "Техника отладки программ без исходного кода". Он как раз рассматривает способы внедрения кода в чужое приложение. Книга хотя и старая, но формат исполняемого файла остался тот же.
>>891719 Сначала я решил, что это текущий адрес, потом я пошёл в гугол и нашёл, что это текущий адрес. Либо оно зацикливается, либо ничего не делает, в зависимости от того, что подразумевается под текущим адресом в этом случае. http://tigcc.ticalc.org/doc/gnuasm.html#SEC49
>>891864 А для чего? Это нестареющая классика, актуальная и через века. Нубы будут программить мышкой в очередном говнофреймворке, делая приложения,пожирающие гигабайты и гигагерцы, а аксакалы по старым методикам писать на асме проги в 30кб.
>>891956 >1, 2 и 4. LordPE посмотри. Смотрел. Может только редактировать, добавлять в таблицу экспортов не умеет. При работе с секциями побил файл нафиг.
>>892155 > учить асм Надо учить все, до чего дотянешься. Особенно если хочется в реверсинг. Кроме 32-битных x86 процессоров существует IA-64, кроме нее существуют и широко распространены ARM и MIPS, кроме кода для реальных процессоров часто приходится иметь дело с байтокодом CLR/JVM/Dalvik/AVM и прочими виртуальными машинами, поэтому нужно более-менее знать язык, который в это скомпилировался. Бывает, что байткод каждый раз новый (протекторы), а бывает, что ебать приходится USB- или Blutetooth- протоколы или структуры файла, а не код. Так что сишечкой и асмом ограничиваться ни в коем случае не стоит.
>>892159 >существует IA-64 Он официально мёртв. >Так что сишечкой и асмом ограничиваться ни в коем случае не стоит А вот это верно. >>892177 Так запили.
>>892039 Тогда вариант - написать самому. >>892159 >протоколы или структуры файла, а не код Как без реверсинга можно разреверсить протокол или структуру файла? Это же набор (не)случайных байт, попробуй пойми, что к чему относится. Вот ещё вопрос. Кто как реверсит сетевой протокол? У меня очень не эффективно, как мне кажется. Просто без реверса даже и не поймёшь ничего. Сначала IDA, дебаггер, а только потом какой-то результат. А ещё для упрощения работы пишу диссектор для Wireshark. Удобней становится.
>>892189 Да, я имел в виду Intel 64 (x86-64), постоянно названия путаю.
>>892288 > Как без реверсинга можно разреверсить протокол или структуру файла? Предназначение файла известно, иначе зачем его реверсить. В протоколах тоже чаще всего знаешь хотя бы общую картину происходящего. Берешь тот же Kaitai или 010 и разбираешь. Ищешь офсеты и длины, флоаты, строки, zlib брутфорсом неплохо находится. Иногда кода на руках нет, но можно нарыть много файлов и искать корреляции. Хотя если пошифровано правильно а не ксором каким-нибудь, то, конечно, без кода хуй что сделаешь.
Ладно, если вы не против, я покидаю сюда всякого говна по теме, которого насобирално так и не приступил к изучению Должен предупредить, что все это в целом ньюфажное
https://www.hex-rays.com/ - лучший в мире дизассемблер, с хуевым отладчиком, и каким-никаким, но декомпилятором. Позволяет реверсить код под любую архитектуру, а в тех редких случаях, когда архитектура все-таки не поддерживается - позволяет за вечер запилить процессорный модуль на крестах или питоне.
http://radare.org/ - безумная смесь дизассемблера, hex-редактора и отладчика, затмевающая даже vim своим умением все портить и пикатьмолча. Но из бесплатного - это самое годное, что существует.
Дан массив из 3 байт. Рассматривая его как массив из 8 трёхразрядных слов, найти “исключающее или” всех 8 слов для выражения “101”. Помогите пожалуйста с ассемблером. Нужен массив в 8 итераций. В благодарность скину шекели на сотовый.
>>892517 Выше кидали ссылку. Если тебе по новым возможностям процессоров, то бери мануал от Intel и смотри его. >>892571 Даже не понятно, что тебе надо. Надо зашифровать массив последовательностью 101?
Аноны, TitanHide.sys есть у кого сконпелированный и плагин от него же для x64dbg?
>>892578 Мне нужно сделать операцию XOR к каждому 3-хразрядному слову из массива в 3 байта. Прилагаю свой код. Только мне нужно сделать цикл в 8 итерацию.data segment mass1 db 11001100b, 10101011b, 00011101b data ends code segment assume cs:code, ds:data start: mov ax,data mov ds,ax mov bx,2 mov cl,8 a0: mov al,mass1[bx] mov ah,00000101b sub cl,8 neg cl cmp cl,3 jb a1 sub cl,3 a1: shr ah,cl xor al,ah sub cl,3 neg cl cmp 1 ja a3 add cl,3 mov ah,00000101b shl ah,cl xor al,ah a3: mov ah,00000101b shl ah,cl xor al,ah shl ah,3 xor al,ah mov mass1[bx],al dec bx jns a0 quit: mov ax,4c00h int 21h code ends end start
>>891801 Поищи пикрелейтед. >>891813 >Ошибка там. Хотели, наверное ZeroMemory(data, strlen(data)). Все там правильно написано, долбоебина, а вот у тебя - полная хуета. Не знаешь - не пизди.
>>892644 PETools ему экспорты тоже не добавит. Я уже говорил в ньюфаг треде, что лучше сразу написать кастомный линкер под такую задачу. Руками он править заебется на второй день.
> Все там правильно написано Ты забыл спросить, нахуя вообще обнулять указатель таким странным способом, когда можно просто присвоить, и нахуя вообще обнулять указатель, который в худшем случае до следующего вызова какой-нибудь функции в стеке пролежит. И ты мог бы догадаться, что оба аргумента ZeroMemory изначально были неправильные, и имелось в виду именно то, что ты процитировал. Хотя возникает вопрос, нахуя обнулять буфер с отосланным текстом.
Для x64dbg скачал плагин TitanHide. Во-первых, приложение отладку продолжает определять (через исключения, проверка регистра dr7). Во-вторых, пикрелейтед. Что не так? Уже надоело искать места, где проверка происходит.
>>893531 >А что отлаживаешь? Поделие от Blizzard. >>893534 >ты оторвал Не дочитал до туда. И так пришлось столько движений сделать, чтобы собрать и запустить драйвер. Сейчас попробую.
Посоны, помню когда-то в пр мелькала ссылка на древний блог какого-то хуя, который анон горячо всем рекомендовал, помню ещё, там дезигн был совсем топорный и сам блохер типа обучался по ходу написания постов, а ещё писал, что проганьем до этого никогда не занимался. Никто не вспомнит и не поделиться?
Компиляю я ядро WRK. Оно поставляется со своим компилятором cl.exe версии 14.0, ml64.exe 8.0 и т.д. Я решил обновить тулзы, взяв их из установленной Visual Studio 2010, а именно cl.exe 16.0, ml64.exe 10.0 и т.д. Само собой вылетают ошибки. Некоторые из которых я пофиксил сам, типа \amd64\procstat.asm(325): error A2022: instruction operands must be the same size Вот строка в исходниках: https://github.com/stephanosio/WRKRazzle/blob/master/base/ntos/ke/amd64/procstat.asm#L325 Тут я в определении структуры выше заменил SavedXmm6 db 16 dup (?) на SavedXmm6 OWORD (?) (это вообще корректно? И разве это не одно и тоже?), и этот файл скомпилировался. Но вот ошибка ..\amd64\trap.asm(2134): error A2156: constant value out of range Повергает меня в пучины отчаяния- она указывает на пустую строку, и что с ней делать- ХЗ. Строка в исходниках: https://github.com/stephanosio/WRKRazzle/blob/master/base/ntos/ke/amd64/trap.asm#L2134 Кто-нибудь знает, что ему нужно?
Если скомпилировать эти фалы отдельно старой версией и подсунуть при компиляции новой, то они нормально линкуются, ядро рабочее, и меньше на пару сотен килобайт относительно компиляции старой версией.
Что нужно для того, чтобы стать хорошим системных программистом? Надо ли уметь реализовать свой менеджер потоков под что-то вроде распберри или stm32? inb4: написать в контактике "системный программист"
>>893538 >Сейчас попробую. Всё запустилось. Только опять dr7 не пустой (смещение 70h). Что интересно, при модификации (занулении dr7) hardware breakpoinnt не сбрасывается. Можно пропатчить в таком случае. >>893637 Ничем даже помочь не могу. А зачем обновлять инструмент? .allocstack 0 - почему тут ноль?
>>893669 >А зачем обновлять инструмент? >>893637 >меньше на пару сотен килобайт относительно компиляции старой версией. То есть в новых инструментах новые оптимизации. >.allocstack 0 - почему тут ноль? Функция ничего не делает, вот и стек нулевой. Но действительно, нафиг не нужно. Спасибо, скомпилял.
Чем можно протестировать производительность ядра ОС? Какие-нибудь проги, дрючащие функции API. Интересно сравнить производительность родного ядра с WRK и с WRK, скомпилированным новым инструментом.
>>895629 Реверсинг сам по себе не востребован на рынке. Заказов мало, желающих много, и для того, чтобы этим зарабатывать, знать нужно овердохуя. Алсо, это ваши модные нодежс превращаются в устаревшие технологии, а ассемблер как был в 60-х прошлого века, так и в 60-х нашего века никуда не денется.
>>895652 Ну смотри. Есть computer forensics разного рода, но это не совсем реверсинг. Есть AV, но это работа за еду, хуже PHP-макак. И есть разовая полулегальная работа. Алсо есть куча ололо-секьюрити-рисерчеров, которые реверсят все подряд в качестве хобби, чаще всего для себя и бесплатно. Что-то еще назвать сможешь?
>>895634 >Реверсинг сам по себе не востребован на рынке. Тот же Крис Касперски вполне себе съебался в СШАшку и работает там на удалёнке. Был бы он нахуй никому не нужен, его бы туда не взяли.
>>895777 Крис - крайне хуевый программист и ничем не выдающийся реверсер. Он выехал исключительно на имени (написал книжки, по которым училось целое поколение, потому что других книжек нихуя не было) и на этой его охуительной истории про эксплуатацию бага в микрокоде.
>>895668 >Есть AV Что означает сия аббревиатура? >Что-то еще назвать сможешь? Банальное - кейген. Не банальное - формат файла, сетевого протокола, работа драйвера с устройством. Другой уровень - реверс существующих устройств. Прошивка, взаимодействие компонентов и прочее. Ещё один вариант - установка ПО и ОС на устройства, это ПО и ОС изначально не поддерживающих. Например, какой-то навигатор в автомобиль, в котором ОС Windows Mobile. В общем, очень много всего. Учитывая, что (в последнее время особенно) полно закрытых проприетарных устройств, программ, ОС, которые не дают возможность сделать что-то, что разработчик не разрешил.
>>895855 > AV Разработка антивирусного ПО. Полуавтоматический анализ сэмплов вредоносного ПО посредством различных утилит, скриптов и полутора-двух килограмм биомассы, которую пока заменить нечем.
> установка ПО и ОС на устройства, это ПО и ОС изначально не поддерживающих Экономически невыгодно, даже если найдется толпа некрофилов, которые на это скинутся. Такое только для энтузиастов, которым некуда девать свое время, а времени для таких финтов нужно овердохуя.
> Банальное - кейген Мы там выше говорили про востребованность на рынке, это подразумевает что-то хотя бы слегка легальное и приносящее некий доход.
О том, что существует множество интересных вещей, в которых можно лампово ковыряться по вечерам после работы, я не спорю. Но вот платят за реверсинг хоть и много, но редко.
>>893734 >Чем можно протестировать производительность ядра ОС? Какие-нибудь проги, дрючащие функции API. Интересно сравнить производительность родного ядра с WRK и с WRK, скомпилированным новым инструментом. В общем использовал PassMark PerformanceTest, результаты в пределах погрешности.
сам вкатился в асм недавно, ибо доебали проблемы с производительностью\оверхедом в высокоуровневых языках.
удивляюсь как ещё нет фреймворка для разработки приложений под асм x86-64? и пакетного менеджера либ\макросов\сниппетов, по типу pip\npm.
может посоветуйте ресурс со списком библиотек? а то единственное более-менее полезное что я нашёл это BASELIB.
алсо может есть _современная_ книга по имлементации алгоритмов на intel x86-64?
вообщем за недолгое время использования меня асм приятно радует скоростью, низким оверхедом, минимализмом.
алсо как вы думаете кряк-сцена загнётся лет через 5? все переходят на веб приложения, которые не хранятся на десктопе. молодёжь предпочитает покупать софт в интернете у оффициальных дистрибьюторов и не задумывается об использовании пираток.
>>897878 > проблемы с производительностью\оверхедом Ты что-то делаешь не так. Сишные компиляторы как миниум идут наравне с тем, что ты способен написать. А учитывая, что твой код все равно более, чем полностью состоит из вызовов либ, какая тебе разница, кто будет аргументы в стек/регистры пихать - ты или компилятор?
>>897878 >молодёжь предпочитает покупать софт в интернете у оффициальных дистрибьюторов и не задумывается об использовании пираток. То чувство, когда ощущаешь себя стариком, который даже предустановленную винду с омерзением сносит, чтобы поставить пиратку.
>>898379 Но ведь... большинство знакомых сидят на этой блявари и винде, и им норм. Т.е. жрать говно - это нормально, а ненормальные - это мы, избалованные могуществом не жрать говно. Но ведь ненормальным быть плохо. Нужно приучать себя жрать говно, чтоб не выделяться, как все. Бить по рукам, когда они тянутся к очередному системному инструменту или диску с виндой. Устраивать 10-ти часовые сеансы работы с нагскрином/баннером посреди экрана. И всякие такие экзекуции. Ну вы поняли.
mov rax, sys_write ;sys_write mov rdi, 1 ;stdout lea rsi, [msg] ;msg mov rdx, msg_size ;get count from fasm example syscall ret
segment readable writeable
msg rb 100 msg_size = $-msg
и есть ещё моё незнание асма. Как в рантайме присвоить поменять значение переменной? хочется написать макрос в котором будет (или прямо в main) msg = "sometext" или msg = %1, или mov msg, "sometext" похуй
как это сделать? а то у меня максимум что получалось это одну букву записать mov [msg], "L" если больше одной то фасм выдавал ошибку то invalid operand size, то ещё что то.
тут мне пару корешей предлагают вызвать sys_read, но нахуй он мне нужен если у меня всратая переменная значение которой код будет генерировать на лету, и нету файлового дискриптора с которого её считать.
Ну вот что в оригинале было? Согласно http://www.openrce.org/articles/full_view/23 должно быть: ссылка на таблицу виртуальных функций, данные класса. Почему здесь подряд идут? Это что-то вроде: class Some_Class : public Abstract_Class_1, public Abstract_Class_2, ... При переходе в функцию все данные начинают отсчитываться от смещения таблицы виртуальных функций, а не от начала класса. Как следствие, смещение нужного мне элемента должно быть 0xC8, а становится 0xC4. Как в Иде такие моменты разрешать?
>>900457 > должно быть Никому не должно. Ватком вон вообще в конец класса таблицу совал раньше.
> Как в Иде такие моменты разрешать? Никак, лол. Сделай структуру Fields, сложи туда данные класса, сделай ClassView, положи туда указатель на vft, дырку нужного размера и Fields). Сделай структуру Class, сложи туда ссылки на vft и все Fields классов. Когда сделаешь это в десятый раз, напиши скрипт.
Столкнулся с ARM и не знаю, чего ему не хватает. 1. Ida не может правильно дизассемблировать файл. Частично сделано правильно, частично оставлено как массив байт. Ручное дизассемблирование (клавиша "C") не работает. Подозреваю, что это Thumbs и Ida не может работать с такой смесью кода в одной секции. Костыльное решение с моей стороны - взял отдельную секцию из файла и дизассемблировал. Получилось. Название функций и прочее перенёс с помощью IDC файла. 2. Надо посмотреть, как работают некоторые участки кода. Попробовал с помощью QEMU - не помогает, отладка отваливается после первого же шага. >FFFFFFFF: process has started (pid=4294967294) >Debugger: attached to process <GDB remote process> (pid=4294967294) >Network error: Удаленный хост принудительно разорвал существующее подключение. Судя по отрицательному PID, не видит отладчик. Пытался гуглить, но описания подобного не нашёл.
>>903550 > Ручное дизассемблирование (клавиша "C") не работает. Значит, это не ARM, или тыкаешь не там. > Подозреваю, что это Thumbs В нужном месте Alt+G, T, 1, OK, потом уже C и т. п. Тебе об этом написали, когда только грузил файл.
>>903740 >Значит, это не ARM, или тыкаешь не там Написал же, что Ida частично код дизассемблировала. Это ARM. Когда отдельно секцию скопировал и дизассемблировал её, Ida всё правильно начала распознавать. Почему так - не знаю. >В нужном месте Alt+G, T, 1, OK, потом уже C Не работает.
>>903800 Файл не могу выложить. В принципе, дизассемблировал, пусть и таким кривым способом. У меня другой вопрос - почему не подключается к QEMU? Есть ещё какой-нибудь способ выполнить произвольную часть кода (скорректировав регистры, само собой)?
>>904935 Брал старый (0.13, хотя в документации написано, что нужно 0.10.6 или 0.11) и свежий (2.8.0). Всё равно не получалось с отладкой ничего. Поэтому пошёл по ещё более простому пути - скачал Keil и "проэмулировал" в нём, копируя интересующие меня куски кода. Но, вообще, беда какая-то с эмуляторами под ARM. Ни один не смог заставить работать.
>>905207 Ну хуй знает - у меня стандартный способ, когда ты выбираешь тип отладчика GDB, в настройках отладки выбираешь запуск QEMU и там же конфигурацию, выделяешь код функции и нажимаешь запуск - отлично работает сейчас IDA 6.x/QEMU 2.8, но и раньше проблем не было.
>>907181 А зачем нужен этот граф? Ищешь же определённые функции, а как они друг с другом связаны, не всегда надо. А если это был C++ с виртуальными функциями? call eax там только будет.
>>907221 свое вкатывание в РЕ просто я начал (и не закончил лол) именно с этой софтины. а то что там надо найти хэш-функцию и recv - это уже стало ясно(стало ли?) потом.
>>907221 шарп причем функционал этой проги умещается навскидку в 1-2к строк максимум на питоне. впечатление такое что 90% кода - чисто обфускация. это чё - нормально на рынке софта типа?
>>907225 >именно с этой софтины Так это не IDA? Точнее, один из её модулей, wingraph. >>907259 500 строк в оригинале? Если больше - завязнешь надолго. А может ты профи в своём деле, кто тебя знает. >>907291 От центов до десятков тысяч далларов. Хотя, если программа большая, то быстрее, дешевле и проще написать всё заново. А реверсинг использовать для необходимого - узнать как работает алгоритм, как происходит взаимодействие с сервером и прочее.
>>907748 Вот ты о чём, всё понятно. Сам и не помню, что у меня за первая программа была. Зато помню, что первое, что смог разреверсить до результата - это CS1.6, создал для него генератор ключей, который так и остался на моём компе. На момент создания (наверное, 2008-2009 год был) действующего генератора не нашёл, что несколько странно для такой мегапопулярной игры, ведь у меня на тот момент и опыта было чуть-чуть (хотя, его и сейчас не много). Видимо, реверсеры не играют в CS.
>>907762 Годно а я недели две потратил, набирая хотя бы словарь для понимания, чтто нужно делать в рамках поствленной задачи. после того как на дерево это ебучее взлянул. вот щас отдыхал пару дней, установил идапитон. через час в бой и не знаю, когда уже в следующий раз остановлюсь, анон. затарился колой, сисинтерналсами, вайршарком, оллидебагом, виндоус сдк тулзами. в бой хули
>>907291 Ноль, это хобби. Выше, ковыряющий ведро венды- это я и есть. >>907551 >500 строк в оригинале? 45 млн. Говорят, столько строк в XP. Хотя конечно расковыривать буду не всё, только основное- ядро и главные библиотеки, подрачивая на WRK, ReactOS и прочие вайны. Самая сложная функция тут будет в коде патч-гуарда, там 11к строк кода, написанного самыми запутанными патернами. А без него ядро ОС будет дырявым как решето.
Хочу прикрутить возможность запускать некоторые новые проги и дрова. >>907551 >А может ты профи в своём деле, кто тебя знает. Нуб, заглядывающий в справку за тем, чтобы почитать, что такое звёздочка. Инфибо Не осилишь, бросай
>>908082 >некоторые новые проги Они должны запускаться просто после замены версии в заголовке. Если не запустятся, значит в системе нет необходимых функций (тот же iwicimage появился в винде только с третьего сервиспака хр). В общем, ты не туда копаешь.
>>908167 >Если не запустятся, значит в системе нет необходимых функций Их я и собираюсь добавлять. А чтобы их добавить, нужно компилить исходники, которые я и собираюсь сделать. >>908167 >тот же iwicimage появился в винде только с третьего сервиспака хр Во втором версии х64 тоже должен быть.
Сап, Ананасы. Поставил себе Иду. Как сделать так, чтобы в псевдокоде отображались значения переменных из других функций? Не просто "dword_3D08E04", а именно содержимое этой переменной, например, "хуй". Сначала всё так и работало, но затем я решил поковыряться в настройка и где-то напортачил
>>891716 (OP) Ура, два года все го прошло, тред появился. Научите как написать свою ОС на ассемблере? Почитал там калашникова, вот это все, про прерывания, флаги, регистры про 2^8. Вообщем мне интересно с чем именно взаимодействует ассемблер, во что преобразовывается, как IDE(а fasm, masm и прочие это IDE которые преобразует буковки в машинный код) как они заставляют работать процессор, вот это все. Не, ну понятно что там машиный код хуе-мое но все же. Алсо, реквестирую способы как написать свой ассемблер с нуля. Также всегда было интересно как погромировали самый первый в мире комп? Это щас ты юсб пограматор запустил, 2 провода в микроконтролер засунул и все есть и ты такой крутой мигаешь гирляндой.
>>911684 По написанию ассемблера (и пердолинг сигналов) - nand2tetris на курсере. Более глубоко (и сложно) - Computation Structures от мита на едх. По осям - научись в асм и читай "процессор интел в защищённом режиме" с васм.ру и, наверное, Таненбаума.
https://habrahabr.ru/post/230359/ Поясните за эту вещь, аноны. Сори, я не такой уж знаток но как я понел тут специально для тупых запилили тот же ассемблер, но работающий на высокоуровневых языках. В чем тогда профит учить асм в 2017?
Очередной раз сталкиваюсь с программой, защищённой протектором и не знаю, что делать дальше. Прошлый раз это была Enigma 3.70. С ней было проще - нашёл скрипт для OllyDbg, хотя мне и не удалось снять защиту, но нужные данные вытащил. Здесь же тот же самый скрипт пишет, что версия 5.50 и, естественно, завершается досрочно. Как тут действовать? Через GetWindowTextW нужного окна перехватил момент получения текста. Но дальше он как минимум в пять разных мест копируется, какие-то действия выполняются и всё - ключ не правильный, программа завершается. В OllyDbg только один брекпойнт на память можно ставить. Подскажите, в какую сторону копать.
Посоветуйте мануал по ассемблеру интел. Интересуют опкоды инструкций и раскуривание адресации в вызовах (прямая адресация, косвенная, дальняя и т.д. + опкоды вызовов и отличия E8, E9 от FF15).
Алсо, какой опкод отвечает за вызов функции из кернеля, но не FF15? FF15 использует косвенную адресацию.
Студент в треде. Возникла проблема с турбо ассемблер для процессора intel 8086. Суть проблемы в умножении слова на двойное слово. Все консультации проебаны, как и отношения с преподом. Вся надежда на тебя, анон. Пока моих скудных знаний хватает только но то, чтобы в AX занести младшие 2 байта двойного слова и умножить на слово. Что делать со старшими разрядами представляю смутно. Результаты отдельных действий заношу в ячейки размером в двойное слово. конечный результат имеет длину четверного слова. (d2+w3)-b1(w1b2-b1)/b3/w3 - Вот формула по которой вычисляю. b,w,d - переменный длинной в байт, слово и двойное слово.
Как определить индекс системного вызова по нужному мне апи? Пишу вспомогательный шеллкод для вызова апи по хэшу. Почти все готово, но вызов апи костыльный. Хочу сделать хорошо.
Но не знаю, как правильно вызвать функцию, адрес которой получен. Можно сделать костыль: сохранить адрес в начале шеллкода в четырех байтах и использовать косвенную адресацию, но это выглядит мерзко.
>>913154 >Как при помощи него вызывать функи из kernel32 Никак. sysenter нужен для перехода из ring3 в ring0. В регистр eax заносится число, по которому ядро определяет, какую функцию вызывают. Крайне системозависимо. >>913157 А в чём проблема расширить слово до двойного слова и перемножить? Или у тебя там 16 битный процессор? >>913159 >вызов Nt/ZwExitProcess что-то не получается А посмотреть, как реализовано в ОС нельзя?
>Но не знаю, как правильно вызвать функцию, адрес которой получен Запушить аргументы, и потом: mov eax, funcAddr call eax
Но если ты хочешь вызывать функции ядра через SYSENTER как тут >>913162 то тебе первым делом надо SDT индекс этой функции получить. А потом вызвать её можно вот так на х86 системе - http://pastebin.com/9CrNQZKj Соответственно callgatex86 вызывать вот так:
Так и думал, что придется увеличивать число команд. А как лучше потом вызвать этот шеллкод? Если через CallWindowProc, то придется в начале шеллкода извлекать четыре переданных аргумента из стека. Создавать поток как-то слишком громоздко и я не уверен, что получится одной строчкой получить то, что вернула функция.
Помогите, пожалуйста. Я хочу просмотреть пошагово выполнение процедуры в игре с помощью отладчика, но как только я переключаюсь на его окно, процесс игры приостанавливается. Само собой, выполнить программу нормально не получается, так как программа сразу же переключается на библиотеку ntdll. Как сделать так, чтобы окно программы было активно и при этом её можно было просматривать с помощью отладчика? Я использую OllyDbg.
>>913641 1. Запускай игру в оконном режиме. 2. Ставишь точку остановки на нужную процедуру. 3. Когда срабатывает точка остановки, переходишь в отладчик и пошагово проходишь интересующий тебя код.
Как восстановить (создать) таблицу импорта у dll? Есть адреса, где вызываются, есть название функций. Попробовал через CFF Explorer, но это вручную надо вбивать сотни строк. Через ImpRec не получилось, пишет, что невозможно прочитать данные, когда указываю адрес загруженной dll.
>>915482 Адрес IAT правильно указал в ImpRec? Если знаешь IAT - сможешь хоть вручную скриптом на каком-нибудь питоне сгенерить таблицу импортов, там простой формат. Но в целом, ImpRec должен работать. Покажи скриншот ольки и imprec с прописанными адресами.
>>915677 Как этой программой пользоваться, не пойму. Нашёл, что нужно выбрать dll отдельно. Искал в гугле, но картинок нет, есть только текст. dll загружено по адресу 10000000. IAT в отдельной секции (если правильно понял) 1003E000. Т.е. там содержатся ссылки на функции. Эту секцию (адрес) надо указывать? Строк с названиями функций у меня нет, всё сожрал злобный протектор.
>>915724 Должно все работать. Адрес ты указал правильный, он относительно базового адреса модуля должен быть. Названия импортов нинужны, оно само находит, но нужен правильный размер (не могу проверить). В любом случае оно должно по Get Imports хотя бы первые импорты правильно находить. Разверни невалидный узел, посмотри, что внутри пишет, какие адреса там и какие в ольге. Посмотри лог повнимательнее, обрати внимание на image size.
>>915755 ImpRec не понравилось, что у меня программа была приостановлена через отладчик и из-за этого не получалось? Потому что сейчас указал те же данные и всё получилось. Только F9 нажал перед этим. Отлично, секцию импорта восстановил. Уже вручную пытался, действительно, всё просто, но очень долго. А вспомогательный скрипт писать нисколько не хотелось. А вот что делать с релоками? Есть один на всю dll. И тот, подозреваю, нужен был для энигмы. Когда энигма релоки переназначает, не понятно. После распаковки, но до копирования распакованного кода обратно в секцию или после распаковки и копирования? Компилятор VS располагает их в отдельной секции .reloc, которая последняя в файле и идёт после .rsrc. Но в моём файле после .rsrc идёт код энигмы. Ещё и потерял, где настоящая точка входа. Находил ведь, а записать забыл. А как нашёл - не помню.
>>915910 > релоки Если ничего не поможет, есть старый трюк: ищешь OEP, ставишь бряк, дампишь. Меняешь у исходного файла базу (или занимаешь чем-то этот адрес до загрузки длл), пересчитываешь OEP на новую базу, ставишь бряк, еще раз дампишь. Ищешь различия, генеришь релоки.
>>915910 >потерял, где настоящая точка входа Нашёл по константе 0BB40E64E. Хорошо, что VS оставляет один и те же константы. >>915924 Благодарю за совет.
>>915927 Нашёл что-то похожее на таблицу перемещаемых элементов. Энигма не старается скрыть её. Точка остановки на память в месте, где должен быть релок - и тут же находится функция работы с ним. Только не получается простым копированием. >LoadLibrary() reports error 000000C1 (ERROR_BAD_EXE_FORMAT) Как всё муторно.
>>916241 Возьми gflags.exe из Platform SDK/Debugging Tools For Windows и включи Show loader snaps для того exe, который грузит твою длл. Алсо скриншот нечитаемый.
>>916319 А, ок, на скриншоте вполне валидные релоки. Посмотри еще, может в флагах образа IMAGE_FILE_RELOCS_STRIPPED стоит. Ну и размер директории релоков проверь.
>>916319 Копировал-правил, в виртуалку (там запущен не распакованный оригинал), обратно, туда-сюда, ну что ещё надо тебе, загружаю правленый файл, F9 и заработало. Вот что ему не хватало? Столько времени просидел зря. А антивирусы крайне не любят Энигму, точнее дамп программы с ней. Знаю, что зловреды прячут в протекторе и они не детектятся, а у меня наоборот, выкусил из протектора и детект был 8 или 9, пока секции кода и данных протектора не удалил. Сейчас один чего-то ругается. Может быть, ему не нравится, что получилось? Файл-то дырявый получился, между секциями ничейное пространство. Ещё у меня есть подозрение, что можно распаковать файл из Энигмы без правильного ключа и вообще без ключа, но это можно потом поэкспериментировать. Хреновый из меня реверсер, столько дней угрохал на это.
Аноны, не нашел "основной" тред, о котором говорится в шапке, поэтому пишу сюда. Нужно реализовать алгоритм Берлеке-Месси на Ассемблере nasm. Не бесплатно, имеется 3к. Дедлайн - 24.
Как вкатиться в низкоуровневое программирование и ревёрс? Пока есть поверхностное представление о архитектуре компьютеров и такое же знание ассемблера 8086 (уровня написать итеративный алгоритм Эвклида). Читать Талмуд Таненбаума не хочется, хочется, чтобы было повелее, и главное, побольше практики, задачек, каких-нибудь laba1.asm писать.
>>916728 Просто берёшь и вкатываешься. Для начала научись пользоваться Идой, если ещё не умеешь. А потом сам себе ставишь задачи. И учишь то, что для этого необходимо.
>>917021 Там же всё элементарно, ты чего на ровном месте застрял? Первый параметр - количество передаваемых структур INPUT, второй - сам массив инпутов, третий - размер структуры INPUT. Щёлкаешь на INPUT и смотришь, что там должно быть. Первый параметр - тип инпута и так далее. Всё расписано же.
>>917034 Допустим, мне нужно симулировать простое нажатие лкм -> invoke SendInput, 1,;(кол-во передаваемых структур);massiv,0;(т.к мне нужно использовать INPUT_MOUSE); Так вот, я не совсем вникаю в то, как должен выглядеь массив, и он должен располагаться в .data сегменте или .code Массив должен быть типа: massiv struct LButton = 0x01 ends -?
>>917090 Ну написано же в документации, ну. Зачем ты в асм полез, если не можешь документацию читать? Ну возьми тогда mouse_event, keybd_event они проще, система за тебя сама SendInput соберет. > он должен располагаться в .data сегменте или .code Да хоть в .rsrc, всем похуй.
> как должен выглядеь массив Как массив. Структуры городить не обязательно.
Как в asm выглядит синтаксис Point структуры, что бы получить x и y через GetCursorPos - ? Забил покуда из за недостатка знаний на SendInputs(т.к так и не разобрался, как это работает), использую "устаревшие" как мне говорят mouse_event, вот.
>>917479 Ну вот, сам решил, мог бы и не спрашивать в треде.
> Переменные должны были быть long , но как их вписать в асм'е покуда хз. Очевидно, что никак (хотя в масме вроде были алиасы). Все эти int/uint/long/ulong/size_t и указатели в 32-битном коде - это дворды, т.е., dd.
>>917485 >Очевидно, что никак (хотя в масме вроде были алиасы). Все эти int/uint/long/ulong/size_t и указатели в 32-битном коде - это дворды, т.е., dd. За это благодарен. >Ну вот, сам решил, мог бы и не спрашивать в треде. Я ожидал что мне поможет кто-то более опытный, и мне не нужно будет копаться на всяких форумах/бордах/электронных книгах и тратить время.
Вообще , было бы приятно, если бы кто-нибудь поделился источником где можно прочитать о создании POINT стрктур в ASM, т.к не совсем понятно как создается и выглядит MyPoint структура по примеру " MyPoint POINT <> " Как на пике , или - ?
Где может храниться информация о регистрации? Приложение написано на VB5 в далёком 2003 году, компиляция в Native. ProcessMonitor ничего дельного не показывает, брекпойнт на CreateFileW ничего не дал.
C:\Windows\Registration\R000000000006.clb - погуглил, "файлы зарегистрированной базы данных COM+ элементов", не то. HKCR\CLSID\{00000010-0000-0010-8000-00AA006D2EA4} - фигня HKCU\Software\Classes\Licenses\F4FC596D-DFFE-11CF-9551-00AA00A3DC45 - опять не то, свободно гуглится GUID И прочее в таком же виде.
Как ещё может проверяться регистрация и где может храниться? Брекпойнт на память на строке "Trial" всплывает очень глубоко внутри kernel32 на подсчёте её длины, а до этого в MSVBVM60.DLL. Это создание окна. Неужели есть отдельная полнофункциональная версия?
>>919957 VB Decompiler Pro? Его и использую. Ида так же дизассемблирует. Но проблема в том, что не могу найти ни место генерации ключа, ни место хранения данных о регистрации. В программе (отдельном модуле, их много, но ничего другого не загружается) всего несколько десятков функций. Но нет ничего. Не пойму, как программа определяет, что она не зарегистрирована. Как в VB может такое быть? Может быть, получается помимо отладчика через p-code что-то выполнить? Нет идей.
>>920030 А нет, что-то нашёл. Очень уж непонятен этот Native VB. После замены условия программа завершилась сообщением об ошибке "No current record." Значит, в базе данных где-то должен ключ храниться. А база данных "Standard Jet DB". >>920100 Да ни в чём не уверен, разве кроме скачивания чего-то из интернета, потому что в то время это было не распространено. У меня даже не получается посмотреть, что будет после завершения триала, т.к. счётчик не уменьшается.
>>920403 Ассемблер: абсолютно похуй, как его учить - можно хоть с Human Resource Machine начать, продолжить TIS-100, а потом уже что-то серьезное читать. Реверсинг: beginners.re, а потом уже сам поймешь, надо ли оно тебе, и что учить дальше.
1. Скопировал из гайда такой код , в fasm его скомпилировал. 2. Сделал образ диска .iso и в VirtualBox поставил его в виртуальную машину, чтобы с него считывалась эта ОС, выводящая hello world. 3. Выводит ошибку. Что я делал не так?
Поцаны, а на каком году изучения асма появляется способность понимать чо происходит в реверснутых программах? Когда сам асм пишешь понимаешь, что происходит. А понять ту мешанину, после декомпиляции очень сложно.
>>921878 > А понять ту мешанину, после декомпиляции очень сложно. Чтобы понять выхлоп HexRays, нужно не лениться восстанавливать и прописывать типы функций и прототипы, не лениться убирать дубликаты переменных нажатием =. Чтобы научиться понимать дизасм, можно в комментариях к дизасму писать псевдокод, подражая HexRays: mov edx,eax ; edx = eax shl edx,2 ; edx = eax × 4 add edx,eax ; edx = eax × 4 + eax = eax × 5 shl edx,1 ; Епт, да это же умножение на 10! А потом, с опытом, придет способность делать то же в уме (а также пользоваться правильными инструментами или писать их самому, чтобы не делать этого в уме).
>>922422 Вот эт интересно, а не то что анон выше посоветовал, чтоб приседать на бутылку было не больно, нужно приседать на бутылку. Ахуительные советы блять. Но ведь есть жи особенности как чо делать. Сам то наверное как родился первую прогу реверснул и все понял епт.
>>922871 >чтоб приседать на бутылку было не больно, нужно приседать на бутылку. Тут ты обосрался. Судя по местным заседалам из /po/ эта тактика работает.
З.ы пока не искатаешь дисциплину ЭВМ хотя бы поверхностно, хуй ты станешь адекватным реверсером. Да и к тому же что бы понять ну "мешанину" после декомпиляции нужно хотя бы немного изучить структуру компилятора которым и была "написана" программа. Ну и как совет больше практикуйся приседай на бутылку , не в реверсе а в написании программ на ASM.
>>922871 >Сам то наверное как родился первую прогу реверснул и все понял епт. Расскажу свою историю. Реверс давно меня заинтересовал, поэтому плохо помню, как учился. Сначала кодил на С(++). Даже не понимал, зачем нужен этот Debug, мне и Release подходит. Как-то потихоньку заинтересовался асмом, когда нажимаешь "Go to disassembly" в Visual Studio интересно было смотреть, во что превращается исходный код. Даже каким-то образом скачал Иду, наверное 5.2, а может и из 4 версии. Но ничего не было в этой программе понятно. Благодаря книге "Образ мышления - дизассемблер Ida" разобрался в этой программе. Но до этого мне понадобилось около 2 месяцев на изучение ассемблера, потому что было абсолютно непонятно, то там происходит. Не помню, почему так долго, может быть, из-за учёбы, а может быть некуда было спешить. Постепенно увлекался, это было как хобби. А вот сейчас, когда пытаюсь зарабатывать с помощью реверса, стало понятно, что все эти годы занимался фигнёй. Не было у меня практики. Разреверсить функцию или сетевой протокол в незащищённой программе могу. С некоторым трудом могу восстановить формат файла. Может ещё чего по мелочи. Но если программа как-то зашифрована или накрыта протектором, то уже не знаю, что делать. Приходится отказываться от приличного количества работы только из-за того, что не знаю, как её выполнять. Так что прав тот анон. Только практика может сделать из тебя реверсера. Когда постоянно сталкиваешься с чем-то незнакомым. А не так, как получилось у меня. Теперь приходится навёрстывать. А ещё на асме не пишу.
>>923381 Иногда смотрю, как в kernel32.dll или user32.dll выполняется функция или почему возвращает неверный результат. Но не так глобально, как у тебя. Тебе в ReactOS надо вливаться. Или слишком разные у вас пути?
>>923391 Конечно разные. Они со своей политикой не подсматривания в сырцы и не дизасма саих файлов далеко не уедут. Собственно по их прогрессу и так видно. Да и видел я сырцы Вынь2000 и WRK, поздно мне туда.
>>923398 > политикой не подсматривания в сырцы У них скорее политика "не пойман - не вор". Внутренние структуры и функции совпадают - они же не из астрала эти данные взяли? Или у них clean room с двумя командами?
>>923400 >Или у них clean room с двумя командами? Таки да, иначе бы их давно пидорнул МС. Только чистая комната спасёт их от озалупливания Майкрософтом, и они это прекрасно понимают. Поэтому у них до сих пор глючный клон 16 летней ОС. Впрочем, совпадение там весьма условное. Я как-то сравнивал пару рандомных функций с кодом WRK- совсем иной подход.
>>923405 Ну в общем процесс идёт, появилось пару вопросов. Надекомпилял как смог функцию IovUnloadDrivers, из Win2k3 SP2 x64, вот результаты: http://pastebin.com/uH1gD8jE В общем вопросы таковы: Что за взаимная мастурбация с переменными v16 и v17? Что я тут проебал? Какой тип выставить переменной Object? Функция KeWaitForSingleObject жрёт PVOID, но тут явно что-то большее должно быть. Может это связано с дрочкой v16 и v17. И вообще, скажите, что я сделал не так. В реверсе полный дуб.
>>923385 > Только практика может сделать из тебя реверсера >Приходится отказываться от приличного количества работы Дохуя напрактиковал отказы от работы?
>>923583 >DISPATCHER_HEADER Ага, подошло. Правда в ядре чаще юзают KEVENT и ему подобное, но ничего кроме лишнего уровня она не добавляет. Так же заметил функцию в заголовочном файле, которая сворачивает всю инициализацию объекта ожидания до вызова одной строчки. Жить стало лучше, жить стало веселее. Вот вопрос- а как такое отгадывать? Остальное я достал из вызываемых функций, которые хотя бы как-то описаны, а вот этот объект юзается только в функции, принимающей PVOID, то есть никакой информации толком нет. Правда конкретно эту я бы мог отгадать сам по примерам другого кода, использующего функцию KeWaitForSingleObject, но как быть с кодом, где никаких подсказок нет? Как реконструировать структуры по коду?
Так же я заметил, что проебался с маппингом переменных, так как строки driverObject = 0i64; have_next_device = 0; while ( driverObject ) { Явно ошибочны. Размаппил одну из них, переименовал по вкусу, вроде теперь всё нормально. Зацените: http://pastebin.com/exhumh83
>>923955 > как быть с кодом, где никаких подсказок нет Из названия очевидно, что KeWaitForSingleObject хочет объект, а PVOID должен на что-то указывать. Гуглим или реверсим KeWaitForSingleObject, чтобы узнать, что у объекта должен быть заголовок, и какой тип в этом заголовке типу какого объекта соответствует. > ничего кроме лишнего уровня она не добавляет Будешь лениться - запутаешься. > Как реконструировать структуры по коду? Найти код, который структуру создает (если повезет) и код, который ее использует. Поля структуры можно восстанавливать полуавтоматически (правой кнопкой, Reconstruct type возможно, это HexRaysCodeXplorer добавляет, не помню), есть еще Create struct from data. Назначение полей выясняется долгим и мучительным анализом работающего с ними кода (или, в случае винды, гугл и символы весьма помогают).
>>924101 >или, в случае винды, гугл и символы весьма помогают Да вот у меня сейчас такие функции, про которые гугл выдаёт 3,5 ссылки, из них одна сюда и одна на выложенный мною код. Вообще странно, что никто не выкладывал свои раскопки в этом направлении. Не верю, что я первый тут копаюсь. АЛСО, зачем сагаешь? Тред хороший же.
Пробовал ли здесь кто вручную запускать длл напрямую из памяти, накрытую темидой? У меня почему-то крашится на пикрелейтеде. Если загружать длл через LoadLibrary то всё отлично пашет. Для запуска длл юзаю https://github.com/tishion/mmLoader
>>924883 Там проблема какая-то со структурными исключениями. https://habrahabr.ru/company/xakep/blog/260577/ >для реализации поддержки исключений в динамически размещаемом коде на x86 платформе можно выделить минимум три способа: >Установка/подмена флага ImageDispatchEnable для процесса. >Подмена типа региона памяти на MEM_IMAGE (для PE-образа без SafeSEH). >Реализация собственного диспетчера исключений в обход всех проверок. Может быть, это оно?
>>925472 >Немного не по теме На самом деле по теме. Это я проебался с названием. >>925552 Не ходите по этой ссылке, там вирус! У меня от этой фигни брат на функциональных языках писать стал. И говорить.
Путём читания небольшого гайдика "Как написать свою ОС часть 1" и экспериментов я сделал программу, которая работает без опероционной системы и выводит на экран некоторое число, сохранённое в регистре ax. А затем выводит "press any key..." и ждёт когда кто то нажмёт эникей. Но ведь больше 510 байт программного кода написать нельзя. Чтобы дальше пойти, надо на месте этих 510 байт остаьные 2 — сигнатура написать загрузчик операционной системы. Но как это сделать? Что он из себя вообще представляет?
С тех пор как я начал изучать ассемблер я начал переставать понимать си. Мне кажется что си это вообще какой то бредовый эзотерический язык. И как я раньше на нём мог программировать?
>>925581-кун Распишу свою проблему подробнее. Я хочу для себя писать программки, работающие без специальной ОС чтобы создать армию дронов-автоматчиков. И при этом мои программы будут, естественно больше 510 байт. Так как же загрузить в оперативную память код из участков памяти после первого (загрузочного) сектора?
>>925748-кун Уже, похоже, решил проблему. Но я ещё не проверял, спать хочу. Вот здесь http://metanit.com/assembler/articles/MiniOS.php я нашёл код и загрузчика и ядра и даже программы для изменения текста. Надеюсь меня не зобанют за рекламу сайта, на который только что наткнулся
>>925882 Посмотри ещё http://osdev.ru/viewtopic.php?f=4&t=808 Это загрузчик ядра OS/2 (кто-то помнит такую?) - со своей собственной функциональностью запуска модулей и проч... в итоге получился такой небольшой DOS. Может жить и отдельно от OS/2 - на FAT/FAT32 разделе.
Опять протектор, VMProtect версии 2.07. Как пишут на васме, сложнее протектора нет. Определяет отладчик (OllyDbg с плагином StrongOD в Windows XP успешно скрывается), определяет виртуальную машину (а тут уже не знаю, что делать, разве что устанавливать второй ОС WinXP). Даже дамп не снять. У кого-нибудь есть эта версия протектора? Сам нашёл только 2.1.0.
>>927141 >Как пишут на васме Он же лежит уже несколько месяцев?
АЛСО, отличный сайт для изучающих глубины Windows: http://geoffchappell.com/ Описание структур со смещениями для всех версий венды от NT 3.5 до десяточки, функции и ещё много всего. Я охуел от полезности этого сайта и решил его себе скачать целиком.
>>927363 >А что по-твоему делает loop? LOOP rCX Decrement count; Jump short if count!=0 Ну да, не знал об этом. Ни разу не попадалась такая команда. В таком случае, у него cx = 0 в самом начале и не видно, чтобы ещё какая-то инициализация была, кроме той странной функции, что не приведена.
В какой участок памяти записывать байты со значением RGB (24 битный), чтобы таким образом выводить информацию на экран? И какие функции биоса надо использовать?
>>927338 asmworld.ru, я там научился хелло ворлд делать в досе и простейший калькулятор. Потом походил по другим сайтам и теперь могу выводить и вводить буковки без специальной операционной системы (без линукса, виндовса).
>>927650 Если ты про Windows, то забудь сразу. Если DOS, то научись сначала чем-нибудь попроще пользоваться, типа https://en.wikipedia.org/wiki/Mode_13h а потом уже научишься VESA ебать.
Мне кажется, что мной выбран неправильный способ решения моей проблемы. Мне нужно обойти защиту, которую так и не смог снять (VMProtect). Защита контролирует контрольную сумму всех исполняемых файлов (легко обходится), наличие отладчика (тут уже никак не получилось) и, самое для меня трудное, проверяет, кто вызывает функцию из защищённой dll. Если вызывает нужный exe-файл (не знаю, как определяет, только по имени или как-то ещё), то всё в порядке. А если в стеке присутствует что-то другое (даже не на вершине стека, а предыдущая функция), то функция не срабатывает, как надо. Идея у меня такая - увеличить виртуальный размер последней секции (не хочу, чтобы размер исполняемого файла менялся) и спроецировать на свободное место свою dll, которая будет вызывать нужные функции и которая заменит несколько функций в импорте исполняемого файла. Чтобы избежать инъекции кода (как бы защита контролирует и этот способ, но не проверял, доверился описанию), добавил свою dll в импорт exe, которая при загрузке должна будет делать всю работу. Как решаются подобные задачи?
>>929894D > В чём различия масма, фасма, тасма? В директивах компилятору. В способе записи адресов (все эти квадратные скобки, offset, addr, ptr и т. п.). В макроязыке. В основном, код от одного ассемблера можно преобразовать в другой очень быстро, вручную или какими-нибудь регэкспами. А еще есть AT&T-синтаксис, у них все через жопу.
>>929857 >Идея у меня такая - увеличить виртуальный размер последней секции (не хочу, чтобы размер исполняемого файла менялся) и спроецировать на свободное место свою dll, которая будет вызывать нужные функции и которая заменит несколько функций в импорте исполняемого файла. Разве вмпротект позволит это сделать? Он же должен чекать контрольную сумму того исполняемого файла которым он накрыт. Или там только длл накрыта, а экзешник не накрыт?
>>930247 >Он же должен чекать контрольную сумму того исполняемого файла которым он накрыт. >>929857 >Защита контролирует контрольную сумму всех исполняемых файлов (легко обходится),
>>929857 Всё сделал, как планировал. Увеличил виртуальный размер секции, модифицировал MemoryModule, чтобы можно было загружать исполняемый файл без выделения памяти, создал две dll, чтобы не было инъекции, одна загружается через импорт и проецирует вторую в нужную секцию. Вторая подменяет адреса нужных мне функций и реализует необходимый функционал. Всё успешно загружается, лог пишется. Но ничего не работает. Неужели протектор контролирует адрес вызываемой функции? Или контролирует границы секции, было так, а стало больше и вызывает кто-то за пределами? Ну что ему ещё не хватает? >>930247 >Или там только длл накрыта Накрыта dll, но защита контролирует целостность всех остальных модулей. Даже удаляет лишние dll, хорошо, что только по расширению проверяет, достаточно переименовать и такой файл не трогает. Размер не проверяется, только CRC32, что очень легко обходится.
Здравия желаю господа. Так уж получилось, что у меня есть фетиш - писать ботов. До этого ограничивался Cheat Engine-ом для поиска базовых адресов, оффсетов и т.д., но развиваться все же хочется. Знаний минимум, ботов писал на простеньком Autoit, поначалу были обычные кликеры, потом бот работающий с пикселями, а теперь уже бот работающий с памятью. Так уж получилось, что хочу поднять уровень своих знаний и доставать самую годноту с помощью Ollydbg(если я правильно понял, он имеет прямое отношение к ассемблеру). Т.е., с Cheat Engine не напишешь бота с функцией Vac хака(функция вакуума, которая притягивает всех мобов к персонажу) и т.д., тут уже нужен Ollydbg для получения этих данных. Будьте любезны, накидайте гайдиков и т.д., где затрагивают подобную тему. Заранее премного благодарен.
>>930397 OllyDbg - это отладчик. С помощью него можно найти адреса необходимых тебе функций. Но вот писать своего бота ты будешь на каком-то языке программирования. Можешь выбрать любой язык, какой понравится.
>>930402 Спасибо за ответ анон, я это уже знаю. Видимо я неправильно объяснил... Я буду и дальше писать на Autoit, благо все нужное мне в нем есть, вплоть до инъекций, единственный его большой минус - отсутствие многопоточности. Ну так вот, я просто хочу научиться доставать из Ollydbg данные, которые с помощью Cheat Engine не найти. Пример: Я вижу HP и MP своего персонажа и легко нахожу их базовые адреса и оффсеты с помощью Cheat Engine, делаю поиски этих данный с 4byte. Но и есть и такие вещи, которые я не вижу. Например, скорость атаки, скорость бега, расположения мобов на карте и т.д. Вот для поиска именно таких значений мне и нужен Ollydbg.
рейт май код, двач. http://pastebin.com/GHbjYV0h Он должен предлагать ввести число, потом ввести второе число, потом ввсети + или - или * или / и вывести что получилось. Но не всегда можно увидеть что вводишь и делить нельзя. на голой без ОС
>>930389 Следующий день подходит к концу, а борьба продолжается. Защита действительно проверяет адрес вызывающей функции и, если он не равен тому, что в исполняемом файле, функция не работает. Такое нагородил уже в exe, приходится убирать весь код вокруг вызова, размещать его в другом месте, а здесь уже делать возможность вызова нужной мне функции. Хорошо, хоть у "cmp eax, 0FFFFFFFFh", которая идёт сразу же после функции, и "ret xxx" размер опкодов одинаков, а то ещё большие костыли пришлось бы городить. И всё это вручную. Плохо быть мной.
>>931238 Какая-то идиотская, ни от чего не защищающая проверка. Ищется в .exe байт 0xc3, все функции из .exe вызываются через трамплин, заменяющий оригинальный адрес возврата на адрес байта 0xc3, а за ним уже push-ащий оригинальный адрес возврата, все это можно автоматически генерить.
>>931323 >Какая-то идиотская, ни от чего не защищающая проверка И это хорошо. Разработчику достаточно было немного усложнить свою защиту и было бы уже очень не просто. А тут даже исполняемый файл можно изменить без сложностей. Хорошо, что разработчик не понимает в реверсе. Зато защиту свою продаёт за даллары. >Ищется в .exe байт 0xc3 Не пойму, что ты имеешь в виду. Можешь в псевдокоде показать? Вызываемая функция находится в защищённой dll, адрес возврата в этой функции проверяется и, если он не совпадает с тем, что в exe файле, функция просто не работает.
>>931390 > разработчик не понимает в реверсе Лолшто? Вмпротект сделал чувак с exelab (бывший cracklab) и как раз в реверсе он разбирается охуенно.
> Не пойму, что ты имеешь в виду. Можешь в псевдокоде показать? Ну берешь и генерируешь себе для каждой вызываемой функции что-нибудь такое: yoba: pop edx ; Старый адрес возврата mov eax,dword ptr[dll_base] ; Хэндл/базовый адрес DLL add eax,RETN_RVA ; RVA любого байтика C3 из DLL push eax push edx mov eax,dword ptr[dll_base] ; Хэндл/базовый адрес DLL add eax,FUNC_YOBA_RVA ; RVA нужной функции в DLL call eax Функция вызывается, потом возвращает управление в DLL, но там C3 (retn), оно берет со стека следующий адрес и возвращается уже в твой код.
>>931408 >Вмпротект сделал чувак с exelab (бывший cracklab) и как раз в реверсе он разбирается охуенно Нет, ты не понял. С VMProtect всё в порядке. Сам протектор использован для усложнения реверса dll. Но вот разработчик этой самой dll как раз в реверсе не очень-то и понимает. Вот он и продаёт свое поделие за даллары. Надеюсь, он не предусмотрел таймаут между вызовами функций. >add eax,RETN_RVA ; RVA любого байтика C3 из DLL В данном случае так не получится. Адрес возврата должен точно соответствовать определённому числу, тому, где находится вызов функции в exe. А после вызова идут проверки. Соответственно, чтобы вызов этой функции в самом exe работал, пришлось городить переходы в свободные области файла, а здесь делать нормальный вызов с возвратом прямо посередине существующей функции (а чтобы не мучаться с поиском этих функций, добавил их в экспорт).
>>891716 (OP) Поцоны, выручите ньюфага по ассемблеру, вернее ассемблеру в FASM. Хочу себе вывести на экран линию между двумя точками, как в пеинте. Пока что я только начал. Комментарии ставить не буду чтобы поучились реверс инженирингу. Так не работает почему-то http://pastebin.com/mFP1UZR6
Анон, дай готовый алгоритм для подделки CRC32 путём внедрения байт в произвольное место. В статье КК мне не понятны два последних (и основных) пункта, а приведённые листинги не полные.
>>933017 Сходи по ссылкам в статье криса (если сдохли, есть веб.архив.орг). Там, в частности, упоминается CRC and how to reverse it, ее и читай. И там вроде код был.
>>924262 В общем продолжаем банкет. Надекомпилял тут файлик: http://pastebin.com/dKrhniNV Проблема в том, что при компиляции обратно секция PAGEVRFC объявляется как Read/Write, а в оригинале она просто Read. В итоге при линковке получается две секции с разными правами. Всякие там #pragma comment(linker,"/SECTION:PAGEVRFC,R"). не катят, как и R!W. В общем где я ошибся и как заставить компилировать в секцию с правильными правами? Ну и ещё у меня только 240 строк, тогда как в оригинале больше 300, ну да пофиг.
Просто интересно, ради так сказать удовлетворения моей убогой любознательности. А вашим эти РЕ можно на доширак заработать? Или это только форма искусства?
Как я понимаю чтобы сделать таймер на ассемблере надо засечь число тактов и знать тактовую частоту процессоа. Как я понял число тактов можно засечь с помощью команды rdtsk, а как узнать тактовую частоту процессора?
>>935572 >Reverse Engineering очевидно же Написал бы РИ или RE. С помощью реверст инжениринга можно пересобрать какую нибудь простую игру и выдать за свою. И продавать. Но я так только думаю. И вообще нужны хорошие навыки как ассемблирования так и дезассемблирования.
>>935318 В общем пришлось вколачивать костыль в билд систему, чтобы перед линковкой снимать этот атрибут с помощью link.exe. Вопрос, как обойтись тут без костылей, остаётся в силе.
>>937670 > #pragma data_seg("PAGEVRFC") > #pragma const_seg("PAGEVRFC") > в оригинале она просто Read Зачем тогда ты создаешь в read-only секции перезаписываемые переменные? Тебе не кажется, что в этом есть какое-то противоречие?
>>937721 Хмм... Логично. Впилил это, когда массивы не были объявлены константными. Как всегда, компилятор оказался умнее меня. Блядь, 4 дня никто не мог посмотреть этот код и выявить эту мою тупейшую ошибку. Спасибо, анон, добра тебе. С твоей помощью полные сырцы ядра Windows XP стали немного ближе.
Блин, куда бы вылить свои наработки? Всякие гитхабы и прочие битбэкеты выпилят результаты реверса винды на раз, кмк. А то вдруг кто присоединится.
Я наконец почти доделал свой код. Эта программа запускает компьютер, вводит его в режим биоса 0x13 (графический режим) и рисует линию, координаты точнее номер пикселя концов, которой, записаны где то там в начале программы. Правда осталась парочка мааааленьких легкопоправимых багов линия может прорисоваться немного вниз от нижнего конца и непонятный баг виден если концы поставить в углах экрана И ещё программа не оптимизирована. Если захотите оптимизировать, улучшить и всё такое то можете кидать ответом на мой пост код. Чтобы запустить её надо сделать загрузочный диск наверное и флешку можно с файлом .BIN, который сделается в FASMе. Я делал образ загрузочного диска и вставлял в виртуальный дисковод виртуальной машины, сделанной с помощью виртуал бокса. Вот ссылка на мой говнокод: http://pastebin.com/TMKksb6P 822 байта.
>>937759 >На гитхабе, и на битбакете овердохуя результатов реверса, всем похуй. А вот сорцы Вин2000 или там движка престо выпилили. А мой код уже содержит части утёкшего кода Вин2000. >fossil Мне ртуть привычнее, ну да ладно.
>>937823 >Слово nodes заменил на casul, на casuls не получается заменить. Очевидно, что для замены на строку большего размера нужно чуть большее, чем замена пары байт. >Остальной текст хитрее закодирован, пока не удалось понять как. Очевидно, что производитель этой фигни не хочет, чтобы удаляли пометку его авторства, и защитил её от нубов.
>>937839 Всё, осилил. Возле nodes] был пробел, так что удалось вместить, а другие скрытые за кракозябрами слова, нашел по номеру версии и нику, они почему-то не было зашифрованы, заменил их пробелами. >производитель этой фигни не хочет, чтобы удаляли пометку его авторства, и защитил её от нубов Не понимаю, зачем так делать, вставлять себя любимого на видное место. По-моему лучше делать вывод информативным, но без излишеств.
>>937883 >Не понимаю, зачем так делать, вставлять себя любимого на видное место. Напиши такую фигню сам, узнаешь. Впрочем да, выводить прямо в окне лишнее, думаю, лучше бы при загрузке баннер там, да в реадми строчка.
Nielsen database. Не понятно, как соединить всё воедино и каким образом кодируются числовые значения. Ни вьювера, ни средств по созданию и редактированию базы нет. Только сами файлы в количестве 5 штук. Буду рад любой информации.
>>891716 (OP) Какие функции биоса надо использовать чтобы записывать данные на жёсткий диск? А на периферию флешка, диск через дисковод. Правда я думаю что для периферии есть функции просто для пересылания сигнала.
>>891716 (OP) Хочу получить базовый адрес kernel32 на си так, чтобы было независимо от версии ОС. Для этого делаю поиск по хэшу модуля. Когда нахожу нужную запись в списке загруженных модулей (то, что это она, видно в олли), возвращаю значения поля DllBase, но вместо адреса кернеля мне возвращается число 11000. Что у меня не так?
>>940262 >>939620 Всё, я уже разобрался. Надо сначала в al поместить 0x4F, вызвать перрывание 0x10, затем в ax поместить 0x4F02, в ич 0ч118 (номер режима. Я вібрал такой), вызвать опять 0x10, ну а дальше уже всё понятно. Начало экрана с памяти 0xA000
>>940373 1) Установи в BX кроме номера режиа еще и бит 14, считая с 0 (0x4000). Это включит режим линейного фреймбуфера. 2) Адрес фреймбуфера спросишь у функции 0x4f01. 3) К сожалению, этот адрес будет за пределами 640к, поэтому тебе понадобится 32-битный защищенный или нереальный режим (гугли unreal mode), чтобы работать с фреймбуфером. 4) Ну или рисуй по кускам, там вроде можно ебаться с окнами/банками (меня миновала эта участь, так что хуй знает, как там что). Гугли VBE switch bank.
>>940382 >>940553 С защищенным режимом нужно ебаться больше, и стандартные прерывания там не работают. А VESA легко позволяет переключать окна в реальном режиме. Функция 4F01h возвращает в ES:DI описание видеорежима, по смещению 0Ch находится FAR адрес подпрограммы, переключающей окна (параметры те же, что и у функции 4F05h, но работает без лишних расходов).
См. статьи Сергея Андрианова в "Мире ПК" про VESA.
>>942056 mov ebx,[game_dll_base] mov edx,[ebx+0x6552e8] mov [edx+0x12e464],12345 всякие dword ptr расставить по вкусу, алсо можно сделать lea и сохранить адрес на будущее
>>937750 В общем чтобы обо мне не забывали. Откопал в ntoswrk.lib объектник с названием mmcompress, пустой правда. Интересно, это сжатая память планировалась ещё в XP (так как в 2000 я такого не нашёл)? Или я не так понял предназначение?
>>943177 Что вы ковыряете хрюшу? Лучше бы дриснятку ковыряли и сделали швабодную реализацию DX12, а по проще это разобрать блоб нвидии и поудалять легаси затычки оттуда.
>>943189 >Что вы ковыряете хрюшу? Базу для сорцов дай, я хоть дристянку ковырять буду. Ковыряю что есть. Впрочем имея на руках чуть более полные сорцы, что есть сейчас, можно их будет допилисвать до состояния дристы, спермооси, дристятки и более новых выкидышей МС. Это и планирую в будущем.
>>943208 Идешь такой на сайт интела, качаешь Intel Architecture Software Development Manual, читаешь от корки до корки. В томе System Programming Guide тебе будет щастье.
>>943208 Писать 64 битными инструкциями. amd64 например. >>943273 att ассемблер универсален. Ну а если эльбрус не работает то иди на сайт эльбруса в поисках Эльбрус Architecture Software Development Manual
>>943287 Там основная часть - ненужно и шлак. Но есть блоб - модуль ядра 30мб с копейками. Вот его реверс индженерить было бы норм, было бы годно выпилить поддержку старых карт если там костыли, выпилить поддержку ксорга если там есть костыли для этого. Оставить DRM EGL для вейланда.
>>943289 > есть блоб - модуль ядра 30мб с копейками. Вот почему божественный модуль интела весит всего 1-2 мб, а нвидия накопила хуй знает сколько, в каком стиле они там драйвера пишут?
>>943287 >Какую базу для сорцов? Для XP это WRK да утёкшие сорцы Win2000. Ну и в ReactOS никто не мешает подглядывать, хотя это лишнее, они там накодили совсем не то. >>943287 >нет столько всякого дерьма >>943289 >блоб - модуль ядра 30мб с копейками Ага конечно нет дерьма. Я из ntoswrk.lib только чуть больше 100кб среверсил, и то половина из Win2000 скомуниздил. А там всего-то 5мб. С копейками, ага.
Вечер добрый господа. Накидайте недо-геймхакеру-новичку книжечек для изучения основ ассемблера. Хотелось бы понимать, как работают все эти mov, call, ebx, esx и т.д. Т.е., понимать все творящее в Cheat Engine и OllyDbg, ну и т.д. Заранее очень благодарен вам.
>>943362 >олько чуть больше 100кб среверсил, и то половина из Win2000 скомуниздил. А там всего-то 5мб. С копейками, ага. Ну главное среверсить низкоуровневые вызовы обращения к видеокарте и запросы, они же должны быть видимыми на асме то. Методом тыка узнать что за что отвечает и сложить все докучи, целый драйвер это 3мб кода должно быть в случае нвидии.
>>943963 В армы без знания английского лучше даже не пытаться лезть. Тебе придется читать гигантское количество разнообразных пдф, и никто для тебя переводить их не собирается.
>>944422 >отлаживай Наверное, разреверси. А чего там интересного? Бегло читал про него когда-то, защита так себе, учитывая такое количество читеров и читов. Он отладчик определяет, целостность файлов на диске и в памяти проверяет? А ту игру бросил реверсить, не по умениям она мне оказалась. Даже не смог дойти до OEP.
>>945658 У фасмы есть fword/pword и tbyte/tword для 48-битных и 80-битных операндов соответственно. Т.е., lgdt fword[GDT]. В качестве альтернативы можно оторвать размерность от GDT (GDT: dd 0x7e10 или label GDT_ at GDT перед lgdt [GDT_]).
>>945658 Ахда, а ошибка в том, что метка при определении данных получает тип (размер) от определяемых данных. У тебя GDT dd, значит метке GDT присваивается "тип"/размер 32 бита, и значит при lgdt [GDT] фасм пытается сделать lgdt dword[GDT], что, разумеется, неверно.
>>891716 (OP) Я уже почти перешёл в защищённый режим. Но после это команды всё прекращается. Ошибка в виртуал боксе. Может это потому что я использу. virtual box? Может надо qemu использовать? http://pastebin.com/egDdQCM5
>>946201-кун Всё, я похожу понял что было не так. У меня бит P был сброшен, а когда он установлен то ошибки нету. Но я не понимаю из-за чего так. Он же вроде бы как используется другими программами.
>>891716 (OP) Я перешёл в защищённый режим, сделал глобальную дескрипторную таблицу, положил в сегментные регистры селекторы дескрипторов, но адресовать больше 1 МБ не могу. Защищённый режим вообще правда сущетсвует? http://pastebin.com/TXpR2hfu
>>946376 > mov edi,0xA0000 Ты включил LFB, но адрес, по которому этот LFB начинается, так и не получил. Дергай 0x4f01, по офсету 0x28 от начала информации о режиме будет адрес буфера.
> mov cx Не делай так. loop в 32-битном режиме использует ecx.
>>946583 Пишу с ноута, выполняющего 32-битную ОС, рядом 32-битные планшет и телефон. Вокруг меня куча железа с 8- и 16-битными контроллерами. Какие 128 бита, о чем ты вообще?
>>946584 Сейчас 64 бита норма даже для микроконтроллеров. Есть нужда в 128 битах, потому как памяти надо все больше, и инструкций все больше появляется, а они опциональные а не стандарт. AVX2 и все подобное должно войти в стандарт amd128
>>946584 >Пишу с ноута, выполняющего 32-битную ОС, рядом 32-битные планшет и телефон Нищеброд. Пишу с ПК х64 (24ГБ ОП), имею ноут х64(8ГБ ОП), даже телефон х64.
>>946908 Я пользуюсь железом, которое удовлетворяет мои потребности. В игори не играю.
>>946932 Лол, ну удачи. ARM-мирок с двумя десятками семейств, с фактически отсутствующими стандартами даже в пределах семейства, да еще без опыта доставит тебе множество веселых минут.
>>947274 >Я пользуюсь железом, которое удовлетворяет мои потребности. Нищебродские у тебя потребности. У меня сейчас две виртуалки крутятся, браузер с 9000 вкладок, система контроля версий с проектами в сумме с 1млн файлов, и прочий софт. И куча свободной памяти для файлового кеша, что делает работу быстрой как никогда ранее. А у тебя своп своп нехватка памяти пидор.
>>948438 Просто из-за таких как ты прогресс стоит, а я не могу делать онли х64 софт. Давно бы выкинуть подсистему SysWOW64 из венды, она бы в полтора раза похудела со всех сторон.
>>948431 >>948712 Бессмысленное увеличение разрядности регистров - это не прогресс. 64 бита для арифметики не так уж часто нужны. Это обычно либо финансы, где все равно свои типы с фикседпоинтом, и им похуй, на каком int они собраны, либо длинная целочисленная арифметика, которая тоже не зависит от размера регистров.
Увеличенный размер виртуального адресного пространства с одной стороны - штука хорошая, ASLR всякие, меньшая вероятность проблем с фрагментацией. С другой стороны, с увеличением разрядности возникают все более неприятные проблемы с TLB, которые решаются еще более хитрыми способами, и детерминированности в работу системы это нихуя не добавляет.
Браузер с 9000 вкладок - это тоже не прогресс, это полный фэйл интерфейса браузера, интернета и твой собственный ты их никогда не прочитаешь, но однажды проебешь без возможности восстановления.
>>948758 >Увеличенный размер виртуального адресного пространства This. > все более неприятные проблемы с TLB Для вокрлоадов которые втискивались на старом адресном пространстве TLB хватит за глаза. А для тех, которым на 4GB тесно было лишний раз сходить в page table все равно лучше чем сходить в своп
> детерминированности в работу системы это нихуя не добавляет Вообще заиваться о детерминированности после появления спекулятивного исполнения/бренч предикшена и гипертредов это как то уже моветон.
>>949284 Да я видел конкретный пост на svn репозиторий. Но он приватный был уже тогда, а сейчас кажется вообще не пашет. Впрочем вопрос был в том, откуда они у него и как сделать так же. Если это конечно не подделка.
>>891716 (OP) Как правильно распаковать и запаковать rt.jar чтобы нормально потом воспринялся java-ой ? Мне нужно поменять строку в одном классе, но после того как упаковщик хоть как-то изменяет rt.jar - он перестает нормально восприниматься.
>>949351 Да не, на видео намного больше, чем есть в WRK, включая такие части, которые вообще никогда не утекали и попросту отсутствуют в коде Win2000 и уникальны для Win2003. И как бы там типа 11ГБ сорцов.
Конечно, это можно было подделать, дерево исходных кодов можно извлечь из отладочных сборок, размер взять наобум, а парочку показанных файлов отреверсить и воссоздать самому, но уж больно сложная мистификация безо всякого видимого профита.
В общем вдруг найдутся хакеры, которые взломают его хостинг, ПК и анальную девственность и сольют сорцы винды на радость анонимусу. А то я ебусь с реверсом каждого килобайта кода, а кто-то располагает полными сорцами винды. Я бы точно слил, и похуй, сколько меня потом будут иметь потом МС.
Error occurred during initialization of VM Unable to use shared archive. An error has occurred while processing the shared archive file. Unable to unmap shared space.
>>949947 >Зачем труп мамонта ковырять? Потому что он лучше люнупса. Даже сейчас под хрюшей работает больше десктопных ПК, чем работало под люнупсом за всё время его существования. >Возьмись за ум, ковыряй линукс. Скучно, он как бы открытый.
>>949963 >лучше >работает больше пк В голосину, там в хрюшемирке драйверов давно нет. >открытое скучно Дриснятку ковыряй, выпиливай зонды или дирекикс12 реверси.
>>949990 >там в хрюшемирке драйверов давно нет УМВР. >Дриснятку ковыряй Как ХР и спермоось сковыряю, так и за дристянку возьмусь. >>949992 >Почистили бы говно со своей дриснятки Она твоя, а не моя. Моя ОС- это ХР, в которой ни одного зонда, в отличии от какой-нибудь бубунты.
>>943177 В общем продолжаем. Вот код: http://pastebin.com/zjMJTxq1 что такое с этой переменной v9? Почему ей даётся тоже значение, что и до этой, и выполняется та же проверка? Вообще не разумею.
Есть ли годный ARM эмулятор для Андроида, кроме официального ПО? Или не годный, а хоть какой-нибудь. Нашёл статью про эмуляцию 64 битного ARM (Linaro), а мне бы 32. Или они обратно совместимы, как в Windows 64-bit возможность запуска 32 битных приложений? Или, может быть, кто подскажет, как дебажить приложения под Android?
>>950125 Сначала читаешь книгу Таненбаума про архитектуру компьютера, потом мануалы по конкретным интересующим процессорам (и операционным системам, если не под голое железо пишешь) от производителей. Например, вот Intel: https://software.intel.com/en-us/articles/intel-sdm
>>950005 В общем забъём. Самый интересный файл в ntoswrk.lib- это файл FOLTZ.obj. Размер его в 151 кб, а IDA там ничегошеньки не видит. Если его открыть в текстовом редакторе, то можно заметить целый вагон инклюдов и прочего, среди которых есть строка d:\fw\base\oem\src\kernel\patchgd\pgd.c В общем как бы намекает на то, что там зашифрован код патчгуарда. Я вообще не имею опыта расшифровки файлов с защитой, поэтому прошу помощи сообщества.
>>951622 > там зашифрован код патчгуарда лицорука.jpg. Вот что бывает, когда люди пользуются готовыми утилитами без малейшего понимания, как они работают. 1) Там две функции из пары инструкций и несколько массивов. 2) Все килобайты - это отладочная инфа, она в релизе даже не линкуется.
>>952448 >Вот что бывает, когда люди пользуются готовыми утилитами без малейшего понимания, как они работают. Таки да, я сразу писал, что я макака, обмазался инструментами и надеюсь на результат. Пока чуть больше 300КБ среверсил, из почти 6МБ. >Все килобайты - это отладочная инфа, она в релизе даже не линкуется. Хорошо, её можно как-то использовать? Она же явно к патчгуарду относится. Вот список подключаемых заголовочных файлов, дохуя 155 штук. Вижу структурки, видимо, используются там. Просто я видел код патчгуарда в IDA, там больше 11к строк, и любая информация должна помочь, поэтому нужно извлечь максимум информации из этого файла. Ведь не просто так его пытались спрятать, переименовав из pgd.obj в какой-то там foltz.obj.
>>952875 >Это ты на основании одного хедера говоришь? Точнее на основании строки с именем объектного файла. При генерации объектника в него записывается имя этого объектника, и во всех объектных файлах WRK эта строка совпадает с именем самого файла. Кроме одного, угадайте какого. К тому же размеры, ни один объектник с 3,5 функциями не весит столько, сколько этот. Он вообще один из самых больших, обычно же такие почти пустые весят от 2 до 10кб. Функции, содержащиеся в нём, никак не могут генерировать столько отладочной информации. А вот код патчгуарда может, так как он лезет во все щели в ядре. >Если не сможешь пропатчить версию подсистемы для запуска утилиты под XP С этим даже макака справится. Впрочем за ссылку спасибо, просматривал аккаунт МС на гитхабе, но до туда не докопался. >>952899 >А этот PatchGuard в WDK точно есть? В том то и суть, что нет! Видимо, его отключение в этих функциях сделало так, что при компиляции этого объектного файла туда не попал код самого патчгуарда, а только отладочная информация к нему. И то хлеб, авось поможет при расшифровке кода самого патчгуарда на втором этапе моей возни. >Или ты за оригинальное ядро взялся? Я потыкал палкой всю линейку ядер от Win2000 до Анального обновления десятки, по возможности так же посмотрев отладочные сборки.
Итак, анон, есть reg-файл. Это вот дело служит паролем для базы данных. Насколько я понимаю, dword 83 это какой-то сдвиг фразы "Увррфмсз", потому что когда я ставлю значение 0, то захожу в базу по этой фразе. Как узнать, какая фраза выходит после этого сдвига? Он как-то по ASCII вперед на 83 символа сдвигается или как?
>>953819 Указатель дереференсится же. KPRCB лежит в KPCR, к ней и идет обращение. Точнее сказать не могу, возьми символы и посчитай, что конкретно там лежит относительно офсета PrcbData.
>>953903 >дереференсится Поясни, не понял. Всё равно не могу понять, как он выходит отрицательным.
У меня получается только такой код, который компилится с точностью вот до этого смещения, которое у меня всегда положительное. VOID PerfSetLogging( PVOID MaskAddress ) { ULONG Index; PKPRCB Prcb; for (Index = 0; Index < (ULONG)KeNumberProcessors; Index += 1) { Prcb = KiProcessorBlock[Index]; Prcb->SavedRsp = MaskAddress; // Наобум }
>>953985 Отвечу за него. Это значит, что KPCR лежит внутри KPRCB, в функцию передаётся (или каким он образом попадает) указатель на KPCR. А нужно получить указатель на KPRCB, т.е. на начало структуры. Скорее всего, это через макрос делается, что-то типа offsetof, отсюда и отрицательное смещение. PKPRCB = PKPCR - offsetof(KPRCB, name); В свою очередь, KPCR получается так: PKPCR *name = &PKPRCB->name;
> Скорее всего, это через макрос делается Да, только у Microsoft свой, более безопасный offsetof под названием CONTAINING_RECORD: Prcb = KiProcessorBlock[Index]; CONTAINING_RECORD(Prcb, KPCR, PrcbData)->КакоеТоПолеKPCR = MaskAddress;
> Всё равно не могу понять, как он выходит отрицательным. Офсет того поля, к которому идет обращение меньше, чем офсет PrcbData. Дельта отрицательная.
>>954118 > как починить Не использовать это говно? В подсветку асма умеет каждый первый блокнот.
>>954131 чё я бля непонял я просто копипастнул сурс какойто тупой проги по дигностике пары партов и памяти на диплом, а запустить не запускается, я и строки кода не понимаю, первый раз асемблер вчера увидел
мне просто над что бы работало и показать мне дадут документ и я домой
Если кому интересен мой прогресс, на данный момент ntoswrk.lib похудел на 365кб (х64), или 327кб (i386), к коду WRK добавлено 577 КБ кода в 39 файлах плюс правки в некоторых исходных.
>>954454 One-Core-Api? Там используются файлы реактОС, но проект с ними не связан. Нет, не пробовал, какая-то непонятная срань. Как вообще можно использовать файлы реактоса, который толком с ХР не совместим, для запуска приложений виста+?
Только осваиваю ассемблер. То, что на пикрелейтед верно? И почему когда выполняю xor reg,reg устанавливаются два флага ZF(потому что результат равен 0) и RF, причем четность?
>>937771 Клево. По какой литературе ты научился так делать? Я в курсе про алгоритм Брезенхема, но не думал, что все вместе займет столь мало строк кода.
>>955103 >Нагуглилось вот такое, не оно? Оно. Но там все равно только доксиген на хедеры.
Сейчас запустил под отладчиком, а эта функция и не вызывается в реальном коде. Вызывается с тем же именем, но с другим набором параметров. Она вот нормально декомпилировалась. Но правда сноумен и хекс-рейс по-разному это сделали.
>>955089 Убери прототип нахуй, посмотри, правда ли там функция по джампу или это кусок текущей (что вероятнее), проставь прототип для функции по джампу, проставь прототип для этой функции, и все будет.
Похвалюсь исправлением глюка в программе Apowersoft Phone Manager. Глюк заключался в трёхдневном триал-режиме. Быстро справился с исправлением, поэтому и хвалюсь. Хотя, это не полноценное лечение, кейген работает, но нужно либо писать прокси-сервер, т.к. программа лезет в интернет для проверки, либо запрещать ей фаерволом доступ в интернет. Сам выбрал последний вариант. Через 3 дня узнаю, требуется ли обязательная проверка ключа, а сейчас время не охота переводить. Но как глупо сделана защита. В папке "AppData\Roaming\Apowersoft\Apowersoft Phone Manager\" создаётся два скрытых файла, один из которых называется "trial". Мне не было нужды проверять, но догадываюсь, что удалением этого файла продлевается срок триала ещё на 3 дня. Программа (C#) при пошаговой трассировке сама выводит на модуль, в котором содержится проверка лицензии. Разработчик хоть чуть-чуть усложнил поиск этого места путём запуска модуля в памяти (не знаю, как правильно называется это в C#). При этом оставил все названия функций. Хотя бы мучаться не пришлось. А мой вопрос так и остаётся в силе. Как дебажить ARM приложения? В программировании Android'а не знаком. Нашёл и скачал androl4b. Там есть эмулятор. Но, когда в него перетаскиваешь APK, то пишет INSTALL_FAILED_CONTAINER_ERROR. Погуглил, советуют изменять APK, добавлять какие-то опции в AndroidManifest.xml. Как всё сложно в нём.
чем можно начать реверсить DOS приложение? под линью. нужно ставить дос на виртуалку? вроде нужно исполнение, я же не знаю что ищу. и хотелось бы трахаться с radare2.
>>956429 r2 для хипстеров. Если тебе нужно не посмотреть пару функций и поправить пару байтов, а именно отреверсить - IDA без вариантов. Доса в досбоксе достаточно. IDA теоретически умеет в Bochs-отладку, практически я никогда не пробовал отлаживать 16-битный код. Алсо, можно собрать кастомный досбокс с их собственным говноотладчиком.
>>956492 >не, впизду. слишком жирно и платно. Но это единственный активно развивающийся дизасемблер, и вообще самая лучшая программа для реверса. С радаром ты будешь ебаться в одиночку, потому что тут его никто не использует.
>>956556 > Чем они отличаются то IDA, конечно, тоже полное говно, но она умеет пикать, а если уж соберется что-то испортить, то хотя бы переспрашивает. Если серьезно, то реверсинг - это про восстановление информации. Если информации перед глазами мало, а чтобы получить ее, нужно сплясать на клавиатуре - это хуевая программа. Если единственный гуй у программы - это кривая вебморда, если вообще как-то затесалось слово "веб" в реверсинг, где могут быть сотни мегабайт листингов - это хуевая программа. Если уж есть какие-то претензии к IDA, надо смотреть не на r2, а на Hopper или Binary Ninja (оба платныеПРОПРИЕТАРНЫЕ) - там хотя бы разработчики понимают, какие могут быть требования и цели, а не сооружают вим с дизасмом и фортунками.
я уже дико сомневаюсь в идее радара на досе, это же монопроцессная система - хер знает. я прост алкаш, поэтому такой ленивый, завтра разберусь. хотя, я помню тут разбирался в статических анализаторах - запала не на долго хватило...
>>956621 > debug.com Возьми турбо дебаггер хотя бы. А вообще, я все еще настоятельно рекомендую посмотреть в сторону Bochs и/или встроенного отладчика досбокса. У Bochs по крайней мере есть GDB-стаб, и с этим уже можно жить.
>>956910 Отсутствием интерактива. Они высрут свой ассемблерный файл, и делай с ним что хочешь. ИДА же даёт классную навигацию по коду, построение графа вызовов. Позволяет определить код как данные и данные как код, когда автоматика ошиблась. Определить, где константа, а где относительное смещение. И ИДА сама повторяет анализ изменившихся мест и дополняет ассемблерный листинг новой информацией, зачастую там, где ты даже не догадывался о связи. Неинтерактивные дизассемблеры коррекцию анализа или вообще не позволяют, или это настолько неудобно, что тебя это заебёт на второй итерации.
В общем послушай умных людей, не выёбывайся и ставь IDA Pro 6.8.
В исходнике был класс с массивом фиксированного размера. Надо увеличить размер этого массива. Как можно это сделать? Сам класс глобальный, расположен в секции не инициализированных данных. Поэтому даже передвинуть массив в конец не получится. Сам вижу только один путь - переделать с фиксированного размера на динамический с выделением необходимого количества памяти.
>>959814 Отлови ссылки на текущий инстанс класса, добавь байтов к последней секции, положи туда новый инстанс. Если релоки в бинарнике есть - это делается чуть ли не автоматически. Если нет - IDA, в принципе, справляется, плюс можно PAGE_NO_ACCESS и VEH прилепить на всякий случай, который будет детектить ошибки обращения к старому инстансу, править указатель и писать лог источников, чтобы ты поправил бинарь.
>>959828 А если массив не в конце класса? Он идёт после таблицы виртуальных функций. Если изменить размер, это придётся править все относительные ссылки, все не отловишь. Ещё есть абсолютная адресация, т.к. класс глобальный, компилятор некоторые обращения к классу заменил на абсолютные адреса.
>>960012 > компилятор некоторые обращения к классу заменил на абсолютные адреса Это не проблема, аболютные адреса IDA тебе найдет, ссылки на регион памяти можно скриптом перечислить.
> придётся править все относительные ссылки, все не отловишь А вот тут проблема, да. Конечно, динамически (c PAGE_NO_ACCESS) можно отловить все, но из-за постоянной обработки исключений будут тормоза.
>>891716 (OP) Спрошу тут может кто знает как в VS2017 С++ проект скомпилить в исполняемый файл с одной секцией. в 2013 получалось в 2017 всегда создает .rdata и .text
Помогите сделать задачу "У гусей и кроликов вместе 64 лапы. Сколько может быть кроликов и гусей (подсчитать количество комбинаций)?"
Вот что я сделал и вроде как оно даже работает, но правильно ли я не знаю. Подскажите формулу по которой находятся подобные задачи. И да код должен быть универсальным т.е. может быть и 4000 лап и 6.
use16 org 100h
mov ax,64 ;остаток лап mov cx,4 ; сколько лап у кроликов
div cx
lexa: sub ax,1 add si,1 ; количество комбинаций cmp ax,0 jne lexa
Неофит ИТТ. Поясните пж за следующую вещь. В hex-редакторе при анализе структуры PE файла (pic 1) вижу, что VA OEP = 10212, а ImageBase = 4194304, тогда абсолютный адрес точки входа = 4194304 + 10212 = 4204516 = 0x004027E4, и вроде как в дебаггере именно это число я и должен увидеть помеченным как entry point, но чому то в ollyDbg2.01 я вижу (pic 2) 0х00CE27E6. Я неправильно считаю точку входа? Неправильно трактую значение адресов в левом столбце в ollyDbg? Или еще что то делаю не так?
>>983097 Алсо, я понимаю, что в olly я вижу образ процесса, а не дизассемблированный исполняемый файл, и загрузчик может выравнивать образ по размеру страницы оперативной памяти, но не настолько много ж блеть. Или настолько? И да, исполняемый файл не упакован/не зашифрован, т.к. написан мной.
Вы пишите на ассемблере или собираетесь начать на нём писать? Программируете микроконтролёры, пишете драйвера для ОС? Вам сюда.
Вы изучаете алгоритмы работы закрытого софта, пишите патчи бинарников? Вам тоже сюда.
Попрошайки с "решите лабу по асме за меня" идут в общий тред, а лучше нахуй.