Сейчас на форуме: bartolomeo, -Sanchez- (+4 невидимых)

 eXeL@B —› Вопросы новичков —› Помогите разобраться со взломом регистрации
Посл.ответ Сообщение

Ранг: 1.9 (гость)
Активность: 0=0
Статус: Участник

Создано: 08 апреля 2006 22:44
· Личное сообщение · #1

Имеется кусок тода который сравнивает введенный мною текст с чем то и выдает соответственно результат
0043DD68 |. PUSH 50 ; /Count = 50 (80.)
0043DD6A |. PUSH RIP.00570A08 ; |Buffer = RIP.00570A08
0043DD6F |. PUSH 3E9 ; |ControlID = 3E9 (1001.)
0043DD74 |. PUSH EBX ; |hWnd
0043DD75 |. CALL DWORD PTR DS:[<&USER32.GetDlgItemTe>; \GetDlgItemTextA
0043DD7B TEST EAX,EAX
0043DD7D |. JNZ SHORT RIP.0043DD8D
0043DD7F |. MOV BYTE PTR DS:[570A08],AL
0043DD84 |. POP EDI
0043DD85 |. POP ESI
0043DD86 |. POP EBX
0043DD87 |. MOV ESP,EBP
0043DD89 |. POP EBP
0043DD8A |. RETN 10
0043DD8D |> MOV EDI,RIP.00570A08 ; ASCII "tyuoio"
0043DD92 |. OR ECX,FFFFFFFF
0043DD95 |. XOR EAX,EAX
0043DD97 |. XOR ESI,ESI
0043DD99 |. REPNE SCAS BYTE PTR ES:[EDI]
0043DD9B |. NOT ECX
0043DD9D |. DEC ECX
0043DD9E |. MOV DWORD PTR SS:[ESP+10],0
0043DDA6 |. MOV DWORD PTR SS:[ESP+18],0
0043DDAE |. MOV DWORD PTR SS:[ESP+1C],0
0043DDB6 JE RIP.0043DEA4
0043DDBC |> MOV AL,BYTE PTR DS:[ESI+570A08]
0043DDC2 |. MOV DL,BYTE PTR DS:[ESI+570A09]
0043DDC8 |. MOVSX ECX,AL
0043DDCB |. MOV DWORD PTR SS:[ESP+14],ECX
0043DDCF |. PUSH EDX
0043DDD0 |. FILD DWORD PTR SS:[ESP+18]
0043DDD4 |. PUSH EAX
0043DDD5 |. FADD DWORD PTR SS:[ESP+18]
0043DDD9 |. FSTP DWORD PTR SS:[ESP+18]
0043DDDD |. CALL RIP.0043DCE0
0043DDE2 |. ADD ESP,8
0043DDE5 |. MOV EDI,RIP.00570A08 ; ASCII "tyuoio"
0043DDEA |. OR ECX,FFFFFFFF
0043DDED |. XOR EAX,EAX
0043DDEF |. INC ESI
0043DDF0 |. FADD QWORD PTR SS:[ESP+18]
0043DDF4 |. REPNE SCAS BYTE PTR ES:[EDI]
0043DDF6 |. FSTP QWORD PTR SS:[ESP+18]
0043DDFA |. NOT ECX
0043DDFC |. DEC ECX
0043DDFD |. CMP ESI,ECX
0043DDFF |. JB SHORT RIP.0043DDBC
0043DE01 |. FLD DWORD PTR SS:[ESP+10]
0043DE05 |. FCOMP DWORD PTR DS:[483320]
0043DE0B |. FSTSW AX
0043DE0D |. TEST AH,40
0043DE10 JE RIP.0043DEA4
0043DE16 |. FLD QWORD PTR SS:[ESP+18]
0043DE1A |. FSUB QWORD PTR DS:[483318]
0043DE20 |. FABS
0043DE22 |. FCOMP QWORD PTR DS:[483310]
0043DE28 |. FSTSW AX
0043DE2A |. TEST AH,1
0043DE2D JE SHORT RIP.0043DEA4
0043DE2F |. PUSH 0 ; /Style = MB_OK|MB_APPLMODAL
0043DE31 |. PUSH RIP.004953E8 ; |Title = "Thank you for registration!"
0043DE36 |. PUSH RIP.004953CC ; |Text = "RIP has been registered!!!"
0043DE3B |. PUSH EBX ; |hOwner
0043DE3C |. CALL DWORD PTR DS:[<&USER32.MessageBoxA>>; \MessageBoxA
0043DE42 |. MOV EDI,RIP.00570A08 ; ASCII "tyuoio"
0043DE47 |. OR ECX,FFFFFFFF
0043DE4A |. XOR EAX,EAX
0043DE4C |. REPNE SCAS BYTE PTR ES:[EDI]
0043DE4E |. NOT ECX
0043DE50 |. SUB EDI,ECX
0043DE52 |. MOV EAX,ECX
0043DE54 |. MOV ESI,EDI
0043DE56 |. MOV EDI,RIP.0049F8EC ; ASCII "fghfgh"
0043DE5B |. SHR ECX,2
0043DE5E |. REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>
0043DE60 |. MOV ECX,EAX
0043DE62 |. XOR EAX,EAX
0043DE64 |. AND ECX,3
0043DE67 |. REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>
0043DE69 |. MOV EDI,RIP.0049F8EC ; ASCII "fghfgh"
0043DE6E |. OR ECX,FFFFFFFF
0043DE71 |. REPNE SCAS BYTE PTR ES:[EDI]
0043DE73 |. NOT ECX
0043DE75 |. PUSH ECX ; /BufSize
0043DE76 |. MOV ECX,DWORD PTR DS:[49FA50] ; |
0043DE7C |. PUSH RIP.0049F8EC ; |Buffer = RIP.0049F8EC
0043DE81 |. PUSH 1 ; |ValueType = REG_SZ
0043DE83 |. PUSH EAX ; |Reserved => 0
0043DE84 |. PUSH RIP.004953C8 ; |ValueName = "Key"
0043DE89 |. PUSH ECX ; |hKey => 6C
0043DE8A |. CALL DWORD PTR DS:[<&ADVAPI32.RegSetValu>; \RegSetValueExA
0043DE90 |. PUSH 1 ; /Result = 1
0043DE92 |. PUSH EBX ; |hWnd
0043DE93 |. CALL DWORD PTR DS:[<&USER32.EndDialog>] ; \EndDialog
0043DE99 |. XOR EAX,EAX
0043DE9B |. POP EDI
0043DE9C |. POP ESI
0043DE9D |. POP EBX
0043DE9E |. MOV ESP,EBP
0043DEA0 |. POP EBP
0043DEA1 |. RETN 10
0043DEA4 |> PUSH 30 ; /Style = MB_OK|MB_ICONEXCLAMATION|MB_APPLMODAL
0043DEA6 |. PUSH RIP.004953A8 ; |Title = "You have entered invalid code."
0043DEAB |. PUSH RIP.0049538C ; |Text = "Invalid registration code!"
0043DEB0 |. PUSH EBX ; |hOwner
0043DEB1 |. CALL DWORD PTR DS:[<&USER32.MessageBoxA>>; \MessageBoxA
0043DEB7 |> POP EDI ; Default case of switch 0043DD44

Для чего нужны команды test ah,1 и test ah,40? Текст fghfgh я ввел для пробы



Ранг: 88.0 (постоянный)
Активность: 0.070
Статус: Участник

Создано: 09 апреля 2006 12:41
· Личное сообщение · #2

ilyuha пишет:
Для чего нужны команды test ah,1 и test ah,40?

Test выполняет инструкцию and без возврата результата. Если результат был бы равен нулю, то поднимается флаг Z.

Например у тебя test'уется ah(второй байт eax-a справа) с 40.
40h = 01000000b
ah = x1xxxxxxb //7-ой бит должен быть равен единице(числа от 40h до 7Fh) для того чтобы флаг Z был равен нулю.

в test ah, 1
аh должен быть не чётным числом.

ЗЫ. ax это два правых байта еах-а т.е. ah и аl вместе.



Ранг: 1.9 (гость)
Активность: 0=0
Статус: Участник

Создано: 09 апреля 2006 13:59
· Личное сообщение · #3

Первый TEST AH,40 я прошел, там производится суммирование кодов набранных символов символов и сравнивается с числом 2203. у меня получилось что код должен быть 19 символов минимум (19 букв z(код 122) только во втором условии непонятно как подсчитывается число которое потом вычитается из 897.9972606000000 и должна получиться еденица. вот тут я никак и не могу подобрать



Ранг: 88.0 (постоянный)
Активность: 0.070
Статус: Участник

Создано: 09 апреля 2006 15:55
· Личное сообщение · #4

ilyuha
Выложи прогу куданибуть, а то по этому листингу я тебе ничего толкового сказать не могу.



Ранг: 1.9 (гость)
Активность: 0=0
Статус: Участник

Создано: 09 апреля 2006 20:40
· Личное сообщение · #5

rapidshare.de/files/17255653/RIP.exe.html



Ранг: 88.0 (постоянный)
Активность: 0.070
Статус: Участник

Создано: 10 апреля 2006 00:21
· Личное сообщение · #6

ilyuha
Не запускается без audiere.dll, лучше дай линк на то место откуда ты её скачал.



Ранг: 1.9 (гость)
Активность: 0=0
Статус: Участник

Создано: 10 апреля 2006 08:49
· Личное сообщение · #7

www.elephant-games.com/games/ripsb/exe/ripsb.exe - установочный весит 18 метров. Кстати пробовал nop ставить говорит регистрация успешна, игра запускается но через минуту говорит кончилось время. значит серийник как-то отключает и таймер



Ранг: 88.0 (постоянный)
Активность: 0.070
Статус: Участник

Создано: 10 апреля 2006 16:26 · Поправил: rep0A
· Личное сообщение · #8

ilyuha
Tы к этой проге подходишь не с той стороны. Обычно когда ты вводишь ключ проги его проверяют не до конца. Они могут проверять контрольную сумму, только первые 5 символов итд. И вот если эта проверка совпадает, то прога благодарит за регистрацию и записывает ключ в реестр. При старте она считывает его и проверяет по полной и только если ключ проходит эту проверку прога считает себя зареганой.

Расскажу ход моих мыслей:
При старте прога показывает окно, типа вот столько осталось до окончания триала. Понятно что этого окна в зареганой версии быть не должно. Поэтому загружаем прогу в ольку и ставим бряк на ShowWindow, брякнулись, теперь Alt+F9 (Execute till user code). Видим что появилось то окно, закрываем его и мы оказываемся в ольке. Mы видим что как минимум один прыжок перепрыгивает этот Call (по стрелке >), кликаем на 43E10A и видим что прыжок должен быть из 43E09C. Tагже мы видим что ещё один прыжок сверху может помешать прыгнуть нужному нам. Поэтому ставим бряк на 43Е083 и перезапускаем прогу.

Видим что он хочет прыгнуть и поэтому нопим его, доходим по F8 до следующего прыжка. А он какраз не хочет прыгать, поэтому делаем из jnz jmp. Идём дальше по F8 и доходим до вызова по адресу 43E12D. Интересно что наш ключ передаётся этой функции.
Mало ли чего нехорошего он хочет с ним натворить. Поэтому жмём на 43E121 правой мышкой->Follow in Dump->Immediate constant, выбираем в дампе(справа, снизу) первые четыре байта, жмём правок кнопкой мышки->Breakpoint->Hardware, on access->Dword и запускаем прогу по F9. Брякнулись и видим что он опять хочет поиздеваться над нашим ключиком. Mожно понажимать F8 но так как я ужасный лентяй, ставим бряк на знакомый test ah, 40 и F9. Опа, забыли убрать хардварный бряк, убираем его(Debug->Hardware breakpoints), опять F9 и мы стоим перед интересным прыжком. А что же этот прыжок перепрыгивает: какойто mov. Kак мне подсказывает моя фантазия это переменная отвечающая за зареганость. Поэтому нопим оба прыжка которые стремятся этот mov перепрыгнуть. Осталось только сохранить все изменения:
Copy to executabele->All modifications, нажимаем везде да, потом в появившемся окне правой кнопкой мышки и Save file. Закрываем ольку, открываем сломанный ексешник... и ураа мы купили игру! ;)

Надоже, аж минитутор написал.



Ранг: 1.9 (гость)
Активность: 0=0
Статус: Участник

Создано: 10 апреля 2006 18:58
· Личное сообщение · #9

Даа сложноват туториал для начинающего. я не понял как именно ты ставил бряки - через коммандную строку? что то както непонятно работает. Поэтому я не смог найти даже откуда взялся 43e10a. на 43е09с явно видно переход, а на первый адрес даже не могу понять где он



Ранг: 88.0 (постоянный)
Активность: 0.070
Статус: Участник

Создано: 11 апреля 2006 17:46
· Личное сообщение · #10

ilyuha
Просто нажимаешь на нужное место и F2.

Около адреса 43Е10А немного правее есть такая стрелка: ">". Это значит что какойто переход прыгает сюда. Если нажмёшь на 43Е10А, то увидишь адрес того перехода который может прыгать на 43E10А. Это и есть 43е09с.

Вообщем я имел в виду что переход по адресу 43Е09C перепрыгивает Call Еsi(показ триального окна) и поэтому нам нужно заставить его прыгать.



Ранг: 1.9 (гость)
Активность: 0=0
Статус: Участник

Создано: 12 апреля 2006 09:24
· Личное сообщение · #11

Окно вызывается как я понял в начале по адресу 477d91. именно туда я вываливаюсь после закрытия окна с бряком на showwindow. но перед ним нет перехода на 43е10а и как потом ставил бряк на test ah,40? их же целая куча в проге



Ранг: 88.0 (постоянный)
Активность: 0.070
Статус: Участник

Создано: 12 апреля 2006 14:58
· Личное сообщение · #12

ilyuha пишет:
перед ним нет перехода на 43е10а

Ну и правильно что нет, ты не там вываливаешься.

Может ты ставишь бряк на ShowWindow, потом шагаешь по F8 пока не появится окно, закрываешь его и оказываешься на 477D96. Так делать не надо.

А надо так:
Ставим бряк на ShowWindow, F9, брякнулись, Alt+F9, закрываем окно и мы на 43Е102.
Или ты всё так и делаешь?



Ранг: 1.9 (гость)
Активность: 0=0
Статус: Участник

Создано: 12 апреля 2006 17:54
· Личное сообщение · #13

Извини но что то не получается. Я делаю все в такой последовательности (сразу говорю оказывается в неправильной 1 - Search for \ intermodular calls. 2 Ставлю по f2 брейкпоинт на единственный Showwindow. 3 Запускааю по F9. запускается окно игры которое если закрыть то я просто возвращаюсь в ольку на непонятный адрес 7c90eb94 retn и все. Такое ощущение что то ли я бряк не на то ставлю то ли он не срабатывает.



Ранг: 88.0 (постоянный)
Активность: 0.070
Статус: Участник

Создано: 12 апреля 2006 20:10
· Личное сообщение · #14

аа, теперь я понял что ты имел ввиду
я не понял как именно ты ставил бряки - через коммандную строку?

я тогда не врубился, какие бряки ты имеешь в виду. Бряки на апи-функции я ставлю через плагин CommandBar(он в аттаче). Вводишь в нём например bp ShowWindow и он ставит бряк где надо(в самой длл где эта функция находится).


8975_12.04.2006_CRACKLAB.rU.tgz


 eXeL@B —› Вопросы новичков —› Помогите разобраться со взломом регистрации
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати