Перейти к содержанию

cmp строки


helldrg

Рекомендуемые сообщения

2 минуты назад, LIRW сказал:

Что то я не вижу в структуре смещения +8 и что в нем находится. Идет +4 и выше 8 пошло, а что там в +8 не понятно.

это такой кривой ход, что бы вытащить подстроку :D

 

Ссылка на комментарий
Поделиться на другие сайты

LIRW

Моя логика такая:
я записал в eax,[ecx+10], теперь eax указывает на адрес 0288af90, и когда я хочу сравнить cmp dword ptr[eax+8],'play' то программу крашит. Программу крашит даже если я не сравниваю, а просто что то с этим адресом делаю, например читаю. +8 у меня появляется как: 4 - это четыре байта до нужной строковой переменной и еще 4 - строковую переменную начинаем читать не сначала, а с play, потому что у бота начало такое же как и игрока

Если вы что то другое имели ввиду можете поподробней расписать, просто я недалекий в этой области, потихоньку учусь =)

(на второй странице есть скрин дампа от которого я отталкиваюсь сейчас)

 

Изменено пользователем helldrg
Ссылка на комментарий
Поделиться на другие сайты

Интересно, кто же так научил сравнивать то :) откуда там + 8 взялось ? от + 4 посчитал 4 байта что ли ?  +8 там нет - от туда и крашь идет и будет идти.

Ссылка на комментарий
Поделиться на другие сайты

6 минут назад, helldrg сказал:

А как считается тогда? 

Сначала нужно понять, что ты конкретно хочешь. Я вот не фига не пойму, но думаю ты хочешь вот что сделать. А то есть со смещения + 4 сравнить определенное количество байт?  не всю строку, а на пример байт или 2 байта да ? Блин я писать не могу долго, экран мигает и перегруз может быть в любой момент. Хорошо форум сохраняет не дописанные данные - как это было 10 минут назад, а то есть я вылетел с перегрузом, на форум зашел а текст тут :) И второе - если сравнить хочешь то, о чем я написал, то почему не берешь всю строку ? переведи этот Стринг или как там его в 4 байта какие не будь и это значение поставь на сравнение. за место Play 

Ссылка на комментарий
Поделиться на другие сайты

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'

 

 

 

 

Изменено пользователем Dino
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

4 минуты назад, LIRW сказал:

Хорошо форум сохраняет не дописанные данные - как это было 10 минут назад, а то есть я вылетел с перегрузом, на форум зашел а текст тут :)

:DDD

Я пытаюсь сравнить строку, у которой смещение 4 байта, но первые 4 байта строки содержат 'team', а надо со следующими значит сравнивать 'play'. Отсюда 4 + 4 = 8 смещение

Изменено пользователем helldrg
Ссылка на комментарий
Поделиться на другие сайты

5 минут назад, Dino сказал:

Ппфф где ты ошибку нашел?

Интересно, а кто так сравнивает в обще? я такое в обще первый раз сравнение вижу. Не легче с + 4 сравнить количество байт?   Кулибин :lol:

Ссылка на комментарий
Поделиться на другие сайты

Только что, LIRW сказал:

Не легче с + 4 сравнить количество байт?  

В принципе в данной ситуации и количество байт может можно попробовать сравнивать, но бывают ситуации, когда эти переменные занимают одинаковое количество байт, а различие у них только в последнем байте

Ссылка на комментарий
Поделиться на другие сайты

Цитата

И второе - если сравнить хочешь то, о чем я написал, то почему не берешь всю строку ? переведи этот Стринг или как там его в 4 байта какие не будь и это значение поставь на сравнение. за место Play 

Интересная идея, сейчас попробую

Ссылка на комментарий
Поделиться на другие сайты

5 минут назад, helldrg сказал:

В принципе в данной ситуации и количество байт может можно попробовать сравнивать

Если не секрет, что за игра то хоть ? Просто смотри, ты хочешь взять определенное количество байт с инструкции на сравнение, а почему определенное ? а на пример не сразу всю строку ? Переводи всю строку сразу в 4 байта на пример и это будет как раз фильтр на сравнение у смещения +4 и тогда тот скрипт который дал, там за место +8 +4 поставь и сравнение, то что выйдет из переведенного стринга.

Ссылка на комментарий
Поделиться на другие сайты

3 минуты назад, LIRW сказал:

Если не секрет, что за игра то хоть ? Просто смотри, ты хочешь взять определенное количество байт с инструкции на сравнение, а почему определенное ? а на пример не сразу всю строку ? 

Command&Conquer:Generals  
Не всю строку потому что я только 2 способа сравнения знаю:
сmp word ptr[eax+8],'pl' // 2 байта сравнивает

cmp dword ptr[eax+8],'play' //4 байта сравнивает

Сейчас попробую правую часть в байты перевести и сравнить

Изменено пользователем helldrg
Ссылка на комментарий
Поделиться на другие сайты

12 минуты назад, Dino сказал:

Ппфф где ты ошибку нашел?

А на счет Dino +8 я думал он сравнивает это смещение, а вы тут оказывается вот что задумали :) Кулибины. Мой скрипт который дал не правильный будет в этом случаи - так как +8 там нет смещения и из за этого и будет крашь. А вот как вы тут делайте - я такое не разу не видал ещо :) интересно прям.

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

У меня опять скрипт нельзя активировать((( Почему?  Придется опять переписывать. Инструкция адрес не меняет, почему так происходит я не знаю

Ссылка на комментарий
Поделиться на другие сайты

2 минуты назад, LIRW сказал:

А на счет Dino +8 я думал он сравнивает это смещение, а вы тут оказывается вот что задумали :) Кулибины. Мой скрипт который дал не правильный будет в этом случаи - так как +8 там нет смещения и из за этого и будет крашь. А вот как вы тут делайте - я такое не разу не видал ещо :) интересно прям.

А что ты ожидал там увидеть? Указатель на следующую строку? 

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

тыж понимаешь что это то же самое? в регистр eax запихивается подстрока начиная с 9го байта и интерпретируется  как 4х байтное целое число затем вот этот набор символов 'play' интерпретируется  в число . И в итоге вот эта  cmp eax,'play'  инструкция сравнивает числа . Недостаток этого способа что он может сравнивать не более 4х байт

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, Dino сказал:

А что ты ожидал там увидеть? Указатель на следующую строку? 

+ 8 там нету, что сравнивают не известно. Он когда показал свой скрипт без кода, я подумал, что ему нужно зайти в + 10 и от туда уже в + 4 и вот в этом +4 ему надо сделать сравнение со строкой. Вот что я думал. А у вас тут не пойми что. Мой скрипт который дал - не используй, нет там смещения + 8 а он сделан для этого смещения. У нас каким образом байты сравниваются поштучно ? вот таким и сравнивай в смещении + 4 А это придумали что то не пойми чего. 

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

Вот код:

Скрытый текст

 


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)

 

 

Изменено пользователем helldrg
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.