You are not logged in.
Еще один лимит в скриптинге был устранен: я смог реализовать VirtualProtect через скрипты, поэтому теперь вовсе не требуется патчить exe, для того чтобы менять некоторые адреса - теперь тоже самое можно делать через СКМ.
Сейчас думаю над оптимизацией.
Offline
Вот полностью автономная процедура записи значения с опр. длиной (1, 2, 4 байта) по любому адресу, защищенному Virtual Protect'ом, без использования патча.
Работает на версии 1.0 US
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | :MemoryProofWrite 3@ == 1 jf @_____novp 4@ = - 429863 &0( 4@ ,1i) = 0xA 49960 &0( 4@ ,1i) += @_____vpsv 0052: gap 0 virtual_protect_at_address 0@ size 1@ newprotect 4 gap 0 0 0572: 1 gosub @MemoryWrite 0052: gap 0 virtual_protect_at_address 0@ size 1@ newprotect - 1 gap 0 0 0572: 1 &0( 4@ ,1i) = 0 end_thread :_____novp gosub @MemoryWrite end_thread :MemoryWrite 3@ = - 429864 &0( 3@ ,1i) = 0xA 49960 &0( 3@ ,1i) += @_____mwss 0052: gap 0 target_address 0@ size 1@ value 2@ gap 0 0 0A3D: 1 &0( 3@ ,1i) = 0 return :_____vpsv hex 68 F 4 3C A 4 00 83 3D 84 3C A 4 00 FF 75 08 FF 35 F 4 3C A 4 00 EB 06 FF 35 84 3C A 4 00 FF 35 80 3C A 4 00 FF 35 7C 3C A 4 00 FF 15 2C 80 85 00 C 3 end :_____mwss hex 8B 15 7C 3C A 4 00 8B 05 84 3C A 4 00 83 3D 80 3C A 4 00 01 75 03 88 02 C 3 83 3D 80 3C A 4 00 02 75 04 66 89 02 C 3 89 02 C 3 end |
Это по сути поток, который выполняется однократно. При его создании передаются 4 параметра
1 | create_thread @MemoryProofWrite address XXX size XXX value XXX VirtualProtect XXX |
Все параметры те же, что и для процедуры WriteMem в хелпе к саннику.
Пример использования: меняем гравитацию через SCM /c VirtualProtect
1 | create_thread @MemoryProofWrite address 0x 00863984 size 4 value 0.002 VirtualProtect 1 |
Этим самым мы запишем по адресу 0x00863984 число 0.002 (пример из патча). Можно использовать переменные.
Пример 2. Убираем сообщение, которое появляется когда Карл садится в машину в первый раз /без VirtualProtect
1 | create_thread @MemoryProofWrite address 0xC0BC 15 size 1 value 1 |
SCM+исходник для тех, кто не понял
Last edited by Seemann (03-03-2007 10:20)
Offline
Круто ! Теперь надо бы написать процедуру , чтобы определять размер exe ...
Offline
Здесь лежит доработанный поток, позволяющий записывать/читать адреса с Virtual Protect'ом. Там же есть вариант и для обеих версих игры
http://www.gtaforums.com/index.php?show … &p=4078156
Offline
Думаю никому это не надо
Почему же не надо?
Мне было бы очень интересно почитать, и времени свободного, вагон и маленькая тележка.
Offline