Grom-Skynet Опубликовано 21 февраля, 2012 Поделиться Опубликовано 21 февраля, 2012 (изменено) Как найти адрес с нужным значением.Поиск адреса который используется исполняющим кодом игры...Введение.Для примера будет использована игра Сталкер Чистое небо.. Принцип работы с игрой будет такой же как и в предыдущих статьях ... когда взламывали игру Metro 2033... но сложнее... Начнем.Как присоединить игру к отладчику уже все знают... искать будем опять текстовую метку тока на этот раз она выглядит вот так... air_control_param и стандартное значении = 0.1 ( Это управление героем ( игрокам ) в полете ).. как и где его взяли ... из конфигов игры... файл actorsВот он весь.. Показать контент [mp_skins_path]skin_path = actors\stalker_mp\[mp_actor]:common_ph_friction_params_on_npc_deathGroupControlSection = spawn_group$spawn = "mp_actor"$ed_icon = ed\ed_actor$player = on$prefetch = 16cform = skeletonclass = O_ACTORmoney = 200;rank = 3;jump_speed = 6crouch_coef = 0.4 ; 0.2climb_coef = 0.7air_control_param = 0.1max_item_mass = 20.0;40.0run_coef = 3.5sprint_koef = 1.5;1.7 ; было 2.0run_back_coef = 1.7walk_back_coef = 0.7walk_strafe_coef = 1.0run_strafe_coef = 0.7visual = actors\stalker_hero\stalker_hero_1.ogfdestroyed_vis_name = dynamics\Dead_Body\skelet_crashwalk_accel = 16 ;40 ;17 ;54 ;40texture_prefetch = actors\stalker_mp\mp_team_green_1, actors\stalker_mp\mp_team_green_2, actors\stalker_mp\mp_team_green_3, actors\stalker_mp\mp_team_green_4, actors\stalker_mp\mp_team_blue_1, actors\stalker_mp\mp_team_blue_2, actors\stalker_mp\mp_team_blue_3, actors\stalker_mp\mp_team_blue_4, actors\stalker_mp\mp_team_green_addon_fr, actors\stalker_mp\mp_team_green_addon_uk, actors\stalker_mp\mp_team_blue_addon_de, actors\stalker_mp\mp_team_blue_addon_us, actors\stalker_mp\mp_team_green_armor_military, actors\stalker_mp\mp_team_green_armor_sci, actors\stalker_mp\mp_team_green_armor_exo, actors\stalker_mp\mp_team_blue_armor_military, actors\stalker_mp\mp_team_blue_armor_sci, actors\stalker_mp\mp_team_blue_armor_exo;радиус в котром над предметами выводятся их названияpickup_info_radius = 5 ;3feel_grenade = 30.0 ; это нужно удалитьfeel_grenade_radius = 30.0 ;расстояние (в метрах) на котором актер чувствует гранату (любую)feel_grenade_time = 0.5 ;время гранаты (сек) после которого актер чувствует гранатуInvincibility_Shield_3rd = anomaly2\burer_shield_01Invincibility_Shield_1st = anomaly2\burer_shield_01HeadShotParticle = hit_fx\hit_flesh_headshot;HeadShotParticle = hit_fx\hit_dust_00;радиус в котром над предметами выводятся их названияpickup_info_radius = 5 ;3ef_creature_type = 17 ; option for evaluation functions; attach paramsattachable_items = mp_device_torch,attachable_item,hand_radioph_box0_center = 0.0, 0.9, 0.0ph_box0_size = 0.35, 0.9, 0.35ph_box1_center = 0.0, 0.6, 0.0ph_box1_size = 0.40, 0.6, 0.40ph_box2_center = 0.0, 0.3, 0.0ph_box2_size = 0.40, 0.3, 0.40restrictor_radius = 0.9;deletestalker_restrictor_radius = 0.9medium_monster_restrictor_radius = 0.7ph_crash_speed_min = 16ph_crash_speed_max = 20ph_mass = 80;----------------feel_grenade = 10.0 ;расстояние (в метрах) на котором актер чувствует гранату (любую)player_hud_section = actor_hud;---------------------------------------------------------------------ph_skeleton_airr_lin_factor = 0.5 ;550.0 (изменно из-за того, что убрано домножение коэффициент 0.002 из кода)ph_skeleton_airr_ang_factor = 0.0 ;0.0 (изменно из-за того, что убрано домножение на коэффициент 0.3 из кода (0.0*0.3=0.0))ph_skeleton_hinger_factor1 = 1.0 ;1.0 (изменно из-за того, что убрано домножение на коэффициент 5.0 из кода)ph_skeleton_ddelay = 15.0 ;Время изменения значения трения в суставе с момента создания шелла, секph_skel_fatal_impulse_factor = 8.0ph_after_death_velocity_factor= 0.75ph_skel_shot_up_factor = 0.25;---------------------------------------------------------------------weapon_bone0 = bip01_r_finger1weapon_bone1 = bip01_l_finger1weapon_bone2 = bip01_r_finger11damage = mp_actor_damagehit_sounds = actor_hit_sndshit_probability_novice = 1.00hit_probability_stalker = 1.00hit_probability_veteran = 1.00hit_probability_master = 1.00;---------------------------------------------------------------------;actor conditionimmunities_sect = mp_actor_immunitiescondition_sect = mp_actor_conditionheavy_breath_snd = actor\breath_1 ;звук тяжелого дыхания при усталостиheavy_blood_snd = heart\8heavy_danger_snd = affects\heartbeatmedkit = 0.3 ;временно! вместо аптечкиmedkit_wound = 0.2 ;сколько процентов кровотечения оставливает аптечкаantirad = 0.3 ;временно! вместо антирадаmaterial = creatures\humancamera_height_factor = 0.85;дисперсия стрельбы с учетом ходьбы и бегаdisp_base = 0.65;0.8 ;угол (в градусах) разлета пуль, когда актер стоит на местеdisp_aim = 0.01;0.04disp_vel_factor = 2.0;2.5 ;на сколько увеличится дисперсия при скрости в 10 м/с (не обязательно при беге)disp_accel_factor = 2.5;3.0; 2.0 ;еще на сколько увеличится, если актер бежит (+ скорость)disp_crouch_factor = -0.35;-0.5;-0.2 ;уменьшение если актер сидитdisp_crouch_no_acc_factor = -0.75;-1.0;-0.4 ;уменьшение если актер сидит + no accelerationdisp_jump_factor = 30.0;7.0; 2.0missile_throw_offset = 0.3, 0.5, 0.5body_remove_time = 5000 ;время уничтожения трупа (с учетом TimeFactor)sleep_time_factor = 400 ;во сколько раз время идет быстрее, когда актер спит;---STEP MANAGER------------------------------------------------------LegsCount = 2step_params = stalker_step_managerfoot_bones = stalker_foot_bones; visibility parametersDynamicObjectsCount = 32min_view_distance = 0.8 ; коэффициент, который множится на eye_range, в зависимости от углаmax_view_distance = 1.0 ; коэффициент, который множится на eye_range, в зависимости от углаvisibility_threshold = 100.0 ; значение, при достижении суммой которого объект считается видимымalways_visible_distance = 0.3time_quant = 0.005decrease_value = 0.1 ; значение, на которое уменьшается вес, если объект попал в фрустум, но отсёкся по каким-то причинамvelocity_factor = 0.5luminocity_factor = 0.5;0 ; фактор освещения (только для Актёра)transparency_threshold = 0.4 ; 0.25;species of monsterspecies = human;autopickupAutoPickUp_AABB = 0.2, 0.1, 0.2; AABB бокс автоподбора предметовAutoPickUp_AABB_offs = 0.0, 0.1, 0.0; смещение бокса автоподбора предметов относительно позиции игрока;spawn effect;spawn_effect = anomaly2\electra2_blast[mp_actor_damage];bone_name = <hit_scale>,<fwd_damage_anim_index>,<wound_scale>,<bonepassbullet>;<hit_scale> - коэфф. изменения хита (уменьшения здоровья);<wound_scale> - коэфф. изменения величины открытой раны;<bone_pass_bullet> - 0 - после попадания пули в эту кость, эта пуля больше не наносит актеру повреждений; 1 - пуля наносит актеру повреждения как обычно;-1 - нет анимаций, четный номер - спереди, нечетный номер - сзади, УКАЗЫВАЕТСЯ ТОЛЬКО ПЕРЕДНИЙ!!! ЗАДНИЙ НА АВТОМАТЕdefault = 1.0, -1, 0.1bip01_pelvis = 0.25, 10, 0.8 ;от ядра до поясаbip01_spine = 0.3, 10, 0.8 ;в основном без шейпаbip01_spine1 = 0.4, 10, 0.8 ;торс до шеиbip01_spine2 = 0.4, 10, 0.8bip01_neck = 1.25, 0, 0.1 ;в основном без шейпаbip01_head = 2, 0, 0.1 ;очень большой шейпeye_left = 3, 0, 0.1 ;глазаeye_right = 3, 0, 0.1 ;глазаjaw_1 = 1.25, 0, 0.1 ;рот от шеи до носаbip01_l_clavicle = 0.4, 10, 0.8 ;плечо + bip01_spine1bip01_l_upperarm = 0.3, 4, 0.6, 1 ;0.2bip01_l_forearm = 0.3, 4, 0.5, 1 ;bip01_l_hand = 0.2, 4, 0.2, 1 ;было 0.15bip01_l_finger0 = 0.2, 4, 0.2, 1bip01_l_finger1 = 0.2, 4, 0.2, 1bip01_l_finger2 = 0.2, 4, 0.2, 1bip01_r_clavicle = 0.4, 10, 0.8 ;плечо + bip01_spine1bip01_r_upperarm = 0.3, 2, 0.6, 1bip01_r_forearm = 0.3, 2, 0.5, 1bip01_r_hand = 0.2, 2, 0.2, 1bip01_r_finger0 = 0.2, 2, 0.2, 1bip01_r_finger1 = 0.2, 2, 0.2, 1bip01_r_finger2 = 0.2, 2, 0.2, 1bip01_l_thigh = 0.3, 8, 0.5 ;бедроbip01_l_calf = 0.25, 8, 0.4 ;голеньbip01_l_foot = 0.15, 8, 0.3 ;пятка,1bip01_l_toe0 = 0.15, 8, 0.2 ;пальцы,1bip01_r_thigh = 0.3, 6, 0.5 ;бедроbip01_r_calf = 0.25, 6, 0.4 ;голеньbip01_r_foot = 0.15, 6, 0.3 ;пятка,1bip01_r_toe0 = 0.15, 6, 0.2 ;пальцы,1[mp_actor_immunities]burn_immunity = 1.0 ;коэффициенты иммунитетаstrike_immunity = 1.0shock_immunity = 1.0wound_immunity = 1.0radiation_immunity = 1.0telepatic_immunity = 1.0chemical_burn_immunity = 1.0explosion_immunity = 1.0fire_wound_immunity = 1.0[mp_actor_condition]:actor_conditionsatiety_v = 0.0 ;скорость уменьшения сытости со временемradiation_v = 0.005 ;скорость уменьшения радиацииsatiety_power_v = 0.00055 ;увеличение силы при уменьшении сытостиsatiety_health_v = 0.0005 ;увеличение здоровья при уменьшении сытостиsatiety_critical = 0.0 ;критическое значения сытости (в процентах от 0..1) когда здоровье начианает уменьшатьсяradiation_health_v = 0.02 ;уменьшение здоровья при воздействии радиацииmorale_v = 0.001 ;скорость восстановления моралиhealth_hit_part = 1.0 ;процент хита, уходящий на отнимание здоровьяpower_hit_part = 0.1;0.01 ;процент хита, уходящий на отнимание силыpsy_health_v = 0.1 ;скорость восстановления psy-здоровьяalcohol_v = -0.03max_walk_weight = 50;открытые раныbleeding_v = 0.05 ;потеря крови при номинальной ране в секундуwound_incarnation_v = 0.25 ;крутизна кривой заживления (какой процент раны заживет в игровую секунду)min_wound_size = 0.03 ;минимальный размер раны, после которого она считается зажившейsleep_health = 1.0 ;1.5 ;коэффициенты скоростей изменения параметров во время снаsleep_power = 1.0 ;1.5sleep_satiety = 1.0 ;0.8sleep_radiation = 1.0 ;1.1sleep_psy_health = 1.0;;;;;;;;;actor_condition onlyjump_power = 0.1 ; 0.1 ;0.005 ;умешьшение силы с прыжком без учета веса ношиjump_weight_power = 0.0 ;0.045 ;умешьшение силы с прыжком с учетом веса ноши, для максимального допустимого весаoverweight_jump_k = 0 ;10 ;коэффициент влияние перегрузки прыжок с весом (умножается на jump_weight_power)stand_power = -0.2;walk_power = -0.1; ;умешьшение силы за секнду во время ходьбы без учета веса ношиwalk_weight_power = 0.00 ;умешьшение силы за секнду во время ходьбы с учетом веса ноши, для максимального допустимого весаoverweight_walk_k = 0 ; ;коэффициент влияние перегрузки ноши (умножается на walk_weight_power)accel_k = -0.0 ; ;коэффициент на бег (умножается walk_power, walk_weight_power)sprint_k =-1.5; ;коэффициент на "sprint" бег (умножается walk_power, walk_weight_power); хромотаlimping_health_begin = 0.1;0.2 ;порог здоровья меньше которого актер начинает хроматьlimping_health_end = 0.11;0.21 ;порог здоровья больше которого актер перестает хроматьlimping_power_begin = 0.1 ;порог силы меньше которого актер начинает хроматьlimping_power_end = 0.2 ;порог силы больше которого актер перестает хроматьuse_limping_state = oncant_walk_power_begin = 0.00 ;порог силы меньше которого актер не может двигатьсяcant_walk_power_end = 0.10 ;порог силы больше которого актер сможет двигатьсяcant_sprint_power_begin = 0.20 ;порог силы меньше которого актер не может бежать в спринтеcant_sprint_power_end = 0.30 ;порог силы больше которого актер сможет бежать в спринте;--------------------------------------------------------------------------------------------------------------------;-- АНИМАЦИИ ДЛЯ СМЕРТИ;--------------------------------------------------------------------------------------------------------------------;cлучайные;random_death_animations = ragdoll_burst_front_0,ragdoll_burst_front_1,ragdoll_burst_back_0,ragdoll_burst_left_0,ragdoll_burst_right_0 ;norm_2_reg_doll_0,norm_2_reg_doll_1,norm_2_reg_doll_2,norm_2_reg_doll_3,norm_2_reg_doll_4,norm_2_reg_doll_5;по типам от 0 до 7;порядок по направлениям - front/back/left/right; В голову, когда персонаж бежит на нас.kill_enertion = ragdoll_inertion_front_0/ragdoll_inertion_front_3/ragdoll_inertion_front_2/ragdoll_inertion_front_1; Смерть от автоматной очереди;kill_burst = ragdoll_burst_front_0,ragdoll_burst_front_1/ragdoll_burst_back_0/ragdoll_burst_left_0/ragdoll_burst_right_0; Смерть от выстрела из дробовикаkill_shortgun = ragdoll_shortgun_front_0,ragdoll_shortgun_front_1,ragdoll_shortgun_front_2,ragdoll_shortgun_front_3,ragdoll_shortgun_front_4,ragdoll_shortgun_front_5,ragdoll_shortgun_front_6,ragdoll_shortgun_front_7,ragdoll_shortgun_front_8/ragdoll_shortgun_back_0,ragdoll_shortgun_back_1,ragdoll_shortgun_back_2,ragdoll_shortgun_back_3,ragdoll_shortgun_back_4,ragdoll_shortgun_back_5/ragdoll_shortgun_left_0,ragdoll_shortgun_left_1,ragdoll_shortgun_left_2/ragdoll_shortgun_right_0; Смерть хедшотомkill_headshot = ragdoll_headshot_front_0,ragdoll_headshot_front_1,ragdoll_headshot_front_2,ragdoll_headshot_front_3,ragdoll_headshot_front_4,ragdoll_headshot_front_5,ragdoll_headshot_front_6,ragdoll_headshot_front_7,ragdoll_headshot_front_8,ragdoll_headshot_front_9,ragdoll_headshot_front_10/ragdoll_headshot_back_0,ragdoll_headshot_back_1,ragdoll_headshot_back_2,ragdoll_headshot_back_3,ragdoll_headshot_back_4,ragdoll_headshot_back_5/ragdoll_headshot_left_0,ragdoll_headshot_left_1,ragdoll_headshot_left_2,ragdoll_headshot_left_3,ragdoll_headshot_left_4,ragdoll_headshot_left_5,ragdoll_headshot_left_6,ragdoll_headshot_left_7/ragdoll_headshot_right_0,ragdoll_headshot_right_1,ragdoll_headshot_right_2,ragdoll_headshot_right_3; Смерть хедшотом из снайперкиkill_sniper_headshot = ragdoll_sniper_headshot_front_0,ragdoll_sniper_headshot_front_1,ragdoll_sniper_headshot_front_2/ragdoll_sniper_headshot_back_0/ragdoll_sniper_headshot_left_0/ragdoll_sniper_headshot_right_0; Смерть от снайперки в телоkill_sniper_body = ragdoll_sniper_body_front_0,ragdoll_sniper_body_front_1,ragdoll_sniper_body_front_2/ragdoll_sniper_body_back_0,ragdoll_sniper_body_back_1,ragdoll_sniper_body_back_2,ragdoll_sniper_body_back_3/ragdoll_sniper_body_left_0/ragdoll_sniper_body_right_0; Смерть от взрывной волны гранатыkill_grenade = ragdoll_grenade_front_0/ragdoll_grenade_back_0/ragdoll_grenade_left_0/ragdoll_grenade_right_0;front-norm_2_rag_doll_front_0,norm_2_rag_doll_front_1,norm_2_rag_doll_front_2/back-norm_2_rag_doll_back_0,norm_2_rag_doll_back_1,norm_2_rag_doll_back_2/right-norm_2_rag_doll_right_0/left-norm_2_rag_doll_left_0;--------------------------------------------------------------------------------------------------------------------Начнем взлом. Показать контент Находим нужную текстовую метку и ставим бряк.. клавиша F2.. да и еще в предыдущих статьях модуль у нас был сам экзешник игры... а в этот раз будет Dll файл .. под названием.. xrGame.dll Поставили бряк и начнем загружать игру....Сработал бряк.. отлично .. пройдемся малость по коду вниз с помощью клавиши F8.. и тут у нас загрузка нашего,параметра контроля в воздухе... в дамп.. но она еще не выполнена так как инструкция не выполнена ..Посмотрим в дамп по нашему адресу.. там пока что нет нашего значения .. так как нужно выполнить инструкцию... Но перед тем как выполнить инструкцию.. или начать выполнение кода нужно поставить на наш адрес ПРОЦЕССОРНУЮ ТОЧКУ ОСТАНОВА и снять бряк с инструкции с нашей текстовой меткой... F2Как сделали это нажимаем F9 сработала точка остановки ( процессорная )..выполнение кода остановилось на инструкции mov ecx,dword ptr [eax+A8] и по нашему адресу загрузилось наше значение..Ну в прошлых статьях мы на этом и заканчивали... потом до-загружали игру и ставили на наш адрес бряк .. на чтение .. там была одна инструкция.. писали скрипт и все работало .. но в этот раз если сделать так же ... и инструкция найдется... и скрипт можно написать .. но толку будет мало... так как это значение первой загрузки ... оно не используется исполняющим кодом игры... а по ходу дела начинается копироваться, сравниваться .. и потом в конце концов.. запишется как я понимаю.. во вторую... структуру игрока.. и от туда будет использоваться кодом... тк давайте найдем это место точнее этот адрес....У нас есть адрес со значением float=0.1 и код остановился на mov ecx,dword ptr [eax+A8] спустимся вниз на пару инструкция... до инструкции которая работает с дробными числами... Что мы там видим ... наше значение float=0.1 опять копируется в дамп..И это копирование будет проходить раза 3-4 есть и больше... порядок действий такой 1-смотрим дамп нового адреса. 2-ставим на него процессорную точку остановки до того как загрузилось наше значение в него. 3-снимаем бряк со старого адреса.... и нажимаем F9.. Как все это сделали нажимаем F9 пошло выполнение кода и сразу сработал бряк..Выполнение остановилось на инструкции mov edx,dword ptr [eax+13C] и в наш новый адрес загрузилось наше значение..Дальше опять проходим вниз до первой инструкции работающей с дробными числами... и смотрим средний сектор программы там подсказка с новым адресом...))))И опять так же нужно посмотреть в дампе наш новый адрес поставить на него бряк ( процессорную точку остановки ) и удалить старый бряк и продолжить загружать игру...))) Как это сделали нажимаем F9 пошло выполнение кода и опять сразу бряк...)))на этот раз остановились на movss dword ptr [ecx+2EC],xmm0... скажу сразу это последнее копирование ...Конечный результат хранится в [ecx+2EC].. можно высчитать адрес с помощью калькулятора.. или сделать так ....Как это сделали ... опять ставим бряк на наш новый адрес на чтение .. простой бряк на чтение... и удаляем старый бряк... и до-загружаем игру полностью....Ну и жмем F9.. загрузили игру и точка остановки не сработала...Посмотрим дамп нашего адреса.. все отлично .. там наше значение... =0.1 float...Для того что бы сработал наш бряк .. нужно что бы код прочитал инструкцию .. которая использует наш адрес с нашим значением ... а это произойдет когда мы прыгнем и двинемся в перед ... так как в данный момент мы ломаем управление героем ( игрокам ) в полете.. как тока это сделали сработал бряк...Получили нужную инструкцию.... можно написать скрипт.... Пишем скрипт. Показать контент Очень много перепробовал вариантов скриптов ... вылет и все... но нашелся один рабочий....))[ENABLE]alloc(newmem,2048)label(returnhere)newmem:pushadmov [esi],(float)30movss xmm0,[esi]popadjmp returnherexrGame.dll+3B7F4D:jmp newmemnopnopnopreturnhere:[DISABLE]xrGame.dll+3B7F4D:movss xmm0,[edi+000002EC]dealloc(newmem)Управление героем в полете ... стандарт 0.1 патч 30 Можно было и в другое место встроить наш патч .. но он бы работал тока после смерти игрока... а так работает в любое время... да и еще вот скрипт на высокий прыжок к сталкеру... он тоже работает ... в любой момент... то есть не нужно умирать....[ENABLE]alloc(newmem,2048)label(returnhere)newmem:mov [esi+00000314],(float)35jmp returnherexrGame.dll+3AB090:jmp newmemnopnopnopreturnhere:[DISABLE]xrGame.dll+3AB090:movss [esi+00000314],xmm2dealloc(newmem)Спс.. Изменено 12 апреля, 2012 пользователем Grom-Skynet 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
boss Опубликовано 3 марта, 2012 Поделиться Опубликовано 3 марта, 2012 у меня что то сполер не открывает Ссылка на комментарий Поделиться на другие сайты Поделиться
Kvazimado Опубликовано 3 марта, 2012 Поделиться Опубликовано 3 марта, 2012 Все работает Ссылка на комментарий Поделиться на другие сайты Поделиться
SER[G]ANT Опубликовано 3 марта, 2012 Поделиться Опубликовано 3 марта, 2012 включи в браузере javascript Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения