Сейчас на форуме: igorcauret (+8 невидимых)

 eXeL@B —› Вопросы новичков —› Проблема с бряком
<< . 1 . 2 .
Посл.ответ Сообщение

Ранг: 1.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 30 июня 2014 19:44
· Личное сообщение · #1

Пытаюсь брякнуться при изменение мной конкретного числа в игре. Нашел адрес в памяти где хранится это число.
Ставлю бряк на запись в память по указанному адресу. Переключаюсь в игру, бряк тут же срабатывает, хотя я даже с паузы не снял игру(естественно число не изменял). F5 можно нажимать и нажимать, брякается постоянно. До снятия игры с паузы даже не доходит.
Адреса все время разные, но для примера: мне надо брякнуться при изменение значения по адресу 0321Е1С9, а игра все время пишет ноль по адресу 0321Е1В4. Почему срабатывает мой бряк?
Бряк ставлю в сисере через команду : bpm 0321Е1С9 w

п.с. кстати кто-нибудь знает где в сисере поменять цвет всех цифр.?

может есть у кого идеи как по другому мне брякнуться?

Зарание спасибо за помощь.



Ранг: 10.9 (новичок), 5thx
Активность: 0.060
Статус: Участник

Создано: 04 июля 2014 03:02
· Личное сообщение · #2

Kozak пишет:
мне D3DWindower не помог, мышка бегает за оком игры и тыкаю вслепую.

Там же есть функи для захвата курсора.Внимательней в настройках пощелкайте.



Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 04 июля 2014 07:51
· Личное сообщение · #3

Kozak пишет:
Если их поставить на бесконечность, то каждый следующий юнит будет дороже предыдущего.

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

Kozak пишет:
у тебя получилось в оле отлаживать игру?

через логи по точкам останова смотрел (Ctrl+F5), без паузы при срабатывании.



Ранг: 1.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 06 июля 2014 09:15
· Личное сообщение · #4

ThugboyZ
так прога японская, у меня кряказябры, ничего не понять в настройках, русификатор не нашел.

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

Мдя не думал что будет так много проблем выйти на альт+клик. Дело в том что в оригинальном файле(dmcr) нет такого события вообще(альт+клик) +50, только +1, +5 и бесконечность. +50 это добавили умельцы, но я видел игры в записи где солдат покупали и +100 и +200, думаю в привате есть и больше.
Два файла я уже пытался сравнивать, там столько отличий что найти не получилось. Потому что помимо +50 устранялись глюки и баги игры, складывается впечатление, что изменения вносились в исходники. Игра на тот момент уже не поддерживалась разработчиком.



Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 06 июля 2014 11:47
· Личное сообщение · #5

Kozak пишет:
Мдя не думал что будет так много проблем выйти на альт+клик

да я же дал Вам посказку. а Вы не хотите раскрутить стек вызовов или хотя бы посмотреть, что экспортируется в dmcr.exe. придется все разжевать и самому сделать:
во-первых, в экспорте есть недвусмысленные функции и даже с описанием для хакеров-лентяев
ProduceUnit(Units,UnitType,Dest)
ProduceOneUnit : Invalid <UnitType>
ProduceUnit(Units,UnitType,Dest) : Invalid parameter <Units>
думается мне, что можно устроить отдельный тред и крутить их на здоровье
во-вторых, с событиями по клавишам ДВА ВАРИАНТА
вариант №1: зайти с конца. если набраться немного терпенья и без помощи сторонних утилит, используя лог точек останова без паузы, таки можно выйти на обработчик событий(в нашем случае альт+клик):
Code:
  1. 0050D405  />  8B4D D8       MOV ECX,DWORD PTR SS:[EBP-28]
  2. 0050D408  |.  66:8B91 22FC1 MOV DX,WORD PTR DS:[ECX+110FC22]
  3. 0050D40F  |.  52            PUSH EDX
  4. 0050D410  |.  8B45 D8       MOV EAX,DWORD PTR SS:[EBP-28]
  5. 0050D413  |.  8A88 21FC1001 MOV CL,BYTE PTR DS:[EAX+110FC21]
  6. 0050D419  |.  51            PUSH ECX
  7. 0050D41A  |.  8B55 D8       MOV EDX,DWORD PTR SS:[EBP-28]
  8. 0050D41D  |.  8A82 20FC1001 MOV AL,BYTE PTR DS:[EDX+110FC20]
  9. 0050D423  |.  50            PUSH EAX
  10. 0050D424  |.  E8 6374FFFF   CALL 0050488C //<-вот исходная функция, которая отвечает за производство (если опуститесь ниже по вызовам, увидите функции, которые я описал раньше)
  11. 0050D429  |.  83C4 0C       ADD ESP,0C
  12. 0050D42C  |.  8B4D D8       MOV ECX,DWORD PTR SS:[EBP-28]
  13. 0050D42F  |.  83C1 04       ADD ECX,4
  14. 0050D432  |.  894D D8       MOV DWORD PTR SS:[EBP-28],ECX
  15. 0050D435  \.^ E9 6F030000   JMP 0050D7A9


где 0050D424 |. E8 6374FFFF CALL 0050488C с аргументами (arg1. [esp+4] (byte)- id игрока, arg.2 [esp+8](byte) - кол-во солдат, arg3. [esp+0xC] - тип солдата)
Code:
  1. 0050D410  |.  8B45 D8       MOV EAX,DWORD PTR SS:[EBP-28] //<- наверно ж пляшем от this?!
  2. 0050D413  |.  8A88 21FC1001 MOV CL,BYTE PTR DS:[EAX+110FC21] //<- нас интересует регистр EAX

видим, что второй аргумент берется из какой-то структуры. понятно, что нужно узнать значение 32х битного регистра EAX(offset по байтам =1) и сложить с базой 0x110FC21 = 0x110fc22.
адрес в секции .data, где в момент вызова будет лежать число 5 размером в один байт. однако данный структура используется еще до хрена где, т.к. после окончания пр-ва в ней будет мусор. ставим бряк по записи и всплываем на нашем обработчике событий по адресу 0x004FF4BA:
Code:
  1. 004FF4BA  /$  55            PUSH EBP
  2. 004FF4BB  |.  8BEC          MOV EBP,ESP
  3. 004FF4BD  |.  51            PUSH ECX
  4. 004FF4BE  |.  6A 11         PUSH 11                                                  ; /VirtualKey = VK_CONTROL
  5. 004FF4C0  |.  FF15 ECE15C00 CALL DWORD PTR DS:[<&USER32.GetKeyState>]                ; \USER32.GetKeyState
  6. 004FF4C6  |.  0FBFC0        MOVSX EAX,AX
  7. 004FF4C9  |.  25 00800000   AND EAX,00008000
  8. 004FF4CE  |.  85C0          TEST EAX,EAX
  9. 004FF4D0  |.  74 10         JZ SHORT 004FF4E2
  10. ...
  11. 004FF535  |.  8B4D FC       MOV ECX,DWORD PTR SS:[EBP-4]
  12. 004FF538  |.  83C1 01       ADD ECX,1
  13. 004FF53B  |.  894D FC       MOV DWORD PTR SS:[EBP-4],ECX
  14. 004FF53E  |>  8B15 70875E00 MOV EDX,DWORD PTR DS:[5E8770]
  15. 004FF544  |.  8A82 20FC1001 MOV AL,BYTE PTR DS:[EDX+110FC20]
  16. 004FF54A  |.  04 01         ADD AL,1
  17. 004FF54C  |.  8B0D 70875E00 MOV ECX,DWORD PTR DS:[5E8770]
  18. 004FF552  |.  8881 20FC1001 MOV BYTE PTR DS:[ECX+110FC20],AL //<-запись тут!!!
  19. 004FF558  |.  EB 64         JMP SHORT 004FF5BE
  20. 004FF55A  |>  8B15 94F90F01 MOV EDX,DWORD PTR DS:[10FF994]
  21. 004FF560  |.  C682 20FC1001 MOV BYTE PTR DS:[EDX+110FC20],4E ////<-тоже интересно
  22. 004FF567  |.  A1 94F90F01   MOV EAX,DWORD PTR DS:[10FF994]
  23. 004FF56C  |.  8A4D 08       MOV CL,BYTE PTR SS:[EBP+8]
  24. 004FF56F  |.  8888 21FC1001 MOV BYTE PTR DS:[EAX+110FC21],CL
  25. 004FF575  |.  8B15 94F90F01 MOV EDX,DWORD PTR DS:[10FF994]
  26. 004FF57B  |.  C682 22FC1001 MOV BYTE PTR DS:[EDX+110FC22],1  //<-для единичных производств солдат
  27. 004FF582  |.  A1 94F90F01   MOV EAX,DWORD PTR DS:[10FF994]
  28. 004FF587  |.  83C0 02       ADD EAX,2
  29. 004FF58A  |.  A3 70875E00   MOV DWORD PTR DS:[5E8770],EAX
  30. 004FF58F  |.  8B4D 0C       MOV ECX,DWORD PTR SS:[EBP+0C]
  31. 004FF592  |.  81E1 FFFF0000 AND ECX,0000FFFF
  32. 004FF598  |.  890D 283E1101 MOV DWORD PTR DS:[1113E28],ECX
  33. 004FF59E  |.  8B15 94F90F01 MOV EDX,DWORD PTR DS:[10FF994]
  34. 004FF5A4  |.  66:8B45 0C    MOV AX,WORD PTR SS:[EBP+0C]
  35. 004FF5A8  |.  66:8982 23FC1 MOV WORD PTR DS:[EDX+110FC23],AX
  36. 004FF5AF  |.  8B0D 94F90F01 MOV ECX,DWORD PTR DS:[10FF994]
  37. 004FF5B5  |.  83C1 05       ADD ECX,5
  38. ...

вариант №2: зайти сначала. собственно зная, что для обработки нажатия будет использована WINAPI
Code:
  1. SHORT WINAPI GetKeyState(
  2.   _In_  int nVirtKey
  3. );

и ориентируясь --> по кодам клавиш <--, можно выйти сразу на 0x004FF4BA. но тут уже придется немного погадать что куда пишется и зачем, причем вслепую.


********************************************************************************
дальше способов увеличить кол-во просто солдат за один клик целый океан

1) например, для пр-ва 255 (0xFF) можно сделать так в самом обработчике:
Code:
  1. 004FF544      B0 FF         MOV AL,0FF
  2. 004FF546      90            NOP
  3. 004FF547      90            NOP
  4. 004FF548      90            NOP
  5. 004FF549      90            NOP
  6. 004FF54A      90            NOP
  7. 004FF54B      90            NOP
  8. 004FF54C      8B0D 70875E00 MOV ECX,DWORD PTR DS:[5E8770]
  9. 004FF552      A2 22FC1001   MOV BYTE PTR DS:[110FC22],AL
  10. 004FF557      90            NOP
  11. 004FF558  |.  EB 64         JMP SHORT 004FF5BE

2) но чтобы избавится от ограничения в байт, логичней править непосредственно процедуру производства по адресу 0x0050488C, а именно ее второй аргумент, отвечающий за количество.
3) ...

| Сообщение посчитали полезным: Hellspawn, Kozak
<< . 1 . 2 .
 eXeL@B —› Вопросы новичков —› Проблема с бряком
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати