Шалом. Давно я хотел разобрать разные DRM от компаний, но никак руки не доходили. На выходных решил посмотреть как обстоят дела у DRM стима, больно часто его ломают.
Ну и как показала практика, для того чтобы отвязать к примеру singleplayer игру достаточно поставить два патча на экспортируемых функциях steam_api64.dll
Это довольно примитивный патч который рассчитан на то, что игра будет только singleplayer, иначе откуда ей хукать ник аккаунта в стиме? Краш игры будет обеспечен к примеру, когда вы попытаетесь таким образом отвязать одну из игр Valve с двумя патчами
По своей сути этот патч вполне работоспособный, если нет подводных камней по типу внутриигровых проверок в самом EXE
Первый патч заключается в том, чтобы занопать проверку на некую переменную с типом __int64, если условие проходит -> оно возвращает 1, что в нашем случае означает, что первая проверка на запуск стима прошла успешно
С информацией выше переходим к дебаггеру и экспортируемой функции и видим следующую проверку
Инструкция mov al, 0x1 говорит нам о том, что если условие выполнется, то мы получим функцию, которая будет возвращать 1
В дальнейшем напишем скрипт, который будет выполнять нужные патчи этих проверок
Идем дальше, следующий патч будем делать в функции SteamAPI_RestartAppIfNecessary, это своего рода функция которая нужна для страховки на случай, если SteamAPI_Init провалился с треском и пользователь пытается запустить его напрямую
Его суть это проверять запущен ли EXE в стиме, если нет -> возвращает true и перезапускает игру черех steam://run/id, нам же нужно чтобы эта функция возвращала false
Теперь собрав все паттерны с проверками напишем скрипт, который будет выполнять два патча
Сам скрипт:
По итогу вы должны получить патчи как на моих двух скринах:
Первый патч:
Второй патч:
На этом у меня всё, такой вот забавный и простой обход получился этой DRM =)
Подписывайтесь на мой блог в ТГ: Colby5Covington / Back-Engineering
Всем добра и позитива
Ну и как показала практика, для того чтобы отвязать к примеру singleplayer игру достаточно поставить два патча на экспортируемых функциях steam_api64.dll
Это довольно примитивный патч который рассчитан на то, что игра будет только singleplayer, иначе откуда ей хукать ник аккаунта в стиме? Краш игры будет обеспечен к примеру, когда вы попытаетесь таким образом отвязать одну из игр Valve с двумя патчами
По своей сути этот патч вполне работоспособный, если нет подводных камней по типу внутриигровых проверок в самом EXE
Первый патч заключается в том, чтобы занопать проверку на некую переменную с типом __int64, если условие проходит -> оно возвращает 1, что в нашем случае означает, что первая проверка на запуск стима прошла успешно
С информацией выше переходим к дебаггеру и экспортируемой функции и видим следующую проверку
Инструкция mov al, 0x1 говорит нам о том, что если условие выполнется, то мы получим функцию, которая будет возвращать 1
В дальнейшем напишем скрипт, который будет выполнять нужные патчи этих проверок
Идем дальше, следующий патч будем делать в функции SteamAPI_RestartAppIfNecessary, это своего рода функция которая нужна для страховки на случай, если SteamAPI_Init провалился с треском и пользователь пытается запустить его напрямую
Его суть это проверять запущен ли EXE в стиме, если нет -> возвращает true и перезапускает игру черех steam://run/id, нам же нужно чтобы эта функция возвращала false
Теперь собрав все паттерны с проверками напишем скрипт, который будет выполнять два патча
Сам скрипт:
C++:
find mem.base(cip), "74 0B B0 01"
cmp $result, 0
je first_pattern_not_found
mov $result, #90 90#
log "patched SteamAPI_Init"
find mem.base(cip), "0F 84 D3 05 00 00"
cmp $result, 0
je second_pattern_not_found
mov $result, #E9 D4 05 00 00#
log "patched SteamAPI_RestartAppIfNecessary"
ret
first_pattern_not_found:
log "first pattern not found"
ret
second_pattern_not_found:
log "second pattern not found"
ret
По итогу вы должны получить патчи как на моих двух скринах:
Первый патч:
Второй патч:
На этом у меня всё, такой вот забавный и простой обход получился этой DRM =)
Подписывайтесь на мой блог в ТГ: Colby5Covington / Back-Engineering
Всем добра и позитива