Másolásvédelem Pascalban

Másolásvédelem Pascalban
2006-04-26T13:43:49+02:00
2006-07-11T20:55:03+02:00
2022-10-31T13:55:42+01:00
GZs
Hali!

A programot, amit írok el kellene látnom egy egyszerűbb másolásvédelemmel. Ebben kérem a segítségeteket!

Nem tudom, hogy ez mennyire számít, de a programnak DOS és a különböző Windows oprendszereken is működnie kellene. Arra gondoltam, hogy mondjuk leolvashatná a vinyó serial számát és eltárolhatná egy fileban, vagy valami hasonló, de lehetne más is, csak megértsem
Mutasd a teljes hozzászólást!
Létezik hát!
Pl serial, stb!
Az dos-on is, windows-on is megy...
Itt van egy cikk sorozat:
(köszönet _sin_-nek)
Docler.com
Docler.com
Docler.com
Docler.com
Mutasd a teljes hozzászólást!

  • Hello!

    Így tudod lekérni a disk serialt:

    var
    VolumeSerialNumber: DWORD;
    MaximumComponentLength: DWORD;
    FileSystemFlags: DWORD;
    SerialNumber: string;
    begin
    GetVolumeInformation('C:\',nil,0, @VolumeSerialNumber, MaximumComponentLength,FileSystemFlags, nil,0);
    SerialNumber := IntToHex(HiWord(VolumeSerialNumber), 4) + '-' +
    IntToHex(LoWord(VolumeSerialNumber), 4);
    end;

    Na most én úgy csináltam, hogy kettéosztottam a disk serial-t high-ra és low-ra ezt a számot átkonvertáltam decimálisba és megfordítottam.

    Itt megtalálhatod:Hex-ből Dec-be

    Ezt a kérdést még én tettem föl anno!

    A teljes forráskódot is le tudnám írni, csakhogy én (még) nem otthonról netezek, de ha gondolod holnapra elhozom.

    Ennyi!

    Egyébként én már rég nem ezt az "sima" módot használom, hanem ellestem az InstallShield TrialWare metódusát, amit az én szintemre átalakítva a disk serialból készít egy request code-ot és egy megfelelő response code-ra (válaszkód) teszi elérhetővé a progik teljes funkcióját.

    Üdv:

    Wolff the Sniper
    Mutasd a teljes hozzászólást!
  • Elfelejtettem odaírni, hogy ez a response code generator "nagyságrendekkel" bonyolultabb mint az előző "sima" módszerem!
    Mutasd a teljes hozzászólást!
  • A hiba nyílván az én készülékemben van, de a GetVolumeInformation utasításnál kiakadt a Free Pascalom és egyik Unitban sem találtam meg ezt az utasítást. Milyen Unit kell hozzá?
    Mutasd a teljes hozzászólást!
  • Ehez Delphi kell...
    Mutasd a teljes hozzászólást!
  • Kár

    Nekem Pascalban kellene valami! Van valakinek valamilyen ötlete?
    Mutasd a teljes hozzászólást!
  • Ez nem Disk Serial, hanem Kötet-azonosító. Melyről köztudott, hogy klonozható.

    IdeSN
    Mutasd a teljes hozzászólást!
  • Nem kell hozzá Delphi. A GetVolumeInformation egy WINAPI függvény, és gondolom a FreePascal-al is lehet függvényeket exportálni DLL-ből.
    Mutasd a teljes hozzászólást!
  • Nem ragaszkodom a Disk Serialhoz, az csak egy ötlet volt! Valójában teljesen mindegy, hogy milyen védelemről van szó, csak működjön Dos és Windows alatt is
    És az sem lenne baj, ha érteném
    Mutasd a teljes hozzászólást!
  • és hardver kulcs?

    lehet kapni USB és párhuzamos portra is hardver kulcsot, és csak ki kell olvasni.
    USBről pacalből nehéz kiolvasni, de párhuzamosról nem nehéz.
    talán a HW kulcsban lévő kulcsot is te adod meg, így egy fájlban letárolod v.milyen kódolással a kulcsot, majd a kódolatlan kulcs a hwba, és mikor kikéred, akkor végrehajtod rajta a kódolást, majd összehasonlítod.
    Mutasd a teljes hozzászólást!
  • uhh, bevallom ebből most nem sok mindent értettem meg
    Valami egyszerű másolásvédelemre lenne szükségem ami univerzálisan működik DOS és Windows alatt, és fel tudom fogni a nem igazán profi programozói agyammal
    Mutasd a teljes hozzászólást!
  • Szia!
    Ezt a módszert használom, és eddig elég jól bevált (Free Pascal alatt):

    0.) a telepítéskor a telepítő végrehajtja a telepítendő program exején az 1-3 lépéseket...

    Ezután minden indításkor:
    1.)Az a többiek által is említett GetVolumeInformation függvényt használva lekérem a winchester számát.
    2.)md5el bekódolom a VolumeInformation és a Serial (Az hogy a Serialt hova dugod már a te dolgod. Ajánlom a Windows mappát, vagy a Registryt) összegzéséből kapott stringet. (Itt a proh.hu-n találtam rá egy jó md5 kódoló forrást még vagy jó 1 éve)
    3.)a bekódolt adatokat az exe-be egy adott bytetól kezdve beleírom (nem mondom meg hova, mert akkor átírható lenne)
    4.)ha már az exeben ott ahova írnék van adat, akkor összehasonlítom az ottlévő adatot a mostani adatokkal. (Ha nincs adat az is baj , mert a telepítő már beleírta az infókat, szóva tuti, hogy telepítés nélküli kalózmásolat!)
    5.)Ha egyezik->folytatódhat a program indítása
    Ha nem->ez bizony kalóz másolat
    Mutasd a teljes hozzászólást!
  • Ez a GetVolumeInformation jó lenne nekem! Tudsz írni egy kódrészletet, hogy hogyan kell használni?
    Mutasd a teljes hozzászólást!
  • Mégegyszer mondom, elkerülte a figyelmedet. A GetVolumeInfromation nem a
    winchester számát
    adja vissza, hanem a KÖTET azonosítót.
    Mutasd a teljes hozzászólást!
  • Igazából nekem az is jó lenne
    Mutasd a teljes hozzászólást!
  • En meg egy jol nevelt debuggerrel, megkeresem az osszehasonlitasodat, es ennel a pontnal a megfelelo helyre elhelyezek egy nop-ot.. oszt csókolom
    A progid felismeri, hogy kalózmásolat, de folytatja futását, mert a futás megszakításának a hívását kiszedtem belole. (anno amikor csinltam egy delphi kompival, ugy 1 jo fel ora alatt meg is volt...tehát a módszer működik)
    Mutasd a teljes hozzászólást!
  • sőt, mondok jobbat. ha a programod ki is ír egy hibaüzenetet, akkor fogom ezt a hibaüzi-kiírást, és megnézem mit tesz le előtte a verembe (ha win-api), vagy hol tárolja azt a byte-sorozatot, amivel összehasonlítja a futás közben generált értéket, szóval a lényeg az, hogy innen már csak egy lépés, hogy a program saját maga írja ki a helyes kódot. mondjuk jelen esetben ez egy kicsit bonyolultabb, de pl. szériaszámos programok tömegét lehet néhány bájt átírásával (hála a strukturált, jól megtervezett programozási módszereknek ) rábírni, hogy önként és dalolva mondják meg a helyes regisztrációs kulcsot. (szintén kipróbált módszer, pl. winzip régebbi verzióinál lazán működött, most nem tudom).

    Szóval a lehetőségek tárháza korlátlan, de ha programot akarsz védeni, akkor 1-2 alaptechnikát mindkét oldalról olvashatsz ebben a topicban. Különösen ajánlom az Ivn által belinkelt Delphi-s oldalt, nem tudom, ki készítette, de az biztos, hogy gimibe járt éppen, és most hosszú a haja, és Machine Supremacy-t hallgat. (És 30 órája ébren van, emiatt offol különféle fórumokon, pihenésképpen.)

    Ennél azért van már kicsivel részletesebb és okosabb forrás is, javaslom, szerezd be mielőbb Pavol Cerven: Programvédelem fejlesztőknek című hiánypótló munkáját, valamint tedd tiszteleted 1-2 cracker oldalon (vannak/voltak nemzetközileg is ismert/elismert kalóz-csapatok itt Magyarországon, ők elég sok magyar nyelvű leírást publikáltak). Ha ismered az ellenség módszereit és eszközeit, akkor már tettél egy lépést ellenük.

    Egyékbént ha megírtad a programod, szerintem akár fel is dobhatod ide, pár ember bizonyára szívesen eljátszik vele, és utána megmondja neked, mit hogyan kellene megoldanod ezügyben.

    Egyébként hiába csinál akármit a telepítőd, azt is lehet debugolni, visszafejteni és módosítani. Sőt, ha pl. msi vagy Delphihez mellékelt telepítőkészítőt használsz, azt 1:1 vissza lehet fordítani szkriptre, és megint megvan a programod. Pl. egy Adobe Acrobatot semeddig sem tart(ott 1-2 éve) rávenni, hogy nem NT-alapú windózra is feltelepüljön, pedig eleinte igencsak sérelmezte. Sajnos nem tudom már megmutatni azt a lapot, ahol ezt régen olvastam, mert már a google-cache-ben sincs benne.

    Mint látod, a másik oldal igen felkészült, és ha működő védelmet akarsz, abba majdnem több energiát kell fektetned, mint magába a programba.

    update: Machinae Supremacy, és elsősorban a kérdezőnek ment.
    Mutasd a teljes hozzászólást!
  • Hali!

    Ahogy mondtam, egy nagyon egyszerű védelem is elég lenne, amit meg tudok írni
    Tehát ha valaki leírná, hogy Free Pascal-ban hogyan tudok lekérni valami egyedi azonosítót, pl. vinyó serial numbert, vagy bármi mást, akkor már nagyon boldoggá tenne
    Mutasd a teljes hozzászólást!
  • A freepascal nem támogatja a 16 bites rendszereket, szóval így érdemesebb akkor már delphit használnod, amivel már semmi gond.
    Ha mindenképpen dosban akarod, akkor megcsinálod a programot turbo pascal-ban is, meg delphiben is, és csinálsz pascal programot, ami megállapítja hogy window fut e éppen vagy dos. Ha dos, akkor a dos-ost indítod. Dos-ban pedig gond nélkül lekérdezheted assembly-vel, windows-ban pedig API-val.
    Mutasd a teljes hozzászólást!
  • de egyébként itt van egy kód...
    Ez delphi 3-hoz készült, ugyhogy nagyjából még kompatibilisek:

    function GetSerNumber: String; type HDINFO = record InfoLevel: Word; sNumber: LongInt; vName: array [0..21] of byte; end; var hdID: pointer; oseg, oofs: word; snum: Longint; begin GetMem(hdid, sizeof(HDInfo)); oseg := Seg(hdid^); oofs := Ofs(hdid^); asm mov ah, 69h mov al, 00h mov bl, 00h {* 0=default, 1=A, 2=B, etc *} mov bh, 00h push ds mov ds, oseg mov dx, oofs int 21H pop ds end; snum := HDInfo(hdid^).sNumber ; FreeMem(hdid, sizeof(HDInfo)); result := IntToStr(sNum); end;

    De Ivn-nek valóban igaza van, és meghívhatod az api funkciót is. Msdn-en fennvan hogy hogy honnan tudod meghívni!
    Mutasd a teljes hozzászólást!
  • Igazad van, érdemesebb lenne Delphit használni, szívesebben is tenném, csak muszáj Free Pascalt
    Mutasd a teljes hozzászólást!
  • Köszönöm a kódot, de sajnos nem tudtam felhasználni, a Free Pascal kiakadt az első assembly-s sornál
    Mutasd a teljes hozzászólást!
  • Berakjam egy dll-be ahonnan meg tod hívni?
    Mutasd a teljes hozzászólást!
  • Annak örülnék, bár újabb problémákat vetne fel

    - Dll használat működne Dos alatt?
    - Hogyan tudnám meghívni?

    Ja és köszi!
    Mutasd a teljes hozzászólást!
  • Dos alatt sehogy se tudod meghívni...
    Így is érdekelne?
    Ez a kód turbo pascalban viszont futna.
    Na szóval feljebb írtam, hogy valószínűleg külön kell megírnod dosra meg windowsra, vagy pedig csak dosost írsz.
    Mutasd a teljes hozzászólást!
  • Igen, érdekelne mindenképp!
    A programot úgy kell megírnom Free Pascalban, hogy Dos és Windows alatt is menjen. Reméltem, hogy létezik valami egyszerűbb másolásvédelem, de úgy látszik tévedtem
    Mutasd a teljes hozzászólást!
  • Létezik hát!
    Pl serial, stb!
    Az dos-on is, windows-on is megy...
    Itt van egy cikk sorozat:
    (köszönet _sin_-nek)
    Docler.com
    Docler.com
    Docler.com
    Docler.com
    Mutasd a teljes hozzászólást!
  • Köszi, ezekből már össze tudok hozni valamit.
    Köszönöm mindenkinek a segítséget!
    Mutasd a teljes hozzászólást!
  • 404

    _sin_! Megvan meg neked valahol az a leiras? (vagy akarki masnak)
    Mutasd a teljes hozzászólást!
  • Érdekelt volna a dolog, de nálam már (404-es hiba) nem létezik a link...
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd