helldrg Опубликовано 6 октября, 2016 Автор Поделиться Опубликовано 6 октября, 2016 Там точно один тип!!! В дампе я нашел это: Скрытый текст Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 6 октября, 2016 Поделиться Опубликовано 6 октября, 2016 Что то я не вижу в структуре смещения +8 и что в нем находится. Идет +4 и выше 8 пошло, а что там в +8 не понятно. Ссылка на комментарий Поделиться на другие сайты Поделиться
Dino Опубликовано 6 октября, 2016 Поделиться Опубликовано 6 октября, 2016 2 минуты назад, LIRW сказал: Что то я не вижу в структуре смещения +8 и что в нем находится. Идет +4 и выше 8 пошло, а что там в +8 не понятно. это такой кривой ход, что бы вытащить подстроку Ссылка на комментарий Поделиться на другие сайты Поделиться
helldrg Опубликовано 6 октября, 2016 Автор Поделиться Опубликовано 6 октября, 2016 (изменено) LIRW Моя логика такая: я записал в eax,[ecx+10], теперь eax указывает на адрес 0288af90, и когда я хочу сравнить cmp dword ptr[eax+8],'play' то программу крашит. Программу крашит даже если я не сравниваю, а просто что то с этим адресом делаю, например читаю. +8 у меня появляется как: 4 - это четыре байта до нужной строковой переменной и еще 4 - строковую переменную начинаем читать не сначала, а с play, потому что у бота начало такое же как и игрока Если вы что то другое имели ввиду можете поподробней расписать, просто я недалекий в этой области, потихоньку учусь =) (на второй странице есть скрин дампа от которого я отталкиваюсь сейчас) Изменено 6 октября, 2016 пользователем helldrg Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 6 октября, 2016 Поделиться Опубликовано 6 октября, 2016 Интересно, кто же так научил сравнивать то откуда там + 8 взялось ? от + 4 посчитал 4 байта что ли ? +8 там нет - от туда и крашь идет и будет идти. Ссылка на комментарий Поделиться на другие сайты Поделиться
helldrg Опубликовано 6 октября, 2016 Автор Поделиться Опубликовано 6 октября, 2016 LIRW А как считается тогда? Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 6 октября, 2016 Поделиться Опубликовано 6 октября, 2016 6 минут назад, helldrg сказал: А как считается тогда? Сначала нужно понять, что ты конкретно хочешь. Я вот не фига не пойму, но думаю ты хочешь вот что сделать. А то есть со смещения + 4 сравнить определенное количество байт? не всю строку, а на пример байт или 2 байта да ? Блин я писать не могу долго, экран мигает и перегруз может быть в любой момент. Хорошо форум сохраняет не дописанные данные - как это было 10 минут назад, а то есть я вылетел с перегрузом, на форум зашел а текст тут И второе - если сравнить хочешь то, о чем я написал, то почему не берешь всю строку ? переведи этот Стринг или как там его в 4 байта какие не будь и это значение поставь на сравнение. за место Play Ссылка на комментарий Поделиться на другие сайты Поделиться
Dino Опубликовано 6 октября, 2016 Поделиться Опубликовано 6 октября, 2016 (изменено) 20 минуты назад, LIRW сказал: Интересно, кто же так научил сравнивать то откуда там + 8 взялось ? от + 4 посчитал 4 байта что ли ? +8 там нет - от туда и крашь идет и будет идти. Ппфф где ты ошибку нашел? Индексация массива символов "teamplayer" в структуре начинается с 5го байта, т е +4 - 't' +5 - 'e' +6 - 'a' +7 - 'm' +8 - 'p' - [ecx+8] +9 - 'l' +0xa - 'a' +0xb - 'y' +0xc - 'e' +0xd - 'r' +0xe - '\0' Изменено 6 октября, 2016 пользователем Dino 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
helldrg Опубликовано 6 октября, 2016 Автор Поделиться Опубликовано 6 октября, 2016 (изменено) 4 минуты назад, LIRW сказал: Хорошо форум сохраняет не дописанные данные - как это было 10 минут назад, а то есть я вылетел с перегрузом, на форум зашел а текст тут :DDD Я пытаюсь сравнить строку, у которой смещение 4 байта, но первые 4 байта строки содержат 'team', а надо со следующими значит сравнивать 'play'. Отсюда 4 + 4 = 8 смещение Изменено 6 октября, 2016 пользователем helldrg Ссылка на комментарий Поделиться на другие сайты Поделиться
helldrg Опубликовано 6 октября, 2016 Автор Поделиться Опубликовано 6 октября, 2016 Dino Я не знаю откуда, но у Dino качественно расписывать отлично получается =) Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 6 октября, 2016 Поделиться Опубликовано 6 октября, 2016 5 минут назад, Dino сказал: Ппфф где ты ошибку нашел? Интересно, а кто так сравнивает в обще? я такое в обще первый раз сравнение вижу. Не легче с + 4 сравнить количество байт? Кулибин Ссылка на комментарий Поделиться на другие сайты Поделиться
helldrg Опубликовано 6 октября, 2016 Автор Поделиться Опубликовано 6 октября, 2016 Только что, LIRW сказал: Не легче с + 4 сравнить количество байт? В принципе в данной ситуации и количество байт может можно попробовать сравнивать, но бывают ситуации, когда эти переменные занимают одинаковое количество байт, а различие у них только в последнем байте Ссылка на комментарий Поделиться на другие сайты Поделиться
helldrg Опубликовано 6 октября, 2016 Автор Поделиться Опубликовано 6 октября, 2016 Цитата И второе - если сравнить хочешь то, о чем я написал, то почему не берешь всю строку ? переведи этот Стринг или как там его в 4 байта какие не будь и это значение поставь на сравнение. за место Play Интересная идея, сейчас попробую Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 6 октября, 2016 Поделиться Опубликовано 6 октября, 2016 5 минут назад, helldrg сказал: В принципе в данной ситуации и количество байт может можно попробовать сравнивать Если не секрет, что за игра то хоть ? Просто смотри, ты хочешь взять определенное количество байт с инструкции на сравнение, а почему определенное ? а на пример не сразу всю строку ? Переводи всю строку сразу в 4 байта на пример и это будет как раз фильтр на сравнение у смещения +4 и тогда тот скрипт который дал, там за место +8 +4 поставь и сравнение, то что выйдет из переведенного стринга. Ссылка на комментарий Поделиться на другие сайты Поделиться
helldrg Опубликовано 6 октября, 2016 Автор Поделиться Опубликовано 6 октября, 2016 (изменено) 3 минуты назад, LIRW сказал: Если не секрет, что за игра то хоть ? Просто смотри, ты хочешь взять определенное количество байт с инструкции на сравнение, а почему определенное ? а на пример не сразу всю строку ? Command&Conquer:Generals Не всю строку потому что я только 2 способа сравнения знаю: сmp word ptr[eax+8],'pl' // 2 байта сравнивает cmp dword ptr[eax+8],'play' //4 байта сравнивает Сейчас попробую правую часть в байты перевести и сравнить Изменено 6 октября, 2016 пользователем helldrg Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 6 октября, 2016 Поделиться Опубликовано 6 октября, 2016 12 минуты назад, Dino сказал: Ппфф где ты ошибку нашел? А на счет Dino +8 я думал он сравнивает это смещение, а вы тут оказывается вот что задумали Кулибины. Мой скрипт который дал не правильный будет в этом случаи - так как +8 там нет смещения и из за этого и будет крашь. А вот как вы тут делайте - я такое не разу не видал ещо интересно прям. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
helldrg Опубликовано 6 октября, 2016 Автор Поделиться Опубликовано 6 октября, 2016 У меня опять скрипт нельзя активировать((( Почему? Придется опять переписывать. Инструкция адрес не меняет, почему так происходит я не знаю Ссылка на комментарий Поделиться на другие сайты Поделиться
Dino Опубликовано 6 октября, 2016 Поделиться Опубликовано 6 октября, 2016 2 минуты назад, LIRW сказал: А на счет Dino +8 я думал он сравнивает это смещение, а вы тут оказывается вот что задумали Кулибины. Мой скрипт который дал не правильный будет в этом случаи - так как +8 там нет смещения и из за этого и будет крашь. А вот как вы тут делайте - я такое не разу не видал ещо интересно прям. А что ты ожидал там увидеть? Указатель на следующую строку? 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
helldrg Опубликовано 6 октября, 2016 Автор Поделиться Опубликовано 6 октября, 2016 Все равно крашит, когда я начинаю обращаться по указателю, где строковая переменная находится Ссылка на комментарий Поделиться на другие сайты Поделиться
Dino Опубликовано 6 октября, 2016 Поделиться Опубликовано 6 октября, 2016 тыж понимаешь что это то же самое? в регистр eax запихивается подстрока начиная с 9го байта и интерпретируется как 4х байтное целое число затем вот этот набор символов 'play' интерпретируется в число . И в итоге вот эта cmp eax,'play' инструкция сравнивает числа . Недостаток этого способа что он может сравнивать не более 4х байт 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 6 октября, 2016 Поделиться Опубликовано 6 октября, 2016 1 минуту назад, Dino сказал: А что ты ожидал там увидеть? Указатель на следующую строку? + 8 там нету, что сравнивают не известно. Он когда показал свой скрипт без кода, я подумал, что ему нужно зайти в + 10 и от туда уже в + 4 и вот в этом +4 ему надо сделать сравнение со строкой. Вот что я думал. А у вас тут не пойми что. Мой скрипт который дал - не используй, нет там смещения + 8 а он сделан для этого смещения. У нас каким образом байты сравниваются поштучно ? вот таким и сравнивай в смещении + 4 А это придумали что то не пойми чего. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Dino Опубликовано 6 октября, 2016 Поделиться Опубликовано 6 октября, 2016 helldrg Add Address в СE открой http://SSMaker.ru/e6ea7d04/ и убедись что по данному указателю лежит твоя строка строка Ссылка на комментарий Поделиться на другие сайты Поделиться
helldrg Опубликовано 6 октября, 2016 Автор Поделиться Опубликовано 6 октября, 2016 Я похоже разобрался, одну минутку :DD Ссылка на комментарий Поделиться на другие сайты Поделиться
helldrg Опубликовано 6 октября, 2016 Автор Поделиться Опубликовано 6 октября, 2016 ахахахахахахах, неделю над этим зависал, оказывается я смещение забыл добавить)) Всем спасибо!!! Не ругайте меня =) Ссылка на комментарий Поделиться на другие сайты Поделиться
helldrg Опубликовано 6 октября, 2016 Автор Поделиться Опубликовано 6 октября, 2016 (изменено) Вот код: Скрытый текст aobscanmodule(INJECT,generals.exe,D9 81 34 01 00 00 D9) // should be unique alloc(newmem,$1000) label(code) label(return) newmem: push eax //cmp dword ptr[ecx+144],00000000 //je code mov eax,[ecx+144] // я 10 добавлял, а надо было 134 + 10 cmp dword ptr[eax+8],'play' jne code mov dword ptr [ecx+00000134],(float)100 jmp code code: pop eax fld dword ptr [ecx+00000134] jmp return INJECT: jmp newmem nop return: registersymbol(INJECT) [DISABLE] //code from here till the end of the code will be used to disable the cheat INJECT: db D9 81 34 01 00 00 unregistersymbol(INJECT) dealloc(newmem) Изменено 6 октября, 2016 пользователем helldrg Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения