Нашел я в интернете книжонку в экзешнике. На ней стоит пароль. Похоже на первый взгляд на какойто буржуйский платный пакер с паролем. Я чайник в вскрытии всяких защит. Обращаюсь к вам чтоб помогли что надо делать. Вот ссылка http://biznes-i-rabota.narod.ru/texnologiya.exe Заранее благодарен!
Спасибо, интересная книга. Эта софтина на дельфях писана, дельфи говно и как следствие защита тоже. Вобщем чтобы открыть у меня ушло минут 10. Не разбералсо в том, как преобразуется код, я сделол так. Код (Text): 00478698 /. 55 push ebp 00478699 |. 8BEC mov ebp,esp 0047869B |. 6A 00 push 0 0047869D |. 6A 00 push 0 0047869F |. 53 push ebx 004786A0 |. 8BD8 mov ebx,eax 004786A2 |. 33C0 xor eax,eax 004786A4 |. 55 push ebp 004786A5 |. 68 FA864700 push texnolog.004786FA 004786AA |. 64:FF30 push dword ptr fs:[eax] 004786AD |. 64:8920 mov dword ptr fs:[eax],esp 004786B0 |. 8D55 FC lea edx,dword ptr [ebp-4] 004786B3 |. 8BC3 mov eax,ebx 004786B5 |. 8B08 mov ecx,dword ptr [eax] 004786B7 |. FF91 E0000000 call dword ptr [ecx+E0] 004786BD |. 8B45 FC mov eax,dword ptr [ebp-4] 004786C0 |. 50 push eax 004786C1 |. 8D55 F8 lea edx,dword ptr [ebp-8] 004786C4 |. 8BC3 mov eax,ebx 004786C6 |. 8B08 mov ecx,dword ptr [eax] 004786C8 |. FF91 E4000000 call dword ptr [ecx+E4] 004786CE |. 8B45 F8 mov eax,dword ptr [ebp-8] 004786D1 |. 8B8B F8020000 mov ecx,dword ptr [ebx+2F8] 004786D7 |. 5A pop edx 004786D8 |. E8 1FF7FFFF call texnolog.00477DFC ;EAX 00AFBB58 ASCII "6219769942" ;ECX 00AF5658 ASCII "mn2a92d3ya4ih7" ;EDX 00AF9F1C ASCII "10203040" ;Стек: 0012F990 00AF8584 ASCII "[l>e<7`?{" 004786DD |. 8BD8 mov ebx,eax 004786DF |. 33C0 xor eax,eax 004786E1 |. 5A pop edx 004786E2 |. 59 pop ecx 004786E3 |. 59 pop ecx 004786E4 |. 64:8910 mov dword ptr fs:[eax],edx 004786E7 |. 68 01874700 push texnolog.00478701 004786EC |> 8D45 F8 lea eax,dword ptr [ebp-8] 004786EF |. BA 02000000 mov edx,2 004786F4 |. E8 CFB4F8FF call texnolog.00403BC8 004786F9 \. C3 ret Далее юзаетсо кодес который строки разбирает: Код (Text): 00477C94 /$ 55 push ebp 00477C95 |. 8BEC mov ebp,esp 00477C97 |. 83C4 E0 add esp,-20 00477C9A |. 53 push ebx 00477C9B |. 56 push esi 00477C9C |. 57 push edi 00477C9D |. 33DB xor ebx,ebx 00477C9F |. 895D E0 mov dword ptr [ebp-20],ebx 00477CA2 |. 895D E4 mov dword ptr [ebp-1C],ebx 00477CA5 |. 895D E8 mov dword ptr [ebp-18],ebx 00477CA8 |. 8BF9 mov edi,ecx 00477CAA |. 8955 F8 mov dword ptr [ebp-8],edx 00477CAD |. 8945 FC mov dword ptr [ebp-4],eax 00477CB0 |. 8B45 FC mov eax,dword ptr [ebp-4] 00477CB3 |. E8 20C3F8FF call texnolog.00403FD8 00477CB8 |. 8B45 F8 mov eax,dword ptr [ebp-8] 00477CBB |. E8 18C3F8FF call texnolog.00403FD8 00477CC0 |. 33C0 xor eax,eax 00477CC2 |. 55 push ebp 00477CC3 |. 68 ED7D4700 push texnolog.00477DED 00477CC8 |. 64:FF30 push dword ptr fs:[eax] 00477CCB |. 64:8920 mov dword ptr fs:[eax],esp 00477CCE |. 837D FC 00 cmp dword ptr [ebp-4],0 00477CD2 |. 74 6F je short texnolog.00477D43 00477CD4 |. BB 01000000 mov ebx,1 00477CD9 |. 8D75 EF lea esi,dword ptr [ebp-11] 00477CDC |> 8B45 FC /mov eax,dword ptr [ebp-4] 00477CDF |. E8 40C1F8FF |call texnolog.00403E24 00477CE4 |. 50 |push eax 00477CE5 |. 8BC3 |mov eax,ebx 00477CE7 |. 48 |dec eax 00477CE8 |. 5A |pop edx 00477CE9 |. 8BCA |mov ecx,edx 00477CEB |. 99 |cdq 00477CEC |. F7F9 |idiv ecx 00477CEE |. 8B45 FC |mov eax,dword ptr [ebp-4] 00477CF1 |. 8A0410 |mov al,byte ptr [eax+edx] 00477CF4 |. 50 |push eax 00477CF5 |. 8B45 FC |mov eax,dword ptr [ebp-4] 00477CF8 |. E8 27C1F8FF |call texnolog.00403E24 00477CFD |. 5A |pop edx 00477CFE |. 32D0 |xor dl,al 00477D00 |. 32D3 |xor dl,bl 00477D02 |. 8816 |mov byte ptr [esi],dl 00477D04 |. 43 |inc ebx 00477D05 |. 46 |inc esi 00477D06 |. 83FB 0A |cmp ebx,0A 00477D09 |.^ 75 D1 \jnz short texnolog.00477CDC 00477D0B |. 8B45 FC mov eax,dword ptr [ebp-4] 00477D0E |. E8 11C1F8FF call texnolog.00403E24 00477D13 |. 8BF0 mov esi,eax 00477D15 |. 85F6 test esi,esi 00477D17 |. 7E 2A jle short texnolog.00477D43 00477D19 |. BB 01000000 mov ebx,1 00477D1E |> 8B45 FC /mov eax,dword ptr [ebp-4] 00477D21 |. E8 FEC0F8FF |call texnolog.00403E24 00477D26 |. 2BC3 |sub eax,ebx 00477D28 |. 8B55 FC |mov edx,dword ptr [ebp-4] 00477D2B |. 8A0C02 |mov cl,byte ptr [edx+eax] 00477D2E |. 8BC3 |mov eax,ebx 00477D30 |. 48 |dec eax 00477D31 |. 51 |push ecx 00477D32 |. B9 09000000 |mov ecx,9 00477D37 |. 99 |cdq 00477D38 |. F7F9 |idiv ecx 00477D3A |. 59 |pop ecx 00477D3B |. 304C15 EF |xor byte ptr [ebp+edx-11],cl 00477D3F |. 43 |inc ebx 00477D40 |. 4E |dec esi 00477D41 |.^ 75 DB \jnz short texnolog.00477D1E 00477D43 |> 837D F8 00 cmp dword ptr [ebp-8],0 00477D47 |. 74 39 je short texnolog.00477D82 00477D49 |. BB 01000000 mov ebx,1 00477D4E |. 8D75 EF lea esi,dword ptr [ebp-11] 00477D51 |> 8B45 F8 /mov eax,dword ptr [ebp-8] 00477D54 |. E8 CBC0F8FF |call texnolog.00403E24 00477D59 |. 50 |push eax 00477D5A |. 8BC3 |mov eax,ebx 00477D5C |. 48 |dec eax 00477D5D |. 5A |pop edx 00477D5E |. 8BCA |mov ecx,edx 00477D60 |. 99 |cdq 00477D61 |. F7F9 |idiv ecx 00477D63 |. 8B45 F8 |mov eax,dword ptr [ebp-8] 00477D66 |. 8A0410 |mov al,byte ptr [eax+edx] 00477D69 |. 3206 |xor al,byte ptr [esi] 00477D6B |. 50 |push eax 00477D6C |. 8B45 F8 |mov eax,dword ptr [ebp-8] 00477D6F |. E8 B0C0F8FF |call texnolog.00403E24 00477D74 |. 5A |pop edx 00477D75 |. 32D0 |xor dl,al 00477D77 |. 32D3 |xor dl,bl 00477D79 |. 8816 |mov byte ptr [esi],dl 00477D7B |. 43 |inc ebx 00477D7C |. 46 |inc esi 00477D7D |. 83FB 0A |cmp ebx,0A 00477D80 |.^ 75 CF \jnz short texnolog.00477D51 00477D82 |> 8D45 E8 lea eax,dword ptr [ebp-18] 00477D85 |. E8 1ABEF8FF call texnolog.00403BA4 00477D8A |. BB 09000000 mov ebx,9 00477D8F |. 8D75 EF lea esi,dword ptr [ebp-11] 00477D92 |> 8D45 E4 /lea eax,dword ptr [ebp-1C] 00477D95 |. 8A16 |mov dl,byte ptr [esi] 00477D97 |. E8 B0BFF8FF |call texnolog.00403D4C 00477D9C |. 8B55 E4 |mov edx,dword ptr [ebp-1C] 00477D9F |. 8D45 E8 |lea eax,dword ptr [ebp-18] 00477DA2 |. E8 85C0F8FF |call texnolog.00403E2C 00477DA7 |. 46 |inc esi 00477DA8 |. 4B |dec ebx 00477DA9 |.^ 75 E7 \jnz short texnolog.00477D92 00477DAB |. 8D55 E0 lea edx,dword ptr [ebp-20] 00477DAE |. 8B45 E8 mov eax,dword ptr [ebp-18] 00477DB1 |. E8 9AFDFFFF call texnolog.00477B50 ;Стек: ;0012F97C 00AF5658 ASCII "mn2a92d3ya4ih7" ;0012F980 00AF9F1C ASCII "10203040" ;0012F984 00AFBB58 ASCII "6219769942" ;0012F988 00AFA9F0 ASCII "S+z1TBz0LG83" ;0012F990 00AF8584 ASCII "[l>e<7`?{" 00477DB6 |. 8B55 E0 mov edx,dword ptr [ebp-20] 00477DB9 |. 8BC7 mov eax,edi 00477DBB |. B9 FF000000 mov ecx,0FF 00477DC0 |. E8 3BC0F8FF call texnolog.00403E00 ;EDX 00AFA9F0 ASCII "S+z1TBz0LG83" 00477DC5 |. 33C0 xor eax,eax 00477DC7 |. 5A pop edx 00477DC8 |. 59 pop ecx 00477DC9 |. 59 pop ecx 00477DCA |. 64:8910 mov dword ptr fs:[eax],edx 00477DCD |. 68 F47D4700 push texnolog.00477DF4 00477DD2 |> 8D45 E0 lea eax,dword ptr [ebp-20] 00477DD5 |. BA 03000000 mov edx,3 00477DDA |. E8 E9BDF8FF call texnolog.00403BC8 00477DDF |. 8D45 F8 lea eax,dword ptr [ebp-8] 00477DE2 |. BA 02000000 mov edx,2 00477DE7 |. E8 DCBDF8FF call texnolog.00403BC8 00477DEC \. C3 ret На выходе этой процедуры в регистре Edi пароль, в моём случае - "S+z1TBz0LG83".
Огромное спасибо, что уделили время! Но я в ассеблере не силен(. Мнеб как полному чайнику сказать что сделать чтоб она открылась).
divirr Чувак, а что ты еще хотел услышать? Ты попал на форум по низкоуровневому программированию на ассемблере. Это так, для справки ))
divirr в 95% случаев достаточно немного терпения + старания и гугл выдаёт бесплатный вариант платной книги
CrystalIC, работает! ) Мне вот интересно, как именно анализировался код в данном случае, ну то есть какие предположения легли в основу решения? Отладчиком вроде пользоваться умею, а вот думать в направлении поиска и обхода даже простой защиты не умею... туплю. Начало статей по OllyDdg прочитал. Достаточно ли этих статей для начала, для взлома такой штуки как эта? divirr Я открыл программу в OllyDdg, в окне CPU перешел (Ctrl+G) по адресу 00477DEC (мог быть и по другому адресу ведь), там действительно заканчивалась процедура. Поставил я на этом месте BreakPoint (F2) и запустил (F9). Программа в этой точке остановилась, рядом с регистром EDI (правая часть окна CPU) показан пароль. В моем случае он был SSQrTGqzLBW6
Принцип в том, что если я ввожу пароль, то для его анализа используются винапи. Короче, сканим память на введённый пароль. Найдёт два адреса. Один из них нормально gdi юзаетсо, типа GetWindowText() и тп. Второй уже оказываетсо в памяти собственно кода, разбирающего эту строку. Далее ставим HB на этот адрес и смотрим откуда к нему вызов. Останов произойдет, далее недолгая трассировка и мы находим ту процедуру, которая строку разбирает. Вобщем просто очень. Не знаю, я это не читал.