Всем привет! Запустил небольшой курс, как можно ревёрсить программы, в конце курса дойдём до самых сложных примеров, которые накрыты VMP и множеством других протекторов. Весь курс предназначен на нативные приложения, курс будет для "чайников" в плане ревёрс-инженерии, без знаний C/C++ будет очень тяжело для понимания Ну что же, начнём! МОЯ ТЕМА С РАЗРАБОТКОЙ/КРЯКАМИ НА ЗАКАЗ(КЛИК) МОЯ ТЕМА С РАЗРАБОТКОЙ/КРЯКАМИ НА ЗАКАЗ(КЛИК) МОЯ ТЕМА С РАЗРАБОТКОЙ/КРЯКАМИ НА ЗАКАЗ(КЛИК) Как подменять функции, изменять значения переменных и просто исполнять код из вне в Python? Обход PyArmor, Nuitka и прочих компиляторов Теория Скомпилированный питон как и все другие программы имеют точку входа, своё тело объекта, ну и выделенную оперативную память под себя. Исходя из всего этого можно сделать выводы: 1.В процессе можно поковыряться в памяти 2.В процесс можно внедрить свою библиотеку 3.Алгоритм процесса можно изменять на лету Всё бы ничего, но 1 и 3 пункт проблематично реализовать, так как мы будем взаимодействовать с интерпретатором, а не самим кодом программы в отличии от нативных приложений. А вот внедриться и натворить делишек можно достаточно легко, тем более всё для этого уже создано. Подготовка Мы будем использовать данное чудо Суть проста: 1.Ставим задачу для выполнения (Изменить ответ определённой функции) 2. Дампим список всех функций 3. Имея название нужной функции - подменяем её на свою Практика Я буду производить все действия на следующем ПО: def CheckIsValidLicense(key): return key == 'zelenka.guru/boss' if __name__ == '__main__': if CheckIsValidLicense(input('Input your key: ')): input('Well good! Okey, Let`s go!') else: input('Hhhhh, something went wrong...') #code... Python def CheckIsValidLicense(key): return key == 'zelenka.guru/boss' if __name__ == '__main__': if CheckIsValidLicense(input('Input your key: ')): input('Well good! Okey, Let`s go!') else: input('Hhhhh, something went wrong...') #code... Беру Py.dll, запускаю программу, рядом с ней создаю файлик code.py Для дампа названий функций пишем в code.py следующее: import os,sys,inspect,re,dis,json,types hexaPattern = re.compile(r'\b0x[0-9A-F]+\b') def GetAllFunctions(): # get all function in a script functionFile = open("dumpedMembers.txt","w+") members = inspect.getmembers(sys.modules[__name__]) # the code will take all the members in the __main__ module, the main problem is that it can't dump main code function for member in members: match = re.search(hexaPattern,str(member[1])) if(match): functionFile.write("{\"functionName\":\""+str(member[0])+"\",\"functionAddr\":\""+match.group(0)+"\"}\n") else: functionFile.write("{\"functionName\":\""+str(member[0])+"\",\"functionAddr\":null}\n") functionFile.close() GetAllFunctions() Python import os,sys,inspect,re,dis,json,types hexaPattern = re.compile(r'\b0x[0-9A-F]+\b') def GetAllFunctions(): # get all function in a script functionFile = open("dumpedMembers.txt","w+") members = inspect.getmembers(sys.modules[__name__]) # the code will take all the members in the __main__ module, the main problem is that it can't dump main code function for member in members: match = re.search(hexaPattern,str(member[1])) if(match): functionFile.write("{\"functionName\":\""+str(member[0])+"\",\"functionAddr\":\""+match.group(0)+"\"}\n") else: functionFile.write("{\"functionName\":\""+str(member[0])+"\",\"functionAddr\":null}\n") functionFile.close() GetAllFunctions() Внедряем dll через любой инжектор в наш процесс, у нас появляется в папке файл dumpedMembers.txt Узнаём, что нужная нам функция называется CheckIsValidLicense возвращаемся в code.py и пишем там следующее: exec('def newFunc(): return True\nCheckIsValidLicense = newFunc') Python exec('def newFunc(): return True\nCheckIsValidLicense = newFunc') Инжектим, вуаля! Теперь функция проверки лицензии всегда вернёт положительный ответ True! Таким образом можно подменять функции, менять значения переменных, исполнять свой код. Всё зависит от вашей фантазии! Всем удачи в начинаниях! Всем пока! Предыдущие уроки: [Гайд] Ревёрсинг для чайников #1[By Grizzly] - Форум социальной инженерии Lolz.guru [Гайд] Ревёрсинг для чайников #2[By Grizzly] - Форум социальной инженерии Lolz.guru [Гайд] Ревёрсинг для чайников #3[By Grizzly] - Форум социальной инженерии Lolz.guru [Гайд] Ревёрсинг для чайников #4[By Grizzly] - Форум социальной инженерии Lolz.guru
Очень благодарен автору за данную статью. Смог взломать свой же софт, а раньше думал, что это не так уж и просто сделать. Вопрос: а что если я не буду использовать функции?