Author Topic: Tvorba keygenu  (Read 2694 times)

Kockatá hlava

  • Junior Member
  • ***
  • Posts: 134
  • n00b
    • x86asm.net
Re: Tvorba keygenu
« Reply #15 on: October 05, 2010, 09:44:40 AM »
Par poznámek k tomu tvojemu rozčilování.

Quote
Neexistuji nejake figly, jak kompileru rici, ze se jedna o opravdu jednoduchy program a neni treba brat na vrabce delo?

Ten "odpornej" kód, do kterýho se ti to skompilovalo, je nejspíš inicializace CRT (na Windows msvcr*.dll). Možná jde nějak kompileru říct, ať CRT nepoužívá, ale nikdy jsem to nezkoušel.

Quote
Dale me dost vytaci, ze program uklada zminovane retezce v SS (zaplatpanbuh ze aspon citace cyklu uklada do registru). Cmecko to ukladalo do DS, s cimz se dobre pracovalo a bylo to tisickrat prehlednejsi.

To je tím, že používáš auto proměnný, který mají platnost jenom v daným bloku (u tebe to bude nejspíš main()). Z toho důvodu kompiler používá zásobník (aspoň na architektuře x86), protože přes ten toho jde docílit nejjednodušším a nejrychlejším způsobem. Počítám, že kdybys tam našel na začátku každé funkce volání alokace paměti a na konci dealokace, taky by se ti to nelíbílo. Pokud to nutně potřebuješ uložit "do DS" (nechápu ale proč - chceš to snad debugovat na úrovni asm?), použij třídu static. Tím ale zase zvětšuješ paměťový nároky programu v době jeho spouštění.

Quote
Ukladani vetsich promennych do zasobniku se mi vubec nelibi (ten retezec byl mnohem delsi nez 5 znaku ). Uz na vysce do nas tloukli, ze zasobnik muze zradit, koneckoncu pro to existuji pseudozasobniky tvorene spojovymi seznamy...

Že zásobník může zradit je pravda, ale je to hlavně teorie. Většina programů je napsaná "normálním" způsobem, a kolikrát zažils, že by ti nějakej program spadnul se STATUS_STACK_OVERFLOW? Já za posledních několik let ani jednou. (Je pravda, že nějaký unixový tooly skompilovaný pro Windows mě občas padají dost záhadně, ale tam to spíš bude narušením paměti, než přeplněním zásobníku).

Tím "normálním" způsobem myslím to, že každá funkce si pro svoje auto proměnný ukousne pořádnej kus stacku; navíc auto proměnný vytváří kompiler sám pro svoje potřeby, protože registrů je relativně málo.

NeptuN

  • I'd be forever young
  • Junior Member
  • ***
  • Posts: 158
Re: Tvorba keygenu
« Reply #16 on: October 05, 2010, 09:39:01 PM »
Ten "odpornej" kód, do kterýho se ti to skompilovalo, je nejspíš inicializace CRT (na Windows msvcr*.dll). Možná jde nějak kompileru říct, ať CRT nepoužívá, ale nikdy jsem to nezkoušel.
Asi to tim bude. Tento problem, vlastne tak jako vsechny ostatni, odpada programovanim v assmu, jak jsem avizoval. Spis jsem asi naivne predpokladal, ze dnesni automaticka optimalizace dokaze prekonat cloveka. Ocividne to v pripade kompileru z devc++ neplati.

Pokud to nutně potřebuješ uložit "do DS" (nechápu ale proč - chceš to snad debugovat na úrovni asm?), použij třídu static. Tím ale zase zvětšuješ paměťový nároky programu v době jeho spouštění.

Samozrejme jsem si vedom, ze to zabere pamet, nicmene pri dnesnich technickych parametrech pocitacu v tom nevidim (pro keygen) problem. Duvod je presne ten, ktery jsi zminil: chci to debuggovat na urovni assm. Koneckoncu pri psani keygenu se to da ocekavat, nebot v pripade, ze prime ripovani procedury z nejakeho duvodu nebude mozne (a i kdyby bylo, tak pro kontrolu se to hodi), pak pri rucnim psani je u slozitejsich algoritmu temer nemozne to trefit napoprve. A pak hledej chybky pri nejakem sifrovani ci jinych hratkach s binarnimi retezci. Ve vyssich jazcich prakticky nemozne. Rozhodne promenne v DS usetri spoustu neprijemnosti. Ten trik se static me nenapadl (i kdyz toto klicove slovo obcas pouzivam), vyzkousim.  :)
Knowledges are powerful weapon