Сохранен 76
https://2ch.hk/pr/res/447420.html
Прошлые домены больше не функционируют, используйте адрес ARHIVACH.HK.
24 декабря 2023 г. Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

Assembler для чайников!

 Аноним 08/03/15 Вск 20:16:20 #1 №447420 
14258349800090.jpg
сразу FASM (куча литературы, примеры, простота освоения) или MASM (только простота освоения), остальное рукожопное вырвиглазное дерьмо переиначеное как зеркальное отражение названного шайкой пидорасов и оно абсолютно недостпно для изучения(там вместо (intel) mov eax, ebx пишут(AT&T) mov %ebx,%eax, при этом результат одинаковый, ебанутые).
Аноним 08/03/15 Вск 22:36:34 #2 №447526 
>>447420
Начинать с фасма, но с синтаксисом MASM и gas тоже ознакомиться (ибо ассемблерные вставки и чужие проекты).

Библия от Intel: http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html
Библия от AMD: http://developer.amd.com/resources/documentation-articles/developer-guides-manuals/ (раздел Manuals)
Аноним 09/03/15 Пнд 00:11:57 #3 №447569 
wasm.ru - в школе полюбливал сей ресурс.
Аноним 09/03/15 Пнд 00:35:39 #4 №447592 
>>447569
Васм уже разложился и плохо пахнет. Но в архиве на главной все еще много годных статей.
Аноним 09/03/15 Пнд 11:42:11 #5 №447681 
>>447592
Так а по асму только древние статьи и канают, ветхие заветы машинного кода. Ведь архитектуры процессоров особо не меняются, все знания ассемблериста актуальны лет по 10 - 20. Актуальны, конечно, условно, ибо прилагать эти "актуальные" знания на практике имеет всё меньше и меньше смысла (если только ты не компилятор пишешь под конкретную архитектуру).
Аноним 12/03/15 Чтв 02:12:12 #6 №449030 
14261155320130.jpg
спрошу тут
Нужно из кода ассемблера, выдраного из ollydbg переделать под синтаксис gcc. Пытался осилить несколько статей, они в большинстве своем учат самому ассемблеру, мне нужно лишь только gcc версия для иньекций , запилите пожалуйста небольшой гайдик аля MOV EDX, EAX -> movl %edx, %eax если я не ошибаюсь
Аноним 12/03/15 Чтв 03:22:35 #7 №449033 
14261197559170.jpg
>>449030
Отвечу тут. Судя по пикрелейтед, OllyDbg 2 умеет AT&T-шный синтаксис из коробки. Чего ж ты мучаешься тогда?
Алсо, зачем тебе именно AT&T? Гугли "gcc -masm=intel"
Ну и если тебе совершенно необходимо перевести код, меняй операнды местами: у Intel op destination, source, у gas op source, destination (например, mov edx,eax -> movl %eax,%edx) и гугли правильные написания мнемоник, если компилятор будет ругаться. Можешь погуглить какой-нибудь at&t assembler cheat sheet, там будут основные мнемоники.
Аноним 12/03/15 Чтв 09:17:53 #8 №449056 
>>449033
большое спасибо, не знал что можно менять дизассембл в настройках, добра)
Аноним 12/03/15 Чтв 10:17:43 #9 №449064 
>>449056
А ещё можно в исходном файле прописать директиву
.intel_syntax noprefix
Аноним 12/03/15 Чтв 10:23:01 #10 №449065 
14261449819780.jpg
>>449033
собственно всплыли новые траблы
1. все переменные(?) считываются в dex, а в олли дбг они в hex, я закомментил эти команды.
2. есть жалобы от компилятора на некоторые ошибки.
Аноним 12/03/15 Чтв 19:06:42 #11 №449268 
facepalm.jpg
Я думал, у тебя функция простая без зависимостей. Все, что ты закомментил - нужно.
- Все вызываемые функции (call) нужно либо тоже копировать вместе с этой функцией, либо реализовывать непосредственно там, куда ты копируешь код. В любом случае, для начала их нужно как-нибудь назвать.
- Для всех jmp (jz, jnz и т. д.) нужно перед копированием из OllyDbg нужно создать метки (Enter по инструкции call/jmp, правой кнопкой, Add label, называешь как-нибудь, потом минус на numpad, чтобы вернуться обратно).
- Все глобальные данные (там где ds: и адрес) тоже нужно копировать (если по адресу не нули) или хотя бы выделять под них память. И опять же создавать метки.
- В настройках OllyDbg должно быть что-то вроде "Show ARGs and LOCALs in procedures" (так в версии 1 называлось, в 2 ищи сам), если это выключить, не будет соответствующих ошибок при компиляции.

И учитывая, что ты даже близко не представляешь, что делаешь, лучше брось эту глупую затею, найди IDA с HexRays посвежее, нажми F5 и разбирайся, что делает код. Хотя вряд ли ты разберешься, если ты даже функцию правильно вызвать не можешь. Ну или учи асм.
Аноним 12/03/15 Чтв 20:06:40 #12 №449296 
>>449268
это просто иньект кода в сторонний процесс, оллидбгом вырываю функцию - подсатвляю свои переменные и запускаю в процессе клиента.
Беру тот же процесс клиента, активный, все адреса и функции на месте - просто вызываю ту же функцию, но своим потоком, надеюсь ты понял о чем я.
Это первый раз в жизни, когда мне пришлось с асм столкнутся, сейчас попробую все это пропихнуть. Закомментил я ибо "код не понимает букав" e.g. он считывает то что под $ в десятичной. ??возможно стоит поставть h в конце, но будет та же ошибка компиляции, хз что делать.
Аноним 12/03/15 Чтв 21:45:31 #13 №449333 
>>449268
когда выклчил эту штуку вроде ошибок меньше, осталось некорректное считывание 16ричной системы i.e. на
JZ $00525FDC он говорит
{standard input}:23: Error: junk `FDC' after expression
думаю ты понял что я имею ввиду
п.с. код я комментил чтобы все ошибки на экран поместились)
Аноним 12/03/15 Чтв 22:12:33 #14 №449339 
Аноны, начинать с SICP - хорошая идея? Погуглил, вроде бы годная вещь. Алсо, для этого ведь надо ставить vim какой-нибудь?
Аноним 12/03/15 Чтв 22:25:59 #15 №449343 
>>449339
Racket идет со средой разработки DrRacket, вим ставить не надо.
Вещь годная.
sageАноним 12/03/15 Чтв 23:49:02 #16 №449370 
>>449333
У тебя в JZ адрес абсолютный. Даже если это скомпилируется, работать оно будет не так, как ты хочешь. Ты делаешь какую-то бессмысленную ерунду. Если это по туториалу - выкинь его. Чтобы сделать CreateRemoteThread для функции в адресном пространстве другого процесса, ее не нужно никуда копировать, она и так там - достаточно лишь знать ее адрес. Копирование нужно, когда ты хочешь выполнить свой код. И это не просто любой взятый с потолка код, он должен быть написан определенным образом, чтобы не иметь зависимостей от данных и функций, которые ты не копируешь. Использование абсолютной адресации в таком коде требует дополнительных телодвижений, поэтому ее тоже обычно избегают.
Константы в AT&T синтаксисе пишутся так же, как в Си, но с долларом: $12345 (десятичная), $0xdeadbeef (шестнадцатеричная), $0755 (восьмеричная).
Аноним 13/03/15 Птн 00:22:26 #17 №449375 
>>449370
Прости, я знаю, я тебя немного подзаебал, но мы близки к победе. На самом деле туториал говорил очень правдивые вещи. Я какбэ писал: мне нужно в игрульке запускать внутреигровые функции и прочее (БОТ). Для этого я должен в своей программе дать возможность вызывать функции клиента. НО! Некоторые функции требуют каких-либо дейстсвий от пользователя, там поожение мышки. Мы берем эту функцию, вычисляем параметр - меняем его на свой, делаем креатремоттХреад и опа - все работает. Я решил начать с функции без параметров - функция снятия таргета. Вот, с твоей помощью узнал много нового) Сейчас только научился перемещать персонажа, радости полные штаны. Алсо лови пастебин. При переводе всех чисел в $0x[0-F]{1,} ошибка. я залил в пастебин два варианта - мой запиленный по твоим не очень доходящим до меня инструкциям и взятый из олли. http://pastebin.com/8HhEWZBS
sageАноним 13/03/15 Птн 00:50:53 #18 №449383 
>>449375
Что касается ошибок при компиляции:
> Error: bad memory operand `...'
Обращение по адресу (дереференс указателя), $ убираешь.
> Error: operand type mismatch for `call'
$ убираешь.
> operand type mismatch for `jz' (и прочие переходы)
См. >>449268 про метки, иначе управление уйдет в оригинальную функцию (если она будет по старым адресам) или вообще вникуда. Можешь $ убрать и попробовать.
Аноним 15/03/15 Вск 05:17:15 #19 №450282 
14263858358660.png
я решил попробовать другу, более простую функцию, но с параметром. Такая же ошибка была и при компиляции старйо функции, чяднт ?
http://pastebin.com/vb73aktN
Аноним 15/03/15 Вск 21:54:23 #20 №450636 
>>450282
Вообще, линкер падает, потому что он кривой: код нерабочий, но правильный с точки зрения процессора. Но даже если бы он не падал, код бы не заработал так, как ты хочешь.
Инструкция CALL кодируется так: e8 (опкод) и 32-битное смещение вызываемой функции относительно следующей инструкции. Например, если инструкция call 0x00711140 расположена по адресу, ну допустим, 0x400000, то она закодируется, как call (0x00711140 - (0x400000 + 5) = 0x0031113b), т.е., e8 3b 11 31 00.
Если ты выделишь память по адресу 0x400000, запишешь туда этот CALL и передашь управление, процессор считает инструкцию (опкод e8 и 32-битное смещение) и перейдет по адресу 0x400000 (адрес инструкции CALL) + 5 (размер инструкции CALL) + 0x31113b (смещение) = 0x711140, как ты и предполагал.
Но если ты запишешь эту инструкцию по любому другому адресу, процессор при обработке CALL вычислит другой адрес для перехода, а не 0x711140. И после перехода по этому адресу ничего хорошего не произойдет.
Если вызываемая при помощи CALL функция при каждом запуске лежит по одному и тому же адресу, тебе нужно позаменять все относительные call на примерно такие конструкции:
mov $0x00711140, %eax // Загружаем абсолютный адрес функции в eax
call %eax // Вызываем функцию по адресу, содержащемуся в eax.

Так же самая проблема возникнет у тебя с JMP/JZ, как ее устранить, я уже >>449268 говорил.
Аноним 15/03/15 Вск 22:25:31 #21 №450647 
>>450636
я понял, в ресурсе была описана такая функция - клик правой кнопки мышки по объекту(GUID) - переменная - адрес объекта. вот:
wow.Asm.AddLine("mov ecx, {0}", objGUID);
wow.Asm.AddLine("call {0}", fAddress);
wow.Asm.AddLine("retn");
учитывая то что я понял, она должна в инлайн асм выглядеть так, да ?
http://pastebin.com/4xxNjjqH
Аноним 15/03/15 Вск 22:26:11 #22 №450648 
>>450647
\n\t забыл поставить
Аноним 15/03/15 Вск 23:49:36 #23 №450702 
>>450647
Ну почти, но имей в виду, что по соглашению, функции должны сохранять значения регистров EBX ESI EDI, а ты как раз портишь EBX в RightClickF (можешь добавить pushl %ebx в начало и popl %ebx перед retn или использовать EAX для адреса).
Но в данном случае тебе не нужен асм вообще:

int __attribute__((fastcall)) (∗RightClickF)(DWORD guid) = (void ∗) 0x00711140;
RightClickF(12345);

И сгенерируется точно такой же код, только без асмоебли.
sageАноним 15/03/15 Вск 23:52:37 #24 №450704 
>>450702
Вдогонку: конвенция __fastcall предполагает, что первый параметр передается в ECX, второй в EDX, остальные в стеке. Может быть, там какая-нибудь другая конвенция, смотри сам.
Аноним 16/03/15 Пнд 00:13:25 #25 №450715 
14264540054880.jpg
>>450704
так, смотри, я не сильно понял что ты пытался сделать в фастклл, я о таком ни на одном сайте не слышал. Вобщем, я делаю по инжектам, я пытался запустить функцию клика правой кнопкой мышки по объекту РЕСУРС. Самое интересное, что функция ТАК ВЫЗВАЛАСЬ и произошел краш игры (в функцию были хуево переданы параметры). НО ОНА ЗАИНЪЕКТИЛАСЬ. вобщем пастрелейтед и пикрлтд.
http://pastebin.com/VdTizf9C
Аноним 16/03/15 Пнд 01:14:06 #26 №450737 
Если ты уверен, что guid - это именно дворд (в чем я сомневаюсь), тогда тебе нужно передавать в CreateRemoteThread вместо pp прямо (LPVOID) guid. Но это частный случай. Ты можешь передать в стартовую функцию потока только один параметр, поэтому гораздо лучше, если ты передашь массив параметров, а уже в стартовой функции будешь их разгребать. Например, так:

Вызываем:
UINT_PTR params[] = {
guid,
};
...
CreateRemoteThread(..., (LPTHREAD_START_ROUTINE) ta, (LPVOID) params, ...);
...

А RightClickF будет выглядеть примерно так:
void TARGET::RightClickF(UINT_PTR params[]) {
// Вытаскиваешь параметры (ты ведь заранее знаешь, сколько ты их передал).
DWORD guid = params[0];
// int somethingElse = params[1];
// float parameter3 = params[2];
// И т. д., сколько нужно.

// rightClickHandler - указатель на функцию по адресу 0x00711140, которая принимает один параметр.
int __attribute__((fastcall)) (∗rightClickHandler)(DWORD guid) = (void ∗) 0x00711140;
// Вызываешь эту функцию.
rightClickHandler(guid);
}
Аноним 16/03/15 Пнд 01:24:59 #27 №450739 
>>450737
это именно DWORD, функция с одним параметром. Пока я пытаюсь с ней разобраться, для той программы что я хочу сделать не нужно слишком много сложных функций, почему я не хочу использовать фасткалл - на ресурсе, откуда я беру всю информацию о памяти клиента все инжекты оформлены в виде сишарпных команд уровня AutoIt, которые реализует специальная библиотека blackmagic.
То есть как прямо передать guid ? Разве для вызова функции в памяти клиента достаточно записать только функцию, а параметры можно свои ?
sageАноним 16/03/15 Пнд 01:32:41 #28 №450740 
14264587610330.jpg
>>450739
вобщем, я не понимаю как записать в память эти параметры.
Аноним 16/03/15 Пнд 01:59:25 #29 №450744 
>>450740
так, что то я вообще
вобщем, поставив перед guid & я пришел к тому же самому крашу - переменные не записались - чяднт ?
Аноним 16/03/15 Пнд 02:06:20 #30 №450746 

>>450739
> Разве для вызова функции в памяти клиента достаточно записать только функцию, а параметры можно свои
В память нужно записать все, что требуется для работы функции. Давай разберем:
Стартовая функция потока (ThreadProc), которая у тебя RightClickF принимает один параметр, она использует конвенцию __stdcall, поэтому параметры (параметр) передаются через стек в обратном порядке:
(где-то внутри CreateRemoteThread):
push lpParameter // Заталкивает в стек параметр, который ты передал в CreateRemoteThread, т.е., твой DWORD.
call ThreadProc // Вызывает функцию, адрес которой ты передал как THREAD_START_ROUTINE, т.е., RightClickF.
В результате параметр DWORD guid в RightClickF читается из стека и становится равным тому, что ты передал в CreateRemoteThread. Он - просто число и никак не зависит от других данных в вызывающем и вызываемом процессах.

Но если рассмотреть другой пример, если бы у тебя была не RightClickF(DWORD guid), а, например, AnotherThreadFunc(const char message):
const char
message = "hello";
CreateRemoteThread(... (LPTHREAD_START_ROUTINE) AnotherThreadFunc, (LPVOID) message, ...);
После вызова CreateRemoteThread все так же сделает:
...
push lpParameter // Заталкивает в стек параметр, т.е., адрес message.
call ThreadProc
После выполнения этого кода AnotherThreadFunc получает управление, в ее параметр message попадает адрес, который ты передал, но адрес-то этот в вызывающем процессе, а не в клиенте. В результате, при попытке использования параметра в лучшем случае прочитается мусор, а в худшем по этому адресу не окажется ничего, и клиент вывалится. Поэтому чтобы передать указатель, ты выделяешь память на стороне клиента, копируешь туда данные и передаешь указатель уже на эти данные.

Третий пример. Тебе нужно передать два параметра, но ты не можешь - у ThreadProc может быть только один параметр, и CreateRemoteThread принимает только один параметр. Поэтому ты подготавливаешь параметры (выделяешь память на стороне клиента для указателей, если нужно, и т.д.) и пихаешь полученные параметры в массив, который тоже копируешь на сторону клиента. И вот адрес этого массива ты передаешь в CreateRemoteThread. Твоя ThreadProc получит управление, ее первым и единственным параметром будет твой массив.

>>450740
> как записать эти параметры
hProcThread = CreateRemoteThread(hProcess, NULL, NULL, (LPTHREAD_START_ROUTINE)ta, guid, NULL, NULL); если guid не указатель, он один, и он не занимает больше 4 байт (в DWORD как раз 4).

Почитай что-нибудь по конвенциям вызова уже, гораздо понятней все станет.

> я не хочу использовать фасткалл
Ты не хочешь использовать указатель на функцию. А fastcall - всего лишь конвенция вызова (способ передачи параметров в функцию).

И вообще, нахуй так мучаться, погугли "инжект длл", реализуй в длл весь чит, потом научишься еще длл скрывать из списка модулей, и будет заебись.

Алсо, почему падает вызываемая функция - отдельный вопрос. Вангую, там класс, и в ecx не guid должен попадать. Но проверить не могу, в вов не играю.
Аноним 16/03/15 Пнд 02:39:36 #31 №450755 
14264627768610.jpg
>>450746
Вау,
пока я не настолько ахуенен чтобы понять и юзать всю ту инфу что ты мне даешь но я регулярно сохраняю ее в блокнотике)
Я владею только плюсами, как писать длл библиотеки я ни малейшего представления пока не имею. Если я правильно понял - фасткалл - вызывает функцию по адресу, но сама функция же нахоидтся в нашем процессе, вероятно ее тоже придется записать в процесс игры. Но ведь она не в ассеблере, как без компиляции можно запускать +совые функции можно ? Вобщем, если остановится на том что я пока пытаюсь понять, есть функция игры - нажатие левой кнопкой мыши по GUID , она принимает в себя собственно GUID объекта, пикрелейтед. О том, что параметр - гуид я узнал в одном треде, по той же версии игры, тем более это очевидно. Если посомтреть на отчет ошибки - можно понять что проблема все-таки в параметрах, все же я их как-то неправильно передаю. Еще раз пасту закину. http://pastebin.com/VrnvqGnG - код, вот еще тект воверрора, может он тебе о чем то скажет.. http://pastebin.com/iywSyzj3
sageАноним 16/03/15 Пнд 03:42:44 #32 №450769 
>>450755
update: вобщем, я потыкал по разным объектам и посмотрел свзяь с реестром в момент клика - eax - тут хранится одно число, оно постоянно для любого сервера\объекта\места, ebx - адрес объекта в памяти, ecx - адрес функции, что мы вызвали, ebx - GUID объекта (DWORD), esp - некоторое число, для локации \ одинаковыъ объектов - похожее, отличается не сильно, ebp - больше числа esp ровно на 16, esi - адрес объекта(еще раз) , edi - опять некоторое число, которое имеет некоторую зависимость.
Если я инъекутирую в вов асм функцию, которая забивает регистр так как мне надо, потом вызову функцию (которая в есх), все должно работать нормально ? Зачем тогда записывать в процесс параметры?
Аноним 16/03/15 Пнд 04:21:50 #33 №450774 
>>450755
Hу вот смотри, что мы можем увидеть из скриншота кроме блядского AT&T синтаксиса.
1) (0x00711141) В edi записыается то, что ты передал первым параметром функции (ecx).
2) (0x00711143) По адресу edi+0x1a0 что-то читается.
3) Из этого заключаем, что первый параметр нихуя не DWORD, нихуя не guid, и вообще, учитывая, что он передается через ecx, это не __fastcall, а __thiscall, т.е., стандартный способ вызовов методов объекта, когда указатель на объект (this) кладется в ecx, а параметры в стек.
4) (0x00711149, 0x0071114b, 0x0071114e) Оказывается, из переданного в функцию объекта прочитался указатель на какой-то другой объект, у этого объекта мы вызываем какой-то виртуальный метод. Собственно, в этом месте все и падает, потому что передал ты нихуя не объект, и у него нихуя нет указателя на другой объект по смещению 0x1a0.
5) К ESP (указателю стека) функция не обращается (только корректирует стек после чего-то похожего на printf), а retn в конце не чистит стек, что позволяет заключить, что функция наша без аргументов.

Итого: по 0x00711141 лежит невиртуальный метод объекта (видимо, класса Player), который не принимает аргументов (кроме this). Где ты там guid нашел, я не знаю.

> как писать длл библиотеки
Так же как и обычные программы. Это уж точно проще, чем пистаь читы. В любом случае, google gcc make dll или google how to make dll with qt.

> о том, что параметр - гуид я узнал в одном треде
Это в принципе может быть объект класса GUID, хотя вряд ли.

> фасткалл - вызывает функцию по адресу
> но сама функция же нахоидтся в нашем процессе, вероятно ее тоже придется записать в процесс игры
Да, просто копируешь RightClickF в процесс игры, как и раньше и вызываешь. Поменяй только fastcall на, как мы выяснили, thiscall.

>>450769
Через eax, edx, esi, edi, ebx обычно ничего не передается, эти регистры используются для хранения промежуточных значений. esp/ebp - указатель стека и указатель на кадр стека, что это и зачем - гугли про стек, даже в wikibooks все разжевано,

> реестр
> путает регистр и реестр
> пишет чит

> Если я инъекутирую в вов асм функцию, которая забивает регистр так как мне надо
Если ты найдешь, по какому адресу (нихуя не фиксированному скорее всего) хранится адрес объекта player, положишь его в ecx и вызовешь 0x00711140, все будет ок.
Аноним 16/03/15 Пнд 06:34:25 #34 №450784 
GDB хорош но не оч удобен. Есть ли такая программа, которая визуализирует выполнение бинарника:
То есть, на каждый шаг в диссасемблерном коде можно нажать, и посмотреть состояние памяти, что там у нас в стеке, куче, етц.
В скриптовых языках такое видел.
Аноним 16/03/15 Пнд 07:14:52 #35 №450789 
>>450784
А OllyDbg/x64dbg чем не угодили? Можно нажать, можно трейсить, можно смотреть состояние памяти, хэндлы, потоки, кучу, можно грузить символы, пользоваться кучей плагинов и т. д. Или под линукс надо? Для gdb GUI есть.
Аноним 16/03/15 Пнд 11:35:04 #36 №450832 
>>450774
Я понял, я могу вычислить адрес объекта\гуид, у меня уже написан сканер ресурсов который их сохраняет в стек для дальнейшего собирания. То есть, если я запишу в регистр все что там было в момент когда я перехватил функцию, потом просто вызову ее коллом, все должно работать ? Зачем тогда передавать параметры в CreateRemoteThread, если все и так можно записать?
Аноним 16/03/15 Пнд 12:34:12 #37 №450850 
14264984522130.jpg
>>450832
я начал было уже пилить в функцию заполнение регистра нужными данными, но тут отака хуйня. Что делать? Функции 0071140 нет, все начинается с 7С. Алсо адреса сохранились, т.к. бот функционирует
Аноним 16/03/15 Пнд 13:30:53 #38 №450869 
>>450850
Что за гайд, по которому пилишь это?
Интересно почитать про перехват функций etc
Аноним 16/03/15 Пнд 13:36:07 #39 №450871 
>>450869
конкретных гайдов нет, адреса функций нашел на форуме, далее в оллидбдж вбиваю адрес функции, нажимаю F2, захожу в игру - выполняю действие, если происходит остановка процесса - функция найдена правильно. Параметры функций никто не говорит, но есть несколько асм вставок на C# в библиотеке blackmagic, которые обычно пиндосы и используют. Я как бы пытаюсь реализовать то же самое на qt, в итоге задача сводится к тому, чтобы переписать почти все функции библиотеки с нуля, сложно но интересно)
p.s. http://zhyk.ru/forum/showthread.php?t=414162 - c этой статьи я начал.
Аноним 16/03/15 Пнд 14:19:49 #40 №450884 
Зачем нужно изучение ассемблера в современном мире?
Аноним 16/03/15 Пнд 14:23:46 #41 №450887 
>>450884
1. чтобы мозги работали
2. микроконтроллеры
3. работа с памятью процессов
Аноним 16/03/15 Пнд 15:56:44 #42 №450924 
>>450887
содомит
Аноним 16/03/15 Пнд 19:23:30 #43 №451007 
>>450884
А как же я буду вирусы писать?
Трояны штоле на дельфе конпелировать?
Аноним 16/03/15 Пнд 21:39:45 #44 №451068 
>>450887
>>451007
В этом вашем асемблере нет ОПТИМИЗАЦИИ ХВОСТОВОЙ РЕКУРСИИ. Язык, в котором отсутствует даже ОПТИМИЗАЦИЯ ХВОСТОВОЙ РЕКУРСИИ, не стоит учить. Даже обращать внимание на него не стоит. Шах и мат, господа асемблерщики!
Аноним 16/03/15 Пнд 22:32:57 #45 №451097 
>>450832
> Зачем тогда передавать параметры в CreateRemoteThread, если все и так можно записать?
Адрес, скорее всего, не фиксированный и меняется от запуска к запуску.

>>450850
> отака хуйня
Не понял, что ты хочешь сказать этим скриншотом. Адреса в окне кода принадлежат системной библиотеке ntdll. Нажми Ctrl+G, чтобы перейти к нужному адресу.

Статью твою посмотрю чуть позже.

>>450884
Обратная инженерия, отладка, низкоуровневые трюки, понимание сути происходящего при кодинге, ембеддед. Я вообще считаю, что кроме ассемблера программисту желательно еще и о каком-нибудь HDL представление иметь

>>451068
В ассемблере ничего нет. Ассемблер - это транслятор, а не компилятор. Как и многое другое, у кодящего на ассемблере это должно быть в голове. Иначе ниже какого-нибудь скриптоязыка не стоит и пытаться лезть.

>>451007
В ступи сначала.
Аноним 16/03/15 Пнд 22:41:33 #46 №451102 
>>451068
Рекурсия нужна разве что для stack bomb. Всё остальное можно сделать циклами.
Аноним 16/03/15 Пнд 22:41:40 #47 №451103 
>>451097
всмысле все в порядке, посмотри сюда - >>450755
видишь адреса ? они все были с 00 сначала, i.e. 00{0..9}(6), теперь появились >>450850 7С вначале, вообще все поменялось, адреса функций. естесственно, не показываются, это произошело и на ноуте и на пекарне, реинстал-ресет не помог. Как все могло так поменяться ?
Аноним 16/03/15 Пнд 22:43:05 #48 №451104 
>>451103
всмысле адреса другие. стрл g ничего не показывает, я понятия не имею чтопроизошло, мб параметр отображения другой ? Один и тот же процесс всегда открывал
Аноним 16/03/15 Пнд 22:44:21 #49 №451105 
>>451104
Ctrl+G, 0x00711141, Enter, блять. Если там не будет функции, значит у тебя игра по разным адресам грузится. В статье, ссылку на которую ты кидал, есть про базовые адреса.
Аноним 16/03/15 Пнд 22:54:40 #50 №451114 
>>451105
то есть как, одна версия игры уже 7й год кажись, все это время адреса не менялись, на форуме потерты все оффсеты, и тут оппа - мы меняем базовый адрес ? 7С с начала и до конца, если прлистывать, раньше были 00, это может быть связяно ТОЛЬКО с заменой базового адреса, то есть я в оллидбг ничего лишнего не мог клацнуть ?
sageАноним 16/03/15 Пнд 23:04:00 #51 №451121 
>>451114
даже если так, базовый адрес поменялся, то почему продолжает правильно работать моя прога? Все характеристики верно отображатся, сканер объектов работает. Ведь весь этот ункционал основан н тех же самых адресах, а оллидбг выдает 7С, втф
Аноним 16/03/15 Пнд 23:04:57 #52 №451122 
>>451114
Скриншот Alt+E и того, что тебе говорит олли при переходе на 0x00711140 по Ctrl+G.
Аноним 16/03/15 Пнд 23:13:56 #53 №451129 
>>451122
прости аутиста,
в ктрл дж я пропускал 0 в названии, при этом мне почему то казалось, что олли показывает ВСЕ адреса, вобщем, надо поспать
Аноним 16/03/15 Пнд 23:25:13 #54 №451138 
>>451129
Олли показывает непрерывные регионы памяти одного типа (их по Alt+M посмотреть можно, Enter выбрать).
Аноним 17/03/15 Втр 01:14:49 #55 №451211 
>>451102
Циклы не модны, в этом сезоне их никто не носит.
Аноним 17/03/15 Втр 22:05:10 #56 №451562 
14266191100140.png
я попытался запилить инжект заменяя регистры EAX--EIP теми что были при перехвате функций, но опять был воверрор, подозреваю, что нужно менять еще и пикрелейтед + я не понимаю, где в оллидбдж показывается стек.
Аноним 17/03/15 Втр 23:00:18 #57 №451594 
>>451562
Стек ниже твоего пикрелейтед. А ты опять какую-то хуйню творишь.
Аноним 18/03/15 Срд 00:58:03 #58 №451653 
14266294831980.png
14266294832001.png
Так, я пытался разобраться сам,но у меня все шло не так как нужно, в память записывалось хуй знает что, функция почти всегда вызывала вылет. Вобщем, тот же самый RIghtClick - нажать правой кнопкой мыши по объекту, я заскринил оллидбдж в момент перехвата функции во время вызова из игры, то есть как все должно быть (1й пик). 2й пик - то что поисходит у меня при перехвате оллидбдж МОЕГО инжекта, и собсна пастебин. Я просто уже не могу. Как я поступал: запускал клиент, привязывал оллидбдж (каждый раз у объекта разный адрес, постарался все заскринить с 1го рана клиента). http://pastebin.com/LizUQ9Vq
Аноним 18/03/15 Срд 01:09:03 #59 №451657 
google calling conventions, ну?
Тебе не нужно устанавливать перед вызовом НИКАКИХ регистров, кроме ecx. В ecx передается указатель на объект.
Аноним 18/03/15 Срд 01:21:39 #60 №451663 
>>451657
ну а чем мне может ЭТО помешать ? у меня и так происходит вылет клиента, я понятия не имею с чем это связано, посмотри там на память\исходники, я просто не понимаю уже
Аноним 18/03/15 Срд 01:23:18 #61 №451664 
>>451663
Есть фэйкожаббер или почта?
Аноним 18/03/15 Срд 01:34:11 #62 №451667 
>>451664
[email protected]
Аноним 20/03/15 Птн 20:28:57 #63 №452966 
Помогите определить тип адресации. Простую я вроде как понял, а вот когда составная не получается.
Есть такая строка:
83 3D 34 F3 19 01 04 cmp dword pts ds:[119F334h],4
какой тут будет и как вы это поняли?
Аноним 21/03/15 Суб 00:39:35 #64 №453091 
>>452966
Это какие-то локальные мемы^W термины советские? И зачем они нужны? Для доступа к памяти используется такая штука, как effective address, состоящий из base_reg+index_reg*scale+displacement, где любой из компонентов может отсутствовать например, в твоей cmp будет только displacement.
Аноним 21/03/15 Суб 09:19:35 #65 №453159 
>>453091
Сегментный префикс используется всегда, просто сейчас ты сам его обычно не пишешь. У него же очевидный копипаст из окна дизасма оллидебага.
Аноним 21/03/15 Суб 19:23:46 #66 №453375 
>>453159
Каким образом это относится с моему посту или к посту спрашивающего? Алсо, если "сегментный префикс" - это segment override, то используется он редко, потому что у инструкций/регистров есть дефолтовые сегменты. Но иногда бывает нужно, например, для доступа к TEB в винде (fs/gs).
Аноним 22/03/15 Вск 03:38:17 #67 №453599 
>>447420
>MASM
Слышал он добавляет после линковки к файлу твой хард айди. Правда?
Аноним 22/03/15 Вск 04:32:46 #68 №453603 
>>453599
Возможно, ты имеешь в виду Rich-сигнатуру, добавляемую линкером от Microsoft (link.exe). В ней содержится статистика использованных для сборки утилит и некоторых библиотек - ничего уникального, никаких серийных номеров или чего-то подобного.
По первому результату в гугле достаточно информации, чтобы пропатчить слинкованный файл или даже сам линкер, если Rich чем-то мешает.
Аноним 24/03/15 Втр 11:09:54 #69 №454456 
Асм-кун еще здесь? который фейкомыльцо просил Мне еще ждать, или опять начинать вайпать годный тред ?
Аноним 24/03/15 Втр 23:24:14 #70 №454720 
>>454456
Начинай наверное, чего ждать.
Аноним 25/03/15 Срд 15:54:15 #71 №454947 
14272880554040.jpg
14272880554081.jpg
собственно, продолжаю
Пытаюсь вызвать с помощью внешней программы внутренню функцию вова (каст спелла). Для этого я запилил в qt (c++) инджект, который пушает нужные параметры, и собственно вызывает функцию каста спелла. Происходит воверрор, итд. Пикрелетед1 - перехват функции оллидбдж, когда я кастую спелл из клиента, пикрелейтед2 - перехват уже заинжекшеной функции, вроде, как мне кажется, проблема в последнем параметре стека, вероятно он там не нужен. Так же в НЕХ под названием ST0-7 есть какие-то значения, возможно, их тоже следует заполнить надлежащим образом. http://pastebin.com/BUfgzYff асм-кун, вернись (
Аноним 25/03/15 Срд 18:21:47 #72 №455022 
>>454947
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
private delegate int CastSpellDelegate(int spellId, int itemId = 0, ulong guid = 0, int isTradeskill = 0, int a5 = 0, int a6 = 0, int a7 = 0);

push 0 //unk a7
push 0 //unk a6
push 0 //unk a5
push 0 //istradeskill
push 0 //high guid
push 0 //low guid
push 0 //itemId
push 1337 //spellId
call 0x0080DA40
add esp, 0x20
retn

kak-to tak.
Аноним 25/03/15 Срд 19:19:04 #73 №455043 
>>455022
функция инжектится, ничего не вылетает, но ничего не происходит, каст идет Frost Armor, id = 168 (A8), версия 3.3.5, все точно так должно быть ? http://pastebin.com/2RDsqHJP
Аноним 25/03/15 Срд 19:28:26 #74 №455052 
14273009069550.jpg
>>455043
отклеилось
Аноним 25/03/15 Срд 19:44:35 #75 №455062 
>>455052
Ну попробуй пушнуть guid игрока. 3.3.5а клиента у меня сейчас под рукой нет.
Аноним 25/03/15 Срд 19:49:02 #76 №455065 
>>455062
это селф-каст, ни одна из функций не запиливает в регистр то, что запиливает функция из клиента => пушается неверные данные, я хз, не на с# пишу, проблемы возникают на ровном месте, пока мне кажется, что то что добавляет в стек моя функция - портит весь инжект (05410018). Как забрать эту штуку не знаю.
comments powered by Disqus

Отзывы и предложения