|
Регистрация | Файлы | Правила | Альбомы | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
Копаем клиент Копаем клиент |
|
Опции темы | Поиск в этой теме | Опции просмотра |
14.03.2010, 11:22 | #1 |
Пользователь
Регистрация: 06.03.2010
Адрес: Россия->Цимлянск
Сообщений: 49
Сказал(а) спасибо: 34
Поблагодарили 4 раз(а) в 4 сообщениях
|
Warden
Вобщем видел на английском форуме тему, с раскопками сего чуда. Сейчас же меня почему-то туда не пускает (наверное опять учетку удалили). И собственно вопрос: что там уже смогли достичь?
|
14.03.2010, 11:33 | #2 |
YTDB Dev
Регистрация: 01.02.2010
Сообщений: 115
Сказал(а) спасибо: 0
Поблагодарили 36 раз(а) в 25 сообщениях
|
А заново зарегистрироваться?
Последний раз редактировалось timmit; 14.03.2010 в 12:36. |
14.03.2010, 12:35 | #3 |
MaNGOS Dev
Регистрация: 08.03.2010
Адрес: Ханты-Мансийск
Сообщений: 28
Сказал(а) спасибо: 27
Поблагодарили 13 раз(а) в 8 сообщениях
|
Warden*
|
14.03.2010, 12:55 | #4 |
Пользователь
Регистрация: 12.03.2010
Сообщений: 85
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 17 сообщениях
|
Увы.. Он не очень согласуется с мангосом..
|
14.03.2010, 20:31 | #5 | |
Пользователь
Регистрация: 06.03.2010
Адрес: Россия->Цимлянск
Сообщений: 49
Сказал(а) спасибо: 34
Поблагодарили 4 раз(а) в 4 сообщениях
|
Цитата:
|
|
15.03.2010, 05:25 | #6 |
Пользователь
Регистрация: 12.03.2010
Сообщений: 85
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 17 сообщениях
|
используется модуль в чистом виде всем известной компании.. а раздавать модуль отдельно как то бредово. плюс надо кому то это все поддерживать, речь идет о базе проверок (мало того, что её надо наполнять, её нужно обновлять при смене клиента).
|
15.03.2010, 06:18 | #7 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
Лучше бы (имхо) выложили (хотя бы под хайдом) что-то уже созданное, тогда и люди, желающие поддерживать, найдутся.
Последний раз редактировалось LordJZ; 15.03.2010 в 06:26. |
15.03.2010, 06:27 | #8 | |
Пользователь
Регистрация: 12.03.2010
Сообщений: 85
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 17 сообщениях
|
Цитата:
+ это даст повод всем известной компании сделать изменения в обсуждаемой вещи. |
|
15.03.2010, 06:29 | #9 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
|
15.03.2010, 06:42 | #10 |
Пользователь
Регистрация: 12.03.2010
Сообщений: 85
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 17 сообщениях
|
|
15.03.2010, 10:02 | #11 |
Новичок
Регистрация: 14.03.2010
Сообщений: 11
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
|
|
15.03.2010, 10:24 | #13 | |
Новичок
Регистрация: 14.03.2010
Сообщений: 11
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
|
Цитата:
http://ru-mangos.ru/showpost.php?p=2067&postcount=7 |
|
15.03.2010, 10:44 | #14 | |
WowCore Dev
Регистрация: 11.03.2010
Сообщений: 112
Сказал(а) спасибо: 10
Поблагодарили 51 раз(а) в 25 сообщениях
|
Цитата:
|
|
19.03.2010, 01:35 | #15 |
MaNGOS Dev
Регистрация: 14.03.2010
Сообщений: 38
Сказал(а) спасибо: 23
Поблагодарили 49 раз(а) в 16 сообщениях
|
насколько я понял из темы на офф форуме он позволяет высылать клиенту другие модули и выполнять их на клиенте/машине клиента.. то есть это могут быть как безопасная проверка целостности так и нечто вредоносное, зависит от того кто его использует
|
19.03.2010, 01:41 | #16 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Клиент выполняет только подписанные Blizzard модули, поэтому ничего вредоносного залить не получится.
|
22.03.2010, 17:22 | #17 | |
Пользователь
Регистрация: 22.03.2010
Сообщений: 41
Сказал(а) спасибо: 7
Поблагодарили 25 раз(а) в 15 сообщениях
|
Цитата:
уж если она не реагирует на публичные BNLS сервера для War3 / Diablo2 (а они есть ну очень давно) которые генерят для ботов правильные ответы на запросы вардена - то один пост на форуме ничего не изменит. тем более, что АБСОЛЮТНО вся нужная для снифа/реализации поддержки вардена информация есть на англоязычных форумах. кстати, если кому интересно - проект vanllawow таки продвинулся в этом не очень благом начинании (реализации поддежки вардена). http://beta.assembla.com/code/vanill...rden.vb?rev=63 да, и если кто не видел, снифы варденовских проверок выглядят примерно так: Код:
04:29:57 SMSG_WARDEN_DATA warden_opcode : WARDEN_MODULE_RUN (0x2) module_run : result : 1 : HideEx xor_byte: 88 check_byte : 189 check_type : TIMING_CHECK check_byte : 117 check_type : FIND_MODULE_CHECK seed : 2d03398a hmacsha1 : 9daa58b3aa1bb3c5406269f820117c1643125483 offset : 34176 size : 25 check_byte : 117 check_type : FIND_MODULE_CHECK seed : 9757094e hmacsha1 : 865dd3cf96294367fd861647206634caf97b2b95 offset : 24812 size : 14 check_byte : 145 check_type : MEM_CHECK module : wow.exe offset : 5922925 size : 8 check_byte : 235 check_type : DRIVER_CHECK seed : 3322769657 sha : e1f1737c12dc6a857bf0ef7b42c1b24f04859753 driver : HideEx check_byte : 117 check_type : FIND_MODULE_CHECK seed : 3d06f29e hmacsha1 : aea13c0af70ab6ab32c2bea246756bb86bc090df offset : 41096 size : 24 check_byte : 62 check_type : FIND_MEMORY_CHECK seed : 21fb4723 hmacsha1 : fe6cb25012e0c6a8f74265a400248a7d3c021125 offset : 198 size : 10 04:30:01 CMSG_WARDEN_DATA warden_response : WARDEN_RESPONSE_RESULT (0x2) report : result : checks: TIMING_CHECK, FIND_MODULE_CHECK, FIND_MODULE_CHECK, MEM_CHECK, DRIVER_CHECK, FIND_MODULE_CHECK, FIND_MEMORY_CHECK pkt_sz: 19 pkt_checksum: 84cb5dea (MATCH) check_type : TIMING_CHECK unk1 : 1 GetTickCount : 506898242 check_type : FIND_MODULE_CHECK result : 233 check_type : FIND_MODULE_CHECK result : 233 check_type : MEM_CHECK '8 @ 0x005a606d' result : 0 memory_content : …А‰EьЫEь check_type : DRIVER_CHECK 'HideEx' result : 233 check_type : FIND_MODULE_CHECK result : 233 check_type : FIND_MEMORY_CHECK result : 233 ну или если читер - маньяк, он может просто исправлять ответы вардена на нужные (не забывая перешифровывать на лету, конечно). |
|
22.03.2010, 17:30 | #18 | |
Пользователь
Регистрация: 22.03.2010
Сообщений: 41
Сказал(а) спасибо: 7
Поблагодарили 25 раз(а) в 15 сообщениях
|
Цитата:
7 из них обновлять не требуется вообще. 44 обновляются скриптом за пару минут из файлов клиента (контольные суммы файлов и куски wow.exe) или из логов сниффера. остальные 96... ну тут вопрос интересный. для обновления каждой из них нужна копия файла бота или чита, которую эта проверка ищет. посмотрим, как они обновятся в 3.3.3 (и обновятся ли вообще - или просто добавятся проверки новых версий). в любом случае - особых знаний для поддержания базы в актуальном состоянии не требуется. |
|
22.03.2010, 19:04 | #19 |
MaNGOS Dev
Регистрация: 08.03.2010
Адрес: Ханты-Мансийск
Сообщений: 28
Сказал(а) спасибо: 27
Поблагодарили 13 раз(а) в 8 сообщениях
|
в той базе которая у меня 822- проверки
|
22.03.2010, 19:11 | #20 | |
Пользователь
Регистрация: 12.03.2010
Сообщений: 85
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 17 сообщениях
|
Цитата:
также как Код:
#S->C Warden Opcode: 03 #Unk bytes: #14 00 60 D0 FE 2C 01 00 02 00 20 1A 36 00 C0 E3 #35 00 50 F1 35 00 C0 F5 35 00 03 08 00 77 6C 93 #A9 04 00 00 60 A8 40 00 01 03 08 00 36 85 EA F0 #01 01 00 90 F4 45 00 01 seed модуля + новый клиентский и серверный ключ для изменения после шифрации чтобы обойти ограничения ОС приходиться использовать 1 модуль. после того как это выйдет в паблик читерам не составит труда подменивать ответы на проверки... Для того чтобы налету криптовать пакеты вардена необходимо знать ключи для каждого модуля или доставать из памяти ключи. |
|
22.03.2010, 19:28 | #21 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
|
23.03.2010, 03:54 | #22 | |||
Пользователь
Регистрация: 22.03.2010
Сообщений: 41
Сказал(а) спасибо: 7
Поблагодарили 25 раз(а) в 15 сообщениях
|
только не нужно говорить, что ни у кого его нету
все равно не поверю. Цитата:
Код:
data = decode(""" 03 14 00 60 D0 FE 2C 01 00 02 00 20 1A 36 00 C0 E3 35 00 50 F1 35 00 C0 F5 35 00 03 08 00 77 6C 93 A9 04 00 00 60 A8 40 00 01 03 08 00 36 85 EA F0 01 01 00 90 F4 45 00 01 """) from pkt_parser import * pkt = Packet(SMSG_WARDEN_DATA, data) print pkt ------------ warden_opcode : WARDEN_MODULE_LOADLIB (0x3) check_len : 20 check_crc : 754896992 data : 01000200201a3600c0e3350050f13500c0f53500 real_crc : 754896992 check_opcode_1 : 3 check_len_1 : 8 check_crc_1 : 2845011063 data_1 : 04000060a8400001 real_crc_1 : 2845011063 check_opcode_2 : 3 check_len_2 : 8 check_crc_2 : 4041901366 data_2 : 01010090f4450001 real_crc_2 : 4041901366 Код:
010002006089310000523100e05e3100f0623100 040000f0303f0001 010100d03f440001 к шифрованию отношения не имеет вообще никакого, т.к. делается уже после создания новых ключей. Цитата:
сам процесс создания ключа выглядит так: Код:
04:29:52 SMSG_WARDEN_DATA warden_opcode : WARDEN_MODULE_SEED (0x5) seed : f377c0dcb7f1625af8ee9ee352450442 04:29:52 CMSG_WARDEN_DATA warden_response : WARDEN_RESPONSE_HASH (0x4) SHA1 : 67b3c364930ee3dd10fdbf6596b2aaa55e57a279 однако что мешает по очереди загрузить все имеющиеся на руках модули к себе в процесс, накормить тысячей разных сидов и записать полученные хэши\ключи в базу? и из этой базы уже потом проверять клиентов. благо там новый ключ от предыдущего не зависит - только от встроенной в модуль функции и сида. Цитата:
повторяю еще раз, АБСОЛЮТНО ВСЯ НЕОБХОДИМАЯ ИНФОРМАЦИЯ ЕСТЬ НА АНГЛОЯЗЫЧНЫХ ФОРУМАХ в открытом виде уже наверное год как. если не больше. Последний раз редактировалось abdula123; 23.03.2010 в 04:02. |
|||
Пользователь сказал cпасибо: | sven (23.03.2010) |
23.03.2010, 05:42 | #23 |
Пользователь
Регистрация: 12.03.2010
Сообщений: 85
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 17 сообщениях
|
Данный пакет был для 3.3.2 и оно даже работает нормально.. другое дело в том, что в опенсорсе разбирать один модуль фи (есть все ключи и читерам подделывать ответы не составит труда... тем более все эти ключи и проверки будут как на ладони). идеи есть как собирать seed, и новые ключи шифрации для каждого модуля ?
Код:
byte seed[16]; // taken from 0x05 packet byte[] rc4_seed_client = ModuleSpecificHash(&seed); // this value than stored at module+4 byte[] rc4_seed_server = ModuleSpecificHash(&seed); // so we have double processed seed here clientRC4Crypt_Init(rc4_seed_client); serverRC4Crypt_Init(rc4_seed_server); byte[] seedHash = SHA1(rc4_seed_client); // used in 0x04 packet п.с. хотелось бы посмотреть на модуль для macos клиента.. а на деле кому оно надо те уже написали простейшую поддержку.. Последний раз редактировалось zhenya; 23.03.2010 в 05:58. |
23.03.2010, 06:37 | #24 | |||
Пользователь
Регистрация: 22.03.2010
Сообщений: 41
Сказал(а) спасибо: 7
Поблагодарили 25 раз(а) в 15 сообщениях
|
странно. значит пакет менялся.
в логах за последние 10 дней - только те значения, что я написал. Цитата:
Цитата:
адаптировать его под цикл - не проблема. Код:
wmod = WardenModule("2A7BD368FF3D0795B4DE7F823F487175.raw") wmod.load() wmod.prepare() wmod.init() # state - текущее крипто-состояние wmod.live_rc4_data = state print " -> GenerateRC4Keys" wmod.GenerateRC4Keys("") # теперь шифруем пакет SEED и скармливаем вардену # если ключи принялись нормально - он его обработает и выдаст HASH s_pkt = decode(""" 05 xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx """) pkt_crypted = server_crypt.crypt(s_pkt) print " -> PacketHandler" print wmod.PacketHandler(pkt_crypted) resp_crypted = wmod.send_queue.pop(0) resp_decrypted = client_crypt.crypt(resp_crypted) print "decrypted responce" print dump2hexstr(resp_decrypted) # после SEED->HASH грузим новые ключи rc4_states = cast(wmod.rc4_keys_ptr, POINTER(c_ubyte)) print "unload" wmod.UnloadModule() Цитата:
учитывая, что варден там абсолютно тот-же самый, адаптировать под вов - дело недолгое и нехитрое. есть основания предполагать, что: база модулей набирается за несколько месяцев игры. их не очень много (всяко меньше 3-4 сотен) и они тоже в ротации. ну время от времени свежие добавляются. чтобы окончательно проверить это предположение - нужно эти самые несколько месяцев заходить в игру каждые несколько часов и автоматом подлавливать свежие модули. их сыпется по 3-4 штуки в день. за последние 10 дней повторов не было. оно надо коммерческим ботописателям - у некоторых из них действительно давно всё налажено. ну или ботописателям-любителям, если кому делать нехер. |
|||
23.03.2010, 12:15 | #25 |
Пользователь
Регистрация: 12.03.2010
Сообщений: 85
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 17 сообщениях
|
В d2gs используется только 1 модуль заданный в d2warden.ini также как и ключ.
Код:
;Please don't modify following values! ;І»ТЄРЮёДПВГжµДЦµЈЎ MOD=3ea42f5ac80f0d2deb35d99b4e9a780b.mod MOD_RC4_Key=4f340a327dc8b4b8a7d1c15cf73c0e78 Если вы поможете мне найти для всех модулей Seed, new client key, new server key. 0х3 пакет если отличается для различных модулей то необходимо еще и это. также 0х4 пакет необходимо hash который возращает клиент. На текущий момент у TOM_RUS чуть больше 210 различных модулей с RC4 ключами к ним. Все равно как я понимаю в git не будут включены модули т.к. они подписаны RSA близарда. имхо это откроет путь для начинающих читописателей, ботописателей. п.с. если интересно #rmdc@rusnet Последний раз редактировалось zhenya; 23.03.2010 в 12:19. |
23.03.2010, 13:49 | #26 | ||||
Пользователь
Регистрация: 22.03.2010
Сообщений: 41
Сказал(а) спасибо: 7
Поблагодарили 25 раз(а) в 15 сообщениях
|
Цитата:
BNLS сервера точно поддерживают загрузку разных модулей. причем на лету. http://bnls.ghostbot.net:9367/ Цитата:
нагенерить пар (модуль, состояние) для нескольких сидов - могу (хз сколько они будут генериться, но не дольше одной в секунду). завтра, скорее всего. кстати, если кто в криптографии силен - можно ли из начального состояния RC4 (с I и J равными 0) вычислить ключ за небольшое время? что-то мне подсказывает, что нет - т.к. неизвестно J, которое было на момент окончания заполнения BOX. а атаковать RC4 по всем правилам - слишком долгое удовольствие. впрочем, вопрос чисто теоретический, и без начального ключа всё работает нормально. Цитата:
Цитата:
я, кстати, их храню уже расшифроваными и распаковаными - меньше мороки при загрузке Последний раз редактировалось abdula123; 23.03.2010 в 13:52. |
||||
Пользователь сказал cпасибо: | sven (26.03.2010) |
25.05.2010, 12:08 | #27 |
Новичок
Регистрация: 25.05.2010
Сообщений: 11
Сказал(а) спасибо: 1
Поблагодарили 14 раз(а) в 5 сообщениях
|
Заранее извиняюсь за нубский вопрос - последние год-полтора я отошел от копаний во внутренностях ВоВ и остановился на версии 2.3.3, потому могу не знать современных реалий.
Вопрос таков - есть ли возможность варденом следить за целостностью трафика? Проверки модулей, памяти, драйверов и пр. банально не спасают от редактирования трафика на шлюзе, потому логично было бы сверять контрольную сумму исходящих данных, но это реально сделать лишь в собственном модуле (через задницу и с внутренними хуками, но можно). Собственный модуль же требует взлома 1024-битного ключа RSA, либо модификации клиента. О ключе, кстати, отдельный разговор. Может таки есть смысл набрать нужное количество единомышленников, написать OpenCL/CUDA модули и подобрать его? Ключ не менялся со времен д2, за эти годы можно было уже и на CPU посчитать |
25.05.2010, 13:53 | #28 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
это отдельная dll, в которой можно делать все что угодно
но проблема в том, что и она "подписана". это даже не совсем обычная dll. просто очень похожа, с модифицированным близзами заголовком. мы в свое время полностью разобрали механизмы загрузки в клиента этой dll, но клиент ее ессно не принимает. селяви. начинаем подбирать ключик? только тут опять проблема - как только станет известно о подобранном ключе, начнуться мегахаки и близы его сменят. не думаю что удастся сохранить ключ в тайне среди трех-четырех команд-разработчиков. |
25.05.2010, 14:08 | #29 |
Новичок
Регистрация: 25.05.2010
Сообщений: 11
Сказал(а) спасибо: 1
Поблагодарили 14 раз(а) в 5 сообщениях
|
Можно попробовать и сохранить. Все-таки это не маленькое число и "на словах" или "по аське" оно не утечет, только если закоммитить код куда-то, где доберутся поисковики.
подыму старые наработки, почитаю математические выкладки. там не такой уж и страшный диапазон перебора, т.е. надо не 2^1024 чисел перепробовать, а заметно меньше |
25.05.2010, 15:06 | #30 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Там же 2048 бит ключ, а не 1024...
|
25.05.2010, 19:27 | #31 | ||
Новичок
Регистрация: 25.05.2010
Сообщений: 11
Сказал(а) спасибо: 1
Поблагодарили 14 раз(а) в 5 сообщениях
|
не буду говорить за последние версии, но в Burning Crusade (как и в предыдущих версиях, да и в D2/StarCraft) используется 1024-битный ключ.
Вот из моей внутренней переписки: Цитата:
Цитата:
Последний раз редактировалось Nomad; 25.05.2010 в 20:40. |
||
3 пользователя(ей) сказали cпасибо: | Konctantin (25.05.2010), sven (26.05.2010) |
25.05.2010, 20:46 | #32 |
Новичок
Регистрация: 25.05.2010
Сообщений: 11
Сказал(а) спасибо: 1
Поблагодарили 14 раз(а) в 5 сообщениях
|
Теперь немного теории. Весь алгоритм я описывать не буду, читайте Википедию.
В общем случае задача взлома RSA это нахождение значения d при известных e (публичный ключ) и m (модуль). При этом рекомендуется выбирать небольшие значения e, но не меньше 256 степени значащих бит для 1024-битного ключа, иначе действует теорема Винера и есть некий упрощенный способ поиска d. У нас же e и d поменяны местами, что совершенно не влияет на теорему Винера и вообще формулы поиска. При этом число d совсем небольшое (гораздо меньше 256 бит). Также e и d связаны общими правилами: d*e = 1 mod n' 1 < e < n' как следствие из этих двух формул произведение d*e должно обязательно быть больше n' e > n'/d и e < n' значения n и n' связаны так: n' = (p-1)*(q-1) n = p * q из чего следует что n' = n - p - q +1 при этом p и q - простые числа, заметно меньшие, чем n. Даже примерно прикинув, что n' ~= n мы можем обозначить границы значений e как n/d < e < n. На самом же деле n' намного меньше n и диапазон для перебора еще меньше. Ради эксперимента можно перебрать простые числа до 8-10 знаков, чтобы еще на несколько порядков сузить диапазон значений e. Еще надо рассмотреть вариант с теоремой Винера - она актуальна если q < p < 2q, т.е. когда p и q одного порядка. Такое упрощение может очень сильно сузить диапазон поиска, ведь получится, что n < p*p < 2*n, а значит n ^ 1/2 < p < 2 * n ^ 1/2, т.е. число p лежит в фиксированных пределах и мы можем одним движением вычеркнуть десятки машинных лет перебора Но вообще, перед тем как перебирать, надо еще хорошенько почитать литературу. Ибо можно годами перебирать значения, которые окажутся откровенно лишними. |
5 пользователя(ей) сказали cпасибо: |
26.05.2010, 11:14 | #33 | |
Новичок
Регистрация: 25.05.2010
Сообщений: 11
Сказал(а) спасибо: 1
Поблагодарили 14 раз(а) в 5 сообщениях
|
коллеги, я прошу прощения, что ввел вас в заблуждение
наш случай не попадает ни под одно из частных решений (в т.ч. и с теоремой Винера, ибо у нас малое значение известного ключа, а не искомого), а разложение на множители (факторизация) 1024-битового числа n не возможна с нашими ресурсами. Вот исследования американского Агенства Национальной Безопасности: Цитата:
Разница в 100 раз сокращает время с 4000000 лет на станцию до 40 000. Это значит, что сорок тысяч компьютеров с такими карточками будут год считать один из этапов подбора. Если работать с картами 5970, то это будет 10 000 компьютеров за год времени, что тоже очень далеко от наших реалий. Я еще буду читать, консультироваться на форумах и пр. В этом топике я видел, что есть несколько сотен оригинальных варденов - это все примеры подписывания, потому может получиться как-то скомбинировать из них.. Но простой брут-форс нам не светит |
|
3 пользователя(ей) сказали cпасибо: |
26.05.2010, 11:50 | #34 |
WowCore Dev
Регистрация: 11.03.2010
Сообщений: 112
Сказал(а) спасибо: 10
Поблагодарили 51 раз(а) в 25 сообщениях
|
Бесполезно. Даже если знать несколько пар значений (s, m) - то это все равно ничего не дает. Если расписать мат. формулы по этим парам, то получится система из (n-1) уравнений с n неизвестными.
|
28.05.2010, 13:01 | #35 |
Новичок
Регистрация: 25.05.2010
Сообщений: 11
Сказал(а) спасибо: 1
Поблагодарили 14 раз(а) в 5 сообщениях
|
Распишу еще два тупиковых варианта взлома, на случай если кто-то захочет этим заняться и будет идти моим путем.
Вариант 1 У нас известна пара значений s и m для формулы s = m ^ e mod n т.е. число m возводится в степень e и затем ищется его остаток от деления на n. Это можно записать в виде: s + n * k = m ^ e где k - целое число раз, которое n встречается в числе m ^ e. Моим логичным предположением было, что никто не станет возводить в очень большую степень и можно найти перебором число k. Через какое-то время (заодно перебрав 16 десятичных знаков от 1 для числа k) я осознал неравенство, указанное выше: e > n`/d n` - число того же порядка, что и n, но немного меньше его. т.е. к примеру если у n 300 знаков, то у n` может быть 300-298 знаков. Если разделить на наше число d = 257, то получится число из ~298-296 знаков. А теперь представьте на секунду, что число 2 в 64-й степени равно 18 446 744 073 709 551 615 (задача о зернах на шахматной доске), а какого размера будет число из 300+ знаков (число m) в степени из 300 знаков? Я подозреваю, что такой результат нельзя будет уместить на всех информационных носителях Земли Естественно, число k тоже невообразимо велико и суть тут в том, что есть математический алгоритм получения остатка от возведения в степень - т.е. m ^ e mod n считается без реального возведения в степень, потому эта функция не обратима. Вариант 2 Ключ 1024-битный, но на самом деле им подписывается 160-битное значение - хеш SHA1 от тела модуля*. Для обеспечения безопасности к хешу дописываются числа 0xBB, чтобы дополнить его до 1024 бит. При некотором желании (дописывая в конец не значащие данные, используя хитрые алгоритмы, вычисления на GPU и пр.) можно было бы создать модуль, хеш от которого совпадает с уже имеющимся. Это значит, что он автоматически уже был бы подписан и наши проблемы решились бы. Но тут вступает в силу символ *, поставленный мной выше. Систему делал человек, сведущий в криптоанализе (или просто параноик), потому хеш считается не от "чистого" модуля, а от бинарного блока в таком виде: "реальная длина модуля" + "тело модуля в архиве" + "MAIEV.MOD" Мы можем вручную нарастить этот блок и через годы перебора получить такой же хеш код, как у существующего модуля. Но клиент на своей стороне не будет ничего "наращивать". Это значит, что надо менять само тело модуля, чтобы его в архиве биты стали на "нужные места". Сложность такой операции может оказаться даже больше, чем для факторизации 1024-битного ключа.. Вариант реален, но для его реализации (или хотя бы оценки) нужны ОЧЕНЬ хорошие знания как алгоритма архивации, так и SHA1. Последний раз редактировалось Nomad; 28.05.2010 в 21:52. |
2 пользователя(ей) сказали cпасибо: | Konctantin (28.05.2010), sven (30.05.2010) |
28.05.2010, 14:10 | #36 |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
Господи да хватит пытаться найти способ ломануть 2048 битный RSA это бесполезно.
|
28.05.2010, 14:18 | #37 |
WowCore Dev
Регистрация: 11.03.2010
Сообщений: 112
Сказал(а) спасибо: 10
Поблагодарили 51 раз(а) в 25 сообщениях
|
|
28.05.2010, 21:48 | #38 | |
Новичок
Регистрация: 25.05.2010
Сообщений: 11
Сказал(а) спасибо: 1
Поблагодарили 14 раз(а) в 5 сообщениях
|
Цитата:
но ведь мы не хакеры, а конструкторы, у нас другая задача - нарастить функционал клиента без явного его изменения. Для этого любые методы хороши, вплоть до buffer overflow attack какого-то из имеющихся варденов дабы он загрузил наш модуль с сервера Есть еще один вариант. Если из имеющихся подписей модулей (расшифрованых) можно получить умножением (в т.ч. и по модулю n) подпись нашего собственного модуля (тоже не зашифрованную), то можно без особых проблем ее подписать. К сожалению, я не представляю как можно из чего-то вроде 0xBBBBB234234 получить что-то вроде 0xBBBBB765651 Последний раз редактировалось Nomad; 28.05.2010 в 21:54. |
|
28.05.2010, 22:01 | #39 | |
WowCore Dev
Регистрация: 11.03.2010
Сообщений: 112
Сказал(а) спасибо: 10
Поблагодарили 51 раз(а) в 25 сообщениях
|
Цитата:
|
|
28.05.2010, 22:57 | #40 |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
А по какому адресу в памяти надо "хукнуть" чтобы сделать замену, этот адрес статический?
Последний раз редактировалось Konctantin; 28.05.2010 в 22:59. |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|
|