Сейчас на форуме: (+5 невидимых) |
eXeL@B —› Дневники и блоги —› Практика ключей (only keys) |
Посл.ответ | Сообщение |
|
Создано: 16 августа 2013 05:44 · Поправил: dimka_new · Личное сообщение · #1 Доброго времени, появилось у меня немного свободного времени, решил немного по умничать ) По мотивам этого топа - https://ssl.exelab.ru/f/action=vthread&forum=5&topic=19777 В данном блоге хочу размещать информацию о реверсе программ, патчей здесь не будет, только ключи. Если можно закейгенить - буду постараться закейгенить, исходники соответственно тоже буду вылаживать. Из языков программирования - мучу я delphi - качество кода оставляет желать лучшего, но улучшать навыки в дельфях я не намерен, хотите красоты - переделывайте сами. Варнинг - тема для новичков, кем в принципе я тоже являюсь. Предложения, поправки, дополнение, пожелания, матерная ругань, троллинг, надменные усмешки и прочее приветствуются. Есть желание выложить что-то свое - велком. |
|
Создано: 17 августа 2013 05:21 · Поправил: dimka_new · Личное сообщение · #2 Здравствуйте Сегодня я решил рассмотреть программу Free Renju версия 5.02. Версия 5.03 стала бесплатной, так что вреда автору мы не нанесем. Сама игра мне не интересна, лечил по просьбе товарища тысчу лет назад - недавно обнаружил на старом винчестере. Исследование начнем с определения компилятора и наличия упаковки - PeID выдал Borland C++. Запускаем программу, вводим произвольные любые рег. данные и получаем красивое сообщение - "Неверное имя или ключ". Грузим exe-ник в OllyDbg и ставил бряки на GetDlgItemTextA\W, запускаем программу, вводим любые данные и нажимаем кнопку Ok в окне регистрации. Брякаемся в модуле USER32 - выходим из модуля нажав несколько раз F8 Оказываемся здесь: 004013F6 |. E8 D79D0300 CALL <JMP.&USER32.GetDlgItemTextA> ; \GetDlgItemTextA МЫ ТУТ ->>> 004013FB |. 68 80000000 PUSH 80 ; /Count = 80 (128.) 00401400 |. 8D95 D0FEFFFF LEA EDX,DWORD PTR SS:[EBP-130] ; | 00401406 |. 52 PUSH EDX ; |Buffer 00401407 |. 6A 69 PUSH 69 ; |ControlID = 69 (105.) 00401409 |. 57 PUSH EDI ; |hWnd 0040140A |. E8 C39D0300 CALL <JMP.&USER32.GetDlgItemTextA> ; \GetDlgItemTextA 0040140F |. 8D8D 50FFFFFF LEA ECX,DWORD PTR SS:[EBP-B0] 00401415 |. 8D85 D0FEFFFF LEA EAX,DWORD PTR SS:[EBP-130] Бряки можно снять, доходим до адреса 0040141B и видим в стеке введенные нами данные: НАШИ ДАННЫЕ В СТЕКЕ ->>> 0040141B |. 51 PUSH ECX ; /Arg3 0040141C |. 50 PUSH EAX ; |Arg2 0040141D |. 68 281D4400 PUSH frerenju.00441D28 ; |Arg1 = 00441D28 00401422 |. E8 D93C0000 CALL frerenju.00405100 ; \frerenju.00405100 00401427 |. 83C4 0C ADD ESP,0C 0040142A |. 85C0 TEST EAX,EAX 0040142C |. 0F84 12030000 JE frerenju.00401744 Вроде все ясно по адресу 00401422 - происходит проверка введенных данных, если все удачно в EAX помещается 1. По F7 заходим в функу по адресу 00401422 и не спеша трейсим код, по ходу дела отмечая интересные места (данные которые я ввел - Dimka_New и код 12345). Доходим до такого места: Code:
Похоже, что здесь сравнивается размер введенного серийника с 1A (26 в десятичном виде) Ставим бряк - и вводим новый ключ - 12345678901234567890123456 Идем далее, до такого места: 00405250 |. 8D97 C4120000 LEA EDX,DWORD PTR DS:[EDI+12C4] 00405256 |> 8A08 /MOV CL,BYTE PTR DS:[EAX] Сравнение с "FR" ->>> 00405258 |. 3A0A |CMP CL,BYTE PTR DS:[EDX] 0040525A |. 75 48 |JNZ SHORT frerenju.004052A4 0040525C |. 84C9 |TEST CL,CL 0040525E |. 74 12 |JE SHORT frerenju.00405272 00405260 |. 8A48 01 |MOV CL,BYTE PTR DS:[EAX+1] 00405263 |. 3A4A 01 |CMP CL,BYTE PTR DS:[EDX+1] 00405266 |. 75 3C |JNZ SHORT frerenju.004052A4 00405268 |. 83C0 02 |ADD EAX,2 0040526B |. 83C2 02 |ADD EDX,2 0040526E |. 84C9 |TEST CL,CL 00405270 |.^75 E4 \JNZ SHORT frerenju.00405256 00405272 |> 75 30 JNZ SHORT frerenju.004052A4 Тут сравниваются первые 2 символа введенного нами номера с FR. Наши данные приобретают вид: FR345678901234567890123456 Доходим до такого места: 00405368 |> 83FB 0A /CMP EBX,0A 0040536B |. 7E 07 |JLE SHORT frerenju.00405374 0040536D |. 33C0 |XOR EAX,EAX 0040536F |. E9 98000000 |JMP frerenju.0040540C 00405374 |> 8A16 |MOV DL,BYTE PTR DS:[ESI] Сравнение 1-го символа имени ->>> 00405376 |. 3A55 D8 |CMP DL,BYTE PTR SS:[EBP-28] 00405379 |. 74 10 |JE SHORT frerenju.0040538B 0040537B |. 43 |INC EBX 0040537C |. 46 |INC ESI 0040537D |> 8D4D B0 LEA ECX,DWORD PTR SS:[EBP-50] 00405380 |. 51 |PUSH ECX 00405381 |. E8 86970200 |CALL frerenju.0042EB0C 00405386 |. 59 |POP ECX 00405387 |. 3BC3 |CMP EAX,EBX 00405389 |.^77 DD \JA SHORT frerenju.00405368 Следующий символ в рег.номере - первый символ из введенного имени. Преображаем серийник: FRD45678901234567890123456 Трассируем до адреса: Code:
По F7 заходим в функу и исследуем ее: 0040544D . 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C] 00405450 . 8A10 MOV DL,BYTE PTR DS:[EAX] Сравнение с "-" ->>> 00405452 . 3A16 CMP DL,BYTE PTR DS:[ESI] 00405454 . 75 2F JNZ SHORT frerenju.00405485 В цикле проверяется наличие символа "-". Я не стал слишком усердствовать - FRD-5678901234567890123456 Данные ключ прошел все проверки и является валидным для имени Dimka_New, поздравляю ! Данные о регистрации храняться в ветке реестре - HKEY_CURRENT_USER\Software\Vitaliy Levchenko\Logical Crossroads\Free Renju MRelease Пишем кейген (Delphi): Code:
Где: LicName - Edit LicKey - Edit GenButton - Button Ссылка на дистрибьютив и кейген (~500Kb) - http://rghost.ru/48171365 |
|
Создано: 17 августа 2013 22:27 · Поправил: BoRoV · Личное сообщение · #3 Ф-ия RandLetter повеселила. Правильно так: Code:
Теперь больше по эстетическим моментам. Code:
Как по мне, то один символ лучше получить по индексу: Code:
Переменная FinalKey как раз и выступает в роли временной переменной, а не наоборот. Зачем было её вводить. ----- Лучше быть одиноким, но свободным © $me | Сообщение посчитали полезным: dimka_new |
|
Создано: 18 августа 2013 16:34 · Личное сообщение · #4 BoRoV Спасибо конечно за замечания, но: dimka_new пишет: Из языков программирования - мучу я delphi - качество кода оставляет желать лучшего, но улучшать навыки в дельфях я не намерен, хотите красоты - переделывайте сами. Перезаливать и переделывать кейген я не буду, смотрите советы BoRoV. Реально давно уже ничего кроме контроллеров не программирую, ну иной раз пару строчек под QNX напишу. Так-что не обессудьте ) ЗЫ BoRoV пишет: Ф-ия RandLetter повеселила. Правильно так: Первый попавшийся пример из яндекса |
|
Создано: 18 августа 2013 18:07 · Поправил: reversecode · Личное сообщение · #5 идея не нова, www.manhunter.ru тоже чуть чуть ломает и показывает как что бы было совсем всем интересно, возьмите и разберите взлом какойто сложной программы, с оригинальной защитой на руборде такие подскажут | Сообщение посчитали полезным: dimka_new |
|
Создано: 19 августа 2013 03:40 · Личное сообщение · #6 reversecode На оригинальность и не претендую, но и однотипные примеры размещать не буду. Жаль как-то валяются наработки на диске - глядишь кто почитает и найдет что-то новое. Ломать что-то сложное, жалко времени, да и не реверсер я уже давно. Ну и dimka_new пишет: Есть желание выложить что-то свое - велком. |
|
Создано: 20 сентября 2013 16:43 · Личное сообщение · #7 |
|
Создано: 20 сентября 2013 22:47 · Личное сообщение · #8 |
eXeL@B —› Дневники и блоги —› Практика ключей (only keys) |