![]() |
eXeL@B —› Вопросы новичков —› ASProtect 2.3 SKE |
Посл.ответ | Сообщение |
|
Создано: 18 ноября 2007 00:40 · Личное сообщение · #1 Привет всем! Имеется прога. http://rapidshare.com/files/70411938/Proga.rar.html http://rapidshare.com/files/70411938/Proga.rar.html Защита: ASProtect 2.3 SKE build 04.26 Beta [3]. Пытался следовать статье "Распаковка ASProtect v 2.xx by PE_Kill" но прога генерит огромное количество (скорее всего даже случайное) исключений обращения по адрессу [00000000] (aka null pointer exception). Но их я все фильтрую и у меня остается тогда до запуска программы 4 исключения int 3 (2 до EntryPoint и 2 после). Но OEP я все же найти не смог. Зато определил, что во фрейме 01720000 находится сам код зашиты, но ее OEP определить тоже не смог. К сожалению, больше из статьи ничего не смог использовать - большие различия. Похоже, что защиту поставили не совсем хорошо. Присутствуют два сегмента кода, один за другим - первый скорее всего как раз отвечает за инициализацию и форму регистрации, второй за саму логику программы. Я так думаю, потому что когда ставил точку останова на втором сегменте, то ни разу не брякался. Код в первом сегменте не выглядит замусоренем хотя конечно есть много вызовов в "дальний" сегмент в 01720000. Кроме того есть много функций-крючков, которые сидят далеко и в разных фреймах. Так что сдампить просто сегменты кода и виртуальную машину не получится. Китайский скрипт Aspr2.XX_unpacker что-то разпаковал и вот его лог: Address Message 174D6BA AsprAPIloc: 0175F4D4 174D6BA Aspr1stthunk: 0047202C 1749818 SDK stolen code sections = 00000001 175CC31 Total API in this Asprotect = 0000000D 175CC31 GetRegistrationInformation 0046E290 175CC31 CheckKeyAndDecrypt 0046E2D0 175CC31 CheckKey 0046E2E0 457078 SDK stolen code section address = 02790000 457078 Address of IAT = 00472000 457078 RVA of IAT = 00072000 457078 Size of IAT = 00000640 457078 Address of OEP = 00457078 457078 RVA of OEP = 00057078 Я исправил таблицу импорта, но три функции так и не нашел. Хотя до них дело, похоже, и не дошло - дамп валится с ошибкой при обрашении как раз куда-то в 02790000 (02790258). А теперь вопросы по следующим пунктам: 1. Как же все таки самому выйти на OEP и VOEP? Так уж ли это надо? Дамп ведь в принципе можно делать и тогда, когда просто знаешь, что весь код разпакован и загружен. 2. Как пофиксить 3 функции из импорта? Вот данные из ImpRec-а FThunk: 0007202C NbFunc: 00000003 0 0007202C ? 0000 0170BFC0 0 00072030 ? 0000 0170C050 0 00072034 ? 0000 0170C0F0 3. Как пофиксить созданый дамп. 4. Если предположить, что алгоритм валидации ключа не находится в виртульной машине и поддается реверсингу, как эффективней всего его найти? Мне удалось выйти на вызовы GetWindowTextA и код там вполне читабелен. Как можно его загрузить в IDA? Кстати, я так и не нашел кода, про который сказал скрипт разпаковки CheckKeyAndDecrypt 0046E2D0 CheckKey 0046E2E0 там пусто. ![]() |
|
Создано: 18 ноября 2007 03:51 · Личное сообщение · #2 |
|
Создано: 18 ноября 2007 10:31 · Личное сообщение · #3 |
|
Создано: 18 ноября 2007 11:52 · Личное сообщение · #4 |
|
Создано: 19 ноября 2007 05:00 · Личное сообщение · #5 |
|
Создано: 19 ноября 2007 12:14 · Личное сообщение · #6 Satyr странно, китайский скрипт коворит про 0х00457078. Она может быть и не украдена, но есть украденый API. Так что дамп все равно надо будет исправлять. Я пробовал следовать статье, которую ты посоветовал, но пока прога почему-то вылетает при попытке поставить бряк на секцию кода - Protection error. Если можно, то разскажи подробней, как ты нашел OEP, т.е. куда ставить бряк перед последним int 3 и куда смотреть в стеке? ![]() |
|
Создано: 19 ноября 2007 16:18 · Личное сообщение · #7 |
|
Создано: 19 ноября 2007 17:52 · Личное сообщение · #8 Satyr Теперь догнал! ![]() Теперь вопрос что делать дальше? Есть два варианта: реверсить алгоритм валидации ключа или пытатся сделать рабочий дамп. Даже не знаю что будет легче. ![]() |
|
Создано: 19 ноября 2007 18:25 · Поправил: Maximus · Личное сообщение · #9 logogin не первое не второе. Я вообще не понимаю зачем ты столько времени потерял из-за этой проги, просто бы тыкнул на ссылку что я тебе дал. По существу: В проге есть пошифрованные куски, расшифровать которые можно лишь имея хотя бы забаненый ключ. Реверсить алгоритм можно, но задача будет ОООЧЕНЬ не простая, просто поверь мне)) 3 функции что ты не нашет, это всего вероятней аспрапи, и я бы на твоем месте узнал бы перед взломом как минимум зачем они нужны, тебе бы сэкономило бы это кучу времени 00435993 > E9 3B050000 JMP laim_u.00435ED3 Вот тут натыкаемся сразу на пошифрованный кусок, можешь сам посмотреть... А это тебе распакованный прог, что бы не мучался уже: rapidshare.com/files/70809935/1212.rar_.html ----- StarForce и Themida ацтой! ![]() |
|
Создано: 19 ноября 2007 19:41 · Личное сообщение · #10 Maximus Да я почитал немного. Но решил, что пока не получу дамп или не определю где алгоритм ключа, то пока можно отложить. Но насколько я понял, если найти функции CheckKey или CheckKeyAndDecrypt, то используя тот же асповский SDK можна сделать keygen. Я ходил по твоей ссылке, но там так и написано - если не можете сами пропатчить апи, то дамп вам не поможет. Так что все равно самому разбираться придется. Я думаю это возможно, главное, что бы кто-то только советом помогал. За распаковку спасибо, буду пытаться дальше. ![]() |
|
Создано: 19 ноября 2007 19:51 · Поправил: Maximus · Личное сообщение · #11 logogin дык 1. Алгоритм обернутв VM 2. Алгоритм асиметричный, все проверки идут по хешу (блин этож комерческая защита если бы было все просто кто бы ее купил) 3. Найти можно только если дыру в реализации, но для этого как минимум надо на тестовом примере посмотреть что куда суется, с известным тебе ключиком. 4. Вряд ли кто тебе поможет, на форуме очень мало людей кто кигенил аспр, и то кигенели с одним заведомо известным ключем. 5: >Но насколько я понял, если найти функции CheckKey или CheckKeyAndDecrypt, то используя тот же асповский SDK можна сделать keygen Нет! Киген сделать низя,плохо читал, нужна енкрипшн константа, которая есть только у разработчика. ----- StarForce и Themida ацтой! ![]() |
|
Создано: 20 ноября 2007 00:54 · Личное сообщение · #12 Maximus Почитал получше. Получается что регистрация идет следующим образом 1. Разработчик получает текст - в данном случае MD5 хеш логина. Подписывает его своим Private Key используя RSA. Кстати, разве можно по закону использовать длину ключа более 128 битов? 2. Подпись идет клиенту. В проге зашит тогда по идее Public Key которым валидируется подпись. 3. Зовется CheckKeyAndDecrypt и разкриптовывается участки кода. Прога может знать только Public Keys, но использовать их по разному. Алгоритм проверки подписи RSA может и стандартный, а вот алгоритм разкриптовки наверное другой. Он может просто использовать константы из своего ключа. Какой же тогда выход? Вроде бы есть метод "Attack on Asprotect SKE Activation Key" - замены публичного ключа и атаки на константы. А для чего нужен заведомо известный ключ тогда? P.S. дамп почему-то не запускается, еще не смотрел почему - читал ![]() ![]() |
|
Создано: 20 ноября 2007 01:04 · Личное сообщение · #13 logogin пишет: Кстати, разве можно по закону использовать длину ключа более 128 битов? для сертификации в соотв. органах? можно ;) это тебе не экспортные ограничения в США, да и те времена прошли - сейчас 128 битный ключ - не проблема. logogin пишет: А для чего нужен заведомо известный ключ тогда? а как ты расшифруешь то, что хочешь потом зашифровать своим ключом (подменив его), брутфорсом? ----- EnJoy! ![]() |
|
Создано: 20 ноября 2007 07:57 · Поправил: Maximus · Личное сообщение · #14 logogin пишет: дамп почему-то не запускается, еще не смотрел почему - читал надо раскриптовывать покриптованое, тогда запустится. В остальном согласен с Jupiter, хотя ключем можно не только разобрать шифр, но и сбрутить приват ключи и следовательно сделать ключеген, но это уже задача для продвинутых хакирафф... ----- StarForce и Themida ацтой! ![]() |
|
Создано: 21 ноября 2007 12:09 · Личное сообщение · #15 |
|
Создано: 21 ноября 2007 12:50 · Личное сообщение · #16 |
![]() |
eXeL@B —› Вопросы новичков —› ASProtect 2.3 SKE |