-
Posts
293 -
Joined
-
Last visited
-
Days Won
1
Everything posted by fecell
-
Есть способ не очень сложный. Компилится стандартным питоном, а потом скриптом байткод патчиться во всех co_code. Особой защиты на первый взгляд нет кроме отсутствия заголовка и измененных опкодов, должно сработать. Таблицу опкодов из игры получить не должно быть очень сложно - сначала хук чтобы запустить консоль, потом в консоле компилируешь скрипт и получаешь байткод как он есть в игре, тот-же скрипт компилишь в стандартном питоне и сравниваешь результат. ;) офтоп: напишу в ЛС как скачаю игру, на ЗБТ записался, жду когда пойдет процесс загрузки.
-
для начала добавляешь отсутствующий заголовок, в котором как раз указывается версия питона, в примере ниже 2.7: import sys, os fileName, fileExtension = os.path.splitext(sys.argv[1]) f = open(sys.argv[1], "rb") with open('%s_hdr.pyc' % fileName, 'wb') as fc: fc.write('\x03\xf3\x0d\x0a\0\0\0\0') fc.write(f.read()) f.close() но декомпилировать все равно сложно, таблица опкодов в игре нестандартная. т.е. в стандартном питоне RETURN_VALUE, а в этом скрипте вместо этого INPLACE_RSHIFT хотя LOAD_CONST похоже не изменена, например. без самой игры остается только гадать какие еще команды изменили, а какие нет. ну а без списка кодов команд как они заданы в игре ничего не декомпилируешь. вообщем это надо саму игру качать и.. "а оно мне надо сутки 30 гигов тянуть?!.. ради чего?!.."
-
хм, обфускатор перемудренный вроде. генерит лишний код, который фактически не нужен, лишь замедляет исполнение скрипта. (строковые значения для простоты указаны в явном виде, без закрутки в O0OO1l[xxxx]) from tmp import test1 print test1 var_203 = getattr(__import__('tmp', globals(), locals(), ['test1'], -1), 'test1') #стало print var_203 var_203 = getattr(__import__('tmp'), 'test1') #но вроде достаточно print var_203
-
похакал, если так можно сказать, официальную страницу загрузок - поправил ява код сняв с кнопки загрузки недоступность клика. "в итоге получил прямую ссылку:" но обойти дальнейшую авторизацию задача куда сложнее, я не справлюсь. может кто-то другой в этих делах более опытный. вообщем это все чем могу пособить.
-
обновил первый пост под 9.16, добавил в исходник пример реализации __doc__ для пида.
-
http://rgho.st/8XNTPYlDR print '\xd0\xa0\xd0\xbe\xd0\xb7\xd0\xb0 \xd0\xb8\xd1\x81\xd1\x87\xd0\xb5\xd0\xb7\xd0\xbd\xd0\xb5\xd1\x82, \xd0\xb5\xd1\x81\xd0\xbb\xd0\xb8 \xd0\xb2 \xd1\x82\xd0\xb5\xd1\x87\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb5 \xd1\x82\xd1\x80\xd1\x91\xd1\x85 \xd0\xbc\xd0\xb8\xd0\xbd\xd1\x83\xd1\x82 \xd0\xb5\xd1\x91 \xd0\xbd\xd0\xb8\xd0\xba\xd1\x82\xd0\xbe \xd0\xbd\xd0\xb5 \xd1\x81\xd0\xbe\xd1\x80\xd0\xb2\xd1\x91\xd1\x82. \xd0\x9c\xd0\xbe\xd0\xb6\xd0\xbd\xd0\xbe \xd0\xb8\xd1\x81\xd0\xbf\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xb7\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd1\x8c \xd1\x82\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xba\xd0\xbe \xd0\xb2 \xd0\xbe\xd1\x82\xd0\xba\xd1\x80\xd1\x8b\xd1\x82\xd0\xbe\xd0\xbc \xd0\xbc\xd0\xb8\xd1\x80\xd0\xb5.' print '\xd0\x9f\xd0\xbe\xd1\x81\xd0\xb0\xd0\xb4\xd0\xb8\xd1\x82\xd0\xb5 \xd1\x80\xd0\xbe\xd0\xb7\xd1\x83, \xd1\x87\xd1\x82\xd0\xbe\xd0\xb1\xd1\x8b \xd0\xba\xd1\x82\xd0\xbe-\xd1\x82\xd0\xbe \xd0\xb4\xd1\x80\xd1\x83\xd0\xb3\xd0\xbe\xd0\xb9 \xd1\x81\xd0\xbc\xd0\xbe\xd0\xb3 \xd0\xb5\xd1\x91 \xd1\x81\xd0\xbe\xd1\x80\xd0\xb2\xd0\xb0\xd1\x82\xd1\x8c \xd0\xb8 \xd0\xbf\xd0\xbe\xd0\xb4\xd0\xb0\xd1\x80\xd0\xb8\xd1\x82\xd1\x8c \xd1\x81\xd0\xbb\xd0\xb5\xd0\xb4\xd1\x83\xd1\x8e\xd1\x89\xd0\xb5\xd0\xbc\xd1\x83 \xd1\x81\xd1\x87\xd0\xb0\xd1\x81\xd1\x82\xd0\xbb\xd0\xb8\xd0\xb2\xd1\x87\xd0\xb8\xd0\xba\xd1\x83.' print '\xd0\xa1\xd0\xbe\xd1\x8e\xd0\xb7 \xd0\xbe\xd0\xb7\xd0\xbe\xd1\x80\xd0\xbd\xd0\xb8\xd0\xba\xd0\xbe\xd0\xb2 \xd1\x83\xd1\x82\xd0\xb2\xd0\xb5\xd1\x80\xd0\xb6\xd0\xb4\xd0\xb0\xd0\xb5\xd1\x82: \xd1\x87\xd1\x82\xd0\xbe\xd0\xb1\xd1\x8b \xd0\xbb\xd1\x8e\xd0\xb4\xd0\xb8 \xd0\xb2\xd0\xbe\xd0\xba\xd1\x80\xd1\x83\xd0\xb3 \xd1\x83\xd0\xbb\xd1\x8b\xd0\xb1\xd0\xb0\xd0\xbb\xd0\xb8\xd1\x81\xd1\x8c, \xd0\xbd\xd1\x83\xd0\xb6\xd0\xbd\xd0\xbe \xd0\xb1\xd0\xbe\xd0\xbb\xd1\x8c\xd1\x88\xd0\xb5 \xd1\x86\xd0\xb2\xd0\xb5\xd1\x82\xd0\xbe\xd0\xb2!' print '\xd0\xa0\xd0\xbe\xd0\xb7\xd0\xb0 \xd0\xbb\xd1\x8e\xd0\xb1\xd0\xb2\xd0\xb8'
-
при компиляции с флагом оптимизации (-O) создается pyo (в частности удаляются docstring и т.п.) при обычной компиляции создается pyс это как взять документ (pyc) и удалить ненужные пустые строки (стал pyo). если не декомпилится - значит pyo/pyc защищен от декомпила. вероятно. точно можно сказать только увидев файлы о которых ведешь речь.
-
блин, ночью заметил что ошибся, и исправил на... тоже самое что было, по запарке. Сейчас уже выше исправил смещение на верное. 'asm code for check'
-
смещение E9A9A0 (9.16), 12DBD10 (9.14) сигнатуру признаться не смотрел. E9A7D0 (9.16), 12DBB40 (9.14) 'бросилось в глаза.. остальные завтра, три ночи за окном как-никак'
-
PyList_Append_tmpl = "\x55\x8B\xEC\x8B\x4D\x08\x8B\x41\x04\xF7\x40\x54\x00\x00\x00\x02\x74"; PyList_Append_mask = "xxxxxxxxxxxxxxxxx"; PyList_New_tmpl = "\x55\x8B\xEC\x57\x8B\x7D\x08\x85\xFF\x79"; PyList_New_mask = "xxxxxxxxxx";
-
@Mixaill, сигнатуры некоторые можно сократить. "\x55\x8B\xEC\x81\xEC\x14\x02" (xxxxxxx) достаточно для Py_InitModule4, по крайней мере с 9.4 и до сих пор (на тестовых не знаю).
-
Ну так-то да, я к тому что: char* PyString_AS_STRING(PyObject *string) Macro form of PyString_AsString() but without error checking. Only string objects are supported; no Unicode objects should be passed. https://docs.python.org/2/c-api/string.html#c.PyString_AS_STRING строка 91, stringobject.h (2.7.12) #define PyString_AS_STRING(op) (((PyStringObject *)(op))->ob_sval)
-
немного перебор вроде, ЕМНИП PyString_AsString можно не врапить, а использовать макрос PyString_AS_STRING (по аналогии как и PY_INCREF и т.п.).
-
посмотрим... скоро уже по идее новый патч выйдет, через недели 2-3 думаю.
-
Конечно, но зная что надо хукать, неважно какой алгоритм реализован для подготовки к исполнению. Важно снять дамп скрипта после его запуска. Поэтому нет смысла настолько сильно заморачиваться, имхо. Обфускация защищает исходный код, но результат его исполнения важен т.е. декриптованный скрипт, а не сам код деобфускатора.
-
здесь давно выкладывают http://dvamaster.ru/?p=308#more-308 но лишь адреса, по крайней мере проще искать сигнатуры зная где что. последнее что выложено - 385 адресов для 9.14.8318
-
Мод "Internet tester" или первый антитроян для WOT
fecell replied to Delysid's topic in Mods and Software
Не понимаю в чем весь срачь. Мододелам должно быть вообще фиолетово на этот мод, лишь чуть намекнуть на некоторые вещи которые надо доделывать в модах чтобы обходить подобные блокировки. Вот и все. -
такую вещь делал где-то два года назад. хукер чуть позже. хукер уже в паблке появился, логично предположить что и деобфускатор скоро будет доведен до ума. :( впрочем, деобфускация в полностью автоматическом режиме достаточно сложа. тут много все зависит от того, как реализована возможность ручной правки полу-деобфусцированного байткода. один фиг можно сказать - "скоро".. зы: признаться, когда написал хукер, когда допилил деобфускатор и понял что защиты которые были достаточно слабы, то переписал свою с нуля изменив принцип. вышло, имхо, куда лучше чем было. можно в теме ЛСД где про блокирование инета для скриптов посмотреть пример ;) зызы: что касается обфускации сырков, то тут фантазия и упорство может довести до состояния "300баксов" (платный обфускатор).. это уже считаю предварительной защитой и над ней не заморачивался, из релиза своего криптора удалил такую возможность - автор сам решает что делать с исходным кодом до защиты от декомпиляции, так решил для себя.