Исследование Крякмиса PTDS Crack_Me_#1

Перейти на главную страницу, индексную страницу.


Автор: V0ldemAr <v0ldemar@mail333.com>

Что нам понадобиться:

1)SI,TRW2k
2) MACM32 <--Его мона достать на wasm.ru
)Знание Асм.

И так, запускаем крякмис, видим что нужно ввести Имя и Пароль,
Имя: V0ldemAr
Пароль: 217198
Нажымаем Try, видим обычный MessageBox, видим "Неправильный Пароль :("
Тогда запускаем под отладчиком ставим бряк на:
bpx MessageBox
bpx MessageBoxA

Повторяем процедуру ввода Имени и Пароля, жмем Try.

Мы в отладчике в функ. MessageBoxA, выходим из функ. мы здесь:

:0040166B E834FC0200 Call 004312A4 <-Визов плохого Мессаджа.
:00401670 33C0 xor eax, eax
:00401672 8945C4 mov dword ptr [ebp-3C], eax
:00401675 EB0F jmp 00401686
Смотри чуть выше, и видим. Этот
:00401656 E849FC0200 Call 004312A4 <- Хороший Мессажд.
:0040165B EB13 jmp 00401670
:0040165D 6A40 push 00000040
:0040165F 689A264300 push 0043269A
:00401664 68206B4300 push 00436B20
:00401669 6A00 push 00000000

Смотрим дальше:
Похоже на проверку Пароля так как джамп по адрессу :00401646 7515 jne 0040165D <-Прыгает на наш плохой месадж если неравны, если поменять jne на je то программа всегда будет думать что пароль правильной, но этого нам ненужно нам нужна генерация Пароля.

Тогда будем искать место где прога читает наше Имя и Пароль: Делаем очистку бряков bc * Наново вводим Имя и Пароль.
Ставим бряк на: bpx GetWindowText bpx GetWindowTextA bpx GetDlgItemText bpx GetDlgItemTextA bpx GetDlgItem
Пробуем, ничего. Значит прога неисп. стандартные функ. Делаем примерно так: Очищаем бряки, и ставим новый бряк на bpx hMemCpy это всегда работает так как это бряк на копирование памяти.
Выходим из системных Dll-ok, нажымая несколько раз F12. Теперь мы здесь:
:0040154D 66C745E01400 mov [ebp-20], 0014
:00401553 8D45F8 lea eax, dword ptr [ebp-08]
:00401556 E86D020000 call 004017C8
:0040155B 8BD0 mov edx, eax
:0040155D FF45EC inc [ebp-14]
:00401560 8B4DCC mov ecx, dword ptr [ebp-34]
:00401563 8B81CC010000 mov eax, dword ptr [ecx+000001CC]
:00401569 E8AE900000 call 0040A61C
:0040156E 8D45F8 lea eax, dword ptr [ebp-08]
:00401571 8B55C4 mov edx, dword ptr [ebp-3C]
:00401574 E87F020000 call 004017F8 <-- Занесли наше Имя
:00401579 0FBE08 movsx ecx, byte ptr [eax] -- взяли 1-й символ Имени
:0040157C 334DC4 xor ecx, dword ptr [ebp-3C] -- за XOR-ли на 1 и потом 2-й
символ на 2 и т.д.
:0040157F 014DB8 add dword ptr [ebp-48], ecx -- Сложыли к какой то переменной.
:00401582 FF4DEC dec [ebp-14]
:00401585 8D45F8 lea eax, dword ptr [ebp-08]
:00401588 BA02000000 mov edx, 00000002
:0040158D E8E6DD0000 call 0040F378
:00401592 FF45C4 inc [ebp-3C]
:00401595 66C745E00800 mov [ebp-20], 0008
:0040159B 8D45FC lea eax, dword ptr [ebp-04]
:0040159E E825020000 call 004017C8
:004015A3 8BD0 mov edx, eax
:004015A5 FF45EC inc [ebp-14]
:004015A8 8B4DCC mov ecx, dword ptr [ebp-34]
:004015AB 8B81CC010000 mov eax, dword ptr [ecx+000001CC]

:004015B1 E866900000 call 0040A61C <-- Считали Имя :004015B6 8D45FC lea eax, dword ptr [ebp-04] :004015B9 8B55C4 mov edx, dword ptr [ebp-3C] :004015BC E837020000 call 004017F8 :004015C1 803800 cmp byte ptr [eax], 00 :004015C4 0F95C1 setne cl :004015C7 83E101 and ecx, 00000001 :004015CA 51 push ecx :004015CB FF4DEC dec [ebp-14] :004015CE 8D45FC lea eax, dword ptr [ebp-04] :004015D1 BA02000000 mov edx, 00000002 :004015D6 E89DDD0000 call 0040F378 <-- Чето делают , ага проверка конец ли Имени :004015DB 59 pop ecx :004015DC 85C9 test ecx, ecx :004015DE 0F8569FFFFFF jne 0040154D <-- Потом прыгают :004015E4 8B45CC mov eax, dword ptr [ebp-34] :004015E7 8B80CC010000 mov eax, dword ptr [eax+000001CC] :004015ED E8DA8F0000 call 0040A5CC <-- Считаем длинну Имени :004015F2 3345B8 xor eax, dword ptr [ebp-48] -- XOR-им переменную на длинну Имени :004015F5 F76DC4 imul [ebp-3C] -- и умножываем на длинна Имени + 1 вроде все! :004015F8 8945B8 mov dword ptr [ebp-48], eax :004015FB 66C745E02000 mov [ebp-20], 0020 :00401601 8D45F4 lea eax, dword ptr [ebp-0C] :00401604 E8BF010000 call 004017C8 :00401609 8BD0 mov edx, eax :0040160B FF45EC inc [ebp-14] :0040160E 8B4DCC mov ecx, dword ptr [ebp-34] :00401611 8B81D0010000 mov eax, dword ptr [ecx+000001D0] :00401617 E800900000 call 0040A61C :0040161C 8D45F4 lea eax, dword ptr [ebp-0C] :0040161F 8B00 mov eax, dword ptr [eax] :00401621 E8D6220200 call 004238FC <-- Наш Пароль :00401626 8945B4 mov dword ptr [ebp-4C], eax --Записали Пароль в переменную :00401629 FF4DEC dec [ebp-14] :0040162C 8D45F4 lea eax, dword ptr [ebp-0C] :0040162F BA02000000 mov edx, 00000002 :00401634 E83FDD0000 call 0040F378 <-- Что то темнят :00401639 8175B410024300 xor dword ptr [ebp-4C], 00430210 -- так а зачем XOR-ят наш пароль, надо бы зайти :00401640 8B4DB8 mov ecx, dword ptr [ebp-48] посмотреть, жмем F8 на этой функ. Ясно ничего там неделают, но темнят :) :00401643 3B4DB4 cmp ecx, dword ptr [ebp-4C] :00401646 7515 jne 0040165D :00401648 6A40 push 00000040 :0040164A 6899264300 push 00432699 :0040164F 681F6C4300 push 00436C1F :00401654 6A00 push 00000000
Все теперь понятно:

Берем 1-й символ имени XOR на 1
Берем 2-й символ имени XOR на 2
Берем 3-й символ имени XOR на 3
Берем 4-й символ имени XOR на 4
...............................
Сумму этого всего XOR на длинну Имени и умножаем на счетчик который будет длинна Имени + 1.
И теперь это все XOR на 00430210h, интересно что это за число, но нам то все равно.
Все теперь можна слать письмо vallkor-у чтобы он вас принял в команду.
ЗЫЖ Кстати, при вводе Имени меньше 6-ти символов ничего непрыисходит, вот только я это нигде ненашол ну и ...
А вот исходник на МАСМЕ:
----------------start  *.asm----------------------
.386
.model flat,stdcall
option casemap :none


	include \masm32\include\windows.inc
      include \masm32\include\user32.inc
      include \masm32\include\kernel32.inc
      includelib \masm32\lib\user32.lib
      includelib \masm32\lib\kernel32.lib


szText MACRO Name, Text:VARARG
         LOCAL lbl
          jmp lbl
          Name db Text,0
          lbl:
          ENDM

WndProc   PROTO :DWORD,:DWORD,:DWORD,:DWORD


.DATA
hWnd        dd 0
hEdit1      dd 0
hEdit2      dd 0
hButn1      dd 0
hButn2      dd 0
hInstance   dd 0
dlgname     db "DLG_0100",0
CONV 		db 	"%lu",0
ZSTRLEN 	db 	"Input 6 char or more",0

.CODE
start:

invoke GetModuleHandle, NULL
mov hInstance, eax


invoke DialogBoxParam,hInstance,100,0,ADDR WndProc,0
invoke ExitProcess,eax

WndProc proc hWin :DWORD,uMsg :DWORD,wParam :DWORD,lParam:Dword

LOCAL		STRLEN[255]	:BYTE
LOCAL		OUTLEN[255]	:BYTE

LOCAL		NLEN		:DWORD
LOCAL		SN			:DWORD

.if uMsg == WM_INITDIALOG


	  mov eax, hWin
        mov hWnd, eax


	  invoke GetDlgItem,hWin,101
        mov hEdit1, eax


        invoke GetDlgItem,hWin,102
        mov hEdit2, eax


	  invoke GetDlgItem,hWin,105
        mov hButn1, eax

        invoke GetDlgItem,hWin,106
        mov hButn2, eax

.elseif uMsg == WM_COMMAND

.if wParam == 105

  invoke GetWindowText,hEdit1,ADDR STRLEN,40

		cmp eax, 06h
		jl @@zn

		mov			NLEN,	eax


		xor 		ebx,	ebx
		xor			edx,	edx
		mov			ecx,	1
		lea			eax,	STRLEN
@@R:
		mov			bl,		[eax]
		xor			ebx,	ecx
		add			edx,	ebx
		inc			ecx
		inc			eax
		cmp			ecx,	NLEN
		jle			@@R

		xor			edx,	NLEN
		imul		edx, 	ecx
		xor			edx,	430210h



invoke wsprintf,ADDR OUTLEN,ADDR CONV,edx
invoke SetWindowText,hEdit2,ADDR OUTLEN
	jmp @@end

@@zn:
	invoke SetWindowText,hEdit2,Addr ZSTRLEN


@@end:
.elseif wParam == 106
jmp @@exit


.endif
.elseif uMsg == WM_CLOSE


@@exit:
invoke EndDialog,hWin,0
.endif
	xor eax, eax
    	ret


WndProc endp

end start

----------------------end start  *.asm---------------

-----------------start *.rc--------------------------

#include "\masm32\include\resource.h"


100 DIALOGEX 127, 114, 229, 42
STYLE DS_MODALFRAME | DS_CENTER | WS_VISIBLE | WS_CAPTION | WS_SYSMENU

CAPTION "PTDS_KGEN_CRK_ME_#1"
FONT 8, "Helv"
BEGIN
    EDITTEXT        101, 31, 7, 132, 12, ES_AUTOHSCROLL
    EDITTEXT        102, 31, 24, 132, 12, ES_AUTOHSCROLL
    LTEXT           "Code:", 103, 5, 25, 20, 12
    LTEXT           "Name:", 104, 5, 9, 20, 12
    PUSHBUTTON      "Gen", 105, 172, 2, 52, 15, BS_FLAT
    PUSHBUTTON      "Exit", 106, 172, 25, 52, 15, BS_FLAT
END


-----------------end start  *.rc---------------------

Все вопросы на
mail: v0ldemar@mail333.com

Дата написания: 19.06.2003 или раньше.
ЗЫЖ И кстати Vallkor это уже видел.


Материалы находятся на сайте http://cracklab.narod.ru/doc/






Hosted by uCoz