У меня есть этот код Python:
with open('save.data') as fp:
save_data = dict([line.split(' = ') for line in fp.read().splitlines()])
with open('brute.txt') as fp:
brute = fp.read().splitlines()
for username, password in save_data.items():
if username in brute:
break
else:
print("didn't find the username")
Вот краткое объяснение; save.data
— это файл, содержащий переменные пакетной игры (например, имя пользователя, hp и т. д.), а brute.txt
— это файл, содержащий «случайные» строки (например, то, что можно увидеть в списках слов, используемых для грубой силы).
save.data
:
username1 = PlayerName
password1 = PlayerPass
hp = 100
Как я уже говорил, это пакетная игра, поэтому не нужно заключать строки в кавычки.
brute.txt
:
username
usrnm
username1
password
password1
health
hp
Итак, давайте предположим, что файл Python является «игровым хакером», который «взламывает» файл сохранения игры в пакетном файле в надежде найти совпадения, а когда находит, извлекает их и отображает пользователю.
## We did all the previous code
...
>>> print(save_data["username1"])
PlayerName
Успех! мы получили переменные! Но я хочу, чтобы программа могла сама отображать переменные (потому что я знал, что "username1" совпадает, поэтому я решил напечатать его). Я имею в виду, что хочу сделать программу print
совпадающими переменными. Например: если вместо «username1» в save.data
было «usrnm», то оно обязательно будет распознано после процесса «брутинга», потому что оно уже есть в brute.txt
. Итак, как сделать программу print
что совпало? потому что я не знаю, является ли это "имя пользователя" или "имя пользователя1" и т. д... Программа делает :p (конечно, не открывая save.data
) И, конечно, это не означает, что программа будет искать только имя пользователя, это game, и должны быть другие переменные, такие как золото / монеты, hp и т. д. Если вы что-то не поняли, пожалуйста, прокомментируйте это, и я проясню это, и спасибо за ваше время!
Используйте dict
, например:
with open('brute.txt', 'r') as f:
# First get all the brute file stuff
lookup_dic = {word.strip(): None for word in f.readlines()}
with open('save.data', 'r') as f:
# Update that dict with the stuff from the save.data
lines = (line.strip().split(' = ') for line in f.readlines())
for lookup, val in lines:
if lookup in lookup_dic:
print(f"{lookup} matched and its value is {val}")
lookup_dic[lookup] = val
# Now you have a complete lookup table.
print(lookup_dic)
print(lookup_dic['hp'])
Выход:
username1 matched and its value is PlayerName
password1 matched and its value is PlayerPass
hp matched and its value is 100
{'username': None, 'usrnm': None, 'username1': 'PlayerName', 'password': None, 'password1': 'PlayerPass','health': None, 'hp': '100'}
100
Просто мы lookup_dic['hp']
, как если бы вы использовали обычную переменную. Или вы можете сделать hp = lookup_dic['hp']
. Вам, вероятно, следует изучить возможность использования объектов класса для подобных вещей. Вам будет намного легче.
Да, но как я могу узнать, что это «хп», а не «здоровье» или какие-либо другие очки здоровья, относящиеся к переменной? (потому что я хочу, чтобы программа могла делать это сама без помощи пользователя, за исключением пути к файлу сохранения, я работаю над проектом). Вот почему мне нужно превратить любую вещь, связанную с HP или здоровьем, в список слов в одну переменную с другими. И спасибо!
Я не уверен, что полностью понимаю, что вы пытаетесь сделать. Пожалуйста, добавьте пример к вашему вопросу, который охватывает ваши крайние случаи. Убедитесь, что пример полностью охватывает то, что вы пытаетесь сделать. Вы всегда можете просто сделать set
синонимов и относиться ко всем одинаково.
Хорошо, позвольте мне объяснить, у меня есть список слов и файл сохранения. Ваш код сделал это успешно и знал, что соответствует чему, но я этого не знаю, и пользователь тоже, поэтому я добавил несколько слов в список слов на случай, если они не совпадают, например: я использовал эту программу против файла сохранения игра, которая содержит «имя пользователя, пароль пользователя и монеты», и, к счастью, в списке слов есть их совпадения, поэтому я хочу, чтобы имя переменной соответствовало для будущих манипуляций. НО, я не знаю, как называется совпадающая переменная, это знает только программа (я пытался напечатать "f{lookup}", но она вернула только последнюю переменную).
-ble совпали, но я хочу их все. Например, «имя_пользователя» совпало, поэтому программа получит его значение и присвоит его переменной, например, с именем «main_username», и она получит переменную, которая соответствует состоянию здоровья, и присвоит ее значение переменной, например «main_hp» и т. д. .. Если вы все еще не поняли, я могу объяснить вам больше, просто скажите мне части, которые вы не поняли, и я постараюсь изо всех сил. Поскольку эта проблема преградила мне путь, и я искал ее дни и дни, спасибо за вашу помощь!
Давайте проясним этот где-нибудь еще.
Это оно! Спасибо! И последнее, могу ли я превратить совпавшие переменные в глобальные? например, у нас есть usrnm, username1, username и т. д. Но совпало только username1, тогда я могу превратить его в одну переменную с именем, например, имя пользователя и hp в здоровье и т. д. Для будущего использования? (потому что, как я уже сказал, я не знаю, кто с кем будет совпадать, это зависит от того, какую переменную игра выбрала для определения, ее может даже не быть в списке слов. Кто знает :p )