home *** CD-ROM | disk | FTP | other *** search
/ Reverse Code Engineering RCE CD +sandman 2000 / ReverseCodeEngineeringRceCdsandman2000.iso / RCE / +Sandman / Htocrk82.txt < prev    next >
Text File  |  2000-05-25  |  25KB  |  862 lines

  1.                      HOW TO CRACK, by +ORC, A TUTORIAL
  2.  
  3. ---------------------------------------------------------------------------
  4.  
  5.              Lesson 8.2: How to crack Windows, a deepr approach
  6.  
  7. ---------------------------------------------------------------------------
  8.  
  9.                          [SNAP95] [WINZIP] [WINCAT]
  10.  
  11.                    --------------------------------------
  12.  
  13.      SPECIAL NOTE: Please excuse the somehow "unshaven"
  14.  
  15.      character of the windows lessons... I'm cracking the
  16.  
  17.      newest Windows '95 applications right now, therefore
  18.  
  19.      at times I had to add "on the fly" some corrections to
  20.  
  21.      the older Windows 3.1 and Windows NT findings.
  22.  
  23.                 "homines, dum docent, discunt".
  24.  
  25. ---------------------------------------------------------
  26.  
  27. ->   1st THING TO REMEMBER
  28.  
  29. If you thought that DOS was a mess, please notice that windows
  30.  
  31. 3.1 is a ghastly chaos, and windows 95 a gruesome nightmare of
  32.  
  33. ill-cooked spaghetti code. Old Basic "GOTO" abominations were
  34.  
  35. quite elegant in comparison with this concoction... One thing is
  36.  
  37. sure: This OS will not last... it's way too messy organised,
  38.  
  39. impossible to consolidate, slow and neurotic (but I must warn
  40.  
  41. you... I thought exactly the same things about DOS in 1981).
  42.  
  43.   The most striking thing about windows 95 is that it is neither
  44.  
  45. meat not fish: neither 16 nor 32... you could call it a "24 bit"
  46.  
  47. operating system.
  48.  
  49.   We'll never damage Microsoft interests enough to compensate for
  50.  
  51. this moronic situation... where you have to wait three minutes
  52.  
  53. to get on screen a wordprocessor that older OS (and even old DOS)
  54.  
  55. kick up in 5 seconds. I decide therefore, hic et nunc, to add an
  56.  
  57. ADDENDUM to this tutorial: Addendum 1 will be dedicated to teach
  58.  
  59. everybody how to crack ALL Microsoft programs that do exist on
  60.  
  61. this planet. I'll write it this sommer and give it away between
  62.  
  63. the "allowed" lessons.
  64.  
  65.   Anyway you can rely on good WINICE to crack everything, you'll
  66.  
  67. find it on the web for free, I use version 1.95, cracked by [The
  68.  
  69. Lexicon] (do not bother me for Warez, learn how to use the search
  70.  
  71. engines on the web and fish them out yourself). Learn how to use
  72.  
  73. this tool... read the whole manual! Resist the temptation to
  74.  
  75. crack immediatly everything in sight... you 'll regret pretty
  76.  
  77. soon that you did not wanted to learn how to use it properly.
  78.  
  79. A little tip: as Winice is intended more for software developers
  80.  
  81. than for crackers, we have to adapt it a little to our purposes,
  82.  
  83. in order to make it even more effective: a good idea is to have
  84.  
  85. in the *.DAT initialization file following lines:
  86.  
  87.      INIT = "CODE ON; watchd es:di; watchd ds:si;"
  88.  
  89.      TRA = 92
  90.  
  91. This way you'll always have the hexadecimal notation on, two very
  92.  
  93. useful watch windows for passwords deprotection and enough buffer
  94.  
  95. for your traces.
  96.  
  97. WINDOWS 3.1. basic cracking: [ALGEBRAIC PROTECTIONS]
  98.  
  99.      The most used windows protections are "registration codes",
  100.  
  101. these must follow a special pattern: have a "-" or a "+" in a
  102.  
  103. predetermined position, have a particular number in particular
  104.  
  105. position... and so on.
  106.  
  107. For the program [SHEZ], for instance, the pattern is to have a
  108.  
  109. 14 bytes long alphanumeric sequence containing CDCE1357 in the
  110.  
  111. first 8 bytes.
  112.  
  113.      The second level of protection is to "connect" such a
  114.  
  115. pattern to the alphanumeric contents of the NAME of the user...
  116.  
  117. every user name will give a different "access key". This is the
  118.  
  119. most commonly used system.
  120.  
  121.      As most of these protections have a "-" inside the answering
  122.  
  123. code, you do not need to go through the normal cracking procedure
  124.  
  125. (described in the next lesson):
  126.  
  127. *    load WINICE
  128.  
  129. *    hwnd [name_of_the_crackanda_module]
  130.  
  131. *    choose the window Handle of the snap, i.e, the exact
  132.  
  133.      "FIELD" where the code number input arrives... say 091C(2)
  134.  
  135. *    BMSG 091C WM_GETTEXT
  136.  
  137. *    Run anew
  138.  
  139. *    Look at the memory location(s)
  140.  
  141. *    Do the same for the "Username" input FIELD. (Sometimes
  142.  
  143.      linked, sometimes not, does not change much, though)
  144.  
  145. *    BPR (eventually with TRACE) on the memory locations (these
  146.  
  147.      will be most of the time FOUR: two NUMBERCODES and two
  148.  
  149.      USERNAMES). The two "mirrored" ones are the most important
  150.  
  151.      for your crack. At times there will be a "5th" location,
  152.  
  153.      where the algebraic play will go on...
  154.  
  155. *    Look at the code that performs algebraic manipulations on
  156.  
  157.      these locations and understand what it does...
  158.  
  159. *    Disable the routine or jump over it, or reverse it, or
  160.  
  161.      defeat it with your own code... there are thousand
  162.  
  163.      possibilities...
  164.  
  165. *    Reassemble everything.
  166.  
  167. Uff... quite a long cracking work just to crack some miserable
  168.  
  169. program... isn'there a quicker way? OF COURSE THERE IS! Actually
  170.  
  171. there are quite a lot of them (see also the crack of Wincat Pro
  172.  
  173. below): Look at the following code (taken from SNAP32, a screen
  174.  
  175. capture utility for Windows 95, that uses a pretty recent
  176.  
  177. protection scheme):
  178.  
  179.      XOR  EBX,EBX   ; make sure EBX is zeroed
  180.  
  181.      MOV  BL, [ESI] ; load input char in BL
  182.  
  183.      INC  ESI       ; point at the next character
  184.  
  185.      MOV  EDI,EBX   ; save the input character in EDI
  186.  
  187.      CMP  EBX,+2D   ; input char is a "-" ?
  188.  
  189.      JZ   ok_it's_a_+_or_a_-
  190.  
  191.      CMP  EBX,+2B   ; input char is a "+" ?
  192.  
  193.      JNZ  Jesus_it's_neither_a_minus_nor_a_plus_let's_check_it
  194.  
  195. :ok_it's_a_+_or_a_-
  196.  
  197.      XOR  EBX,EBX   ; EBX is zeroed
  198.  
  199.      MOV  BL,[ESI]  ; recharge BL
  200.  
  201.      INC  ESI       ; point to next char (do not check - or +)
  202.  
  203. :Jesus_it's_neither_a_minus_nor_a_plus_let's_check_it
  204.  
  205.      XOR  EBP,EBP   ; zero EBP
  206.  
  207.      CMP  DWORD PTR [boguschecker], +01
  208.  
  209.      ...
  210.  
  211. even if you did not read all my precedent lessons, you do not
  212.  
  213. need much more explications... this is a part of the algebraic
  214.  
  215. check_procedure inside the SNAP32 module...  you could also get
  216.  
  217. here through the usual
  218.  
  219.      USER!BOZOSLIVEHERE
  220.  
  221.      KERNEL!HMEMCPY
  222.  
  223.      USER!GLOBALGETATOMNAME
  224.  
  225. Windows wretched and detestable APIs used for copy protections,
  226.  
  227. as usual with WINICE cracking, and as described elsewhere in my
  228.  
  229. tutorial.
  230.  
  231.   The above code is the part of the routine that checks for the
  232.  
  233. presence of a "+" or a "-" inside the registration number (many
  234.  
  235. protections scheme requires them at a given position, other need
  236.  
  237. to jump over them).
  238.  
  239.   Now sit down, make yourself comfortable and sip a good Martini-
  240.  
  241. Wodka (invariably very useful in order to crack... but be aware
  242.  
  243. that only Moskowskaia russian Wodka and a correct "Tumball" glass
  244.  
  245. will do, do not forget the lemon)... what does this "-" stuff
  246.  
  247. mean for us little crackers?
  248.  
  249.   It means that we can search directly for the CMP EBX,+2B
  250.  
  251. sequence inside any file protected with these schemes... and
  252.  
  253. we'll land smack in the middle of the protection scheme! That's
  254.  
  255. amazing... but you will never underrate enough the commercial
  256.  
  257. programmers... the only really amazing thing is how simpleton the
  258.  
  259. protectionists are! You don't believe me? Try it... you 'll get
  260.  
  261. your crack at least 4 out of 5 times.
  262.  
  263.   Yes I know, to find this code is not yet to crack it... but for
  264.  
  265. this kind of copy protection (that's the reason it is so
  266.  
  267. widespread) there is no single solution... each makes a slightly
  268.  
  269. different algebraic manipulation of the alphanumeric and of the
  270.  
  271. numeric data. It's up to you to crack the various schemes... here
  272.  
  273. you can only learn how to find them and circumvene them. I'll not
  274.  
  275. give you therefore a "debug" crack solution. You'll find it
  276.  
  277. yourself using my indications (see the crack of the Wincat Pro
  278.  
  279. program below).
  280.  
  281. WHERE ARE THE CODES? WHERE ARE THE MODIFIED FILES? WHERE DO THE
  282.  
  283. PROTECTIONS KEEP COUNT OF THE PASSING DAYS?
  284.  
  285. Most of the time the protection schemes use their own *.ini files
  286.  
  287. in the c:\WINDOWS directory for registration purposes... at time
  288.  
  289. they even use the "garbage sammler" win.ini file. Let's take as
  290.  
  291. example WINZIP (versions 5 and 5.5), a very widespread program,
  292.  
  293. you'll surely have one shareware copy of it somewhere between
  294.  
  295. your files.
  296.  
  297.   In theory, winzip should be registered per post, in order to
  298.  
  299. get a "NEW" copy of it, a "registered" copy.
  300.  
  301.   This scares most newby crackers, since if the copy you have
  302.  
  303. it's not full, there is no way to crack it and make it work,
  304.  
  305. unless you get the REAL stuff. The youngest among us do not
  306.  
  307. realize that the production of a real "downsized" demo copy is
  308.  
  309. a very expensive nightmare for the money-infatuated commercial
  310.  
  311. programmers, and that therefore almost nobody does it really...
  312.  
  313. nearly all "demos" and "trywares" are therefore CRIPPLED COMPLETE
  314.  
  315. PROGRAMS, and not "downsized" demos, independently of what the
  316.  
  317. programmers and the protectionists have written inside them.
  318.  
  319.   Back to Winzip... all you need, to crack winzip, is to add a
  320.  
  321. few lines inside the win.ini file, under the heading [WinZip],
  322.  
  323. that has already been created with the demo version, before the
  324.  
  325. line with "version=5.0".
  326.  
  327.  I will not help you any further with this... I'll leave it to
  328.  
  329. you to experiment with the correct sequences... inside win.ini
  330.  
  331. you must have following sequence (these are only template to
  332.  
  333. substitute for your tries inside WINICE... you'll get it, believe
  334.  
  335. me):
  336.  
  337.    [WinZip]
  338.  
  339.    name=Azert Qwerty
  340.  
  341.    sn=########
  342.  
  343.    version=5.5
  344.  
  345.   The *important* thing is that this means that you DO NOT NEED
  346.  
  347. to have a "new registered version" shipped to you in order to
  348.  
  349. make it work, as the protectionist sellers would like you to
  350.  
  351. believe. The same applies most of the time... never believe what
  352.  
  353. you read in the read.me or in the registration files...
  354.  
  355.   This brings me to a broader question: NEVER believe the
  356.  
  357. information they give you... never believe what television and/or
  358.  
  359. newspapers tell you... you can be sure that the only reason they
  360.  
  361. are notifying you something is to hinder you to read or
  362.  
  363. understand something else... this stupid_slaves_society can only
  364.  
  365. subsist if nobody thinks... if you are really interested in what
  366.  
  367. is going on, real information can be gathered, but surely not
  368.  
  369. through the "conventional" newspapers and/or news_agencies (and
  370.  
  371. definitely NEVER through television, that's really only for the
  372.  
  373. stupid slaves)... yes, some bit of information can be
  374.  
  375. (laboriously) gathered... it's a cracking work, though.
  376.  
  377. HOW TO CRACK INFORMATION [WHERE WHAT]
  378.  
  379. *    INTERNET
  380.  
  381.   In the middle of the hugest junk collection of the planet, some
  382.  
  383. real information can be laboriously gathered if you do learn how
  384.  
  385. to use well the search engines (or if you do build your ones...
  386.  
  387. my spiders are doing most of the work for me... get your robots
  388.  
  389. templates from "Harvest" or "Verify" and start your "spider
  390.  
  391. building" activity beginning from Martijn Koster's page). As
  392.  
  393. usual in our society, in the Internet the real point is exactly
  394.  
  395. the same point you'll have to confront all your life long: HOW
  396.  
  397. TO THROW AWAY TONS OF JUNK, HOW TO SECLUDE MYRIADS OF USELESS
  398.  
  399. INFORMATION and HOW TO FISH RARE USEFUL INFORMATION, a very
  400.  
  401. difficult art to learn per se. Internet offers some information,
  402.  
  403. though, mainly BECAUSE it's (still) unregulated. You want a
  404.  
  405. proof? You are reading it.
  406.  
  407. *    SOME (RARE) NEWSPAPERS.
  408.  
  409.   The newspaper of the real enemies, the economic powers that
  410.  
  411. rule this slaves world, are paradoxically most of the time the
  412.  
  413. only ones worth studying... somewhere even the real rulers have
  414.  
  415. to pass each other some bits of real information. The "Neue
  416.  
  417. Zuercher Zeitung", a newspaper of the Swiss industrials from
  418.  
  419. Zuerich, is possibly the best "not_conformist trend analyzer"
  420.  
  421. around that you can easily find (even on the web). These
  422.  
  423. swissuckers do not give a shit for ideology, nor preconcerted
  424.  
  425. petty ideas, the only thing they really want is to sell
  426.  
  427. everywhere their ubiquitous watches and their chocolates... in
  428.  
  429. order to do it, a land like Switzerland, with very high salaries
  430.  
  431. and a good (and expensive) social system, must use something
  432.  
  433. brilliant... they found it: a clear vision of the world... as a
  434.  
  435. consequence this newspaper is very often "against" the trend of
  436.  
  437. all the other medias in the world, the ones that are used only
  438.  
  439. in order to tame the slaves... If the only language you know is
  440.  
  441. english (poor guy) you could try your luck with the weekly
  442.  
  443. "Economist"... you'll have to work a lot with it, coz it has been
  444.  
  445. tailored for the "new riches" of the Tatcher disaster, but you
  446.  
  447. can (at times) fish something out of it... they do a lot of
  448.  
  449. idiotic propaganda, but are nevertheless compelled to write some
  450.  
  451. truth. American newspapers (at least the ones you can get here
  452.  
  453. in Europe) are absolute shit... one wonders where the hell do the
  454.  
  455. americans hyde the real information.
  456.  
  457.   On the "non-capitalistic" side of information there is a
  458.  
  459. spanish newspaper "El Pais" that seems to know about what's going
  460.  
  461. on in South America, but it's so full of useless propaganda about
  462.  
  463. irrelevant Spanish politics that it's not really worth reading.
  464.  
  465. The monthly "Le Monde diplomatique" offers something too... this
  466.  
  467. one exaggerates a little on the pauperistic "third world" side,
  468.  
  469. but has a lot of useful information. See what you can do with all
  470.  
  471. this information (or disinformation?)
  472.  
  473. [BELIEVE THE COUNTRARY]
  474.  
  475.      Another good rule of thumb in choosing your medias is the
  476.  
  477. following... if all medias around you assure, for instance, that
  478.  
  479. "the Serbians are evil"... the only logical consequence is that
  480.  
  481. the Serbians are not so evil at all and that "the Croats" or some
  482.  
  483. other Yugoslavian shits are the real culprits. This does not mean
  484.  
  485. at all that the Serbians are good, I warn you, it means only what
  486.  
  487. I say: something is surely hidden behind the concerted propaganda
  488.  
  489. you hear, the best reaction is to exaggerate in the other
  490.  
  491. direction and believe the few bit of information that do say the
  492.  
  493. countrary of the trend. This rule of thumb may be puerile, but
  494.  
  495. it works somehow most of the time... if somewhere everybody
  496.  
  497. writes that the commies are bad then THERE the commies must not
  498.  
  499. be so bad at all and, conversely, if everybody in another place
  500.  
  501. writes that the commies are all good and nice and perfect (like
  502.  
  503. the Soviet propaganda did) then THERE the commies are surely not
  504.  
  505. so good... it's a matter of perspective, much depends on where
  506.  
  507. you are, i.e. whose interests are really at stake. There is NEVER
  508.  
  509. real information in this society, only propaganda... if you still
  510.  
  511. do not believe me do yourself a little experiment... just read
  512.  
  513. the media description of a past event (say the Vietnam war) as
  514.  
  515. written AT THE MOMENT of the event and (say) as described 10
  516.  
  517. years later. You'll quickly realize how untrustworthy all
  518.  
  519. newspapers and medias are.
  520.  
  521. *    SEMIOTICS You'll have to study it (as soon as you can) to
  522.  
  523. interpret what they let you believe, in order to get your
  524.  
  525. bearings. A passing knowledge of ancient RHETORIC can help quite
  526.  
  527. a lot. Rhetoric is the "Softice" debugger you need to read
  528.  
  529. through the propaganda medias: concentrate on Periphrasis,
  530.  
  531. Synecdoche, Antonomasia, Emphasis, Litotes and Hyperbole at the
  532.  
  533. beginning... you'll later crack higher with Annominatio,
  534.  
  535. Polyptoton, Isocolon and all the other lovely "figurae
  536.  
  537. sententiae".
  538.  
  539. Enough, back to software cracking.
  540.  
  541. HOW A REGISTRATION CODE WORKS [WINCAT]
  542.  
  543.      Let's take as an example for the next crack, a Username-
  544.  
  545. algebraic registration code, WINCAT Pro, version 3.4., a 1994
  546.  
  547. shareware program by Mart Heubel. It's a good program, pretty
  548.  
  549. useful to catalogue the millions of files that you have on all
  550.  
  551. your cd-roms (and to find them when you need them).
  552.  
  553. The kind of protection Wincat Pro uses is the most utilized
  554.  
  555. around: the username string is manipulated with particular
  556.  
  557. algorithms, and the registration key will be made "ad hoc" and
  558.  
  559. depends on the name_string. It's a protection incredibly easy to
  560.  
  561. crack when you learn how the relevant procedures work.
  562.  
  563.      [WINCAT Pro] is a good choice for cracking studies, coz you
  564.  
  565. can register "over your registration" one thousand times, and you
  566.  
  567. can herefore try for this crack different user_names to see all
  568.  
  569. the algebrical correspondences you may need to understand the
  570.  
  571. protection code.
  572.  
  573.      In this program, when you select the option "register", you
  574.  
  575. get a window where you can input your name and your registration
  576.  
  577. number (that's what you would get, emailed, after registering
  578.  
  579. your copy). If you load winice and do your routinely hwnd to
  580.  
  581. individuate the nag window, and then breakpoint on the
  582.  
  583. appropriate memory ranges you'll peep in the working of the whole
  584.  
  585. bazaar (this is completely useless in order to crack these
  586.  
  587. schemes, but it'll teach you a lot for higher cracking, so you
  588.  
  589. better do it also with two or three other programs, even if it
  590.  
  591. is a little boring): a series of routines act on the input (the
  592.  
  593. name) of the user: the User_name_string (usn). First of all the
  594.  
  595. usn_length will be calculated (with a REPNZ SCASB and a following
  596.  
  597. STOSB). Then various routines store and move in memory the usn
  598.  
  599. and the registration_number (rn) and their relative lengths. In
  600.  
  601. order to compare their lengths and to check the correct
  602.  
  603. alphanumeric correspondence between usn and rn, the program first
  604.  
  605. uppercases the usn and strips all eventual spaces away.
  606.  
  607.      Here the relevant code (when you see an instruction like
  608.  
  609. SUB  AL,20 you should immediately realize that you are in a
  610.  
  611. uppercasing routine, which is important for us, since these are
  612.  
  613. mostly used for password comparisons)... here the relevant Winice
  614.  
  615. unassemble and my comments:
  616.  
  617. 253F:00000260  AC        LODSB          <- get the usn chars
  618.  
  619. 253F:00000261  08C0      OR   AL,AL     <- check if zero
  620.  
  621. 253F:00000263  740F      JZ   0274      <- 0: so usn finished
  622.  
  623. 253F:00000265  3C61      CMP  AL,61     <- x61 is "a", man
  624.  
  625. 253F:00000267  72F7      JB   0260      <- not a lower, so loop
  626.  
  627. 253F:00000269  3C7A      CMP  AL,7A     <- x7A is "z", what else?
  628.  
  629. 253F:0000026B  77F3      JA   0260      <- not a lower, so loop
  630.  
  631. 253F:0000026D  2C20      SUB  AL,20     <- upper it if it's lower
  632.  
  633. 253F:0000026F  8844FF    MOV  [SI-01],AL<- and hyde it away
  634.  
  635. 253F:00000272  EBEC      JMP  0260      <- loop to next char
  636.  
  637. 253F:00000274  93        XCHG AX,BX
  638.  
  639. ...
  640.  
  641. The instruction  MOV [SI-01],AL that you see here is important
  642.  
  643. at times, coz it points to the location of the "pre-digested"
  644.  
  645. usn, i.e. the usn formatted as it should be for the number
  646.  
  647. comparison that will happen later. In some more complicated
  648.  
  649. protection schemes the reasoning behind this formatting is the
  650.  
  651. following: "Stupid cracker will never get the relation algorhitm
  652.  
  653. usn <-> rn, coz he does not know that usn AND rn are slightly
  654.  
  655. changed before comparing, ah ah... no direct guessing is
  656.  
  657. possible". Here is only "polishing": you have to "polish" a
  658.  
  659. string before comparing it in order to concede some mistakes to
  660.  
  661. the legitimate user (too many spaces in the name, upper-lower
  662.  
  663. case mismatch, foreign accents in the name etc.) You just need
  664.  
  665. to know, for now, that this checking is usually still 5 or 6
  666.  
  667. calls ahead of the real checking (it's what we call a "green
  668.  
  669. light").
  670.  
  671.      You should in general realize that the real checking of the
  672.  
  673. algebrical correspondence follows after a whole series of memory
  674.  
  675. operations, i.e.: cancelling (and erasing) the previous (if ever)
  676.  
  677. attempts; reduplicating the usn and the rn somewhere else in
  678.  
  679. memory; double checking the string lengths (and saving all these
  680.  
  681. values somewhere... be particularly attentive when you meet stack
  682.  
  683. pointers (for instance [BP+05]): most of the programs you'll find
  684.  
  685. have been written in C (what else?). C uses the stack (SS:SP) to
  686.  
  687. pass parameters or to create local variables for his procedures.
  688.  
  689. The passwords, in particular, are most of the time compared to
  690.  
  691. data contained within the stack. If inside a protection a BP
  692.  
  693. register points to the stack you have most of the time fished
  694.  
  695. something... remember it pupils: it will spare you hours of
  696.  
  697. useless cracking inside irrelevant routines. Back to our CATWIN:
  698.  
  699. another little check is about the "minimal" length allowed for
  700.  
  701. a user name, in our babe, for instance, the usn must have at
  702.  
  703. least 6 chars:
  704.  
  705.      230F:00003483  3D0600    CMP  AX,0006
  706.  
  707.      230F:00003486  730F      JAE  3497      <- go to nice_name
  708.  
  709. :too_short
  710.  
  711.      230F:00003488  BF9245    MOV  DI,4592   <- no good: short
  712.  
  713.   After a lot of other winicing you'll finally come across
  714.  
  715. following section of the code:
  716.  
  717. 2467:00000CA3  B90100    MOV  CX,0001
  718.  
  719. 2467:00000CA6  03F1      ADD  SI,CX
  720.  
  721. 2467:00000CA8  2BC1      SUB  AX,CX
  722.  
  723. 2467:00000CAA  7213      JB   0CBF
  724.  
  725. 2467:00000CAC  40        INC  AX
  726.  
  727. 2467:00000CAD  368B4F04  MOV  CX,SS:[BX+04]  <- here
  728.  
  729. 2467:00000CB1  0BC9      0R   CX,CX
  730.  
  731. 2467:00000CB3  7D02      JGE  0CB7
  732.  
  733. 2467:00000CB5  33C9      XOR  CX,CX
  734.  
  735. 2467:00000CB7  3BC1      CMP  AX,CX
  736.  
  737. 2467:00000CB9  7606      JBE  0CC1
  738.  
  739. 2467:00000CBB  8BC1      MOV  AX,CX
  740.  
  741. 2467:00000CBD  EB02      JMP  0CC1
  742.  
  743. 2467:00000CBF  33C0      XOR  AX,AX
  744.  
  745. 2467:00000CC1  AA        STOSB               <- and here
  746.  
  747. 2467:00000CC2  8BC8      MOV  CX,AX
  748.  
  749. 2467:00000CC4  F3A4      REPZ MOVSB          <- and here!
  750.  
  751. 2467:00000CC6  8EDA      MOV  DS,DX
  752.  
  753. 2467:00000CC8  FC        RETF 0008
  754.  
  755.      This is obviously the last part of the checking routine
  756.  
  757. (I'll not delve here with the mathematical tampering of it, if
  758.  
  759. you want to check its workings, by all means, go ahead, it's
  760.  
  761. quite interesting, albeit such study is NOT necessary to crack
  762.  
  763. these schemes). The important lines are obviously the MOV
  764.  
  765. CX,SS:[BX+04], the STOSB and the REPZ MOVSB (as usual in password
  766.  
  767. protection schemes, you do remember lesson 3, don't you?).
  768.  
  769.      You should be enough crack-able :=) by now (if you have read
  770.  
  771. all the precedent lessons of my tutorial), to find out easily,
  772.  
  773. with these hints, how the working of the protection goes and
  774.  
  775. where dwells in memory the ECHO of the correct rn (passkey) that
  776.  
  777. matches the name you typed in. Remember that in these kind of
  778.  
  779. cracks the ECHO is present somewhere (90% of the cases). There
  780.  
  781. are obviously one thousand way to find such ECHOs directly,
  782.  
  783. without going through the verificayions routines... for instance
  784.  
  785. you could also find them with a couple of well placed
  786.  
  787. snap_compares, it's a "5 minutes" cracking, once you get the
  788.  
  789. working of it. I leave you to find, as interesting exercise, the
  790.  
  791. routine that checks for a "-" inside the rn, a very common
  792.  
  793. protection element.
  794.  
  795.   In order to help you understand the working of the protection
  796.  
  797. code in [Wincat Pro] I'll give you another hint, though: if you
  798.  
  799. type "+ORC+ORC+ORC" as usn, you'll have to type 38108-37864 as
  800.  
  801. rn, if you usn as usn "+ORC+ORC" then the relative rn will be
  802.  
  803. 14055-87593. But these are my personal cracks... I have offered
  804.  
  805. this information only to let you better explore the mathematical
  806.  
  807. tampering of this specific program... you'll better see the
  808.  
  809. snapping mechanism trying them out (going through the routines
  810.  
  811. inside Winice) alternatively with a correct and with a false
  812.  
  813. password. Do not crack Wincat with my combination! If you use a
  814.  
  815. different usn than your own name to crack a program you only show
  816.  
  817. that you are a miserable lamer... no better than the lamers that
  818.  
  819. believe to "crack" software using huge lists of serial numbers...
  820.  
  821. that is really software that they have stolen (Yeah: stolen, not
  822.  
  823. cracked). You should crack your programs, not steal them...
  824.  
  825. "Warez_kids" and "serial#_aficionados" are only useless zombies.
  826.  
  827. I bomb them as soon as I spot them. YOU ARE (gonna be) A CRACKER!
  828.  
  829. It makes a lot of a difference, believe me.
  830.  
  831. Well, that's it for this lesson, reader. Not all lessons of my
  832.  
  833. tutorial are on the Web.
  834.  
  835.      You 'll obtain the missing lessons IF AND ONLY IF you mail
  836.  
  837. me back (via anon.penet.fi) with some tricks of the trade I may
  838.  
  839. not know that YOU discovered. Mostly I'll actually know them
  840.  
  841. already, but if they are really new you'll be given full credit,
  842.  
  843. and even if they are not, should I judge that you "rediscovered"
  844.  
  845. them with your work, or that you actually did good work on them,
  846.  
  847. I'll send you the remaining lessons nevertheless. Your
  848.  
  849. suggestions and critics on the whole crap I wrote are also
  850.  
  851. welcomed.
  852.  
  853.      "If you give a man a crack he'll be hungry again
  854.  
  855.      tomorrow, but if you teach him how to crack, he'll
  856.  
  857.      never be hungry again"
  858.  
  859.                                 E-mail +ORC
  860.  
  861.                            an526164@anon.penet.fi
  862.