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

 [email protected] —› Программирование —› Расширение функции в готовом приложении
Посл.ответ Сообщение

Ранг: 12.4 (новичок)
Активность: 0.020.05
Статус: Участник

Создано: 18 февраля 2020 15:14
· Личное сообщение · #1

Добрый день!
Есть приложение (игра), которое получает из внешнего файла анимацию по буквенному коду вида "ride__****".
За это отвечает функция:
Code:
  1. CPU Disasm
  2. Address   Hex dump          Command                                  Comments
  3. 004841B6  /> \55            PUSH EBP
  4. 004841B7  |.  8BEC          MOV EBP,ESP
  5. 004841B9  |.  8B55 08       MOV EDX,DWORD PTR [ARG.1]
  6. 004841BC  |.  8B82 E8010000 MOV EAX,DWORD PTR [EDX+1E8]
  7. 004841C2  |.  83F8 0A       CMP EAX,0A
  8. 004841C5  |.  75 0A         JNE SHORT app_orig.004841D1
  9. 004841C7  |.  8B45 0C       MOV EAX,DWORD PTR [ARG.2]
  10. 004841CA  |.  05 42010000   ADD EAX,142
  11. 004841CF  |.  EB 2D         JMP SHORT app_orig.004841FE
  12. 004841D1  |>  83F8 18       CMP EAX,18
  13. 004841D4  |.  74 20         JE SHORT app_orig.004841F6
  14. 004841D6  |.  83F8 19       CMP EAX,19
  15. 004841D9  |.  74 1B         JE SHORT app_orig.004841F6
  16. 004841DB  |.  52            PUSH EDX
  17. 004841DC  |.  E8 9A6DFBFF   CALL app_orig.0043AF7B
  18. 004841E1  |.  85C0          TEST EAX,EAX
  19. 004841E3  |.  8B45 0C       MOV EAX,DWORD PTR [ARG.2]
  20. 004841E6  |.  75 07         JNZ SHORT app_orig.004841EF
  21. 004841E8  |.  05 36010000   ADD EAX,136
  22. 004841ED  |.  EB 0F         JMP SHORT app_orig.004841FE
  23. 004841EF  |>  05 2C010000   ADD EAX,12C
  24. 004841F4  |.  EB 08         JMP SHORT app_orig.004841FE
  25. 004841F6  |>  8B45 0C       MOV EAX,DWORD PTR [ARG.2]
  26. 004841F9  |.  05 72010000   ADD EAX,172
  27. 004841FE  |>  5D            POP EBP
  28. 004841FF  \.  C2 0800       RET 8


В зависимости от значения EAX выбирается код анимации:
0A - ev
18 или 19 - hl
Есть еще варианты sp и 3_, они, повидимому, проверяются тут: 004841DC.
В итоге код анимации для 0A должен выглядеть так:
ride__ev00
ride__ev01
ride__ev02
ride__ev03
ride__ev04
ride__ev05

Видно, что выбор производится добавлением чисел в EAX:
3_ - 12C
sp - 136
0A - 142
18 - 172
19 - 172

Что поисходит дальше я уже не понимаю. Что это за числа? Смещение в памяти?
Собственно задача в том, чтобы добовить еще несколько вариантов, по аналогии с EV и HL.

Нашел функцию, которая обрабатывает эти текстовые индексы в момент запуска программы:
Code:
  1. CPU Disasm
  2. Address   Hex dump          Command                                  Comments
  3. .....
  4. 004CAF0F  |. /0F84 F0000000 |JZ app_orig.004CB005                    ; |
  5. 004CAF15  |. |6A 02         |PUSH 2                                  ; |/Arg3 = 2
  6. 004CAF17  |. |68 80A7AC00   |PUSH OFFSET app_orig.00ACA780           ; ||Arg2 = ASCII "ev"
  7. 004CAF1C  |. |56            |PUSH ESI                                ; ||Arg1
  8. 004CAF1D  |. |E8 243F5500   |CALL app_orig.00A1EE46                  ; |\app_orig.00A1EE46
  9. 004CAF22  |. |83C4 0C       |ADD ESP,0C                              ; |
  10. 004CAF25  |. |85C0          |TEST EAX,EAX                            ; |
  11. 004CAF27  |. |75 32         |JNZ SHORT app_orig.004CAF5B             ; |
  12. 004CAF29  |. |B8 56555555   |MOV EAX,55555556                        ; |
  13. 004CAF2E  |. |F7EF          |IMUL EDI                                ; |
  14. 004CAF30  |. |8BC2          |MOV EAX,EDX                             ; |
  15. 004CAF32  |. |C1E8 1F       |SHR EAX,1F                              ; |
  16. 004CAF35  |. |03C2          |ADD EAX,EDX                             ; |
  17. 004CAF37  |. |8B5424 18     |MOV EDX,DWORD PTR [ESP+18]              ; |
  18. 004CAF3B  |. |8D0C80        |LEA ECX,[EAX*4+EAX]                     ; |
  19. 004CAF3E  |. |8D044A        |LEA EAX,[ECX*2+EDX]                     ; |
  20. 004CAF41  |. |8B4C24 14     |MOV ECX,DWORD PTR [ESP+14]              ; |
  21. 004CAF45  |. |8B91 B8010000 |MOV EDX,DWORD PTR [ECX+1B8]             ; |
  22. 004CAF4B  |. |8B4C24 10     |MOV ECX,DWORD PTR [ESP+10]              ; |
  23. 004CAF4F  |. |898CC2 100A00 |MOV DWORD PTR [EAX*8+EDX+0A10],ECX      ; |
  24. 004CAF56  |. |E9 B4000000   |JMP app_orig.004CB00F                   ; |
  25. 004CAF5B  |> |6A 02         |PUSH 2                                  ; |/Arg3 = 2
  26. 004CAF5D  |. |68 7CA7AC00   |PUSH OFFSET app_orig.00ACA77C           ; ||Arg2 = ASCII "hl"
  27. 004CAF62  |. |56            |PUSH ESI                                ; ||Arg1
  28. 004CAF63  |. |E8 DE3E5500   |CALL app_orig.00A1EE46                  ; |\app_orig.00A1EE46
  29. 004CAF68  |. |83C4 0C       |ADD ESP,0C                              ; |
  30. 004CAF6B  |. |85C0          |TEST EAX,EAX                            ; |
  31. 004CAF6D  |. |B8 56555555   |MOV EAX,55555556                        ; |
  32. 004CAF72  |. |75 0D         |JNZ SHORT app_orig.004CAF81             ; |
  33. 004CAF74  |. |F7EF          |IMUL EDI                                ; |
  34. 004CAF76  |. |8BC2          |MOV EAX,EDX                             ; |
  35. 004CAF78  |. |C1E8 1F       |SHR EAX,1F                              ; |
  36. 004CAF7B  |. |8D4402 25     |LEA EAX,[EAX+EDX+25]                    ; |
  37. 004CAF7F  |. |EB 0B         |JMP SHORT app_orig.004CAF8C             ; |
  38. 004CAF81  |> |F7EF          |IMUL EDI                                ; |
  39. 004CAF83  |. |8BC2          |MOV EAX,EDX                             ; |
  40. 004CAF85  |. |C1E8 1F       |SHR EAX,1F                              ; |
  41. 004CAF88  |. |8D4402 1E     |LEA EAX,[EAX+EDX+1E]                    ; |
  42. 004CAF8C  |> |8B5424 18     |MOV EDX,DWORD PTR [ESP+18]              ; |
  43. 004CAF90  |. |8D0C80        |LEA ECX,[EAX*4+EAX]                     ; |
  44. 004CAF93  |. |8D044A        |LEA EAX,[ECX*2+EDX]                     ; |
  45. 004CAF96  |. |8B4C24 14     |MOV ECX,DWORD PTR [ESP+14]              ; |
  46. 004CAF9A  |. |8B91 B8010000 |MOV EDX,DWORD PTR [ECX+1B8]             ; |
  47. 004CAFA0  |. |8B4C24 10     |MOV ECX,DWORD PTR [ESP+10]              ; |
  48. 004CAFA4  |. |890CC2        |MOV DWORD PTR [EAX*8+EDX],ECX           ; |
  49. 004CAFA7  |. |EB 66         |JMP SHORT app_orig.004CB00F             ; |


Все копировать не стал - слишком объемно. Прикрепил exe с минимальным набором для запуска в олли.
https://yadi.sk/d/EKoG8TAqdpHaHQ

Тут мне нужно добавить свои коды (допустим ts,tt,tu,tv,tw). Внес изменения:
Code:
  1. CPU Disasm
  2. Address   Hex dump          Command                                  Comments
  3. 004CAF5B  \> \E9 17010000   JMP app_edited.004CB077                  ; |
  4. ......
  5. CPU Disasm
  6. Address   Hex dump          Command                                  Comments
  7. 004CB077  |> \6A 02         PUSH 2                                   ; /Arg3 = 2
  8. 004CB079  |.  68 7CA7AC00   PUSH OFFSET app_edited.00ACA77C          ; |Arg2 = ASCII "hl"
  9. 004CB07E  |.  56            PUSH ESI                                 ; |Arg1
  10. 004CB07F  |.  E8 C23D5500   CALL app_edited.00A1EE46                 ; \app_edited.00A1EE46
  11. 004CB084  |.  83C4 0C       ADD ESP,0C
  12. 004CB087  |.  85C0          TEST EAX,EAX
  13. 004CB089  |.  75 3D         JNZ SHORT app_edited.004CB0C8
  14. 004CB08B  |.  B8 56555555   MOV EAX,55555556
  15. 004CB090  |.  F7EF          IMUL EDI
  16. 004CB092  |.  8BC2          MOV EAX,EDX
  17. 004CB094  |.  C1E8 1F       SHR EAX,1F
  18. 004CB097  |.  8D4402 25     LEA EAX,[EAX+EDX+25]
  19. 004CB09B  |.  EB 0B         JMP SHORT app_edited.004CB0A8
  20. 004CB09D  |.  F7EF          IMUL EDI
  21. 004CB09F  |.  8BC2          MOV EAX,EDX
  22. 004CB0A1  |.  C1E8 1F       SHR EAX,1F
  23. 004CB0A4  |.  8D4402 1E     LEA EAX,[EAX+EDX+1E]
  24. 004CB0A8  |>  8B5424 18     MOV EDX,DWORD PTR [ESP+18]
  25. 004CB0AC  |.  8D0C80        LEA ECX,[EAX*4+EAX]
  26. 004CB0AF  |.  8D044A        LEA EAX,[ECX*2+EDX]
  27. 004CB0B2  |.  8B4C24 14     MOV ECX,DWORD PTR [ESP+14]
  28. 004CB0B6  |.  8B91 B8010000 MOV EDX,DWORD PTR [ECX+1B8]
  29. 004CB0BC  |.  8B4C24 10     MOV ECX,DWORD PTR [ESP+10]
  30. 004CB0C0  |.  890CC2        MOV DWORD PTR [EAX*8+EDX],ECX
  31. 004CB0C3  |.^ E9 47FFFFFF   JMP app_edited.004CB00F
  32. 004CB0C8  |>  6A 02         PUSH 2                                   ; /Arg3 = 2
  33. 004CB0CA  |.  68 2DB14C00   PUSH app_edited.004CB12D                 ; |Arg2 = ASCII "ts"
  34. 004CB0CF  |.  56            PUSH ESI                                 ; |Arg1
  35. 004CB0D0  |.  E8 713D5500   CALL app_edited.00A1EE46                 ; \app_edited.00A1EE46
  36. 004CB0D5  |.  83C4 0C       ADD ESP,0C
  37. 004CB0D8  |.  85C0          TEST EAX,EAX
  38. 004CB0DA  |.  B8 56555555   MOV EAX,55555556
  39. 004CB0DF  |.  75 0D         JNZ SHORT app_edited.004CB0EE
  40. 004CB0E1  |.  F7EF          IMUL EDI
  41. 004CB0E3  |.  8BC2          MOV EAX,EDX
  42. 004CB0E5  |.  C1E8 1F       SHR EAX,1F
  43. 004CB0E8  |.  8D4402 25     LEA EAX,[EAX+EDX+25]
  44. 004CB0EC  |.  EB 0B         JMP SHORT app_edited.004CB0F9
  45. 004CB0EE  |>  F7EF          IMUL EDI
  46. 004CB0F0  |.  8BC2          MOV EAX,EDX
  47. 004CB0F2  |.  C1E8 1F       SHR EAX,1F
  48. 004CB0F5  |.  8D4402 1E     LEA EAX,[EAX+EDX+1E]
  49. 004CB0F9  |>  8B5424 18     MOV EDX,DWORD PTR [ESP+18]
  50. 004CB0FD  |.  8D0C80        LEA ECX,[EAX*4+EAX]
  51. 004CB100  |.  8D044A        LEA EAX,[ECX*2+EDX]
  52. 004CB103  |.  8B4C24 14     MOV ECX,DWORD PTR [ESP+14]
  53. 004CB107  |.  8B91 B8010000 MOV EDX,DWORD PTR [ECX+1B8]
  54. 004CB10D  |.  8B4C24 10     MOV ECX,DWORD PTR [ESP+10]
  55. 004CB111  |.  890CC2        MOV DWORD PTR [EAX*8+EDX],ECX
  56. 004CB114  \.^ E9 F6FEFFFF   JMP app_edited.004CB00F


Я понимаю, что, вероятно, этот подход неверный, тем более, что он не работает... Тем не менее, когда я вчера, полусонный, накосячил здесь, анимация менялась местами и даже читался код TS (в отличии от некоторых старых кодов). Значит с локацией я угадал. Тут я вроде-бы все логично перенес - вытащил целиком HL и продолжил TS. Теперь старая анимация работает, а вот TS не читает. Кстати, в первой функции изменения:

Code:
  1. CPU Disasm
  2. Address   Hex dump          Command                                  Comments
  3. 004841D9   /74 28           JE SHORT app_edited.00484203
  4.  
  5. CPU Disasm
  6. Address   Hex dump          Command                                  Comments
  7. 00484203    8B45 0C         MOV EAX,DWORD PTR [EBP+0C]
  8. 00484206    05 A2010000     ADD EAX,1A2
  9. 0048420B  ^ EB F1           JMP SHORT app_edited.004841FE


То-есть для EAX=19 выполняем ADD EAX,1A2. В дальнейшем я вместо 19 добавлю другие варианты (1B,1C,1D и тд), с этим, вроде, проблем быть не должно. А пока так для теста использую 19.
1A2 написал от балды, поскольку, как я писал выше, я не понимаю, что это за число и как мне вычислить следующее. Пробовал перебирать подряд, начиная со 172, но следующим (ближе к 190) идет уже анимация другого порядка.

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



Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 18 февраля 2020 18:19
· Личное сообщение · #2

gabryelle пишет:
Есть приложение (игра), которое получает из внешнего файла анимацию по буквенному коду вида "ride__****".

В смысле - внешний файл это архив, в котором хранятся файлы под такими именами?

gabryelle пишет:
Видно, что выбор производится добавлением чисел в EAX:
3_ - 12C
sp - 136

Это как?
gabryelle пишет:
Тут мне нужно добавить свои коды (допустим ts,tt,tu,tv,tw)

Зачем? Вы добавили данные в архив с такими именами? А что мешает добавлять с уже существующими?

| Сообщение посчитали полезным: gabryelle

Ранг: 12.4 (новичок)
Активность: 0.020.05
Статус: Участник

Создано: 18 февраля 2020 19:01 · Поправил: gabryelle
· Личное сообщение · #3

Не архив. Там в одном каталоге набор файлов, каждый из которых объединяет в себе 1 - текстуры, 2 - модели, на которые эти текстуры натягиваются, позы/анимации для различных действий, фактически не привязанные к моделям в этом файле, а универсальные. При запуске приложения эти файлы (man1, man2, woman1, woman2 и тд), каждый со своим набором, загружаются в оперативку. При активации транспорта вызывается первая функция, которая определяет, какую позу/анимацию использовать для этого порядкового номера транспорта (номера от 0h до 1Ah исходные, но расширяются без проблем). Вот фактический список номеров и буквенных кодов для них:
sp (ride__sp00) - 0,1,B,C и 1A+ (по умолчанию)
3_ (ride__3_00) - 2,3,4,5,6,7,8,9,D,E,F,10,11,12,13,14,15,16,17
ev (ride__ev00) - A
hl (ride__hl00) - 18,19

Таким образом, я могу добавить еще много различных транспортов, но позы у меня только 4... Я могу добавить новую анимацию в эти файлы-сборки, но нужно, чтобы у этой анимации были уникальные коды и программа их распознавала.
Допустим, для мотоцикла будет ride__ts00, для коня ride__tu00 и тд.
Коды ev и hl - это как раз частные случаи, по аналогии с ними я надеюсь добавить свои.
https://yadi.sk/i/lroVyRLPn-Ec4w



Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 18 февраля 2020 19:05 · Поправил: _MBK_
· Личное сообщение · #4

Бррр! Так у вас все коды забиты же до 1А - куда вы их добавлять собираетесь?



Ранг: 12.4 (новичок)
Активность: 0.020.05
Статус: Участник

Создано: 18 февраля 2020 19:18
· Личное сообщение · #5

Я буду использовать 1B и дальше. И вот для них мне нужны другие позы.



Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 18 февраля 2020 19:29
· Личное сообщение · #6

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



Ранг: 12.4 (новичок)
Активность: 0.020.05
Статус: Участник

Создано: 18 февраля 2020 19:39
· Личное сообщение · #7

Эти дополнительные цифры обозначают каждая свой тип позы. Покой/движение/атака и тд. Сейчас у меня 4 типа транспорта - байк (sp), борд (3_), сани (ev), и харлей (hl). С официального клиента я могу взять транспорты и позы к ним, но, само собой, это уже будет пятый тип транспорта, шестой и тд., а их мой вариант приложения уже не увидит.
Вот тут, как раз, происходит выбор - сани (0A) или харлей (18,19).
Code:
  1. 004841C2  |.  83F8 0A       CMP EAX,0A
  2. 004841C5  |.  75 0A         JNE SHORT app_orig.004841D1
  3. 004841C7  |.  8B45 0C       MOV EAX,DWORD PTR [ARG.2]
  4. 004841CA  |.  05 42010000   ADD EAX,142
  5. 004841CF  |.  EB 2D         JMP SHORT app_orig.004841FE
  6. 004841D1  |>  83F8 18       CMP EAX,18
  7. 004841D4  |.  74 20         JE SHORT app_orig.004841F6
  8. 004841D6  |.  83F8 19       CMP EAX,19
  9. 004841D9  |.  74 1B         JE SHORT app_orig.004841F6

Сюда же можно дописать также частный случай 1B, но как привязать к нему дополнительный буквенный код (ts к примеру, какие именно будут буквы - неважно).



Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 18 февраля 2020 21:07
· Личное сообщение · #8

А с чего вы решили, что при загрузке программа ваш тип ресурсов вообще грузить будет?



Ранг: 12.4 (новичок)
Активность: 0.020.05
Статус: Участник

Создано: 19 февраля 2020 09:37 · Поправил: gabryelle
· Личное сообщение · #9

Так и задача в том, чтобы она их стала грузить.

Code:
  1. CPU Disasm
  2. Address   Hex dump          Command                                  Comments
  3. .....
  4. 004CAF0F  |. /0F84 F0000000 |JZ app_orig.004CB005                    ; |
  5. 004CAF15  |. |6A 02         |PUSH 2                                  ; |/Arg3 = 2
  6. 004CAF17  |. |68 80A7AC00   |PUSH OFFSET app_orig.00ACA780           ; ||Arg2 = ASCII "ev"
  7. 004CAF1C  |. |56            |PUSH ESI                                ; ||Arg1
  8. 004CAF1D  |. |E8 243F5500   |CALL app_orig.00A1EE46                  ; |\app_orig.00A1EE46
  9. 004CAF22  |. |83C4 0C       |ADD ESP,0C                              ; |
  10. 004CAF25  |. |85C0          |TEST EAX,EAX                            ; |
  11. 004CAF27  |. |75 32         |JNZ SHORT app_orig.004CAF5B             ; |
  12. 004CAF29  |. |B8 56555555   |MOV EAX,55555556                        ; |
  13. 004CAF2E  |. |F7EF          |IMUL EDI                                ; |
  14. 004CAF30  |. |8BC2          |MOV EAX,EDX                             ; |
  15. 004CAF32  |. |C1E8 1F       |SHR EAX,1F                              ; |
  16. 004CAF35  |. |03C2          |ADD EAX,EDX                             ; |
  17. 004CAF37  |. |8B5424 18     |MOV EDX,DWORD PTR [ESP+18]              ; |
  18. 004CAF3B  |. |8D0C80        |LEA ECX,[EAX*4+EAX]                     ; |
  19. 004CAF3E  |. |8D044A        |LEA EAX,[ECX*2+EDX]                     ; |
  20. 004CAF41  |. |8B4C24 14     |MOV ECX,DWORD PTR [ESP+14]              ; |
  21. 004CAF45  |. |8B91 B8010000 |MOV EDX,DWORD PTR [ECX+1B8]             ; |
  22. 004CAF4B  |. |8B4C24 10     |MOV ECX,DWORD PTR [ESP+10]              ; |
  23. 004CAF4F  |. |898CC2 100A00 |MOV DWORD PTR [EAX*8+EDX+0A10],ECX      ; |
  24. 004CAF56  |. |E9 B4000000   |JMP app_orig.004CB00F                   ; |
  25. 004CAF5B  |> |6A 02         |PUSH 2                                  ; |/Arg3 = 2
  26. 004CAF5D  |. |68 7CA7AC00   |PUSH OFFSET app_orig.00ACA77C           ; ||Arg2 = ASCII "hl"
  27. 004CAF62  |. |56            |PUSH ESI                                ; ||Arg1
  28. 004CAF63  |. |E8 DE3E5500   |CALL app_orig.00A1EE46                  ; |\app_orig.00A1EE46
  29. 004CAF68  |. |83C4 0C       |ADD ESP,0C                              ; |
  30. 004CAF6B  |. |85C0          |TEST EAX,EAX                            ; |
  31. 004CAF6D  |. |B8 56555555   |MOV EAX,55555556                        ; |
  32. 004CAF72  |. |75 0D         |JNZ SHORT app_orig.004CAF81             ; |
  33. 004CAF74  |. |F7EF          |IMUL EDI                                ; |
  34. 004CAF76  |. |8BC2          |MOV EAX,EDX                             ; |
  35. 004CAF78  |. |C1E8 1F       |SHR EAX,1F                              ; |
  36. 004CAF7B  |. |8D4402 25     |LEA EAX,[EAX+EDX+25]                    ; |
  37. 004CAF7F  |. |EB 0B         |JMP SHORT app_orig.004CAF8C             ; |
  38. 004CAF81  |> |F7EF          |IMUL EDI                                ; |
  39. 004CAF83  |. |8BC2          |MOV EAX,EDX                             ; |
  40. 004CAF85  |. |C1E8 1F       |SHR EAX,1F                              ; |
  41. 004CAF88  |. |8D4402 1E     |LEA EAX,[EAX+EDX+1E]                    ; |
  42. 004CAF8C  |> |8B5424 18     |MOV EDX,DWORD PTR [ESP+18]              ; |
  43. 004CAF90  |. |8D0C80        |LEA ECX,[EAX*4+EAX]                     ; |
  44. 004CAF93  |. |8D044A        |LEA EAX,[ECX*2+EDX]                     ; |
  45. 004CAF96  |. |8B4C24 14     |MOV ECX,DWORD PTR [ESP+14]              ; |
  46. 004CAF9A  |. |8B91 B8010000 |MOV EDX,DWORD PTR [ECX+1B8]             ; |
  47. 004CAFA0  |. |8B4C24 10     |MOV ECX,DWORD PTR [ESP+10]              ; |
  48. 004CAFA4  |. |890CC2        |MOV DWORD PTR [EAX*8+EDX],ECX           ; |
  49. 004CAFA7  |. |EB 66         |JMP SHORT app_orig.004CB00F             ; |


Здесь как раз и происходит загрузка текстовых индексов. Я добавил сюда же "ts", при запуске программа проходит через добавленный мною код.

В первой функции происходит подстановка текстового индекса к номеру транспорта (ADD EAX,172 для 18,19 - hl). Просто я не понимаю того, что происходит дальше, как это число (172) далее определяет, какой текстовый индекс использовать. Но то, что первая функция осуществляет выбор - кому какой индекс использовать, а вторая - считывает эти текстовые индексы в память при запуске - в этом я уверен процентов на 99.
Вот место вызова первой функции
Code:
  1. CPU Disasm
  2. Address   Hex dump          Command                                  Comments
  3. 0048502C  |.  E8 BC94F9FF   CALL app_edited.0041E4ED
  4. 00485031  |.  D9EE          FLDZ
  5. 00485033  |.  51            PUSH ECX
  6. 00485034  |.  D91C24        FSTP DWORD PTR [ESP]
  7. 00485037  |.  D945 0C       FLD DWORD PTR [EBP+0C]
  8. 0048503A  |.  53            PUSH EBX
  9. 0048503B  |.  51            PUSH ECX
  10. 0048503C  |.  51            PUSH ECX
  11. 0048503D  |.  8B4E 44       MOV ECX,DWORD PTR [ESI+44]
  12. 00485040  |.  D95C24 04     FSTP DWORD PTR [ESP+4]
  13. 00485044  |.  D9E8          FLD1
  14. 00485046  |.  8945 14       MOV DWORD PTR [EBP+14],EAX
  15. 00485049  |.  D91C24        FSTP DWORD PTR [ESP]
  16. 0048504C  |.  50            PUSH EAX
  17. 0048504D  |.  E8 6C67FBFF   CALL app_edited.0043B7BE
  18. 00485052  |.  DDD8          FSTP ST
  19. 00485054  |.  57            PUSH EDI
  20. 00485055  |.  8D45 D8       LEA EAX,[EBP-28]
  21. 00485058  |.  50            PUSH EAX
  22. 00485059  |.  8BCE          MOV ECX,ESI
  23. 0048505B  |.  E8 4CB7F9FF   CALL app_edited.004207AC
  24. 00485060  |.  8378 18 10    CMP DWORD PTR [EAX+18],10
  25. 00485064  |.  895D FC       MOV DWORD PTR [EBP-4],EBX
  26. 00485067  |.  72 05         JB SHORT app_edited.0048506E
  27. 00485069  |.  8B40 04       MOV EAX,DWORD PTR [EAX+4]
  28. 0048506C  |.  EB 03         JMP SHORT app_edited.00485071
  29. 0048506E  |>  83C0 04       ADD EAX,4
  30. 00485071  |>  FF75 08       PUSH DWORD PTR [EBP+8]
  31. 00485074  |.  D945 0C       FLD DWORD PTR [EBP+0C]
  32. 00485077  |.  51            PUSH ECX
  33. 00485078  |.  51            PUSH ECX
  34. 00485079  |.  8B0E          MOV ECX,DWORD PTR [ESI]
  35. 0048507B  |.  D95C24 04     FSTP DWORD PTR [ESP+4]
  36. 0048507F  |.  D9E8          FLD1
  37. 00485081  |.  D91C24        FSTP DWORD PTR [ESP]
  38. 00485084  |.  50            PUSH EAX
  39. 00485085  |.  E8 B06FF9FF   CALL app_edited.0041C03A
  40. 0048508A  |.  834D FC FF    OR DWORD PTR [EBP-4],FFFFFFFF
  41. 0048508E  |.  53            PUSH EBX
  42. 0048508F  |.  6A 01         PUSH 1
  43. 00485091  |.  8D4D D8       LEA ECX,[EBP-28]
  44. 00485094  |.  E8 C441FAFF   CALL app_edited.0042925D
  45. 00485099  |.  8B7D 10       MOV EDI,DWORD PTR [EBP+10]
  46. 0048509C  |.  83FF FF       CMP EDI,-1
  47. 0048509F  |.  74 61         JE SHORT app_edited.00485102
  48. 004850A1  |.  83C7 02       ADD EDI,2
  49. 004850A4  |.  57            PUSH EDI
  50. 004850A5  |.  8BCE          MOV ECX,ESI
  51. 004850A7  |.  E8 E824F9FF   CALL app_edited.00417594
  52. 004850AC  |.  D9EE          FLDZ




Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 19 февраля 2020 09:45
· Личное сообщение · #10

gabryelle пишет:
Я добавил сюда же "ts", при запуске программа проходит через добавленный мною код.

Вот с этого места поподробнее, как именно вы его добавили и куда?



Ранг: 12.4 (новичок)
Активность: 0.020.05
Статус: Участник

Создано: 19 февраля 2020 09:50
· Личное сообщение · #11

Я же в первом посте все написал...
Code:
  1. CPU Disasm
  2. Address   Hex dump          Command                                  Comments
  3. 004CAF5B  \> \E9 17010000   JMP app_edited.004CB077                  ; |
  4. ......
  5. CPU Disasm
  6. Address   Hex dump          Command                                  Comments
  7. 004CB077  |> \6A 02         PUSH 2                                   ; /Arg3 = 2
  8. 004CB079  |.  68 7CA7AC00   PUSH OFFSET app_edited.00ACA77C          ; |Arg2 = ASCII "hl"
  9. 004CB07E  |.  56            PUSH ESI                                 ; |Arg1
  10. 004CB07F  |.  E8 C23D5500   CALL app_edited.00A1EE46                 ; \app_edited.00A1EE46
  11. 004CB084  |.  83C4 0C       ADD ESP,0C
  12. 004CB087  |.  85C0          TEST EAX,EAX
  13. 004CB089  |.  75 3D         JNZ SHORT app_edited.004CB0C8
  14. 004CB08B  |.  B8 56555555   MOV EAX,55555556
  15. 004CB090  |.  F7EF          IMUL EDI
  16. 004CB092  |.  8BC2          MOV EAX,EDX
  17. 004CB094  |.  C1E8 1F       SHR EAX,1F
  18. 004CB097  |.  8D4402 25     LEA EAX,[EAX+EDX+25]
  19. 004CB09B  |.  EB 0B         JMP SHORT app_edited.004CB0A8
  20. 004CB09D  |.  F7EF          IMUL EDI
  21. 004CB09F  |.  8BC2          MOV EAX,EDX
  22. 004CB0A1  |.  C1E8 1F       SHR EAX,1F
  23. 004CB0A4  |.  8D4402 1E     LEA EAX,[EAX+EDX+1E]
  24. 004CB0A8  |>  8B5424 18     MOV EDX,DWORD PTR [ESP+18]
  25. 004CB0AC  |.  8D0C80        LEA ECX,[EAX*4+EAX]
  26. 004CB0AF  |.  8D044A        LEA EAX,[ECX*2+EDX]
  27. 004CB0B2  |.  8B4C24 14     MOV ECX,DWORD PTR [ESP+14]
  28. 004CB0B6  |.  8B91 B8010000 MOV EDX,DWORD PTR [ECX+1B8]
  29. 004CB0BC  |.  8B4C24 10     MOV ECX,DWORD PTR [ESP+10]
  30. 004CB0C0  |.  890CC2        MOV DWORD PTR [EAX*8+EDX],ECX
  31. 004CB0C3  |.^ E9 47FFFFFF   JMP app_edited.004CB00F
  32. 004CB0C8  |>  6A 02         PUSH 2                                   ; /Arg3 = 2
  33. 004CB0CA  |.  68 2DB14C00   PUSH app_edited.004CB12D                 ; |Arg2 = ASCII "ts"
  34. 004CB0CF  |.  56            PUSH ESI                                 ; |Arg1
  35. 004CB0D0  |.  E8 713D5500   CALL app_edited.00A1EE46                 ; \app_edited.00A1EE46
  36. 004CB0D5  |.  83C4 0C       ADD ESP,0C
  37. 004CB0D8  |.  85C0          TEST EAX,EAX
  38. 004CB0DA  |.  B8 56555555   MOV EAX,55555556
  39. 004CB0DF  |.  75 0D         JNZ SHORT app_edited.004CB0EE
  40. 004CB0E1  |.  F7EF          IMUL EDI
  41. 004CB0E3  |.  8BC2          MOV EAX,EDX
  42. 004CB0E5  |.  C1E8 1F       SHR EAX,1F
  43. 004CB0E8  |.  8D4402 25     LEA EAX,[EAX+EDX+25]
  44. 004CB0EC  |.  EB 0B         JMP SHORT app_edited.004CB0F9
  45. 004CB0EE  |>  F7EF          IMUL EDI
  46. 004CB0F0  |.  8BC2          MOV EAX,EDX
  47. 004CB0F2  |.  C1E8 1F       SHR EAX,1F
  48. 004CB0F5  |.  8D4402 1E     LEA EAX,[EAX+EDX+1E]
  49. 004CB0F9  |>  8B5424 18     MOV EDX,DWORD PTR [ESP+18]
  50. 004CB0FD  |.  8D0C80        LEA ECX,[EAX*4+EAX]
  51. 004CB100  |.  8D044A        LEA EAX,[ECX*2+EDX]
  52. 004CB103  |.  8B4C24 14     MOV ECX,DWORD PTR [ESP+14]
  53. 004CB107  |.  8B91 B8010000 MOV EDX,DWORD PTR [ECX+1B8]
  54. 004CB10D  |.  8B4C24 10     MOV ECX,DWORD PTR [ESP+10]
  55. 004CB111  |.  890CC2        MOV DWORD PTR [EAX*8+EDX],ECX
  56. 004CB114  \.^ E9 F6FEFFFF   JMP app_edited.004CB00F


в первой функции изменения:
Code:
  1. CPU Disasm
  2. Address   Hex dump          Command                                  Comments
  3. 004841D9   /74 28           JE SHORT app_edited.00484203
  4.  
  5. CPU Disasm
  6. Address   Hex dump          Command                                  Comments
  7. 00484203    8B45 0C         MOV EAX,DWORD PTR [EBP+0C]
  8. 00484206    05 A2010000     ADD EAX,1A2
  9. 0048420B  ^ EB F1           JMP SHORT app_edited.004841FE


То-есть для EAX=19 выполняем ADD EAX,1A2. В дальнейшем я вместо 19 добавлю другие варианты (1B,1C,1D и тд), с этим, вроде, проблем быть не должно. А пока так для теста использую 19.
1A2 написал от балды, поскольку, как я писал выше, я не понимаю, что это за число и как мне вычислить следующее. Пробовал перебирать подряд, начиная со 172, но следующим (ближе к 190) идет уже анимация другого порядка.



Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 19 февраля 2020 10:05
· Личное сообщение · #12

Во первых, я не совсем пойму как вы в готовый код вот просто так взяли и добавили новый фрагмент, ничего при этом не затирая, во вторых, насколько я вижу, два куска кода для ts и hl совершенно идентичны, от чего вы решили, что загрузка будет на какие то разные места?



Ранг: 12.4 (новичок)
Активность: 0.020.05
Статус: Участник

Создано: 19 февраля 2020 10:20
· Личное сообщение · #13

В файле полно свободного места, туда я новый код и записал, джампами все это объединил - это работает, постоянно вношу изменения таким образом. А еслиб я знал ответ на второй вопрос, то здесь не писал бы...



Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 19 февраля 2020 10:54
· Личное сообщение · #14

Обратите внимание, в вашем файле полно еще других суффиксов помимо вышеперечисленных
Code:
  1. .004CAEB7: 689CA7AC00                     push         000ACA79C ;'__00' --↓1
  2. .004CAEBC: 56                             push         esi
  3. .004CAEBD: E8843F5500                     call        .000A1EE46 --↓2
  4. .004CAEC2: 83C40C                         add          esp,00C
  5. .004CAEC5: 85C0                           test         eax,eax
  6. .004CAEC7: 0F8438010000                   jz          .0004CB005 --↓3
  7. .004CAECD: 6A04                           push         4
  8. .004CAECF: 6894A7AC00                     push         000ACA794 ;'__01' --↓4
  9. .004CAED4: 56                             push         esi
  10. .004CAED5: E86C3F5500                     call        .000A1EE46 --↓2
  11. .004CAEDA: 83C40C                         add          esp,00C
  12. .004CAEDD: 85C0                           test         eax,eax
  13. .004CAEDF: 0F8420010000                   jz          .0004CB005 --↓3
  14. .004CAEE5: 6A04                           push         4
  15. .004CAEE7: 688CA7AC00                     push         000ACA78C ;'__02' --↓5
  16. .004CAEEC: 56                             push         esi
  17. .004CAEED: E8543F5500                     call        .000A1EE46 --↓2
  18. .004CAEF2: 83C40C                         add          esp,00C
  19. .004CAEF5: 85C0                           test         eax,eax
  20. .004CAEF7: 0F8408010000                   jz          .0004CB005 --↓3
  21. .004CAEFD: 6A04                           push         4
  22. .004CAEFF: 6884A7AC00                     push         000ACA784 ;'__03' --↓6
  23. .004CAF04: 56                             push         esi




Ранг: 12.4 (новичок)
Активность: 0.020.05
Статус: Участник

Создано: 19 февраля 2020 11:01
· Личное сообщение · #15

Это подтипы анимаций (покой/движение/атака и тд.)



Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 19 февраля 2020 11:05
· Личное сообщение · #16

А они что, тоже присутствуют и загружаются? Функция то на них та же самая вызывается A1EE46
Сдается мне, эта функция никакого отношения к загрузке не имеет



Ранг: 12.4 (новичок)
Активность: 0.020.05
Статус: Участник

Создано: 19 февраля 2020 11:24
· Личное сообщение · #17

Похоже, что в итоге строки выглядят так:
ride____00
ride____01
ride____02
ride____03
То-есть тут используется код "__".
Попробовал убрать эту анимацию совсем - ничего не изменилось. Заменил, чтобы посмотреть визуально, что это такое. Это аналог "3_". Который нигде не используется. Скорее всего изначально был только это вариант, а с обновлениями его отключили, заменив четырьмя, имеющимися сейчас.



Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 19 февраля 2020 11:39
· Личное сообщение · #18

По вашей логике, у этих суффиксов тоже должны быть некие зарезервированные коды.
На мой же взгляд, вы изначально исходите из ложных предпосылок и код, ответственный за загрузку находится где то в другом месте, а процедура A1EE46 абсолютно ни при чем. Возможно, разве что, формирует какую то таблицу суффиксов для создания хэшкодов, а возможно и нет. Проверить элементарно - поменяйте в
Code:
  1. 004CAF17  |. |68 80A7AC00   |PUSH OFFSET app_orig.00ACA780
ev на ts - если вместо ev начнут загружаться анимации с соответствующим суффиксом ts то значит действительно так.



Ранг: 12.4 (новичок)
Активность: 0.020.05
Статус: Участник

Создано: 19 февраля 2020 11:43
· Личное сообщение · #19

Поменял - вместо ev загружаются ts, анимация изменилась, как и предполагалось.



Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 19 февраля 2020 12:17
· Личное сообщение · #20

А, примерно вкурил принцип.
Смотрите, если суффикс содержит ev то данные из переменной [esp+10h] инитят таблицу [edx+eax*8+0A10h]
Code:
  1. .text:004CAF29                 mov     eax, 55555556h
  2. .text:004CAF2E                 imul    edi
  3. .text:004CAF30                 mov     eax, edx
  4. .text:004CAF32                 shr     eax, 1Fh
  5. .text:004CAF35                 add     eax, edx
  6. .text:004CAF37                 mov     edx, [esp+18h]
  7. .text:004CAF3B                 lea     ecx, [eax+eax*4]
  8. .text:004CAF3E                 lea     eax, [edx+ecx*2]
  9. .text:004CAF41                 mov     ecx, [esp+14h]
  10. .text:004CAF45                 mov     edx, [ecx+1B8h]
  11. .text:004CAF4B                 mov     ecx, [esp+10h]
  12. .text:004CAF4F                 mov     [edx+eax*8+0A10h], ecx

а если суффикс hl то другую таблицу [edx+eax*8]
Code:
  1. .text:004CAF8C                 mov     edx, [esp+18h]
  2. .text:004CAF90                 lea     ecx, [eax+eax*4]
  3. .text:004CAF93                 lea     eax, [edx+ecx*2]
  4. .text:004CAF96                 mov     ecx, [esp+14h]
  5. .text:004CAF9A                 mov     edx, [ecx+1B8h]
  6. .text:004CAFA0                 mov     ecx, [esp+10h]
  7. .text:004CAFA4                 mov     [edx+eax*8], ecx

Возможно, это разные индексы одной и той же таблицы

Добавлено спустя 33 минуты
_MBK_ пишет:
Возможно, это разные индексы одной и той же таблицы

На это, кстати, какбэ намекает и то, что смещение между индексами = 0xA10 = как раз 0x142 восьмибайтовых элемента таблицы



Ранг: 12.4 (новичок)
Активность: 0.020.05
Статус: Участник

Создано: 19 февраля 2020 13:51
· Личное сообщение · #21

Вот содержимое регистров в точке 004CAFA4 (промотал, пока не получил HL00):
Code:
  1. EAX 00000172
  2. ECX 14767770
  3. EDX 10438A38
  4. EBX 147677EC ASCII "__HL00"
  5. ESP 0AABFBE4
  6. EBP 147677E8 ASCII "RIDE__HL00"
  7. ESI 147677EE ASCII "HL00"
  8. EDI 00000000


Тут в EAX как раз лежит число 172, по которому осуществляется выбор тут:
Code:
  1. 004841F9  |.  05 72010000   ADD EAX,172


Таблица должна быть по адресу в ECX (14767770)?
Code:
  1. CPU Disasm
  2. Address   Hex dump          Command                                  Comments
  3. 14767770    181E            SBB BYTE PTR [ESI],BL
  4. 14767772    3201            XOR AL,BYTE PTR [ECX]
  5. 14767774    0D F0ADBAC8     OR EAX,C8BAADF0
  6. 14767779    1D 32010DF0     SBB EAX,F00D0132
  7. 1476777E    AD              LODS DWORD PTR [ESI]
  8. 1476777F    BA 02000000     MOV EDX,2
  9. 14767784    E8 77761400     CALL 148AEE00
  10. 14767789    0000            ADD BYTE PTR [EAX],AL
  11. 1476778B    0000            ADD BYTE PTR [EAX],AL
  12. 1476778D    00F0            ADD AL,DH
  13. 1476778F    3F              AAS
  14. 14767790    0000            ADD BYTE PTR [EAX],AL
  15. 14767792    0060 55         ADD BYTE PTR [EAX+55],AH
  16. 14767795    55              PUSH EBP
  17. 14767796    F5              CMC
  18. 14767797    3F              AAS
  19. 14767798    0000            ADD BYTE PTR [EAX],AL
  20. 1476779A    0000            ADD BYTE PTR [EAX],AL
  21. 1476779C    0000            ADD BYTE PTR [EAX],AL
  22. 1476779E    0000            ADD BYTE PTR [EAX],AL
  23. 147677A0    0000            ADD BYTE PTR [EAX],AL
  24. 147677A2    0000            ADD BYTE PTR [EAX],AL
  25. 147677A4    0000            ADD BYTE PTR [EAX],AL
  26. 147677A6    0000            ADD BYTE PTR [EAX],AL
  27. 147677A8    42              INC EDX
  28. 147677A9    0000            ADD BYTE PTR [EAX],AL
  29. 147677AB    001478          ADD BYTE PTR [EDI*2+EAX],DL
  30. 147677AE    76 14           JBE SHORT 147677C4
  31. 147677B0    B8 8976140D     MOV EAX,0D147689
  32. 147677B5    F0:AD           LOCK LODS DWORD PTR [ESI]                ; LOCK prefix is not allowed
  33. 147677B7    BA 0DF0ADBA     MOV EDX,BAADF00D
  34. 147677BC    0D F0ADBA42     OR EAX,42BAADF0
  35. 147677C1    0000            ADD BYTE PTR [EAX],AL
  36. 147677C3    0000            ADD BYTE PTR [EAX],AL
  37. 147677C5    0000            ADD BYTE PTR [EAX],AL
  38. 147677C7    0000            ADD BYTE PTR [EAX],AL
  39. 147677C9    0000            ADD BYTE PTR [EAX],AL
  40. 147677CB    000D F0ADBAAB   ADD BYTE PTR [ABBAADF0],CL
  41. 147677D1    AB              STOS DWORD PTR [EDI]
  42. 147677D2    AB              STOS DWORD PTR [EDI]
  43. 147677D3    AB              STOS DWORD PTR [EDI]
  44. 147677D4    AB              STOS DWORD PTR [EDI]
  45. 147677D5    AB              STOS DWORD PTR [EDI]
  46. 147677D6    AB              STOS DWORD PTR [EDI]
  47. 147677D7    AB              STOS DWORD PTR [EDI]
  48. 147677D8    0000            ADD BYTE PTR [EAX],AL
  49. 147677DA    0000            ADD BYTE PTR [EAX],AL
  50. 147677DC    0000            ADD BYTE PTR [EAX],AL
  51. 147677DE    0000            ADD BYTE PTR [EAX],AL
  52. 147677E0    08B3 5146139C   OR BYTE PTR [EBX+9C134651],DH
  53. 147677E6    43              INC EBX
  54. 147677E7    1D 52494445     SBB EAX,45444952
  55. 147677EC    5F              POP EDI
  56. 147677ED    5F              POP EDI
  57. 147677EE    48              DEC EAX
  58. 147677EF    4C              DEC ESP
  59. 147677F0    3030            XOR BYTE PTR [EAX],DH
  60. 147677F2    00AB ABABABAB   ADD BYTE PTR [EBX+ABABABAB],CH
  61. 147677F8    AB              STOS DWORD PTR [EDI]
  62. 147677F9    AB              STOS DWORD PTR [EDI]
  63. 147677FA    AB              STOS DWORD PTR [EDI]
  64. 147677FB    FE              DB FE                                    ; Unknown command
  65. 147677FC    EE              OUT DX,AL                                ; I/O command
  66. 147677FD    FE              DB FE                                    ; Unknown command
  67. 147677FE    EE              OUT DX,AL                                ; I/O command
  68. 147677FF    FE00            INC BYTE PTR [EAX]
  69. 14767801    0000            ADD BYTE PTR [EAX],AL
  70. 14767803    0000            ADD BYTE PTR [EAX],AL
  71. 14767805    0000            ADD BYTE PTR [EAX],AL
  72. 14767807    0038            ADD BYTE PTR [EAX],BH
  73. 14767809    B1 51           MOV CL,51
  74. 1476780B    74 19           JE SHORT 14767826
  75. 1476780D    9C              PUSHFD
  76. 1476780E    43              INC EBX
  77. 1476780F    1C 42           SBB AL,42
  78. 14767811    0000            ADD BYTE PTR [EAX],AL
  79. 14767813    00D8            ADD AL,BL
  80. 14767815    8A76 14         MOV DH,BYTE PTR [ESI+14]
  81. 14767818    0100            ADD DWORD PTR [EAX],EAX
  82. 1476781A    0000            ADD BYTE PTR [EAX],AL
  83. 1476781C    2900            SUB DWORD PTR [EAX],EAX
  84. 1476781E    0000            ADD BYTE PTR [EAX],AL
  85. 14767820    2900            SUB DWORD PTR [EAX],EAX
  86. 14767822    0000            ADD BYTE PTR [EAX],AL
  87. 14767824    F8              CLC
  88. 14767825    8A76 14         MOV DH,BYTE PTR [ESI+14]
  89. 14767828    208B 7614708E   AND BYTE PTR [EBX+8E701476],CL
  90. 1476782E    76 14           JBE SHORT 14767844
  91. 14767830    0000            ADD BYTE PTR [EAX],AL
  92. 14767832    0000            ADD BYTE PTR [EAX],AL
  93. 14767834    0000            ADD BYTE PTR [EAX],AL
  94. 14767836    0000            ADD BYTE PTR [EAX],AL
  95. 14767838    0000            ADD BYTE PTR [EAX],AL
  96. 1476783A    0000            ADD BYTE PTR [EAX],AL
  97. 1476783C    0000            ADD BYTE PTR [EAX],AL
  98. 1476783E    0000            ADD BYTE PTR [EAX],AL
  99. 14767840    0000            ADD BYTE PTR [EAX],AL
  100. 14767842    0000            ADD BYTE PTR [EAX],AL
  101. 14767844    0000            ADD BYTE PTR [EAX],AL
  102. 14767846    0000            ADD BYTE PTR [EAX],AL
  103. 14767848    0000            ADD BYTE PTR [EAX],AL
  104. 1476784A    0000            ADD BYTE PTR [EAX],AL
  105. 1476784C    0000            ADD BYTE PTR [EAX],AL
  106. 1476784E    0000            ADD BYTE PTR [EAX],AL
  107. 14767850    0000            ADD BYTE PTR [EAX],AL
  108. 14767852    0000            ADD BYTE PTR [EAX],AL
  109. 14767854    0E              PUSH CS
  110. 14767855    F0:AD           LOCK LODS DWORD PTR [ESI]                ; LOCK prefix is not allowed
  111. 14767857    BA 18917614     MOV EDX,14769118                         ; ASCII "Bip01 Pelvis"
  112. 1476785C    0100            ADD DWORD PTR [EAX],EAX
  113. 1476785E    0000            ADD BYTE PTR [EAX],AL
  114. 14767860    0200            ADD AL,BYTE PTR [EAX]
  115. 14767862    0000            ADD BYTE PTR [EAX],AL
  116. 14767864    0200            ADD AL,BYTE PTR [EAX]
  117. 14767866    0000            ADD BYTE PTR [EAX],AL
  118. 14767868    40              INC EAX
  119. 14767869    91              XCHG EAX,ECX
  120. 1476786A    76 14           JBE SHORT 14767880
  121. 1476786C    68 917614A8     PUSH A8147691
  122. 14767871    91              XCHG EAX,ECX


Там в конце "Bip01 Pelvis" - да, это уже куски анимации. А что дальше? Нужно ее как-то расширить? Или просто добавить смещение? Я попробовал для ts сделать
MOV DWORD PTR [EAX*8+EDX+1420],ECX
но в EAX все равно получаю харлеевские 172 для __ts00



Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 19 февраля 2020 14:14
· Личное сообщение · #22

gabryelle пишет:

Вот содержимое регистров в точке 004CAFA4 (промотал, пока не получил HL00):

Не обращайте внимание, значения ebx, ebp и esi остались из предыдущей процедуры сравнения, они дальше никуда не идут
gabryelle пишет:
Тут в EAX как раз лежит число 172, по которому осуществляется выбор тут:

Скорее всего да, это индекс в этом массиве, начало которого, cудя по всему в edx то есть 10438A38



Ранг: 12.4 (новичок)
Активность: 0.020.05
Статус: Участник

Создано: 19 февраля 2020 14:42 · Поправил: gabryelle
· Личное сообщение · #23

Code:
  1. CPU Disasm
  2. Address   Hex dump          Command                                  Comments
  3. 10438A37    18B0 C8D00F0D   SBB BYTE PTR [EAX+0D0FD0C8],DH
  4. 10438A3D    F0:AD           LOCK LODS DWORD PTR [ESI]                ; LOCK prefix is not allowed
  5. 10438A3F    BA 9001BA0F     MOV EDX,0FBA0190
  6. 10438A44    0D F0ADBAF0     OR EAX,F0BAADF0
  7. 10438A49    96              XCHG EAX,ESI
  8. 10438A4A    CE              INTO
  9. 10438A4B    0F              DB 0F                                    ; Unknown command
  10. 10438A4C    0D F0ADBA20     OR EAX,20BAADF0
  11. 10438A51  ^ 74 D0           JE SHORT 10438A23
  12. 10438A53    0F              DB 0F                                    ; Unknown command
  13. 10438A54    0D F0ADBA30     OR EAX,30BAADF0
  14. 10438A59    9B              WAIT
  15. 10438A5A    B9 0F0DF0AD     MOV ECX,ADF00D0F
  16. 10438A5F    BA A0AF1B16     MOV EDX,161BAFA0
  17. 10438A64    0D F0ADBA08     OR EAX,08BAADF0
  18. 10438A69    16              PUSH SS
  19. 10438A6A    1C 16           SBB AL,16
  20. 10438A6C    0D F0ADBAD0     OR EAX,D0BAADF0
  21. 10438A71    48              DEC EAX
  22. 10438A72    1B16            SBB EDX,DWORD PTR [ESI]
  23. 10438A74    0D F0ADBA00     OR EAX,00BAADF0
  24. 10438A79    0000            ADD BYTE PTR [EAX],AL
  25. 10438A7B    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  26. 10438A81    0000            ADD BYTE PTR [EAX],AL
  27. 10438A83    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  28. 10438A89    0000            ADD BYTE PTR [EAX],AL
  29. 10438A8B    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  30. 10438A91    0000            ADD BYTE PTR [EAX],AL
  31. 10438A93    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  32. 10438A99    0000            ADD BYTE PTR [EAX],AL
  33. 10438A9B    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  34. 10438AA1    0000            ADD BYTE PTR [EAX],AL
  35. 10438AA3    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  36. 10438AA9    0000            ADD BYTE PTR [EAX],AL
  37. 10438AAB    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  38. 10438AB1    0000            ADD BYTE PTR [EAX],AL
  39. 10438AB3    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  40. 10438AB9    0000            ADD BYTE PTR [EAX],AL
  41. 10438ABB    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  42. 10438AC1    0000            ADD BYTE PTR [EAX],AL
  43. 10438AC3    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  44. 10438AC9    0000            ADD BYTE PTR [EAX],AL
  45. 10438ACB    000D F0ADBAF0   ADD BYTE PTR [F0BAADF0],CL
  46. 10438AD1    FA              CLI
  47. 10438AD2    EF              OUT DX,EAX                               ; I/O command
  48. 10438AD3    15 0DF0ADBA     ADC EAX,BAADF00D
  49. 10438AD8    0000            ADD BYTE PTR [EAX],AL
  50. 10438ADA    0000            ADD BYTE PTR [EAX],AL
  51. 10438ADC    0D F0ADBA00     OR EAX,00BAADF0
  52. 10438AE1    0000            ADD BYTE PTR [EAX],AL
  53. 10438AE3    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  54. 10438AE9    0000            ADD BYTE PTR [EAX],AL
  55. 10438AEB    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  56. 10438AF1    0000            ADD BYTE PTR [EAX],AL
  57. 10438AF3    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  58. 10438AF9    0000            ADD BYTE PTR [EAX],AL
  59. 10438AFB    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  60. 10438B01    0000            ADD BYTE PTR [EAX],AL
  61. 10438B03    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  62. 10438B09    0000            ADD BYTE PTR [EAX],AL
  63. 10438B0B    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  64. 10438B11    0000            ADD BYTE PTR [EAX],AL
  65. 10438B13    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  66. 10438B19    0000            ADD BYTE PTR [EAX],AL
  67. 10438B1B    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  68. 10438B21    0000            ADD BYTE PTR [EAX],AL
  69. 10438B23    000D F0ADBA80   ADD BYTE PTR [80BAADF0],CL
  70. 10438B29    CA D30F         RETF 0FD3                                ; Far jump or call
  71. 10438B2C    0D F0ADBA70     OR EAX,70BAADF0
  72. 10438B31  ^ 7F D2           JG SHORT 10438B05
  73. 10438B33    0F              DB 0F                                    ; Unknown command
  74. 10438B34    0D F0ADBA30     OR EAX,30BAADF0
  75. 10438B39    F0:D20F         LOCK ROR BYTE PTR [EDI],CL               ; LOCK prefix is not allowed
  76. 10438B3C    0D F0ADBA58     OR EAX,58BAADF0
  77. 10438B41    5E              POP ESI
  78. 10438B42    D30F            ROR DWORD PTR [EDI],CL
  79. 10438B44    0D F0ADBA20     OR EAX,20BAADF0
  80. 10438B49    1E              PUSH DS
  81. 10438B4A    D10F            ROR DWORD PTR [EDI],1
  82. 10438B4C    0D F0ADBA50     OR EAX,50BAADF0
  83. 10438B51    8CD1            MOV ECX,SS
  84. 10438B53    0F              DB 0F                                    ; Unknown command
  85. 10438B54    0D F0ADBA40     OR EAX,40BAADF0
  86. 10438B59    10D2            ADC DL,DL
  87. 10438B5B    0F              DB 0F                                    ; Unknown command
  88. 10438B5C    0D F0ADBA00     OR EAX,00BAADF0
  89. 10438B61    0000            ADD BYTE PTR [EAX],AL
  90. 10438B63    000D F0ADBA58   ADD BYTE PTR [58BAADF0],CL
  91. 10438B69    4D              DEC EBP
  92. 10438B6A    F5              CMC
  93. 10438B6B    15 0DF0ADBA     ADC EAX,BAADF00D
  94. 10438B70    10AF F4150DF0   ADC BYTE PTR [EDI+F00D15F4],CH
  95. 10438B76    AD              LODS DWORD PTR [ESI]
  96. 10438B77    BA C810F415     MOV EDX,15F410C8
  97. 10438B7C    0D F0ADBA00     OR EAX,00BAADF0
  98. 10438B81    0000            ADD BYTE PTR [EAX],AL
  99. 10438B83    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  100. 10438B89    0000            ADD BYTE PTR [EAX],AL
  101. 10438B8B    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  102. 10438B91    0000            ADD BYTE PTR [EAX],AL
  103. 10438B93    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  104. 10438B99    0000            ADD BYTE PTR [EAX],AL
  105. 10438B9B    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  106. 10438BA1    0000            ADD BYTE PTR [EAX],AL
  107. 10438BA3    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  108. 10438BA9    0000            ADD BYTE PTR [EAX],AL
  109. 10438BAB    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  110. 10438BB1    0000            ADD BYTE PTR [EAX],AL
  111. 10438BB3    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  112. 10438BB9    0000            ADD BYTE PTR [EAX],AL
  113. 10438BBB    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  114. 10438BC1    0000            ADD BYTE PTR [EAX],AL
  115. 10438BC3    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  116. 10438BC9    0000            ADD BYTE PTR [EAX],AL
  117. 10438BCB    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  118. 10438BD1    0000            ADD BYTE PTR [EAX],AL
  119. 10438BD3    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  120. 10438BD9    0000            ADD BYTE PTR [EAX],AL
  121. 10438BDB    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  122. 10438BE1    0000            ADD BYTE PTR [EAX],AL
  123. 10438BE3    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  124. 10438BE9    0000            ADD BYTE PTR [EAX],AL
  125. 10438BEB    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  126. 10438BF1    0000            ADD BYTE PTR [EAX],AL
  127. 10438BF3    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  128. 10438BF9    0000            ADD BYTE PTR [EAX],AL
  129. 10438BFB    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  130. 10438C01    0000            ADD BYTE PTR [EAX],AL
  131. 10438C03    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  132. 10438C09    0000            ADD BYTE PTR [EAX],AL
  133. 10438C0B    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  134. 10438C11    0000            ADD BYTE PTR [EAX],AL
  135. 10438C13    000D F0ADBAB0   ADD BYTE PTR [B0BAADF0],CL
  136. 10438C19    AF              SCAS DWORD PTR [EDI]
  137. 10438C1A    94              XCHG EAX,ESP
  138. 10438C1B    15 0DF0ADBA     ADC EAX,BAADF00D
  139. 10438C20    0000            ADD BYTE PTR [EAX],AL
  140. 10438C22    0000            ADD BYTE PTR [EAX],AL
  141. 10438C24    0D F0ADBA00     OR EAX,00BAADF0
  142. 10438C29    0000            ADD BYTE PTR [EAX],AL
  143. 10438C2B    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  144. 10438C31    0000            ADD BYTE PTR [EAX],AL
  145. 10438C33    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  146. 10438C39    0000            ADD BYTE PTR [EAX],AL
  147. 10438C3B    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  148. 10438C41    0000            ADD BYTE PTR [EAX],AL
  149. 10438C43    000D F0ADBA70   ADD BYTE PTR [70BAADF0],CL
  150. 10438C49    2195 150DF0AD   AND DWORD PTR [EBP+ADF00D15],EDX
  151. 10438C4F    BA 00000000     MOV EDX,0
  152. 10438C54    0D F0ADBA00     OR EAX,00BAADF0
  153. 10438C59    0000            ADD BYTE PTR [EAX],AL
  154. 10438C5B    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  155. 10438C61    0000            ADD BYTE PTR [EAX],AL
  156. 10438C63    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  157. 10438C69    0000            ADD BYTE PTR [EAX],AL
  158. 10438C6B    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  159. 10438C71    0000            ADD BYTE PTR [EAX],AL
  160. 10438C73    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  161. 10438C79    0000            ADD BYTE PTR [EAX],AL
  162. 10438C7B    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  163. 10438C81    0000            ADD BYTE PTR [EAX],AL
  164. 10438C83    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  165. 10438C89    0000            ADD BYTE PTR [EAX],AL
  166. 10438C8B    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  167. 10438C91    0000            ADD BYTE PTR [EAX],AL
  168. 10438C93    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  169. 10438C99    0000            ADD BYTE PTR [EAX],AL
  170. 10438C9B    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  171. 10438CA1    0000            ADD BYTE PTR [EAX],AL
  172. 10438CA3    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  173. 10438CA9    0000            ADD BYTE PTR [EAX],AL
  174. 10438CAB    000D F0ADBA00   ADD BYTE PTR [cabalmain.0BAADF0],CL
  175. 10438CB1    0000            ADD BYTE PTR [EAX],AL
  176. 10438CB3    000D F0ADBAC8   ADD BYTE PTR [C8BAADF0],CL
  177. 10438CB9    319415 0DF0ADBA XOR DWORD PTR [EDX+EBP+BAADF00D],EDX
  178. 10438CC0    C0B7 D40F0DF0 A SAL BYTE PTR [EDI+F00D0FD4],0AD          ; Shift out of range
  179. 10438CC7    BA 3837D50F     MOV EDX,0FD53738
  180. 10438CCC    0D F0ADBA10     OR EAX,10BAADF0
  181. 10438CD1    B8 D50F0DF0     MOV EAX,F00D0FD5
  182. 10438CD6    AD              LODS DWORD PTR [ESI]
  183. 10438CD7    BA F02FD60F     MOV EDX,0FD62FF0
  184. 10438CDC    0D F0ADBAC0     OR EAX,C0BAADF0
  185. 10438CE1    BE D60F0DF0     MOV ESI,F00D0FD6
  186. 10438CE6    AD              LODS DWORD PTR [ESI]
  187. 10438CE7    BA D842D70F     MOV EDX,0FD742D8
  188. 10438CEC    0D F0ADBAE8     OR EAX,E8BAADF0
  189. 10438CF1    D1D7            RCL EDI,1




Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 19 февраля 2020 14:48
· Личное сообщение · #24

А почему вы его как код интерпретируете? Это таблица, каждый элемент которой 8 байт, скорее всего, адреса - вполне похоже на истину



Ранг: 12.4 (новичок)
Активность: 0.020.05
Статус: Участник

Создано: 19 февраля 2020 15:17
· Личное сообщение · #25

Да это автоанализ, что-то не соображу, как к нормальному виду привести. В общем по началу таблица состоит из элементов 0000000D F0ADBA00, но с каждой итерацией в таблице добавляется изменений.



Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 19 февраля 2020 15:47
· Личное сообщение · #26

Таблица, кстати, выделяется динамически, судя по всему, вот тут
Code:
  1. .text:004CA3EA                 push    2888h
  2. .text:004CA3EF                 mov     [esi+8], esi
  3. .text:004CA3F2                 call    sub_9C7986
  4. .text:004CA3F7                 add     esp, 4
  5. .text:004CA3FA                 mov     [ebx+1B8h], eax
  6. .text:004CA400                 xor     eax, eax




Ранг: 12.4 (новичок)
Активность: 0.020.05
Статус: Участник

Создано: 19 февраля 2020 16:06
· Личное сообщение · #27

Да, элементы 00000000 0DF0ADBA повторяются, занимая 2888h байт. Получается, мне нужно добавить к размеру таблицы 0A10h байт (по примеру ev-hl)? И для ts я пишу, соответственно,
Code:
  1. MOV DWORD PTR [EAX*8+EDX+1420],ECX

То-есть 0A10+0A10=1420h



Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 19 февраля 2020 16:08
· Личное сообщение · #28

Ну и соответственно, код добавления и чтения элементов



Ранг: 12.4 (новичок)
Активность: 0.020.05
Статус: Участник

Создано: 20 февраля 2020 11:26
· Личное сообщение · #29

Нет, что-то я дальше уже не тяну. _MBK_, если вам интересно, может быть договоримся в лс о цене?



Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 20 февраля 2020 11:59
· Личное сообщение · #30

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


 [email protected] —› Программирование —› Расширение функции в готовом приложении
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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