************************************************
************************************************

Unfortunately, this site has restricted functionality as this browser does not support the HTML button formaction attribute.

Unfortunately, this site has restricted functionality as this browser has HTML web storage turned off.

20 of 53 files hard to beat team
  • Zip - Windows / Computer tool
  • FiNS, program credits
6 items in the archive
  • fins.ico
  • keygen.asm
  • keygen.exe
  • keygen.rc
  • makeit.bat
  • tutorial.txt
[+] Configuration Copy text
___ ___ ___ ___ ___ ___ ___ / /\ /__/\ / /\ /__/\ / /\ / /\ / /\ / /:/ \ \:\ / /::\ \ \:\ / /::\ / /::\ / /::| / /:/ \ \:\ / /:/\:\ \ \:\ / /:/\:\ / /:/\:\ / /:|:| / /::\ ___ \__\:\ / /::\ \:\ \__\:\ / /::\ \:\ / /::\ \:\ / /:/|:|__ /__/:/\:\ /\ / /::\/__/:/\:\ \:\ / /::\/__/:/\:\ \:/__/:/\:\_\:/__/:/_|::::\ \__\/ \:\/:// /:/\:\ \:\ \:\/:// /:/\:\ \:\ \:\_\\__\/ \:\/:\__\/ /~~/:/ \__\::// /:/\ \:\ \:\ \::// /:/\ \:\ \:\ \:\ \__\::/ / /:/ / /:// /:/ \_\/\ \:\/:// /:/ \_\/\ \:\_\/ / /:/ / /:/ /__/://__/:/ \ \:://__/:/ \ \:\ /__/:/ /__/:/ \__\/ \__\/ \__\/ \__\/ \__\/ \__\/ \__\/ www.htb.team.prv.pl Title: [Tworzymy.pierwszego.keygena........................................] Topic: [Coding.............................................................] Author: [FiNS.......................] E-mail: [[email protected]...............] Packager: [FiNS.......................] Date: [2003.......................] D O N ' T T R Y T O B E A T U S ! _______________________________________________________________________________ 1. WstΩp Jak siΩ pewnie domyœlasz, ten tekst jest o tworzeniu keygen≤w. PiszΩ go z myœl╣ o pocz╣tkuj╣cych, kt≤rzy czΩsto nie wiedz╣ jak siΩ do tego zabra╡. Je┐eli nie masz z tym ┐adnych problem≤w, to raczej nie dowiesz siΩ niczego nowego z tego tutka. D│ugo myœla│em do czego by tu zrobi╡ tego keygena i doszed│em do wniosku, ┐e na pocz╣tek nale┐y wzi╣╡ coœ prostego. Poszuka│em na dysku i znalaz│em: CrackMe2 by massh^CookieCrK. Bardzo proœciutkie CrackMe generuj╣ce seriala na podstawie nicka i r≤wnoczeœnie pierwsze CrackMe tego typu, kt≤re z│ama│em :), mi│o powspomina╡. Ale dobra, koniec tego glΩdzenia i zabieramy siΩ do roboty. 2. Zabezpieczenie Pewnie z│amiesz to szybko i bez ┐adnych problem≤w. Prog u┐ywa GetWindowTextA, a najwa┐niejsze instrukcje znajduj╣ siΩ w tym callu: 0040117D CALL 00401261 Jest tam taki kod: 00401261 MOV EAX,[00402060] 00401266 CMP [00402064],EAX ;d│ugoœ╡ name i serial 0040126C JNZ 0040129D ;musi by╡ taka sama 0040126E XOR EAX,EAX 00401270 MOV EDI,[ESP+04] ;adres name do edi 00401274 MOV ESI,[ESP+08] ;adres seriala do esi 00401278 MOVZX EBX,BYTE PTR [EDI] ;bajt z name do ebx 0040127B MOVZX EDX,BYTE PTR [ESI] ;bajt z seriala do esi 0040127E CMP DL,30 00401281 JL 0040129D 00401283 CMP DL,39 00401286 JG 0040129D ;czy serial sk│ada siΩ z liczb 00401288 SUB DL,30 0040128B AND EBX,0F ;obrabianie litery z name 0040128E SHR BL,1 00401290 SUB BL,DL ;litera po przer≤bce musi by╡ 00401292 JNZ 0040129D ;taka sama jak cyfra z seriala 00401294 INC EDI 00401295 INC ESI 00401296 CMP BYTE PTR [EDI],00 ;powtarzaj ze 00401299 JNZ 00401278 ;wszystkimi znakami 0040129B JMP 004012A1 0040129D XOR EAX,EAX 0040129F JMP 004012A6 004012A1 MOV EAX,00000001 004012A6 RET Poprawny serial dla mojego name to 3471. Jak wida╡ 1 cyfra seriala odpowiada 1 literze z name. Teraz wiemy jak generowany jest serial, wiΩc pora zabra╡ siΩ za keygena... 3. Algo obliczaj╣ce seriala Na pocz╣tku opracujemy algorytm generuj╣cy seriala (w tym przypadku 1 min :)), a p≤Ÿniej napiszemy resztΩ kodu. Za│≤┐my, ┐e w DL mamy literΩ z name. Aby znaleŸ╡ cyfrΩ z seriala odpowiadaj╣c╣ tej literze, mo┐emy u┐y╡ takiego kodu: and edx, 0Fh shr edx, 1 add edx, 30h Trzeba to zmodyfikowa╡ tak, aby zastosowa╡ to do ka┐dej litery z nicka. Ca│oœ╡ wygl╣da tak: mov ebx, offset serial ;tu zapiszemy wygenerowanego seriala mov eax, offset myname ;tu jest nasze name nastepny: movzx edx, byte ptr [eax] ;litera z name do edx and edx, 0Fh ;obrabianie name shr edx, 1 add edx, 30h mov [ebx], dl ;kolejne cyfry seriala id╣ do ebx inc eax inc ebx cmp byte ptr [eax], 0 ;sprawdŸ czy koniec name jne nastepny ;jeœli nie to obr≤b nastΩpn╣ literΩ Ten kod bΩdzie najwa┐niejsz╣ czΩœci╣ naszego proga. 4. Wygl╣d keygena Teraz musimy zabra╡ siΩ za okienko dialogowe. Najpierw zrobimy plik z zasobami, kt≤ry odpowiada za jego wygl╣d. Mo┐e bawi│eœ siΩ kiedyœ programikiem takim jak Restorator, czy Resource Hacker. Pozwalaj╣ one zmienia╡ wygl╣d innych prog≤w, a nam mog╣ nieco u│atwi╡ ustalenie wygl╣du okna keygena. Ja u┐ywam tych dw≤ch prog≤w o kt≤rych wspomnia│em wczeœniej i polecam je r≤wnie┐ tobie. Jak chcesz zmienia╡ wygl╣d okna to odpalasz ResHackera i │adujesz jakiœ programik kt≤ry jest okienkiem dialogowym, np. calc.exe. Klikasz np. na Dialog i na 104. Na pocz╣tku wywalasz wszystko co jest w tym oknie. P≤Ÿniej klikasz prawym na puste okno i ustawiasz jego w│aœciwoœci w "Edit Dialog". P≤Ÿniej znowu prawym na puste okno i "Insert control". Tu mo┐esz dodawa╡ przyciski, pola edycyjne i inne bajery. Rozmiary kontrolek i okna zmieniasz myszk╣, rozci╣gaj╣c to co chcesz do odpowiednich rozmiar≤w. Jak ju┐ wszystko pozmieniasz to zapisujesz to okno w pliku res. P≤Ÿniej w Restoratorze mo┐esz to sobie zamieni╡ na rc i jeszcze wprowadzi╡ jakieœ zmiany. Nie polecam zapisywania zasob≤w w ResHackerze do plik≤w rc, bo nie s╣ one kompatybilne z masm32, w│aœnie dlatego przydaje siΩ Restorator, kt≤ry generuje pliki rc kompatybilne z tym kompilatorem. W│aœciwie to ResHacker nie jest wcale potrzebny, bo wszystko mo┐na zrobi╡ w drugim progu, ale mi siΩ wydaje, ┐e ResHacker jest wygodniejszy w obs│udze. Wyb≤r pozostawiam tobie. Jak chcesz, to mo┐esz wcale nie u┐ywa╡ tego typu prog≤w. Ja u│atwiam ci sprawΩ i daje gotowy plik rc z opisem zasob≤w do naszego keygena. Wygl╣da on tak: #include <c:\masm32\include\resource.h> 10 DIALOGEX 11, 11, 213, 74, 0 STYLE DS_SETFONT | DS_SETFOREGROUND | DS_CENTER | WS_MINIMIZEBOX | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "CrackMe2 by massh^CookieCrK - keygen" FONT 8, "MS SANS SERIF" { GROUPBOX "", 0, 2, -1, 209, 72 EDITTEXT 100, 6, 16, 201, 12, NOT WS_BORDER | WS_GROUP, WS_EX_STATICEDGE EDITTEXT 101, 6, 38, 201, 12, ES_READONLY | NOT WS_BORDER | WS_GROUP, WS_EX_STATICEDGE CTEXT "Name:", 309, 6, 7, 22, 8 CTEXT "Serial:", 309, 5, 29, 22, 8 PUSHBUTTON "&Generate", 1, 6, 55, 44, 12, BS_CENTER | WS_GROUP, WS_EX_STATICEDGE PUSHBUTTON "&About", 103, 55, 55, 44, 12, BS_CENTER | WS_GROUP, WS_EX_STATICEDGE PUSHBUTTON "&Exit", 104, 104, 55, 44, 12, BS_CENTER | WS_GROUP, WS_EX_STATICEDGE LTEXT "Created by FiNS", 0, 154, 56, 53, 10, WS_DISABLED } 30 ICON "fins.ico" IkonkΩ daj tak╣ jak╣ masz i zmie▒ tu jej nazwΩ. Popraw te┐ œcie┐kΩ do kompilatora (je┐eli jest taka potrzeba). Ca│oœ╡ zapisz w pliku o nazwie np. keygen.rc. To by by│o na tyle w sprawie wygl╣du naszego proga. 5. Piszemy kod Otw≤rz sobie dowolny edytor tekstu np. notepad albo Quick Editor do│╣czony do masma i napisz to, co zwykle jest na pocz╣tku proga: .486 .model flat, stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\user32.inc include \masm32\include\gdi32.inc includelib \masm32\lib\kernel32.lib includelib \masm32\lib\user32.lib includelib \masm32\lib\gdi32.lib I jeszcze sekcjΩ .const: .const DIALOG_ID =10 ICON_ID =30 EDITN_ID =100 EDITS_ID =101 GENERATE_ID =1 ABOUT_ID =103 EXIT_ID =104 W│aœciwie to deklaracja sta│ych nie jest konieczna, ale to bardzo u│atwia dalsze pisanie. Nie musisz pamiΩta╡ liczb tylko nazwy, kt≤re sam nadajesz. DziΩki temu, ┐e przycisk Generate ma ID=1, to naciœniΩcie entera zadzia│a tak, jakbyœmy nacisnΩli w│aœnie ten przycisk. Mam nadziejΩ, ┐e wiesz, o co mi chodzi. Teraz piszemy sekcje z danymi: .data? hInstance dd 4 dup (?) myname db 64 dup (?) serial db 64 dup (?) .data tytulmsgbox db 'About',0 tekstmsgbox db 'CrackMe2 by massh^CookieCrK - keygen',13,10 db ' ',13,10 db 'Created by:',13,10 db 'FiNS - [email protected]',0 hInstance jest nam potrzebne do utworzenia okienka dialogowego. Do myname bΩdziemy pobiera╡ podanego nicka, a w serial zapisywa╡ wygenerowany numerek. Po klikniΩciu na About bΩdzie siΩ pokazywa╡ messagebox z infem z sekcji .data. To wszystkie dane jakie s╣ nam potrzebne. Mo┐emy ju┐ przyst╣pi╡ do pisania kodu: .code start: push 0 call GetModuleHandleA mov hInstance, eax push 0 push offset DlgProc push 0 push DIALOG_ID push hInstance call DialogBoxParamA push 0 call ExitProcess Je┐eli nie pisa│eœ wczeœniej ┐adnego proga, to mo┐e teraz pomyœlisz, ┐e coœ ten ExitProcess za szybko. Nie ma niczego, co by generowa│o seriala, w│aœciwie to niczego nie ma. Tak naprawdΩ wszystko dzieje siΩ w DlgProc, kt≤r╣ zaraz napiszemy. DlgProc proc uses esi edi ebp ebx, hDlg:DWORD, uMsg:DWORD, wParam:DWORD, lParam:DWORD ;...tu bΩdziemy pisa╡ resztΩ kodu... powrot: xor eax, eax ret DlgProc endp end start Je┐eli w tej chwili masz zrobione wszystko, co opisa│em do tej pory, to mo┐esz zapisa╡ obecny kod w pliku np. keygen.asm (proponujΩ da╡ tak╣ sam╣ nazwΩ jak╣ da│eœ plikowi .rc) i skompilowa╡ ca│oœ╡. W tej chwili nasz prog powinien siΩ ju┐ uruchomi╡, ale nic nie bΩdzie robi│, nawet nie bΩdzie siΩ go da│o normalnie zamkn╣╡, jedynie przez ctrl+alt+del. Warto jednak zobaczy╡ jak wygl╣da i czy rzeczywiœcie siΩ uruchamia (bΩdziesz wiedzia│, czy czegoœ nie namiesza│eœ po drodze :)). Ca│oœ╡ moim skromnym zdaniem najlepiej kompilowa╡ plikiem wsadowym makeit.bat, kt≤ry zawiera takie instrukcje: set file=keygen \masm32\bin\rc /v %file%.rc \masm32\bin\ml /c /coff /Cp %file%.asm \masm32\bin\link.exe /SUBSYSTEM:WINDOWS /LIBPATH:\masm32\lib %file%.obj %file%.res del *.obj del *.res %file%.exe Je┐eli musisz, to popraw œcie┐kΩ do masma i nazwΩ pliku (tu: "keygen"). Jeœli prog siΩ nie kompiluje, to sprawdŸ, czy nie znalaz│o ci jakichœ b│Ωd≤w przy kompilacji. Jak znalaz│o, to przeczytaj w kt≤rej lini, por≤wnaj z tym co ja tu napisa│em i popraw b│╣d. Zak│adam, ┐e wszystko siΩ uda│o i program jest w│╣czony. Mo┐esz siΩ napatrze╡ i posprawdza╡ jak wszystko dzia│a (a raczej jak nie dzia│a ;)) Zamknij keygena i wracamy do pisania kodu. Ustaw kursor linijkΩ przed retem, w miejscu gdzie napisa│em ;...tu bΩdziemy... (chyba nie muszΩ m≤wi╡, ┐e to masz usun╣╡) i piszemy w tym miejscu taki kod: cmp uMsg, WM_INITDIALOG jz initdlg cmp uMsg, WM_CLOSE jz close cmp uMsg, WM_COMMAND jz wmcommand cmp uMsg, WM_MOUSEMOVE je move Nie wiesz, co to jest? Nie przejmuj siΩ, bo ja te┐ nie wiem ;) a tak na serio, to tu jest sprawdzane zdarzenie jakie zosta│o wykonane (np. czy klikniΩto na przycisk Generate itp.). WM_INITDIALOG wykonuje siΩ podczas w│╣czania okienka. BΩdzie nam potrzebne, bo my chcemy mie╡ na pasku tytu│owym nasz╣ ikonkΩ, a nie jakiœ œmie╡ z wina. WM_CLOSE s│u┐y do zamykania proga. WM_COMMAND to np. naciœniΩcie jakiegoœ przycisku. WM_MOUSEMOVE pos│u┐y nam do zrobienia takiej ma│ej i fajnej rzeczy, mianowicie bΩdziemy mogli porusza╡ oknem │api╣c je w dowolnym miejscu (poza przyciskami i polem edit), a nie tylko za pasek tytu│owy. Po tych instrukcjach zostawiamy naszego xora i reta, a za nim piszemy dalszy kod: initdlg: push ICON_ID push hInstance call LoadIconA push eax push 1 push WM_SETICON push hDlg ;ten kod wrzuca nasz╣ call SendMessageA ;ikonkΩ na pasek tytu│owy jmp powrot close: push 0 push hDlg call EndDialog ;zamykanie okna jmp powrot move: cmp wParam, 1 je moveform jmp powrot moveform: call ReleaseCapture push 0 push 0F012h push WM_SYSCOMMAND push hDlg ;poruszanie oknem, call SendMessageA ;o kt≤rym m≤wi│em wczeœniej jmp powrot wmcommand: cmp wParam, GENERATE_ID jz go cmp wParam, ABOUT_ID jz about cmp wParam, EXIT_ID ;sprawdza czy naciœniΩto jz close ;kt≤ryœ z przycisk≤w jmp powrot about: push MB_ICONINFORMATION push offset tytulmsgbox push offset tekstmsgbox push hDlg call MessageBoxA ;wyœwietlanie okienka about jmp powrot Teraz jest najwa┐niejsza czΩœ╡ proga. Wykonuje siΩ ona po naciœniΩciu Generate lub entera. Jej g│≤wn╣ czΩœ╡ napisaliœmy ju┐ wczeœniej, w trzecim punkcie. Teraz dodajemy przed ni╣ pobranie tekstu z pierwszego pola edit i wpisanie wyniku do drugiego, nieaktywnego pola edit. go: push 255 push offset myname push EDITN_ID push hDlg call GetDlgItemTextA ;pobieranie name test eax, eax ;czy coœ wpisano jz koniec ;jeœli nie to nie obliczaj cmp eax, 64 ;nasze name nie mo┐e by╡ wiΩksze jge koniec ;ani r≤wne ni┐ 64 znaki ;je┐eli by tego nie by│o, a user wpisa│by ;za d│ugiego nicka, to program by siΩ wiechn╣│ mov ebx, offset serial ;algorytm obliczaj╣cy seriala mov eax, offset myname ;by│ on opisany wczeœniej nastepny: movzx edx, byte ptr [eax] and edx, 0Fh shr edx, 1 add edx, 30h mov [ebx], dl inc eax inc ebx cmp byte ptr [eax], 0 jne nastepny xor eax, eax mov [ebx], eax push offset serial push EDITS_ID push hDlg ;wpisz wygenerowanego call SetDlgItemTextA ;seriala do pola edit koniec: jmp powrot DlgProc endp ;jak ju┐ to masz, to nie pisz drugi raz end start To by by│o na tyle. W│aœnie sko▒czy│eœ pisa╡ swojego pierwszego keygena :D Pewnie siΩ cieszysz, ja te┐. Chyba nie by│o to wcale takie trudne :) Teraz mo┐esz to skompilowa╡ i wypr≤bowa╡ jak dzia│a. Spakowana ca│oœ╡ (keygen.asm, keygen.rc, makeit.bat, fins.ico i wersja skompilowana) powinna by╡ do│╣czona do tego tekstu. Je┐eli masz jakieœ problemy ze zrobieniem tego keygena, albo jakieœ pytanka, to mail me [email protected].
tutorial.txt 80x296 Font
80