Вы видите копию треда, сохраненную 24 мая 2017 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Вы пишите на ассемблере или собираетесь начать на нём писать? Программируете микроконтролёры, пишете драйвера для ОС? Вам сюда.
Вы изучаете алгоритмы работы закрытого софта, пишите патчи бинарников? Вам тоже сюда.
Попрошайки с "решите лабу по асме за меня" идут в общий тред, а лучше нахуй.
Вкатился, кто знает, что может означать инструкция "jmp ." в GAS? В гугле не нашел.
2. Что-нибудь о программровании на асме под x64, а то васм со статьями закрылся.
Плохой заголовок для треда, не одобряю. Пожалуюсь модератору, пусть переименует.
>>891719
>jmp ." в GAS
Мегабыстрое гугление говорит, что
jmplabel1
Может быть, это метка? Скомпелируй и посмотри результат.
>>891728
>2. Что-нибудь о программровании на асме под x64, а то васм со статьями закрылся.
Прямо программирование? Или ты подразумеваешь реверс?
Ну и у меня вопрос. Как реверсить приложение (x64 в данном случае), напичканное антиотладочными приёмами? Нужен нормальный отладчик. Глючный x64dbg такой глючный, что лучше без него. Какой-нибудь эмулятор цп?
>Прямо программирование? Или ты подразумеваешь реверс?
И то, и другое. Например, хочу разбираться в том, как настраивается контекст процессов на x64.
>>jmp ." в GAS
>Может быть, это метка? Скомпелируй и посмотри результат.
Это уже листинг декомпельнутого ядра. Системщики опять забыли принять таблетки.
>Как реверсить приложение (x64 в данном случае)?
Только с MSIL работал, декомпил в C#, далее стандартные средства рефакторига студии, после этого решарпером пройтись. Становится вполне читабельным.
Ссылок не подскажу, т.к. меня только реверс интересует. Но отличий от x86 не настолько и много. Если умеешь в него, то и с этим асмом проблем быть не должно.
>как настраивается контекст процессов на x64
Это что значит?
>Только с MSIL работал, декомпил в C#
А если обфусцирован? ConfuserEx'ом каким-нибудь модифицированным?
Прям с изменённой структурой кода? Ну вообще обычно такое не юзается в языках, где важен порядок операторов(многопоточность и всё такое). Я видел только с изменёнными идентификаторами по типу axxxx, но большая часть из них восстанавливается.
Не знаю, что там было. Пытался его декомпилировать, но не получилось. В IDA так же не понятно, потому что код приложения запакован.
Но мне интересно про декомпиляцию не C# приложений, а нативных. Какой отладчик, кроме WinDbg ещё можно использовать?
>Плохой заголовок для треда, не одобряю. Пожалуюсь модератору, пусть переименует.
Ага, обосрался с ним.
>>891761
>А если обфусцирован?
Ищи деобускатор. Если его нет- пишешь его и выкладываешь на радость остальным.
>>891774
>Какой отладчик, кроме WinDbg ещё можно использовать?
OllyDbg.
>Это что значит?
Настройка структуры CONTEXT при инжекте в процесс. Видел, как у кого-то возникли проблемы на XP при настройке процесса в приостановленном состоянии.
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.
Ошибка там. Хотели, наверное ZeroMemory(data, strlen(data)). Потому что указатель можно занулить и без использования ZeroMemory. Но тред не об этом, тебе в прикреплённый.
>>891792
Что значит "настройка"? Ты и так можешь установить любые значения регистров в нём, чего настраивать то? Сейчас такую программу реверсю, в ней через векторные исключения проверяется состояние регистра dr7 и сбрасывается флаг TF (а ещё он же устанавливается для чего-то). Чтобы установить контекст, нужно вызвать GetThreadContext приостановленного потока (в документации так написано). Или через исключения. Но всё заранее должно быть создано, что нужно для передачи управления на инжект-код. Ты сформулируй вопросы, а то очень уж общий вопрос задаёшь. Или даже так: в чём у тебя возникли сложности?
Благодарю
Платформа?
Немного специфичные требования к софту.
1, 2 и 4. LordPE посмотри.
3. Это не знаю. Наверное, тебе придётся самому написать.
Посмотри книгу К.Касперски "Техника отладки программ без исходного кода". Он как раз рассматривает способы внедрения кода в чужое приложение. Книга хотя и старая, но формат исполняемого файла остался тот же.
Сначала я решил, что это текущий адрес, потом я пошёл в гугол и нашёл, что это текущий адрес. Либо оно зацикливается, либо ничего не делает, в зависимости от того, что подразумевается под текущим адресом в этом случае.
http://tigcc.ticalc.org/doc/gnuasm.html#SEC49
А для чего? Это нестареющая классика, актуальная и через века. Нубы будут программить мышкой в очередном говнофреймворке, делая приложения,пожирающие гигабайты и гигагерцы, а аксакалы по старым методикам писать на асме проги в 30кб.
>1, 2 и 4. LordPE посмотри.
Смотрел. Может только редактировать, добавлять в таблицу экспортов не умеет. При работе с секциями побил файл нафиг.
> учить асм
Надо учить все, до чего дотянешься. Особенно если хочется в реверсинг. Кроме 32-битных x86 процессоров существует IA-64, кроме нее существуют и широко распространены ARM и MIPS, кроме кода для реальных процессоров часто приходится иметь дело с байтокодом CLR/JVM/Dalvik/AVM и прочими виртуальными машинами, поэтому нужно более-менее знать язык, который в это скомпилировался. Бывает, что байткод каждый раз новый (протекторы), а бывает, что ебать приходится USB- или Blutetooth- протоколы или структуры файла, а не код.
Так что сишечкой и асмом ограничиваться ни в коем случае не стоит.
>существует IA-64
Он официально мёртв.
>Так что сишечкой и асмом ограничиваться ни в коем случае не стоит
А вот это верно.
>>892177
Так запили.
Тогда вариант - написать самому.
>>892159
>протоколы или структуры файла, а не код
Как без реверсинга можно разреверсить протокол или структуру файла? Это же набор (не)случайных байт, попробуй пойми, что к чему относится.
Вот ещё вопрос. Кто как реверсит сетевой протокол? У меня очень не эффективно, как мне кажется. Просто без реверса даже и не поймёшь ничего. Сначала IDA, дебаггер, а только потом какой-то результат. А ещё для упрощения работы пишу диссектор для Wireshark. Удобней становится.
Да, я имел в виду Intel 64 (x86-64), постоянно названия путаю.
>>892288
> Как без реверсинга можно разреверсить протокол или структуру файла?
Предназначение файла известно, иначе зачем его реверсить. В протоколах тоже чаще всего знаешь хотя бы общую картину происходящего. Берешь тот же Kaitai или 010 и разбираешь. Ищешь офсеты и длины, флоаты, строки, zlib брутфорсом неплохо находится. Иногда кода на руках нет, но можно нарыть много файлов и искать корреляции. Хотя если пошифровано правильно а не ксором каким-нибудь, то, конечно, без кода хуй что сделаешь.
Должен предупредить, что все это в целом ньюфажное
https://yurichev.com/blog/
Тут подборка книг
https://www.goodreads.com/shelf/show/reverse-engineering
Не совсем RE, но все таки
http://security.cs.rpi.edu/courses/binexp-spring2015/
https://www.hex-rays.com/ - лучший в мире дизассемблер, с хуевым отладчиком, и каким-никаким, но декомпилятором. Позволяет реверсить код под любую архитектуру, а в тех редких случаях, когда архитектура все-таки не поддерживается - позволяет за вечер запилить процессорный модуль на крестах или питоне.
http://radare.org/ - безумная смесь дизассемблера, hex-редактора и отладчика, затмевающая даже vim своим умением все портить и пикатьмолча. Но из бесплатного - это самое годное, что существует.
слов, найти “исключающее или” всех 8 слов для выражения “101”. Помогите пожалуйста с ассемблером. Нужен массив в 8 итераций. В благодарность скину шекели на сотовый.
Выше кидали ссылку. Если тебе по новым возможностям процессоров, то бери мануал от Intel и смотри его.
>>892571
Даже не понятно, что тебе надо. Надо зашифровать массив последовательностью 101?
Аноны, TitanHide.sys есть у кого сконпелированный и плагин от него же для x64dbg?
Так, навреное все таки уменя больше ссылок не по реверсу, а по байнари эксплоитейшон
не знаю даже, надо ли такое кидать
http://programminggroundup.blogspot.ru/
http://althing.cs.dartmouth.edu/local/www.acm.uiuc.edu/sigmil/RevEng/ch01.html
http://www.program-transformation.org/Transform/ReengineeringWiki
http://dobrochan.com/s/res/45693.xhtml
http://asm.shadrinsk.net/index.php?par1=3&par2=0&par3=0&par4=0&par5=14762263
https://forum.reverse4you.org/
Мне нужно сделать операцию 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
Мне нужно сделать операцию 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
Плачу 500 рублей. Очень нужно, помогите.
Условие неполное. Можно разбивать, начиная со старших бит 110 011 00'1, а можно с младших бит 100 001 11'1.
http://pastebin.com/qSngVQ5q фасм, комментарии не писал принципиально, тут реверса тред лол алсо читай шапку.
PETools ему экспорты тоже не добавит. Я уже говорил в ньюфаг треде, что лучше сразу написать кастомный линкер под такую задачу. Руками он править заебется на второй день.
> Все там правильно написано
Ты забыл спросить, нахуя вообще обнулять указатель таким странным способом, когда можно просто присвоить, и нахуя вообще обнулять указатель, который в худшем случае до следующего вызова какой-нибудь функции в стеке пролежит. И ты мог бы догадаться, что оба аргумента ZeroMemory изначально были неправильные, и имелось в виду именно то, что ты процитировал. Хотя возникает вопрос, нахуя обнулять буфер с отосланным текстом.
Алсо, в ридми титанхайда написано, что нужно оторвать у винды патчгард, ты оторвал?
Блог по асму и реверс инжинирингу, есессно.
Оно поставляется со своим компилятором 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
Кто-нибудь знает, что ему нужно?
Если скомпилировать эти фалы отдельно старой версией и подсунуть при компиляции новой, то они нормально линкуются, ядро рабочее, и меньше на пару сотен килобайт относительно компиляции старой версией.
inb4: написать в контактике "системный программист"
>Сейчас попробую.
Всё запустилось. Только опять dr7 не пустой (смещение 70h). Что интересно, при модификации (занулении dr7) hardware breakpoinnt не сбрасывается. Можно пропатчить в таком случае.
>>893637
Ничем даже помочь не могу. А зачем обновлять инструмент?
.allocstack 0 - почему тут ноль?
>А зачем обновлять инструмент?
>>893637
>меньше на пару сотен килобайт относительно компиляции старой версией.
То есть в новых инструментах новые оптимизации.
>.allocstack 0 - почему тут ноль?
Функция ничего не делает, вот и стек нулевой. Но действительно, нафиг не нужно. Спасибо, скомпилял.
Чем можно протестировать производительность ядра ОС? Какие-нибудь проги, дрючащие функции API. Интересно сравнить производительность родного ядра с WRK и с WRK, скомпилированным новым инструментом.
Там все порядком протухло. Недавно вроде пасту посвежее в этом же сабреддите постили.
А я не глядел, если честно, давно уже туда, якак-то азы сейчас ботаю
>2к16
>ассемблер
Ржу.
> с парашютом прыгать
Шо опять? Помнится, лет пять назад на васме он обещал без парашюта прыгать.
Ну видимо передумал. Вон, естьвидосы на тытрубе на его канале.
Ну попробуй пореверсить на C++.
>>894930
Научись реверсить хотя бы как он, а уж потом пиши, что не актуально.
Зачем учится какой-то устаревшей технологии?
Она не востребована на рынке => зря проебешь время.
Реверсинг сам по себе не востребован на рынке. Заказов мало, желающих много, и для того, чтобы этим зарабатывать, знать нужно овердохуя. Алсо, это ваши модные нодежс превращаются в устаревшие технологии, а ассемблер как был в 60-х прошлого века, так и в 60-х нашего века никуда не денется.
Ну смотри. Есть computer forensics разного рода, но это не совсем реверсинг. Есть AV, но это работа за еду, хуже PHP-макак. И есть разовая полулегальная работа. Алсо есть куча ололо-секьюрити-рисерчеров, которые реверсят все подряд в качестве хобби, чаще всего для себя и бесплатно. Что-то еще назвать сможешь?
поиск и эксплуатация зеродеев. грейхэты
>Реверсинг сам по себе не востребован на рынке.
Тот же Крис Касперски вполне себе съебался в СШАшку и работает там на удалёнке. Был бы он нахуй никому не нужен, его бы туда не взяли.
Крис - крайне хуевый программист и ничем не выдающийся реверсер. Он выехал исключительно на имени (написал книжки, по которым училось целое поколение, потому что других книжек нихуя не было) и на этой его охуительной истории про эксплуатацию бага в микрокоде.
>Есть AV
Что означает сия аббревиатура?
>Что-то еще назвать сможешь?
Банальное - кейген. Не банальное - формат файла, сетевого протокола, работа драйвера с устройством.
Другой уровень - реверс существующих устройств. Прошивка, взаимодействие компонентов и прочее.
Ещё один вариант - установка ПО и ОС на устройства, это ПО и ОС изначально не поддерживающих. Например, какой-то навигатор в автомобиль, в котором ОС Windows Mobile.
В общем, очень много всего. Учитывая, что (в последнее время особенно) полно закрытых проприетарных устройств, программ, ОС, которые не дают возможность сделать что-то, что разработчик не разрешил.
> AV
Разработка антивирусного ПО. Полуавтоматический анализ сэмплов вредоносного ПО посредством различных утилит, скриптов и полутора-двух килограмм биомассы, которую пока заменить нечем.
> установка ПО и ОС на устройства, это ПО и ОС изначально не поддерживающих
Экономически невыгодно, даже если найдется толпа некрофилов, которые на это скинутся. Такое только для энтузиастов, которым некуда девать свое время, а времени для таких финтов нужно овердохуя.
> Банальное - кейген
Мы там выше говорили про востребованность на рынке, это подразумевает что-то хотя бы слегка легальное и приносящее некий доход.
О том, что существует множество интересных вещей, в которых можно лампово ковыряться по вечерам после работы, я не спорю. Но вот платят за реверсинг хоть и много, но редко.
>Крис - крайне хуевый программист и ничем не выдающийся реверсер.
Как видишь, даже такие люди могут съебать в США.
А ещё, не смотря на лёгкий аутизм, у него была (а возможно и есть) тян. Что за несправедливость, да?
Нет, ну я, конечно, первый про Криса начал, но мы тут какбэ реверсинг собирались обсуждать, а не его негритянокмулаток.
Ты бы лучше сажу отклеил.
>Чем можно протестировать производительность ядра ОС? Какие-нибудь проги, дрючащие функции API. Интересно сравнить производительность родного ядра с WRK и с WRK, скомпилированным новым инструментом.
В общем использовал PassMark PerformanceTest, результаты в пределах погрешности.
Что там с драйверами на микроволновку? Вирус говорят уже есть, драйверы чтобы к компу подключить напишете?
Переходник спаяй - подключим.
сам вкатился в асм недавно, ибо доебали проблемы с производительностью\оверхедом в высокоуровневых языках.
удивляюсь как ещё нет фреймворка для разработки приложений под асм x86-64? и пакетного менеджера либ\макросов\сниппетов, по типу pip\npm.
может посоветуйте ресурс со списком библиотек? а то единственное более-менее полезное что я нашёл это BASELIB.
алсо может есть _современная_ книга по имлементации алгоритмов на intel x86-64?
вообщем за недолгое время использования меня асм приятно радует скоростью, низким оверхедом, минимализмом.
алсо как вы думаете кряк-сцена загнётся лет через 5? все переходят на веб приложения, которые не хранятся на десктопе.
молодёжь предпочитает покупать софт в интернете у оффициальных дистрибьюторов и не задумывается об использовании пираток.
> проблемы с производительностью\оверхедом
Ты что-то делаешь не так. Сишные компиляторы как миниум идут наравне с тем, что ты способен написать. А учитывая, что твой код все равно более, чем полностью состоит из вызовов либ, какая тебе разница, кто будет аргументы в стек/регистры пихать - ты или компилятор?
>молодёжь предпочитает покупать софт в интернете у оффициальных дистрибьюторов и не задумывается об использовании пираток.
То чувство, когда ощущаешь себя стариком, который даже предустановленную винду с омерзением сносит, чтобы поставить пиратку.
Что поделать, если это проще, чем вычищать тонны блоатвари, а порезанные домашние винды ввергают в пучины отчаяния?
Но ведь... большинство знакомых сидят на этой блявари и винде, и им норм.
Т.е. жрать говно - это нормально, а ненормальные - это мы, избалованные могуществом не жрать говно.
Но ведь ненормальным быть плохо. Нужно приучать себя жрать говно, чтоб не выделяться, как все. Бить по рукам, когда они тянутся к очередному системному инструменту или диску с виндой. Устраивать 10-ти часовые сеансы работы с нагскрином/баннером посреди экрана. И всякие такие экзекуции. Ну вы поняли.
А ты вон о чем. Извиняй, братан, попутал. Только смысла покупать пиратку нет - бери оригинальное.
Нормальным быть легко - весь мир рассчитан под нормальных.
А ненормальным быть тяжело - ты сам под себя должен адаптипровать весь мир.
Каковы инженеры...
есть сабрутина
print :
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, но нахуй он мне нужен если у меня всратая переменная значение которой код будет генерировать на лету, и нету файлового дискриптора с которого её считать.
есть сабрутина
print :
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, но нахуй он мне нужен если у меня всратая переменная значение которой код будет генерировать на лету, и нету файлового дискриптора с которого её считать.
Классный кстати был отладчик- можно было при наличии определённого скилла и из BSODа выйти с его помощью.
Побайтно копируя в цикле из одного места в другое. В rsi кладёшь ссылку на источник, в rdi ссылку на место, куда писать, и поехал:
mov rsi, OFFSET source
mov rdi, OFFSET dest
xor rcx,rcx
loop:
mov al, [rsi+rxc]
mov [rdi+rcx], al
cmp al, 0
jne loop
Как-то так.
Перед cmp там ещё 'inc rxc', забыл.
Переход в текущий assembly point.
5.4 The Special Dot Symbol
==========================
The special symbol `.' refers to the current address that `as' is
assembling into.
class Some_Class : public Abstract_Class_1, public Abstract_Class_2, ...
При переходе в функцию все данные начинают отсчитываться от смещения таблицы виртуальных функций, а не от начала класса. Как следствие, смещение нужного мне элемента должно быть 0xC8, а становится 0xC4. Как в Иде такие моменты разрешать?
> должно быть
Никому не должно. Ватком вон вообще в конец класса таблицу совал раньше.
> Как в Иде такие моменты разрешать?
Никак, лол. Сделай структуру Fields, сложи туда данные класса, сделай ClassView, положи туда указатель на vft, дырку нужного размера и Fields). Сделай структуру Class, сложи туда ссылки на vft и все Fields классов. Когда сделаешь это в десятый раз, напиши скрипт.
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, не видит отладчик. Пытался гуглить, но описания подобного не нашёл.
> Ручное дизассемблирование (клавиша "C") не работает.
Значит, это не ARM, или тыкаешь не там.
> Подозреваю, что это Thumbs
В нужном месте Alt+G, T, 1, OK, потом уже C и т. п. Тебе об этом написали, когда только грузил файл.
>Значит, это не ARM, или тыкаешь не там
Написал же, что Ida частично код дизассемблировала. Это ARM. Когда отдельно секцию скопировал и дизассемблировал её, Ida всё правильно начала распознавать. Почему так - не знаю.
>В нужном месте Alt+G, T, 1, OK, потом уже C
Не работает.
Файл не могу выложить. В принципе, дизассемблировал, пусть и таким кривым способом.
У меня другой вопрос - почему не подключается к QEMU? Есть ещё какой-нибудь способ выполнить произвольную часть кода (скорректировав регистры, само собой)?
Брал старый (0.13, хотя в документации написано, что нужно 0.10.6 или 0.11) и свежий (2.8.0). Всё равно не получалось с отладкой ничего. Поэтому пошёл по ещё более простому пути - скачал Keil и "проэмулировал" в нём, копируя интересующие меня куски кода.
Но, вообще, беда какая-то с эмуляторами под ARM. Ни один не смог заставить работать.
Ну хуй знает - у меня стандартный способ, когда ты выбираешь тип отладчика GDB, в настройках отладки выбираешь запуск QEMU и там же конфигурацию, выделяешь код функции и нажимаешь запуск - отлично работает сейчас IDA 6.x/QEMU 2.8, но и раньше проблем не было.
Моя несбыточная места в 31 год.
Уважаю этих бойцов невидимого фронта.
Возился с Lena151 туториал и русским курсом от какого то типа. Всё есть на торрентах.
И есть еще форум четкий - должен гуглиться по RE в гугле.
Пацаны РЕ инженеры - это сливки ИТ.
Сам себя не похвалишь - никто не похвалит, да? Мамке позвони.
Мне хочется прыгать. Бодаться и брыкаться...
ты хотел сказать через усеченную пирамиду, видимо.
А зачем нужен этот граф? Ищешь же определённые функции, а как они друг с другом связаны, не всегда надо. А если это был C++ с виртуальными функциями? call eax там только будет.
свое вкатывание в РЕ просто я начал (и не закончил лол) именно с этой софтины. а то что там надо найти хэш-функцию и recv - это уже стало ясно(стало ли?) потом.
Мне такое нужно полностью декомпилировать до собирающихся в оригинал исходников, а не просто вылечить одну болезнь.
шарп
причем функционал этой проги умещается навскидку в 1-2к строк максимум на питоне.
впечатление такое что 90% кода - чисто обфускация. это чё - нормально на рынке софта типа?
>именно с этой софтины
Так это не IDA? Точнее, один из её модулей, wingraph.
>>907259
500 строк в оригинале? Если больше - завязнешь надолго. А может ты профи в своём деле, кто тебя знает.
>>907291
От центов до десятков тысяч далларов. Хотя, если программа большая, то быстрее, дешевле и проще написать всё заново. А реверсинг использовать для необходимого - узнать как работает алгоритм, как происходит взаимодействие с сервером и прочее.
>Так это не IDA? Точнее, один из её модулей, wingraph.
имел в виду не ИДУ (это инструмент) а сам софт который надо было расчекрыжить.
Вот ты о чём, всё понятно. Сам и не помню, что у меня за первая программа была. Зато помню, что первое, что смог разреверсить до результата - это CS1.6, создал для него генератор ключей, который так и остался на моём компе. На момент создания (наверное, 2008-2009 год был) действующего генератора не нашёл, что несколько странно для такой мегапопулярной игры, ведь у меня на тот момент и опыта было чуть-чуть (хотя, его и сейчас не много). Видимо, реверсеры не играют в CS.
Годно
а я недели две потратил, набирая хотя бы словарь для понимания, чтто нужно делать в рамках поствленной задачи. после того как на дерево это ебучее взлянул.
вот щас отдыхал пару дней, установил идапитон. через час в бой и не знаю, когда уже в следующий раз остановлюсь, анон. затарился колой, сисинтерналсами, вайршарком, оллидебагом, виндоус сдк тулзами. в бой хули
Ноль, это хобби. Выше, ковыряющий ведро венды- это я и есть.
>>907551
>500 строк в оригинале?
45 млн. Говорят, столько строк в XP.
Хотя конечно расковыривать буду не всё, только основное- ядро и главные библиотеки, подрачивая на WRK, ReactOS и прочие вайны.
Самая сложная функция тут будет в коде патч-гуарда, там 11к строк кода, написанного самыми запутанными патернами. А без него ядро ОС будет дырявым как решето.
Хочу прикрутить возможность запускать некоторые новые проги и дрова.
>>907551
>А может ты профи в своём деле, кто тебя знает.
Нуб, заглядывающий в справку за тем, чтобы почитать, что такое звёздочка.
Инфибо Не осилишь, бросай
>некоторые новые проги
Они должны запускаться просто после замены версии в заголовке. Если не запустятся, значит в системе нет необходимых функций (тот же iwicimage появился в винде только с третьего сервиспака хр). В общем, ты не туда копаешь.
>Если не запустятся, значит в системе нет необходимых функций
Их я и собираюсь добавлять. А чтобы их добавить, нужно компилить исходники, которые я и собираюсь сделать.
>>908167
>тот же iwicimage появился в винде только с третьего сервиспака хр
Во втором версии х64 тоже должен быть.
Пока я тут ядро ковырял, кто-то запилил враппер для прог:
https://habrahabr.ru/company/reactos/blog/319110/
Сначала всё так и работало, но затем я решил поковыряться в настройка и где-то напортачил
Проблема решена, это я дурак.
Ура, два года все го прошло, тред появился. Научите как написать свою ОС на ассемблере? Почитал там калашникова, вот это все, про прерывания, флаги, регистры про 2^8.
Вообщем мне интересно с чем именно взаимодействует ассемблер, во что преобразовывается, как IDE(а fasm, masm и прочие это IDE которые преобразует буковки в машинный код) как они заставляют работать процессор, вот это все. Не, ну понятно что там машиный код хуе-мое но все же.
Алсо, реквестирую способы как написать свой ассемблер с нуля. Также всегда было интересно как погромировали самый первый в мире комп? Это щас ты юсб пограматор запустил, 2 провода в микроконтролер засунул и все есть и ты такой крутой мигаешь гирляндой.
Тененбома читал? Операционные системы, архитектуру*
>Также всегда было интересно как погромировали самый первый в мире комп
Надыбай писульки Адушки, она там для манямашины что-то накодила
По чертежам Бэббиджа и фон Неймана собирали, вручную создавали электрическую схему вместо набора кода.
Нахуй иди, быдлан из /b/.
Васм (найдешь где-нибудь) дамп. Заклинание кода от Аквилы.
По написанию ассемблера (и пердолинг сигналов) - nand2tetris на курсере. Более глубоко (и сложно) - Computation Structures от мита на едх. По осям - научись в асм и читай "процессор интел в защищённом режиме" с васм.ру и, наверное, Таненбаума.
Я в Оле так и не понял, как искать значения в памяти (по типу ArtMoney).
Поясните за эту вещь, аноны. Сори, я не такой уж знаток но как я понел тут специально для тупых запилили тот же ассемблер, но работающий на высокоуровневых языках. В чем тогда профит учить асм в 2017?
Это обычный редактор. Как notepad++, например.
Алсо, какой опкод отвечает за вызов функции из кернеля, но не FF15? FF15 использует косвенную адресацию.
> Посоветуйте мануал по ассемблеру интел
Советую:
https://software.intel.com/en-us/articles/intel-sdm
Формат инструкций и опкоды во втором томе.
Как используется этот буллшит SYSENTER? Как при помощи него вызывать функи из kernel32?
__asm
{
push 0;
mov eax, ExitProcess;
;mov edx, esp;
SYSENTER;
};
PS. Юзал SYSCALL под никсами, но там все немного по-другому.
Суть проблемы в умножении слова на двойное слово. Все консультации проебаны, как и отношения с преподом. Вся надежда на тебя, анон.
Пока моих скудных знаний хватает только но то, чтобы в AX занести младшие 2 байта двойного слова и умножить на слово. Что делать со старшими разрядами представляю смутно. Результаты отдельных действий заношу в ячейки размером в двойное слово. конечный результат имеет длину четверного слова.
(d2+w3)-b1(w1b2-b1)/b3/w3 - Вот формула по которой вычисляю. b,w,d - переменный длинной в байт, слово и двойное слово.
Алсо, про нейтив апи знаю, но вызов Nt/ZwExitProcess что-то не получается. Это говно в хедере определено?
void *zwExit = GetProcAddress(LoadLibraryA("ntdll.dll"), "ZwTerminateProcess");
__asm
{
push 0;
mov eax, zwExit;
mov edx, esp;
SYSENTER;
};
А, ты хочешь напрямую функции из ядра вызывать минуя ntdll? У меня тут есть кодец готовый - http://pastebin.com/vAY6KW0r
Смотри, что я хочу сделать. Вызов апи по хэшу для дополнительной антиотладки.
http://paste.ofcode.org/EzJbj84TmgiJHsVBZ7fnpn
Но не знаю, как правильно вызвать функцию, адрес которой получен. Можно сделать костыль: сохранить адрес в начале шеллкода в четырех байтах и использовать косвенную адресацию, но это выглядит мерзко.
>Как при помощи него вызывать функи из kernel32
Никак. sysenter нужен для перехода из ring3 в ring0. В регистр eax заносится число, по которому ядро определяет, какую функцию вызывают. Крайне системозависимо.
>>913157
А в чём проблема расширить слово до двойного слова и перемножить? Или у тебя там 16 битный процессор?
>>913159
>вызов Nt/ZwExitProcess что-то не получается
А посмотреть, как реализовано в ОС нельзя?
Ааа, понял.
>Но не знаю, как правильно вызвать функцию, адрес которой получен
Запушить аргументы, и потом:
mov eax, funcAddr
call eax
Но если ты хочешь вызывать функции ядра через SYSENTER как тут >>913162 то тебе первым делом надо SDT индекс этой функции получить. А потом вызвать её можно вот так на х86 системе - http://pastebin.com/9CrNQZKj
Соответственно callgatex86 вызывать вот так:
return callgatex86(sdtIndex, 5, 0, ProcessHandle, BaseAddress, ProtectSize, NewProtect, OldProtect);
>mov eax, funcAddr
>call eax
Так и думал, что придется увеличивать число команд. А как лучше потом вызвать этот шеллкод? Если через CallWindowProc, то придется в начале шеллкода извлекать четыре переданных аргумента из стека. Создавать поток как-то слишком громоздко и я не уверен, что получится одной строчкой получить то, что вернула функция.
google:умножение 32 битных чисел на 16 битном процессоре
Первая же ссылка http://asmworld.ru/isxodniki/32-bitnoe-umnozhenie/
1. Запускай игру в оконном режиме.
2. Ставишь точку остановки на нужную процедуру.
3. Когда срабатывает точка остановки, переходишь в отладчик и пошагово проходишь интересующий тебя код.
Адрес IAT правильно указал в ImpRec? Если знаешь IAT - сможешь хоть вручную скриптом на каком-нибудь питоне сгенерить таблицу импортов, там простой формат. Но в целом, ImpRec должен работать. Покажи скриншот ольки и imprec с прописанными адресами.
Как этой программой пользоваться, не пойму. Нашёл, что нужно выбрать dll отдельно. Искал в гугле, но картинок нет, есть только текст.
dll загружено по адресу 10000000. IAT в отдельной секции (если правильно понял) 1003E000. Т.е. там содержатся ссылки на функции. Эту секцию (адрес) надо указывать? Строк с названиями функций у меня нет, всё сожрал злобный протектор.
Должно все работать. Адрес ты указал правильный, он относительно базового адреса модуля должен быть. Названия импортов нинужны, оно само находит, но нужен правильный размер (не могу проверить). В любом случае оно должно по Get Imports хотя бы первые импорты правильно находить. Разверни невалидный узел, посмотри, что внутри пишет, какие адреса там и какие в ольге. Посмотри лог повнимательнее, обрати внимание на image size.
ImpRec не понравилось, что у меня программа была приостановлена через отладчик и из-за этого не получалось? Потому что сейчас указал те же данные и всё получилось. Только F9 нажал перед этим. Отлично, секцию импорта восстановил. Уже вручную пытался, действительно, всё просто, но очень долго. А вспомогательный скрипт писать нисколько не хотелось.
А вот что делать с релоками? Есть один на всю dll. И тот, подозреваю, нужен был для энигмы. Когда энигма релоки переназначает, не понятно. После распаковки, но до копирования распакованного кода обратно в секцию или после распаковки и копирования? Компилятор VS располагает их в отдельной секции .reloc, которая последняя в файле и идёт после .rsrc. Но в моём файле после .rsrc идёт код энигмы.
Ещё и потерял, где настоящая точка входа. Находил ведь, а записать забыл. А как нашёл - не помню.
> релоки
Если ничего не поможет, есть старый трюк: ищешь OEP, ставишь бряк, дампишь. Меняешь у исходного файла базу (или занимаешь чем-то этот адрес до загрузки длл), пересчитываешь OEP на новую базу, ставишь бряк, еще раз дампишь. Ищешь различия, генеришь релоки.
>потерял, где настоящая точка входа
Нашёл по константе 0BB40E64E. Хорошо, что VS оставляет один и те же константы.
>>915924
Благодарю за совет.
Нашёл что-то похожее на таблицу перемещаемых элементов. Энигма не старается скрыть её. Точка остановки на память в месте, где должен быть релок - и тут же находится функция работы с ним.
Только не получается простым копированием.
>LoadLibrary() reports error 000000C1 (ERROR_BAD_EXE_FORMAT)
Как всё муторно.
Возьми gflags.exe из Platform SDK/Debugging Tools For Windows и включи Show loader snaps для того exe, который грузит твою длл. Алсо скриншот нечитаемый.
А, ок, на скриншоте вполне валидные релоки. Посмотри еще, может в флагах образа IMAGE_FILE_RELOCS_STRIPPED стоит. Ну и размер директории релоков проверь.
Копировал-правил, в виртуалку (там запущен не распакованный оригинал), обратно, туда-сюда, ну что ещё надо тебе, загружаю правленый файл, F9 и заработало. Вот что ему не хватало? Столько времени просидел зря.
А антивирусы крайне не любят Энигму, точнее дамп программы с ней. Знаю, что зловреды прячут в протекторе и они не детектятся, а у меня наоборот, выкусил из протектора и детект был 8 или 9, пока секции кода и данных протектора не удалил. Сейчас один чего-то ругается. Может быть, ему не нравится, что получилось? Файл-то дырявый получился, между секциями ничейное пространство. Ещё у меня есть подозрение, что можно распаковать файл из Энигмы без правильного ключа и вообще без ключа, но это можно потом поэкспериментировать. Хреновый из меня реверсер, столько дней угрохал на это.
Читать Талмуд Таненбаума не хочется, хочется, чтобы было повелее, и главное, побольше практики, задачек, каких-нибудь laba1.asm писать.
Просто берёшь и вкатываешься. Для начала научись пользоваться Идой, если ещё не умеешь. А потом сам себе ставишь задачи. И учишь то, что для этого необходимо.
Вот держи https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms646310(v=vs.85).aspx , погуглил за тебя. Это через WinAPI делается.
Oops , извеняюсь за свою тупость. Весьма благодарен.
Возникла проблема с восприятием этой функции(точее с параметрами),
как к примеру отправить нажатие NumLock / просто нажатие ЛКМ - ?
Там же всё элементарно, ты чего на ровном месте застрял? Первый параметр - количество передаваемых структур INPUT, второй - сам массив инпутов, третий - размер структуры INPUT. Щёлкаешь на INPUT и смотришь, что там должно быть. Первый параметр - тип инпута и так далее. Всё расписано же.
Допустим, мне нужно симулировать простое нажатие лкм ->
invoke SendInput, 1,;(кол-во передаваемых структур);massiv,0;(т.к мне нужно использовать INPUT_MOUSE);
Так вот, я не совсем вникаю в то, как должен выглядеь массив, и он должен располагаться в .data сегменте или .code
Массив должен быть типа:
massiv struct
LButton = 0x01
ends
-?
Ну написано же в документации, ну. Зачем ты в асм полез, если не можешь документацию читать? Ну возьми тогда mouse_event, keybd_event они проще, система за тебя сама SendInput соберет.
> он должен располагаться в .data сегменте или .code
Да хоть в .rsrc, всем похуй.
> как должен выглядеь массив
Как массив. Структуры городить не обязательно.
start: invoke SendInput,2,events,28
invoke ExitProcess,0
events dd INPUT_MOUSE ; INPUT.type
dd 0, 0 ; MOUSE_INPUT.dx/dy
dd 0 ; MOUSE_INPUT.mouseData
dd MOUSEEVENTF_LEFTDOWN ; MOUSE_INPUT.dwFlags
dd 0, 0 ; MOUSE_INPUT.time/dwExtraInfo
dd INPUT_MOUSE ; INPUT.type
dd 0, 0 ; MOUSE_INPUT.dx/dy
dd 0 ; MOUSE_INPUT.mouseData
dd MOUSEEVENTF_LEFTUP ; MOUSE_INPUT.dwFlags
dd 0, 0 ; MOUSE_INPUT.time/dwExtraInfo
Забил покуда из за недостатка знаний на SendInputs(т.к так и не разобрался, как это работает),
использую "устаревшие" как мне говорят mouse_event, вот.
Да , забыл сказать, работаю в masm32 , использовать int33 и использовать CX и DX - не получится .
.data
POINTER STRUC
X DD ?
Y DD ?
POINTER ENDS
XX DD ?
YY DD ?
.code
start:
invoke GetCursorPos, POINTER
Mov eax,POINTER.X
Mov XX,eax
mov eax,POINTER.Y
mov YY,eax
MOV edx,XX
Что делаю не так?
Я вот вижу, как ты определил структуру (тип), но не вижу, где бы ты создавал переменную этого типа. Не знаю масма, если что.
Переменные должны были быть long , но как их вписать в асм'е покуда хз.
Решил путем
offset'a а точнее ADDR.
в MyPoint.x записываются координаты x,
а в MyPoint.y записываются координаты в y,
.data
MyPoint POINT <>
.code
start:
invoke GetCursorPos, ADDR MyPoint
mov eax,MyPoint.x
mov ebx,MyPoint.y
invoke ExitProcess,0
end start
Ну вот, сам решил, мог бы и не спрашивать в треде.
> Переменные должны были быть long , но как их вписать в асм'е покуда хз.
Очевидно, что никак (хотя в масме вроде были алиасы). Все эти int/uint/long/ulong/size_t и указатели в 32-битном коде - это дворды, т.е., dd.
>Очевидно, что никак (хотя в масме вроде были алиасы). Все эти int/uint/long/ulong/size_t и указатели в 32-битном коде - это дворды, т.е., dd.
За это благодарен.
>Ну вот, сам решил, мог бы и не спрашивать в треде.
Я ожидал что мне поможет кто-то более опытный, и мне не нужно будет копаться на всяких форумах/бордах/электронных книгах и тратить время.
" MyPoint POINT <> " Как на пике , или - ?
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. Это создание окна. Неужели есть отдельная полнофункциональная версия?
Так есть жи декомпилятор от русского автора. Много интересного показывает, и native ему не помеха.
VB Decompiler Pro? Его и использую. Ида так же дизассемблирует. Но проблема в том, что не могу найти ни место генерации ключа, ни место хранения данных о регистрации. В программе (отдельном модуле, их много, но ничего другого не загружается) всего несколько десятков функций. Но нет ничего. Не пойму, как программа определяет, что она не зарегистрирована. Как в VB может такое быть? Может быть, получается помимо отладчика через p-code что-то выполнить? Нет идей.
Что за программа? Уверен, что она вообще умеет превращаться в полную версию, а не качать апдейт при вводе правильного ключа, например?
А нет, что-то нашёл. Очень уж непонятен этот Native VB. После замены условия программа завершилась сообщением об ошибке "No current record." Значит, в базе данных где-то должен ключ храниться. А база данных "Standard Jet DB".
>>920100
Да ни в чём не уверен, разве кроме скачивания чего-то из интернета, потому что в то время это было не распространено. У меня даже не получается посмотреть, что будет после завершения триала, т.к. счётчик не уменьшается.
Ассемблер: абсолютно похуй, как его учить - можно хоть с Human Resource Machine начать, продолжить TIS-100, а потом уже что-то серьезное читать. Реверсинг: beginners.re, а потом уже сам поймешь, надо ли оно тебе, и что учить дальше.
2. Сделал образ диска .iso и в VirtualBox поставил его в виртуальную машину, чтобы с него считывалась эта ОС, выводящая hello world.
3. Выводит ошибку.
Что я делал не так?
Сделай образ дискеты, а не диска.
Когда сам асм пишешь понимаешь, что происходит. А понять ту мешанину, после декомпиляции очень сложно.
Ни на каком. Для поднятия скилла реверса нужно, как ни странно, реверсить, и чем больше, тем лучше.
Мимо ньюфаг и ОП
> А понять ту мешанину, после декомпиляции очень сложно.
Чтобы понять выхлоп 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!
А потом, с опытом, придет способность делать то же в уме (а также пользоваться правильными инструментами или писать их самому, чтобы не делать этого в уме).
Вот эт интересно, а не то что анон выше посоветовал, чтоб приседать на бутылку было не больно, нужно приседать на бутылку. Ахуительные советы блять. Но ведь есть жи особенности как чо делать. Сам то наверное как родился первую прогу реверснул и все понял епт.
>чтоб приседать на бутылку было не больно, нужно приседать на бутылку.
Тут ты обосрался.
Судя по местным заседалам из /po/ эта тактика работает.
З.ы пока не искатаешь дисциплину ЭВМ хотя бы поверхностно, хуй ты станешь адекватным реверсером.
Да и к тому же что бы понять ну "мешанину" после декомпиляции нужно хотя бы немного изучить структуру компилятора которым и была "написана" программа.
Ну и как совет больше практикуйся приседай на бутылку , не в реверсе а в написании программ на ASM.
А то в одиночку как-то медленно выходит.
>Сам то наверное как родился первую прогу реверснул и все понял епт.
Расскажу свою историю.
Реверс давно меня заинтересовал, поэтому плохо помню, как учился.
Сначала кодил на С(++). Даже не понимал, зачем нужен этот Debug, мне и Release подходит. Как-то потихоньку заинтересовался асмом, когда нажимаешь "Go to disassembly" в Visual Studio интересно было смотреть, во что превращается исходный код. Даже каким-то образом скачал Иду, наверное 5.2, а может и из 4 версии. Но ничего не было в этой программе понятно. Благодаря книге "Образ мышления - дизассемблер Ida" разобрался в этой программе. Но до этого мне понадобилось около 2 месяцев на изучение ассемблера, потому что было абсолютно непонятно, то там происходит. Не помню, почему так долго, может быть, из-за учёбы, а может быть некуда было спешить. Постепенно увлекался, это было как хобби.
А вот сейчас, когда пытаюсь зарабатывать с помощью реверса, стало понятно, что все эти годы занимался фигнёй. Не было у меня практики. Разреверсить функцию или сетевой протокол в незащищённой программе могу. С некоторым трудом могу восстановить формат файла. Может ещё чего по мелочи. Но если программа как-то зашифрована или накрыта протектором, то уже не знаю, что делать. Приходится отказываться от приличного количества работы только из-за того, что не знаю, как её выполнять. Так что прав тот анон. Только практика может сделать из тебя реверсера. Когда постоянно сталкиваешься с чем-то незнакомым. А не так, как получилось у меня. Теперь приходится навёрстывать. А ещё на асме не пишу.
Иногда смотрю, как в kernel32.dll или user32.dll выполняется функция или почему возвращает неверный результат. Но не так глобально, как у тебя. Тебе в ReactOS надо вливаться. Или слишком разные у вас пути?
Конечно разные. Они со своей политикой не подсматривания в сырцы и не дизасма саих файлов далеко не уедут. Собственно по их прогрессу и так видно.
Да и видел я сырцы Вынь2000 и WRK, поздно мне туда.
> политикой не подсматривания в сырцы
У них скорее политика "не пойман - не вор". Внутренние структуры и функции совпадают - они же не из астрала эти данные взяли? Или у них clean room с двумя командами?
>Или у них clean room с двумя командами?
Таки да, иначе бы их давно пидорнул МС. Только чистая комната спасёт их от озалупливания Майкрософтом, и они это прекрасно понимают. Поэтому у них до сих пор глючный клон 16 летней ОС.
Впрочем, совпадение там весьма условное. Я как-то сравнивал пару рандомных функций с кодом WRK- совсем иной подход.
Ну в общем процесс идёт, появилось пару вопросов. Надекомпилял как смог функцию IovUnloadDrivers, из Win2k3 SP2 x64, вот результаты:
http://pastebin.com/uH1gD8jE
В общем вопросы таковы:
Что за взаимная мастурбация с переменными v16 и v17? Что я тут проебал?
Какой тип выставить переменной Object? Функция KeWaitForSingleObject жрёт PVOID, но тут явно что-то большее должно быть. Может это связано с дрочкой v16 и v17.
И вообще, скажите, что я сделал не так. В реверсе полный дуб.
> Object
Очевидно, что это структура, и ты ее не задефайнил. Гугли DISPATCHER_HEADER для начала.
> Только практика может сделать из тебя реверсера
>Приходится отказываться от приличного количества работы
Дохуя напрактиковал отказы от работы?
>DISPATCHER_HEADER
Ага, подошло. Правда в ядре чаще юзают KEVENT и ему подобное, но ничего кроме лишнего уровня она не добавляет. Так же заметил функцию в заголовочном файле, которая сворачивает всю инициализацию объекта ожидания до вызова одной строчки. Жить стало лучше, жить стало веселее.
Вот вопрос- а как такое отгадывать? Остальное я достал из вызываемых функций, которые хотя бы как-то описаны, а вот этот объект юзается только в функции, принимающей PVOID, то есть никакой информации толком нет. Правда конкретно эту я бы мог отгадать сам по примерам другого кода, использующего функцию KeWaitForSingleObject, но как быть с кодом, где никаких подсказок нет? Как реконструировать структуры по коду?
Так же я заметил, что проебался с маппингом переменных, так как строки
driverObject = 0i64;
have_next_device = 0;
while ( driverObject )
{
Явно ошибочны. Размаппил одну из них, переименовал по вкусу, вроде теперь всё нормально. Зацените:
http://pastebin.com/exhumh83
> как быть с кодом, где никаких подсказок нет
Из названия очевидно, что KeWaitForSingleObject хочет объект, а PVOID должен на что-то указывать. Гуглим или реверсим KeWaitForSingleObject, чтобы узнать, что у объекта должен быть заголовок, и какой тип в этом заголовке типу какого объекта соответствует.
> ничего кроме лишнего уровня она не добавляет
Будешь лениться - запутаешься.
> Как реконструировать структуры по коду?
Найти код, который структуру создает (если повезет) и код, который ее использует. Поля структуры можно восстанавливать полуавтоматически (правой кнопкой, Reconstruct type возможно, это HexRaysCodeXplorer добавляет, не помню), есть еще Create struct from data. Назначение полей выясняется долгим и мучительным анализом работающего с ними кода (или, в случае винды, гугл и символы весьма помогают).
>или, в случае винды, гугл и символы весьма помогают
Да вот у меня сейчас такие функции, про которые гугл выдаёт 3,5 ссылки, из них одна сюда и одна на выложенный мною код. Вообще странно, что никто не выкладывал свои раскопки в этом направлении. Не верю, что я первый тут копаюсь.
АЛСО, зачем сагаешь? Тред хороший же.
Там проблема какая-то со структурными исключениями.
https://habrahabr.ru/company/xakep/blog/260577/
>для реализации поддержки исключений в динамически размещаемом коде на x86 платформе можно выделить минимум три способа:
>Установка/подмена флага ImageDispatchEnable для процесса.
>Подмена типа региона памяти на MEM_IMAGE (для PE-образа без SafeSEH).
>Реализация собственного диспетчера исключений в обход всех проверок.
Может быть, это оно?
Короче разобрался. Нашёл другую либу для загрузки PE из памяти - https://github.com/DarthTon/Blackbone/ С ней всё заработало.
Немного не по теме но подкиньте какой-нибудь литературы для вкатывания в дизассемблирование
Благодарю покорно :3
Распишу свою проблему подробнее. Я хочу для себя писать программки, работающие без специальной ОС чтобы создать армию дронов-автоматчиков. И при этом мои программы будут, естественно больше 510 байт. Так как же загрузить в оперативную память код из участков памяти после первого (загрузочного) сектора?
Уже, похоже, решил проблему. Но я ещё не проверял, спать хочу. Вот здесь http://metanit.com/assembler/articles/MiniOS.php я нашёл код и загрузчика и ядра и даже программы для изменения текста.
Надеюсь меня не зобанют за рекламу сайта, на который только что наткнулся
NEKOKIE. так в видеопамять напрямую и писали.
Посмотри ещё http://osdev.ru/viewtopic.php?f=4&t=808
Это загрузчик ядра OS/2 (кто-то помнит такую?) - со своей собственной функциональностью запуска модулей и проч... в итоге получился такой небольшой DOS. Может жить и отдельно от OS/2 - на FAT/FAT32 разделе.
У кого-нибудь есть эта версия протектора? Сам нашёл только 2.1.0.
Случайно 2 одинаковые картинки прикрепил из-за бага двача
бамп, срочно надо. А то завтра смогу только после 15:00 вернуться к программе, но на завтра я запланировал просмотр анимы.
>Как пишут на васме
Он же лежит уже несколько месяцев?
АЛСО, отличный сайт для изучающих глубины Windows:
http://geoffchappell.com/
Описание структур со смещениями для всех версий венды от NT 3.5 до десяточки, функции и ещё много всего. Я охуел от полезности этого сайта и решил его себе скачать целиком.
>Описание структур со смещениями для всех версий венды от NT 3.5 до десяточки
http://msdn.moonsols.com/winxpsp3_x86/PEB.html
>Он же лежит уже несколько месяцев?
http://wasm.in/forum/threads/kto-nibud-lomal-vmprotect.20683/
Так и не понял в чём проблема, но решил тем что заменил
loop метка
на
dec cx
cmp cx,0
jz метка
>Так и не понял в чём проблема
А где у тебя там было вычитание из cx?
>dec cx
>cmp cx,0
Нет нужды сравнивать с нулём.
>А что по-твоему делает loop?
LOOP rCX
Decrement count; Jump short if count!=0
Ну да, не знал об этом. Ни разу не попадалась такая команда. В таком случае, у него cx = 0 в самом начале и не видно, чтобы ещё какая-то инициализация была, кроме той странной функции, что не приведена.
Дональт Кнут.
proverka увеличивает значение cx
asmworld.ru, я там научился хелло ворлд делать в досе и простейший калькулятор. Потом походил по другим сайтам и теперь могу выводить и вводить буковки без специальной операционной системы (без линукса, виндовса).
Если ты про Windows, то забудь сразу. Если DOS, то научись сначала чем-нибудь попроще пользоваться, типа https://en.wikipedia.org/wiki/Mode_13h а потом уже научишься VESA ебать.
В этом случае совет все равно в силе. int 10h/func 00h/mode 13h - это BIOS.
Мне нужно обойти защиту, которую так и не смог снять (VMProtect).
Защита контролирует контрольную сумму всех исполняемых файлов (легко обходится), наличие отладчика (тут уже никак не получилось) и, самое для меня трудное, проверяет, кто вызывает функцию из защищённой dll. Если вызывает нужный exe-файл (не знаю, как определяет, только по имени или как-то ещё), то всё в порядке. А если в стеке присутствует что-то другое (даже не на вершине стека, а предыдущая функция), то функция не срабатывает, как надо.
Идея у меня такая - увеличить виртуальный размер последней секции (не хочу, чтобы размер исполняемого файла менялся) и спроецировать на свободное место свою dll, которая будет вызывать нужные функции и которая заменит несколько функций в импорте исполняемого файла.
Чтобы избежать инъекции кода (как бы защита контролирует и этот способ, но не проверял, доверился описанию), добавил свою dll в импорт exe, которая при загрузке должна будет делать всю работу.
Как решаются подобные задачи?
> В чём различия масма, фасма, тасма?
В директивах компилятору. В способе записи адресов (все эти квадратные скобки, offset, addr, ptr и т. п.). В макроязыке. В основном, код от одного ассемблера можно преобразовать в другой очень быстро, вручную или какими-нибудь регэкспами. А еще есть AT&T-синтаксис, у них все через жопу.
>Идея у меня такая - увеличить виртуальный размер последней секции (не хочу, чтобы размер исполняемого файла менялся) и спроецировать на свободное место свою dll, которая будет вызывать нужные функции и которая заменит несколько функций в импорте исполняемого файла.
Разве вмпротект позволит это сделать? Он же должен чекать контрольную сумму того исполняемого файла которым он накрыт. Или там только длл накрыта, а экзешник не накрыт?
Всё сделал, как планировал. Увеличил виртуальный размер секции, модифицировал MemoryModule, чтобы можно было загружать исполняемый файл без выделения памяти, создал две dll, чтобы не было инъекции, одна загружается через импорт и проецирует вторую в нужную секцию. Вторая подменяет адреса нужных мне функций и реализует необходимый функционал. Всё успешно загружается, лог пишется. Но ничего не работает. Неужели протектор контролирует адрес вызываемой функции? Или контролирует границы секции, было так, а стало больше и вызывает кто-то за пределами? Ну что ему ещё не хватает?
>>930247
>Или там только длл накрыта
Накрыта dll, но защита контролирует целостность всех остальных модулей. Даже удаляет лишние dll, хорошо, что только по расширению проверяет, достаточно переименовать и такой файл не трогает. Размер не проверяется, только CRC32, что очень легко обходится.
Так уж получилось, что у меня есть фетиш - писать ботов.
До этого ограничивался Cheat Engine-ом для поиска базовых адресов, оффсетов и т.д., но развиваться все же хочется.
Знаний минимум, ботов писал на простеньком Autoit, поначалу были обычные кликеры, потом бот работающий с пикселями, а теперь уже бот работающий с памятью.
Так уж получилось, что хочу поднять уровень своих знаний и доставать самую годноту с помощью Ollydbg(если я правильно понял, он имеет прямое отношение к ассемблеру).
Т.е., с Cheat Engine не напишешь бота с функцией Vac хака(функция вакуума, которая притягивает всех мобов к персонажу) и т.д., тут уже нужен Ollydbg для получения этих данных.
Будьте любезны, накидайте гайдиков и т.д., где затрагивают подобную тему.
Заранее премного благодарен.
OllyDbg - это отладчик. С помощью него можно найти адреса необходимых тебе функций. Но вот писать своего бота ты будешь на каком-то языке программирования. Можешь выбрать любой язык, какой понравится.
Спасибо за ответ анон, я это уже знаю.
Видимо я неправильно объяснил...
Я буду и дальше писать на Autoit, благо все нужное мне в нем есть, вплоть до инъекций, единственный его большой минус - отсутствие многопоточности.
Ну так вот, я просто хочу научиться доставать из Ollydbg данные, которые с помощью Cheat Engine не найти.
Пример:
Я вижу HP и MP своего персонажа и легко нахожу их базовые адреса и оффсеты с помощью Cheat Engine, делаю поиски этих данный с 4byte. Но и есть и такие вещи, которые я не вижу. Например, скорость атаки, скорость бега, расположения мобов на карте и т.д.
Вот для поиска именно таких значений мне и нужен Ollydbg.
Да вытолко пиздеть умеете, а когда надо отреверсить блоб модуль ядра нвидия то говорите что нвидия ненужна.
Ну да, люнупс своим требованием квалификации создаёт рабочие места на пустом месте.
Впрочем, мы отклонились от темы.
http://pastebin.com/GHbjYV0h
Он должен предлагать ввести число, потом ввести второе число, потом ввсети + или - или * или / и вывести что получилось. Но не всегда можно увидеть что вводишь и делить нельзя.
на голой без ОС
Следующий день подходит к концу, а борьба продолжается. Защита действительно проверяет адрес вызывающей функции и, если он не равен тому, что в исполняемом файле, функция не работает. Такое нагородил уже в exe, приходится убирать весь код вокруг вызова, размещать его в другом месте, а здесь уже делать возможность вызова нужной мне функции. Хорошо, хоть у "cmp eax, 0FFFFFFFFh", которая идёт сразу же после функции, и "ret xxx" размер опкодов одинаков, а то ещё большие костыли пришлось бы городить. И всё это вручную. Плохо быть мной.
Какая-то идиотская, ни от чего не защищающая проверка. Ищется в .exe байт 0xc3, все функции из .exe вызываются через трамплин, заменяющий оригинальный адрес возврата на адрес байта 0xc3, а за ним уже push-ащий оригинальный адрес возврата, все это можно автоматически генерить.
>Какая-то идиотская, ни от чего не защищающая проверка
И это хорошо. Разработчику достаточно было немного усложнить свою защиту и было бы уже очень не просто. А тут даже исполняемый файл можно изменить без сложностей. Хорошо, что разработчик не понимает в реверсе. Зато защиту свою продаёт за даллары.
>Ищется в .exe байт 0xc3
Не пойму, что ты имеешь в виду. Можешь в псевдокоде показать?
Вызываемая функция находится в защищённой dll, адрес возврата в этой функции проверяется и, если он не совпадает с тем, что в exe файле, функция просто не работает.
> разработчик не понимает в реверсе
Лолшто? Вмпротект сделал чувак с 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), оно берет со стека следующий адрес и возвращается уже в твой код.
>Вмпротект сделал чувак с exelab (бывший cracklab) и как раз в реверсе он разбирается охуенно
Нет, ты не понял. С VMProtect всё в порядке. Сам протектор использован для усложнения реверса dll. Но вот разработчик этой самой dll как раз в реверсе не очень-то и понимает. Вот он и продаёт свое поделие за даллары. Надеюсь, он не предусмотрел таймаут между вызовами функций.
>add eax,RETN_RVA ; RVA любого байтика C3 из DLL
В данном случае так не получится. Адрес возврата должен точно соответствовать определённому числу, тому, где находится вызов функции в exe. А после вызова идут проверки. Соответственно, чтобы вызов этой функции в самом exe работал, пришлось городить переходы в свободные области файла, а здесь делать нормальный вызов с возвратом прямо посередине существующей функции (а чтобы не мучаться с поиском этих функций, добавил их в экспорт).
Поцоны, выручите ньюфага по ассемблеру, вернее ассемблеру в FASM. Хочу себе вывести на экран линию между двумя точками, как в пеинте. Пока что я только начал. Комментарии ставить не буду чтобы поучились реверс инженирингу.
Так не работает почему-то
http://pastebin.com/mFP1UZR6
> Комментарии ставить не буду чтобы поучились реверс инженирингу.
Отвечать не будем, чтобы поучился гуглить.
Сходи по ссылкам в статье криса (если сдохли, есть веб.архив.орг). Там, в частности, упоминается CRC and how to reverse it, ее и читай. И там вроде код был.
>CRC and how to reverse it
Моя благодарность тебе, анон. Не знал, как на английском задать подобный вопрос. Через него вышел на вот этот pdf https://sar.informatik.hu-berlin.de/research/publications/SAR-PR-2006-05/SAR-PR-2006-05_.pdf . Там есть исходный код.
В общем продолжаем банкет. Надекомпилял тут файлик:
http://pastebin.com/dKrhniNV
Проблема в том, что при компиляции обратно секция PAGEVRFC объявляется как Read/Write, а в оригинале она просто Read. В итоге при линковке получается две секции с разными правами. Всякие там
#pragma comment(linker,"/SECTION:PAGEVRFC,R").
не катят, как и R!W.
В общем где я ошибся и как заставить компилировать в секцию с правильными правами?
Ну и ещё у меня только 240 строк, тогда как в оригинале больше 300, ну да пофиг.
Reverse Engineering очевидно же.
>>935483
Ida Pro 6.8, новее не утекали.
Ну или Ida 5.0 раздаётся бесплатно официально.
>Reverse Engineering очевидно же
Написал бы РИ или RE.
С помощью реверст инжениринга можно пересобрать какую нибудь простую игру и выдать за свою. И продавать.
Но я так только думаю. И вообще нужны хорошие навыки как ассемблирования так и дезассемблирования.
В общем пришлось вколачивать костыль в билд систему, чтобы перед линковкой снимать этот атрибут с помощью link.exe.
Вопрос, как обойтись тут без костылей, остаётся в силе.
> #pragma data_seg("PAGEVRFC")
> #pragma const_seg("PAGEVRFC")
> в оригинале она просто Read
Зачем тогда ты создаешь в read-only секции перезаписываемые переменные? Тебе не кажется, что в этом есть какое-то противоречие?
Хмм... Логично. Впилил это, когда массивы не были объявлены константными. Как всегда, компилятор оказался умнее меня.
Блядь, 4 дня никто не мог посмотреть этот код и выявить эту мою тупейшую ошибку.
Спасибо, анон, добра тебе. С твоей помощью полные сырцы ядра Windows XP стали немного ближе.
Блин, куда бы вылить свои наработки? Всякие гитхабы и прочие битбэкеты выпилят результаты реверса винды на раз, кмк. А то вдруг кто присоединится.
На гитхабе, и на битбакете овердохуя результатов реверса, всем похуй. Ну или купи шаред-хостинг за бакс и подними там какой-нибудь fossil.
чтобы сделать шум
И ещё программа не оптимизирована. Если захотите оптимизировать, улучшить и всё такое то можете кидать ответом на мой пост код.
Чтобы запустить её надо сделать загрузочный диск наверное и флешку можно с файлом .BIN, который сделается в FASMе. Я делал образ загрузочного диска и вставлял в виртуальный дисковод виртуальной машины, сделанной с помощью виртуал бокса.
Вот ссылка на мой говнокод:
http://pastebin.com/TMKksb6P
822 байта.
>На гитхабе, и на битбакете овердохуя результатов реверса, всем похуй.
А вот сорцы Вин2000 или там движка престо выпилили. А мой код уже содержит части утёкшего кода Вин2000.
>fossil
Мне ртуть привычнее, ну да ладно.
Слово nodes заменил на casul, на casuls не получается заменить. Остальной текст хитрее закодирован, пока не удалось понять как.
>Слово nodes заменил на casul, на casuls не получается заменить.
Очевидно, что для замены на строку большего размера нужно чуть большее, чем замена пары байт.
>Остальной текст хитрее закодирован, пока не удалось понять как.
Очевидно, что производитель этой фигни не хочет, чтобы удаляли пометку его авторства, и защитил её от нубов.
Всё, осилил. Возле nodes] был пробел, так что удалось вместить, а другие скрытые за кракозябрами слова, нашел по номеру версии и нику, они почему-то не было зашифрованы, заменил их пробелами.
>производитель этой фигни не хочет, чтобы удаляли пометку его авторства, и защитил её от нубов
Не понимаю, зачем так делать, вставлять себя любимого на видное место. По-моему лучше делать вывод информативным, но без излишеств.
>Не понимаю, зачем так делать, вставлять себя любимого на видное место.
Напиши такую фигню сам, узнаешь.
Впрочем да, выводить прямо в окне лишнее, думаю, лучше бы при загрузке баннер там, да в реадми строчка.
И где теперь Зомби, а?
Какие функции биоса надо использовать чтобы записывать данные на жёсткий диск? А на периферию флешка, диск через дисковод. Правда я думаю что для периферии есть функции просто для пересылания сигнала.
Хочу получить базовый адрес kernel32 на си так, чтобы было независимо от версии ОС. Для этого делаю поиск по хэшу модуля. Когда нахожу нужную запись в списке загруженных модулей (то, что это она, видно в олли), возвращаю значения поля DllBase, но вместо адреса кернеля мне возвращается число 11000. Что у меня не так?
Минимальный проверяемый кодес:
https://paste.ofcode.org/3axP4kLLgPS99fPtFuvMcGh
Да вот, смотри, структуры отличаются, но количество зарезервированных байт одно и то же.
https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa813708(v=vs.85).aspx
ты говоришь странными словами.
http://pastebin.com/0y7hXcCk
1) Установи в BX кроме номера режиа еще и бит 14, считая с 0 (0x4000). Это включит режим линейного фреймбуфера.
2) Адрес фреймбуфера спросишь у функции 0x4f01.
3) К сожалению, этот адрес будет за пределами 640к, поэтому тебе понадобится 32-битный защищенный или нереальный режим (гугли unreal mode), чтобы работать с фреймбуфером.
4) Ну или рисуй по кускам, там вроде можно ебаться с окнами/банками (меня миновала эта участь, так что хуй знает, как там что). Гугли VBE switch bank.
>>940553
С защищенным режимом нужно ебаться больше, и стандартные прерывания там не работают. А VESA легко позволяет переключать окна в реальном режиме. Функция 4F01h возвращает в ES:DI описание видеорежима, по смещению 0Ch находится FAR адрес подпрограммы, переключающей окна (параметры те же, что и у функции 4F05h, но работает без лишних расходов).
См. статьи Сергея Андрианова в "Мире ПК" про VESA.
к примеру game.dll+6552E8 и offset 0x12E464
mov ebx,[game_dll_base]
mov edx,[ebx+0x6552e8]
mov [edx+0x12e464],12345
всякие dword ptr расставить по вкусу, алсо можно сделать lea и сохранить адрес на будущее
В общем чтобы обо мне не забывали. Откопал в ntoswrk.lib объектник с названием mmcompress, пустой правда.
Интересно, это сжатая память планировалась ещё в XP (так как в 2000 я такого не нашёл)? Или я не так понял предназначение?
Что вы ковыряете хрюшу?
Лучше бы дриснятку ковыряли и сделали швабодную реализацию DX12, а по проще это разобрать блоб нвидии и поудалять легаси затычки оттуда.
На GNU/Linux гораздо проще на асме писать, куча инструментов, диссасемблеров, hexdump и все все.
>Что вы ковыряете хрюшу?
Базу для сорцов дай, я хоть дристянку ковырять буду. Ковыряю что есть.
Впрочем имея на руках чуть более полные сорцы, что есть сейчас, можно их будет допилисвать до состояния дристы, спермооси, дристятки и более новых выкидышей МС. Это и планирую в будущем.
Идешь такой на сайт интела, качаешь Intel Architecture Software Development Manual, читаешь от корки до корки. В томе System Programming Guide тебе будет щастье.
Какую базу для сорцов? Продукты майков ковырять очень тяжело должно быть.
Ну нвидии не менее тяжело, но у них хоть нет столько всякого дерьма.
http://www.geforce.com/drivers/results/114232
Там основная часть - ненужно и шлак.
Но есть блоб - модуль ядра 30мб с копейками.
Вот его реверс индженерить было бы норм, было бы годно выпилить поддержку старых карт если там костыли, выпилить поддержку ксорга если там есть костыли для этого.
Оставить DRM EGL для вейланда.
> есть блоб - модуль ядра 30мб с копейками.
Вот почему божественный модуль интела весит всего 1-2 мб, а нвидия накопила хуй знает сколько, в каком стиле они там драйвера пишут?
>Какую базу для сорцов?
Для XP это WRK да утёкшие сорцы Win2000. Ну и в ReactOS никто не мешает подглядывать, хотя это лишнее, они там накодили совсем не то.
>>943287
>нет столько всякого дерьма
>>943289
>блоб - модуль ядра 30мб с копейками
Ага конечно нет дерьма. Я из ntoswrk.lib только чуть больше 100кб среверсил, и то половина из Win2000 скомуниздил. А там всего-то 5мб. С копейками, ага.
Накидайте недо-геймхакеру-новичку книжечек для изучения основ ассемблера.
Хотелось бы понимать, как работают все эти mov, call, ebx, esx и т.д.
Т.е., понимать все творящее в Cheat Engine и OllyDbg, ну и т.д.
Заранее очень благодарен вам.
>олько чуть больше 100кб среверсил, и то половина из Win2000 скомуниздил. А там всего-то 5мб. С копейками, ага.
Ну главное среверсить низкоуровневые вызовы обращения к видеокарте и запросы, они же должны быть видимыми на асме то.
Методом тыка узнать что за что отвечает и сложить все докучи, целый драйвер это 3мб кода должно быть в случае нвидии.
Посоветуйте, пожалуйста, русскоязычный можно и україномовний учебник по ассемблеру для ARM
В армы без знания английского лучше даже не пытаться лезть. Тебе придется читать гигантское количество разнообразных пдф, и никто для тебя переводить их не собирается.
Ладно, похоже придётся английские читать. Просто так будет дольше раза в 1.5-2.5.
А на венду этого всего нету,да.И гуя в винде нема.
>отлаживай
Наверное, разреверси. А чего там интересного? Бегло читал про него когда-то, защита так себе, учитывая такое количество читеров и читов. Он отладчик определяет, целостность файлов на диске и в памяти проверяет?
А ту игру бросил реверсить, не по умениям она мне оказалась. Даже не смог дойти до OEP.
Допустим я хочу просто перевести триал дату вперед. Сложная ли там защита? Никто не занимался этим вопросом?
Зачем тебе интерпрайз? Чего не хватает в комьюнити?
Какого фига на этой картинке структура сегментного дескриптора равна 32 битам, в то время когда на самом деле она равна 64 битам?
Сука, всегда подгорает с этой картинки, за всю индустрию ПК, использующую этот ёбанный стыд и наслоение костылей в продакшене.
http://pastebin.com/svUkdrsU
Теперь понятно. Какой же ужасный рисунок. Как понять нижнее это первое или второе?
Лучше этот.
У фасмы есть fword/pword и tbyte/tword для 48-битных и 80-битных операндов соответственно. Т.е., lgdt fword[GDT]. В качестве альтернативы можно оторвать размерность от GDT (GDT: dd 0x7e10 или label GDT_ at GDT перед lgdt [GDT_]).
Ахда, а ошибка в том, что метка при определении данных получает тип (размер) от определяемых данных. У тебя GDT dd, значит метке GDT присваивается "тип"/размер 32 бита, и значит при lgdt [GDT] фасм пытается сделать lgdt dword[GDT], что, разумеется, неверно.
>отладчик определяет, целостность файлов на диске и в памяти проверяет
Нет, он только чекает процессы, память и диск на знакомые сигнатуры. Ну и подписаны ли у тебя драйвера
https://www.unknowncheats.me/wiki/Valve_Anti-Cheat
Свежее дампа нет, а на дворе уже 2017. Вот никак не могу понять: они вак вообще не обновляют или как?
Я уже почти перешёл в защищённый режим. Но после это команды всё прекращается. Ошибка в виртуал боксе. Может это потому что я использу. virtual box? Может надо qemu использовать?
http://pastebin.com/egDdQCM5
Всё, я похожу понял что было не так. У меня бит P был сброшен, а когда он установлен то ошибки нету. Но я не понимаю из-за чего так. Он же вроде бы как используется другими программами.
Я перешёл в защищённый режим, сделал глобальную дескрипторную таблицу, положил в сегментные регистры селекторы дескрипторов, но адресовать больше 1 МБ не могу. Защищённый режим вообще правда сущетсвует?
http://pastebin.com/TXpR2hfu
> mov edi,0xA0000
Ты включил LFB, но адрес, по которому этот LFB начинается, так и не получил. Дергай 0x4f01, по офсету 0x28 от начала информации о режиме будет адрес буфера.
> mov cx
Не делай так. loop в 32-битном режиме использует ecx.
>loop в 32-битном режиме использует ecx.
А в 64 битном RCX.
Ждём 128 бит, чтобы опять переписывать наш код на асме.
Пишу с ноута, выполняющего 32-битную ОС, рядом 32-битные планшет и телефон. Вокруг меня куча железа с 8- и 16-битными контроллерами. Какие 128 бита, о чем ты вообще?
Сейчас 64 бита норма даже для микроконтроллеров.
Есть нужда в 128 битах, потому как памяти надо все больше, и инструкций все больше появляется, а они опциональные а не стандарт.
AVX2 и все подобное должно войти в стандарт amd128
>Пишу с ноута, выполняющего 32-битную ОС, рядом 32-битные планшет и телефон
Нищеброд. Пишу с ПК х64 (24ГБ ОП), имею ноут х64(8ГБ ОП), даже телефон х64.
http://www.news-journalonline.com/news/20170213/sky-diver-injured-in-deland-remains-hospitalized
>Я пользуюсь железом, которое удовлетворяет мои потребности.
Нищебродские у тебя потребности. У меня сейчас две виртуалки крутятся, браузер с 9000 вкладок, система контроля версий с проектами в сумме с 1млн файлов, и прочий софт. И куча свободной памяти для файлового кеша, что делает работу быстрой как никогда ранее.
А у тебя своп своп нехватка памяти пидор.
Просто из-за таких как ты прогресс стоит, а я не могу делать онли х64 софт. Давно бы выкинуть подсистему SysWOW64 из венды, она бы в полтора раза похудела со всех сторон.
>Просто из-за таких как ты прогресс стоит
Прогресс стоит из-за таких как ты - которые срут на сосаче и выёбуются своим железом.
А мог бы делом заняться, инновации вводить себе в анус
>>948712
Бессмысленное увеличение разрядности регистров - это не прогресс. 64 бита для арифметики не так уж часто нужны. Это обычно либо финансы, где все равно свои типы с фикседпоинтом, и им похуй, на каком int они собраны, либо длинная целочисленная арифметика, которая тоже не зависит от размера регистров.
Увеличенный размер виртуального адресного пространства с одной стороны - штука хорошая, ASLR всякие, меньшая вероятность проблем с фрагментацией. С другой стороны, с увеличением разрядности возникают все более неприятные проблемы с TLB, которые решаются еще более хитрыми способами, и детерминированности в работу системы это нихуя не добавляет.
Браузер с 9000 вкладок - это тоже не прогресс, это полный фэйл интерфейса браузера, интернета и твой собственный ты их никогда не прочитаешь, но однажды проебешь без возможности восстановления.
>Увеличенный размер виртуального адресного пространства
This.
> все более неприятные проблемы с TLB
Для вокрлоадов которые втискивались на старом адресном пространстве TLB хватит за глаза. А для тех, которым на 4GB тесно было лишний раз сходить в page table все равно лучше чем сходить в своп
> детерминированности в работу системы это нихуя не добавляет
Вообще заиваться о детерминированности после появления спекулятивного исполнения/бренч предикшена и гипертредов это как то уже моветон.
https://www.youtube.com/watch?v=ka21Sk_5tdU
Да я видел конкретный пост на svn репозиторий. Но он приватный был уже тогда, а сейчас кажется вообще не пашет.
Впрочем вопрос был в том, откуда они у него и как сделать так же. Если это конечно не подделка.
Как правильно распаковать и запаковать rt.jar чтобы нормально потом воспринялся java-ой ? Мне нужно поменять строку в одном классе, но после того как упаковщик хоть как-то изменяет rt.jar - он перестает нормально восприниматься.
Да не, на видео намного больше, чем есть в 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.
>>948431
Лошье малолетнее. Я на итаниуме работаю на силинок уоллей, уже десять лет все летает.
> Я на итаниуме работаю
Труп ты насилуешь. Его уже все закопали, даже Майкрософт, даже Интел, а ты до сих пор с ним забавляешься. Прекрати.
Не совсем понял сути. Ты хочешь запускать приложения, рассчитанные на win7, на более раннем ядре?
Очевидно, что да. Так же портировать полезные вещи, типа улучшенного менеджера памяти, ALPC, подсистемы Linux приложений, DX10.
Зачем труп мамонта ковырять?
Возьмись за ум, ковыряй линукс.
Сейчас надо все графические либы на вулкан переводить.
>Зачем труп мамонта ковырять?
Потому что он лучше люнупса. Даже сейчас под хрюшей работает больше десктопных ПК, чем работало под люнупсом за всё время его существования.
>Возьмись за ум, ковыряй линукс.
Скучно, он как бы открытый.
>лучше
>работает больше пк
В голосину, там в хрюшемирке драйверов давно нет.
>открытое скучно
Дриснятку ковыряй, выпиливай зонды или дирекикс12 реверси.
https://i.4cdn.org/g/1489035306330.png
Почистили бы говно со своей дриснятки, ато только умничаете что линукс не такой.
В общем продолжаем. Вот код:
http://pastebin.com/zjMJTxq1
что такое с этой переменной v9? Почему ей даётся тоже значение, что и до этой, и выполняется та же проверка? Вообще не разумею.
Спасибо, но все-таки там описывается дос, а где есть материалы по win32?
И как им воспользоваться? Где взять образ системы? Как запустить?
Сначала читаешь книгу Таненбаума про архитектуру компьютера, потом мануалы по конкретным интересующим процессорам (и операционным системам, если не под голое железо пишешь) от производителей. Например, вот Intel: https://software.intel.com/en-us/articles/intel-sdm
Ах да, ещё почитай документацию на ассемблер, которым пользуешься:
http://www.nasm.us/doc/
https://sourceware.org/binutils/docs/as/
https://msdn.microsoft.com/en-us/library/afzk3475.aspx
В общем забъём.
Самый интересный файл в ntoswrk.lib- это файл FOLTZ.obj. Размер его в 151 кб, а IDA там ничегошеньки не видит. Если его открыть в текстовом редакторе, то можно заметить целый вагон инклюдов и прочего, среди которых есть строка
d:\fw\base\oem\src\kernel\patchgd\pgd.c
В общем как бы намекает на то, что там зашифрован код патчгуарда. Я вообще не имею опыта расшифровки файлов с защитой, поэтому прошу помощи сообщества.
Для начала узнать бы что за шифровка.
> там зашифрован код патчгуарда
лицорука.jpg. Вот что бывает, когда люди пользуются готовыми утилитами без малейшего понимания, как они работают.
1) Там две функции из пары инструкций и несколько массивов.
2) Все килобайты - это отладочная инфа, она в релизе даже не линкуется.
>Вот что бывает, когда люди пользуются готовыми утилитами без малейшего понимания, как они работают.
Таки да, я сразу писал, что я макака, обмазался инструментами и надеюсь на результат. Пока чуть больше 300КБ среверсил, из почти 6МБ.
>Все килобайты - это отладочная инфа, она в релизе даже не линкуется.
Хорошо, её можно как-то использовать? Она же явно к патчгуарду относится. Вот список подключаемых заголовочных файлов, дохуя 155 штук. Вижу структурки, видимо, используются там.
Просто я видел код патчгуарда в IDA, там больше 11к строк, и любая информация должна помочь, поэтому нужно извлечь максимум информации из этого файла. Ведь не просто так его пытались спрятать, переименовав из pgd.obj в какой-то там foltz.obj.
> Она же явно к патчгуарду относится
> Ведь не просто так его пытались спрятать
Это ты на основании одного хедера говоришь?
> Хорошо, её можно как-то использовать?
Конечно можно. https://github.com/Microsoft/microsoft-pdb/blob/master/cvdump/cvdump.exe Если не сможешь пропатчить версию подсистемы для запуска утилиты под XP - тебе рано этим заниматься.
А этот PatchGuard в WDK точно есть?
https://rebl0g.wordpress.com/2010/12/09/а-где-patchguard-в-wrk/
Или ты за оригинальное ядро взялся?
>Это ты на основании одного хедера говоришь?
Точнее на основании строки с именем объектного файла. При генерации объектника в него записывается имя этого объектника, и во всех объектных файлах WRK эта строка совпадает с именем самого файла. Кроме одного, угадайте какого.
К тому же размеры, ни один объектник с 3,5 функциями не весит столько, сколько этот. Он вообще один из самых больших, обычно же такие почти пустые весят от 2 до 10кб.
Функции, содержащиеся в нём, никак не могут генерировать столько отладочной информации. А вот код патчгуарда может, так как он лезет во все щели в ядре.
>Если не сможешь пропатчить версию подсистемы для запуска утилиты под XP
С этим даже макака справится.
Впрочем за ссылку спасибо, просматривал аккаунт МС на гитхабе, но до туда не докопался.
>>952899
>А этот PatchGuard в WDK точно есть?
В том то и суть, что нет! Видимо, его отключение в этих функциях сделало так, что при компиляции этого объектного файла туда не попал код самого патчгуарда, а только отладочная информация к нему.
И то хлеб, авось поможет при расшифровке кода самого патчгуарда на втором этапе моей возни.
>Или ты за оригинальное ядро взялся?
Я потыкал палкой всю линейку ядер от Win2000 до Анального обновления десятки, по возможности так же посмотрев отладочные сборки.
ахахах, допрыгался
Это вот дело служит паролем для базы данных.
Насколько я понимаю, dword 83 это какой-то сдвиг фразы "Увррфмсз", потому что когда я ставлю значение 0, то захожу в базу по этой фразе. Как узнать, какая фраза выходит после этого сдвига? Он как-то по ASCII вперед на 83 символа сдвигается или как?
[HKEY_CURRENT_USER\SOFTWARE\mtests]
"t"=dword:00000083
"validate"="Увррфмсз"
; void __fastcall PerfSetLogging(PVOID MaskAddress)
public PerfSetLogging
PerfSetLogging proc near
xor r8d, r8d
cmp byte ptr cs:KeNumberProcessors, r8b
jbe short locret_278
lea rdx, KiProcessorBlock
loc_25B:
mov rax, [rdx]
inc r8d
add rdx, 8
mov [rax-170h], rcx
movsx eax, byte ptr cs:KeNumberProcessors
cmp r8d, eax
jb short loc_25B
locret_278:
retn 0
Указатель дереференсится же. KPRCB лежит в KPCR, к ней и идет обращение. Точнее сказать не могу, возьми символы и посчитай, что конкретно там лежит относительно офсета PrcbData.
>дереференсится
Поясни, не понял. Всё равно не могу понять, как он выходит отрицательным.
У меня получается только такой код, который компилится с точностью вот до этого смещения, которое у меня всегда положительное.
VOID
PerfSetLogging(
PVOID MaskAddress
)
{
ULONG Index;
PKPRCB Prcb;
for (Index = 0; Index < (ULONG)KeNumberProcessors; Index += 1) {
Prcb = KiProcessorBlock[Index];
Prcb->SavedRsp = MaskAddress; // Наобум
}
}
Отвечу за него.
Это значит, что KPCR лежит внутри KPRCB, в функцию передаётся (или каким он образом попадает) указатель на KPCR. А нужно получить указатель на KPRCB, т.е. на начало структуры. Скорее всего, это через макрос делается, что-то типа offsetof, отсюда и отрицательное смещение.
PKPRCB = PKPCR - offsetof(KPRCB, name);
В свою очередь, KPCR получается так:
PKPCR *name = &PKPRCB->name;
>>953996
> KPCR лежит внутри KPRCB
Наоборот.
> Скорее всего, это через макрос делается
Да, только у Microsoft свой, более безопасный offsetof под названием CONTAINING_RECORD:
Prcb = KiProcessorBlock[Index];
CONTAINING_RECORD(Prcb, KPCR, PrcbData)->КакоеТоПолеKPCR = MaskAddress;
> Всё равно не могу понять, как он выходит отрицательным.
Офсет того поля, к которому идет обращение меньше, чем офсет PrcbData. Дельта отрицательная.
>>954118
> как починить
Не использовать это говно? В подсветку асма умеет каждый первый блокнот.
> КакоеТоПолеKPCR
Погуглил за тебя (http://www.geoffchappell.com/studies/windows/km/ntoskrnl/structs/kpcr.htm):
0x0180: KPRCB Prcb; в 64-битной структуре, оказывается, не PrcbData, а просто Prcb
0x180 - 0x170 = 0x10
0x10: PVOID PerfGlobalGroupMask; late 5.2 only
чё я бля непонял
я просто копипастнул сурс какойто тупой проги по дигностике пары партов и памяти на диплом, а запустить не запускается, я и строки кода не понимаю, первый раз асемблер вчера увидел
мне просто над что бы работало и показать мне дадут документ и я домой
>>954131
>>954133
Благодарю, оно самое. Суть метода понял.
Если кому интересен мой прогресс, на данный момент ntoswrk.lib похудел на 365кб (х64), или 327кб (i386), к коду WRK добавлено 577 КБ кода в 39 файлах плюс правки в некоторых исходных.
Ты лучше скажи, ты пробовал компелировать ту срань от ReactOS, которая позволяет современный софт на XP запускать?
One-Core-Api? Там используются файлы реактОС, но проект с ними не связан.
Нет, не пробовал, какая-то непонятная срань. Как вообще можно использовать файлы реактоса, который толком с ХР не совместим, для запуска приложений виста+?
То, что на пикрелейтед верно?
И почему когда выполняю xor reg,reg устанавливаются два флага ZF(потому что результат равен 0) и RF, причем четность?
PF ставится, когда в младшем байте результата четное число единичных битов. Считай, что 0 - тоже четное число.
Посоны, смотрите пикрил. Хочу понять что делает функция + декомпилировать в си-псевдокод. Хекс-рейс не декомпилирует этот участок.
Если я запущу в отладчике этот участок, то эти проблемы исчезнут? Или это навсегда?
Есть ли туториал по отладке для суперньюфагов? Мне не надо ничего менять в программе -- только понять что делает эта функция.
Эта функция из dll, которую использует гуи-программа.
Клево. По какой литературе ты научился так делать? Я в курсе про алгоритм Брезенхема, но не думал, что все вместе займет столь мало строк кода.
>Или это навсегда?
Это пока ты не определишь правильные параметры функции, или её границу, или там ещё чего. В общем в этом месте автоматика дала сбой, и ждёт, что человек решит её проблему.
>Эта функция из dll, которую использует гуи-программа.
А точнее? Нагуглилось вот такое, не оно?
https://docs.thefoundry.co.uk/nuke/63/ndkreference/Plugins/classDD_1_1Image_1_1Reader.html#88840f7e58934404af4d0c7c31c5dcbc
>>927242
В туже копилку:
http://terminus.rewolf.pl/terminus/
Ссылка на шапку, чтобы не забыть после переката.
Вообще, нужно шапку накидать, и добавляться в официальные треды.
>>891716 (OP)
>Нагуглилось вот такое, не оно?
Оно. Но там все равно только доксиген на хедеры.
Сейчас запустил под отладчиком, а эта функция и не вызывается в реальном коде. Вызывается с тем же именем, но с другим набором параметров. Она вот нормально декомпилировалась. Но правда сноумен и хекс-рейс по-разному это сделали.
Буду дальше ковыряться.
Убери прототип нахуй, посмотри, правда ли там функция по джампу или это кусок текущей (что вероятнее), проставь прототип для функции по джампу, проставь прототип для этой функции, и все будет.
>Но правда сноумен и хекс-рейс по-разному это сделали.
Было бы странно, если бы они это сделали одинаково.
Но как глупо сделана защита. В папке "AppData\Roaming\Apowersoft\Apowersoft Phone Manager\" создаётся два скрытых файла, один из которых называется "trial". Мне не было нужды проверять, но догадываюсь, что удалением этого файла продлевается срок триала ещё на 3 дня. Программа (C#) при пошаговой трассировке сама выводит на модуль, в котором содержится проверка лицензии. Разработчик хоть чуть-чуть усложнил поиск этого места путём запуска модуля в памяти (не знаю, как правильно называется это в C#). При этом оставил все названия функций. Хотя бы мучаться не пришлось.
А мой вопрос так и остаётся в силе. Как дебажить ARM приложения? В программировании Android'а не знаком. Нашёл и скачал androl4b. Там есть эмулятор. Но, когда в него перетаскиваешь APK, то пишет INSTALL_FAILED_CONTAINER_ERROR. Погуглил, советуют изменять APK, добавлять какие-то опции в AndroidManifest.xml. Как всё сложно в нём.
Система x86-64. Программа тоже.
Сам разобрался.
r2 для хипстеров. Если тебе нужно не посмотреть пару функций и поправить пару байтов, а именно отреверсить - IDA без вариантов. Доса в досбоксе достаточно. IDA теоретически умеет в Bochs-отладку, практически я никогда не пробовал отлаживать 16-битный код. Алсо, можно собрать кастомный досбокс с их собственным говноотладчиком.
>IDA
не, впизду. слишком жирно и платно. и вообще, я хочу попробовать радар.
попробую фриидос на виртуалке загнать, пишут что что-то из венды поддерживают - наверно нужно ставить радар w32.
а как ты себе представляешь это на досбоксе? это ещё нужно отличать досбокс от программы? ну нахуй такое счастье.
>не, впизду. слишком жирно и платно.
Но это единственный активно развивающийся дизасемблер, и вообще самая лучшая программа для реверса.
С радаром ты будешь ебаться в одиночку, потому что тут его никто не использует.
> Чем они отличаются то
IDA, конечно, тоже полное говно, но она умеет пикать, а если уж соберется что-то испортить, то хотя бы переспрашивает. Если серьезно, то реверсинг - это про восстановление информации. Если информации перед глазами мало, а чтобы получить ее, нужно сплясать на клавиатуре - это хуевая программа. Если единственный гуй у программы - это кривая вебморда, если вообще как-то затесалось слово "веб" в реверсинг, где могут быть сотни мегабайт листингов - это хуевая программа. Если уж есть какие-то претензии к IDA, надо смотреть не на r2, а на Hopper или Binary Ninja (оба платныеПРОПРИЕТАРНЫЕ) - там хотя бы разработчики понимают, какие могут быть требования и цели, а не сооружают вим с дизасмом и фортунками.
немного потыкал. в дебагинге я полный даун.
образы заебатые у фридоса - 400 мб ваще ахуеть.
я уже дико сомневаюсь в идее радара на досе, это же монопроцессная система - хер знает. я прост алкаш, поэтому такой ленивый, завтра разберусь. хотя, я помню тут разбирался в статических анализаторах - запала не на долго хватило...
> debug.com
Возьми турбо дебаггер хотя бы. А вообще, я все еще настоятельно рекомендую посмотреть в сторону Bochs и/или встроенного отладчика досбокса. У Bochs по крайней мере есть GDB-стаб, и с этим уже можно жить.
Что реверсить-то пытаешься?
Отсутствием интерактива. Они высрут свой ассемблерный файл, и делай с ним что хочешь.
ИДА же даёт классную навигацию по коду, построение графа вызовов.
Позволяет определить код как данные и данные как код, когда автоматика ошиблась. Определить, где константа, а где относительное смещение. И ИДА сама повторяет анализ изменившихся мест и дополняет ассемблерный листинг новой информацией, зачастую там, где ты даже не догадывался о связи.
Неинтерактивные дизассемблеры коррекцию анализа или вообще не позволяют, или это настолько неудобно, что тебя это заебёт на второй итерации.
В общем послушай умных людей, не выёбывайся и ставь IDA Pro 6.8.
Какой же ты люнупсоид, если не можешь спиратить винду в виртуальную машину и поставить туда пиратскую же иду?
Для нуфажин, которые могут в ангельский. Всё расписано, разжевано, осталось только положить в рот и переварить.
Сам вижу только один путь - переделать с фиксированного размера на динамический с выделением необходимого количества памяти.
Отлови ссылки на текущий инстанс класса, добавь байтов к последней секции, положи туда новый инстанс. Если релоки в бинарнике есть - это делается чуть ли не автоматически. Если нет - IDA, в принципе, справляется, плюс можно PAGE_NO_ACCESS и VEH прилепить на всякий случай, который будет детектить ошибки обращения к старому инстансу, править указатель и писать лог источников, чтобы ты поправил бинарь.
А если массив не в конце класса? Он идёт после таблицы виртуальных функций. Если изменить размер, это придётся править все относительные ссылки, все не отловишь. Ещё есть абсолютная адресация, т.к. класс глобальный, компилятор некоторые обращения к классу заменил на абсолютные адреса.
> компилятор некоторые обращения к классу заменил на абсолютные адреса
Это не проблема, аболютные адреса IDA тебе найдет, ссылки на регион памяти можно скриптом перечислить.
> придётся править все относительные ссылки, все не отловишь
А вот тут проблема, да. Конечно, динамически (c PAGE_NO_ACCESS) можно отловить все, но из-за постоянной обработки исключений будут тормоза.
Так завтра и начну делать, лол.
>>960640 (OP)
>>960640 (OP)
>>960640 (OP)
>>960640 (OP)
>>960640 (OP)
>>960640 (OP)
Хуй с ней, с шапкой, в следующем треде поправим.
ОП
Спрошу тут может кто знает как в VS2017 С++ проект скомпилить в исполняемый файл с одной секцией. в 2013 получалось в 2017 всегда создает .rdata и .text
Вот что я сделал и вроде как оно даже работает, но правильно ли я не знаю. Подскажите формулу по которой находятся подобные задачи. И да код должен быть универсальным т.е. может быть и 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
mov ax,4C00h
int 21h
Алсо, я понимаю, что в olly я вижу образ процесса, а не дизассемблированный исполняемый файл, и загрузчик может выравнивать образ по размеру страницы оперативной памяти, но не настолько много ж блеть. Или настолько?
И да, исполняемый файл не упакован/не зашифрован, т.к. написан мной.
Вы видите копию треда, сохраненную 24 мая 2017 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.