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

Помогите решить проблему со сравнением двух ячеек


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

  
  cmp [rcx+28],(float)139.8000031   // Эта строка работает идеально
  cmp [rcx+28],[weig+58]  // не работает

Здравствуйте уважаемые форумчане, помогите решить вопрос как правильно написать код выше

В ячейке [weig+58] содержится то же самое float значение 139.8000031

Мне нужно сравнить две ячейки адреса, одну из них я создал в другом скрипте

 

weig: 
dd 0

Срабатывает только 

cmp [rcx+28],[weig]

Но мне нужно из [weig] вытащить именно [weig+58]

P.S.

Изучаю взлом совсем недавно, подскажите литератру по CE AutoAssembler

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

2 часа назад, DarDreams сказал:

Здравствуйте

Тема оформлена не правильно:

Нужно перенести тему в другой раздел - Низкоуровневое программирование.
либо в этом разделе - дать название игры в квадратных скобках.

2 часа назад, DarDreams сказал:

Срабатывает только 

Не может срабатывать - память с памятью сравнить нельзя.
можно сравнивать память например с регистром.
подсказку дал - дерзай.

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

Я пробовал и помощью регистра, если вы это имеете в виду 

  push r12
   mov r12,[weig+58]
   cmp [rcx+28],r12
  pop r12

Тогда он дает совершенно не те значения которые указаны  в адресе, вот если без +58 оставить только [weig] тогда все работает, но мне нужно именно +58, я пытался разобраться как это делается, но тщетно.

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

2 часа назад, DarDreams сказал:

Я пробовал и помощью регистра,

Нет понимания r12 8 байтный регистр и ты в строке с cmp сравниваешь с 0.
Привыкни по умолчанию в СЕ. что в квадратных скобках [.....] - 4 байта.
Попробуй к примеру так (или какой там у тебя регистр):

push eax
  mov eax,[weig+58]
  cmp [rcx+28],eax
pop eax

 

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

8 минут назад, Garik66 сказал:

Попробуй к примеру так

Попробовал, снова не те данные, думаю потому что у меня все регистры 8 байтные RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP, R8-R15,RIP 

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

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

Попробовал, снова не те данные, думаю потому что у меня все регистры 8 байтные RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP, R8-R15,RIP 

Выложи полностью код скрипта (лучше с СЕ-ными логами), посмотрю

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

Спойлер

{ Game   : GreedFall.exe
  Version: 
  Date   : 2019-09-24
  Author : DarDreams

  This script does blah blah blah
}

[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat

 
 
aobscanmodule(MAX,Game.dll,F3 0F 10 41 28 C3 F3) // should be unique
alloc(newmem,$1000,"Game.dll"+3B0127)

label(code)
label(return)

newmem:
  push eax
 // push r10
   mov eax,[weig+58]
//  mov r10,[r12+58]
  //mov r12,[weig]
//  cmp [rcx+28],(float)290.7999878
  cmp [rcx+28],eax
//  cmp [rcx+28],1AF87DF0AB8+58
//  pop r10
  pop eax
  jne code
  mov [maxw],rcx

code:
  movss xmm0,[rcx+28]
  jmp return

maxw:
dd 0

MAX:
  jmp newmem
return:
registersymbol(MAX)
registersymbol(MAXw)

[DISABLE]
//code from here till the end of the code will be used to disable the cheat
MAX:
  db F3 0F 10 41 28

unregistersymbol(MAX)
unregistersymbol(MAXw)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "Game.dll"+3B0127

"Game.dll"+3B0118: CC                 -  int 3 
"Game.dll"+3B0119: CC                 -  int 3 
"Game.dll"+3B011A: CC                 -  int 3 
"Game.dll"+3B011B: CC                 -  int 3 
"Game.dll"+3B011C: CC                 -  int 3 
"Game.dll"+3B011D: CC                 -  int 3 
"Game.dll"+3B011E: CC                 -  int 3 
"Game.dll"+3B011F: CC                 -  int 3 
"Game.dll"+3B0120: 66 83 79 26 00     -  cmp word ptr [rcx+26],00
"Game.dll"+3B0125: 76 06              -  jna Game.dll+3B012D
// ---------- INJECTING HERE ----------
"Game.dll"+3B0127: F3 0F 10 41 28     -  movss xmm0,[rcx+28]
// ---------- DONE INJECTING  ----------
"Game.dll"+3B012C: C3                 -  ret 
"Game.dll"+3B012D: F3 0F 10 41 08     -  movss xmm0,[rcx+08]
"Game.dll"+3B0132: F3 0F 58 01        -  addss xmm0,[rcx]
"Game.dll"+3B0136: F3 0F 59 41 04     -  mulss xmm0,[rcx+04]
"Game.dll"+3B013B: F3 0F 58 41 0C     -  addss xmm0,[rcx+0C]
"Game.dll"+3B0140: C3                 -  ret 
"Game.dll"+3B0141: CC                 -  int 3 
"Game.dll"+3B0142: CC                 -  int 3 
"Game.dll"+3B0143: CC                 -  int 3 
"Game.dll"+3B0144: CC                 -  int 3 
}

 

Как логи из CE брать я не знаю

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

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

Как логи из CE брать я не знаю

Ты уже это сделал - внизу.

Читай правила, больше править пост не буду (буду преды выдавать) - нужно не только тег спойлера, но и тег кода. 

Скрипт сейчас посмотрю.

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

[weig]

А где ты weig объявляешь? В другом скрипте?

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

21 минуту назад, DarDreams сказал:

Попробовал,

Мало информации, я тебе уже написал в ЛС. ноль реакции, Времени у меня мало.
Либо отвечаете сразу либо прошу прощения - помочь  не смогу.

28 минут назад, DarDreams сказал:

Попробовал

Как у тебя в табличке забивается адрес, связанный с адресом MAXw? 

Скрипт попробуй (поправил. исходя из той информацию, которую ты дал):

Спойлер

{ Game   : GreedFall.exe
  Version:
  Date   : 2019-09-24
  Author : DarDreams

  This script does blah blah blah
}

[ENABLE]
aobscanmodule(MAX,Game.dll,F3 0F 10 41 28 C3 F3)
alloc(newmem,$1000,"Game.dll"+3B0127)
label(code)
label(MAXw)
registersymbol(MAXw)
label(return)
registersymbol(MAX)

newmem:
  push eax
  mov eax,[weig+58]
  cmp [rcx+28],eax
  jne code

  mov qword ptr[MAXw],rcx

code:
  pop eax
  movss xmm0,[rcx+28]
  jmp return

MAXw:
  dq (double) 0

MAX:
  jmp newmem
return:

[DISABLE]
MAX:
  db F3 0F 10 41 28

unregistersymbol(MAXw)
unregistersymbol(MAX)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "Game.dll"+3B0127

"Game.dll"+3B0118: CC                 -  int 3
"Game.dll"+3B0119: CC                 -  int 3
"Game.dll"+3B011A: CC                 -  int 3
"Game.dll"+3B011B: CC                 -  int 3
"Game.dll"+3B011C: CC                 -  int 3
"Game.dll"+3B011D: CC                 -  int 3
"Game.dll"+3B011E: CC                 -  int 3
"Game.dll"+3B011F: CC                 -  int 3
"Game.dll"+3B0120: 66 83 79 26 00     -  cmp word ptr [rcx+26],00
"Game.dll"+3B0125: 76 06              -  jna Game.dll+3B012D
// ---------- INJECTING HERE ----------
"Game.dll"+3B0127: F3 0F 10 41 28     -  movss xmm0,[rcx+28]
// ---------- DONE INJECTING  ----------
"Game.dll"+3B012C: C3                 -  ret
"Game.dll"+3B012D: F3 0F 10 41 08     -  movss xmm0,[rcx+08]
"Game.dll"+3B0132: F3 0F 58 01        -  addss xmm0,[rcx]
"Game.dll"+3B0136: F3 0F 59 41 04     -  mulss xmm0,[rcx+04]
"Game.dll"+3B013B: F3 0F 58 41 0C     -  addss xmm0,[rcx+0C]
"Game.dll"+3B0140: C3                 -  ret
"Game.dll"+3B0141: CC                 -  int 3
"Game.dll"+3B0142: CC                 -  int 3
"Game.dll"+3B0143: CC                 -  int 3
"Game.dll"+3B0144: CC                 -  int 3
}

 

 

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

9 часов назад, Xipho сказал:

Так не будет работать. Если сравниваются не целые числа, то нужно использовать fcomp с fpu стеком, а не вот этот вот всё.

Я ТС в ЛС помогаю, а то слишком много вопросов пришлось задать.

 

Задачку решили именно методом ТС по скайпу,

 


 

 

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

Благодаря Garik66, мы все таки нашли решение:

 push eax
  mov eax,[[p_WEIG]+58]
  cmp [rcx+28],eax
  jne code
  mov qword ptr[p_MAXw],rcx
 pop eax

Спасибо огромное за помощь!

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

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

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

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