Search
Search titles only
By:
Search titles only
By:
Log in
Register
Search
Search titles only
By:
Search titles only
By:
Menu
Install the app
Install
Forums
New posts
All threads
Latest threads
New posts
Trending threads
Trending
Search forums
What's new
New posts
New ads
New profile posts
Latest activity
Free Ads
Latest reviews
Search ads
Members
Current visitors
New profile posts
Search profile posts
Contact us
Latest ads
එක පැකේජ් එකයි මාසෙටම Unlimited Internet. තාමත් DATA CARD දාන්න සල්ලි වියදම් කරනවද? අඩුම මිලට අපෙන්.
sayuru bandara
Updated:
Tuesday at 12:30 PM
Ad icon
ඉන්ටර්නෙට් එකෙන් හරියටම සල්ලි හොයන්න සහ Success වෙන්න කැමතිද? 🚀 (E-Money & Success Stories)
siri sumana
Updated:
Saturday at 11:44 PM
Gemini AI PRO 18 months Offer
Hawaka
Updated:
May 27, 2026
Ad icon
koko account
DasunEranga
Updated:
May 27, 2026
Ad icon
koko account
DasunEranga
Updated:
May 27, 2026
Electronics
Vehicles
Property
Search
Reply to thread
Forums
General
ElaKiri Talk!
.::: REVERSE CODING ( from beginning ) :::.
Get the App
JavaScript is disabled. For a better experience, please enable JavaScript in your browser before proceeding.
You are using an out of date browser. It may not display this or other websites correctly.
You should upgrade or use an
alternative browser
.
Message
<blockquote data-quote="DragonD" data-source="post: 3736899" data-attributes="member: 146813"><p style="text-align: center"><span style="font-size: 15px">I found a very valuable article on REVERSE CODING..................</span></p><p></p><p style="text-align: center"><span style="font-size: 12px">Any one interested on these and don't know any thing on cracking too can learn from this</span></p><p></p><p> </p><p style="text-align: center"><span style="font-size: 15px">This is for Elakirians who are interested on <strong>PROGRAMMING , HACKING , CRACKING & DEVELOPING</strong></span></p><p></p><p> </p><p style="text-align: center">Index:</p> <p style="text-align: center">-------</p> <p style="text-align: center">1.Introduction</p> <p style="text-align: center">2.Disclaimer</p> <p style="text-align: center">3.Hexadecimal</p> <p style="text-align: center">4.RAM and ROM</p> <p style="text-align: center">5.ASM</p> <p style="text-align: center">6.Needed programs</p> <p style="text-align: center">7.Cracking</p> <p style="text-align: center">8.Conclusion</p><p></p><p style="text-align: center">---------------------------</p> <p style="text-align: center">---<strong>Introduction</strong>---</p><p></p><p style="text-align: center">Welcome to my Reverse Coding tutorial! In this paper, you will</p> <p style="text-align: center">learn how to crack and modify your own software. I'll try to get</p> <p style="text-align: center">into as much detail as possible, yet also dumb it down a bit. =)</p><p></p><p> </p><p style="text-align: center">------------------------------------------------------------------------------------------------------</p> <p style="text-align: center"><strong>---Disclaimer---</strong></p><p></p><p style="text-align: center">All information is purely for educational purposes only! The author</p> <p style="text-align: center">cannot be held responsible for any (ab)use of this information.</p> <p style="text-align: center">USE AT YOUR OWN RISK!!!</p><p></p><p style="text-align: center">------------------------------------------------------------------------------------------------------</p> <p style="text-align: center"><strong>---Hexadecimal-------</strong></p><p></p><p style="text-align: center">To begin, I'm going to teach you about hexadecimal, so if you already</p> <p style="text-align: center">know it, then move on. Even if you do already know it, I suggest</p> <p style="text-align: center">sticking around for a refreshment of your memory.=)</p> <p style="text-align: center">Hexadecimal, or hex as it's more commonly known, is a base 16</p> <p style="text-align: center">numbering system. Base 16 meaning that it consists of 16 numbers:</p> <p style="text-align: center">0-9 and A-F. Each of these numbers (A-F=10-16) have a value of 4 bits</p> <p style="text-align: center">and are also called nibbles. In representing a hexadecimal number, one</p> <p style="text-align: center">would write an "0x" before the actual bit set. 0x is simply a tag put</p> <p style="text-align: center">before a hex number to let programmers know that it is in fact, hex.</p> <p style="text-align: center">When writing hex, you will not need to use this prefix.</p> <p style="text-align: center">If you haven't already noticed, the 0x prefix looks similar to that of exponential</p> <p style="text-align: center">notation. Actually this is where 0x has been derived, seeing as how</p> <p style="text-align: center">hex is simply a number that has been raised to a power of 16.</p> <p style="text-align: center">This means 10 in hexadecimal represents the value 16+0, or 16. So check</p> <p style="text-align: center">out this example:</p> <p style="text-align: center">0xB3 (hex)= 2*16(squared)+11*16(to the 1st power)+3*16(to the power of 0 )</p> <p style="text-align: center">=2*256+11*16+3=691 (decimal)</p> <p style="text-align: center">Yeah, you could do all of that, or you could be lazy and use an automated</p> <p style="text-align: center">program that does it all for you. Why do you need to know hex? Because</p> <p style="text-align: center">it's used by every piece of software and hardware. How? Memory based address</p> <p style="text-align: center">allocation. Here's an example:</p> <p style="text-align: center">When you clicked on your browsers icon to launch it, the click triggered a "call"</p> <p style="text-align: center">(an asm function that will be discussed more in depth in later chapters.) which</p> <p style="text-align: center">went back to the programs memory with the "click in it's hand." It finds the</p> <p style="text-align: center">address where the code is that makes the program launch and executes it. The</p> <p style="text-align: center">address is written in, you guessed it, hex. An example of an address would be</p> <p style="text-align: center">something like this:</p> <p style="text-align: center">101c5018</p> <p style="text-align: center">5108 would be the actual specific address and 101c would be the sector</p> <p style="text-align: center">of RAM were the address is located. Those are the basics of Hexadecimal</p> <p style="text-align: center">You should probley read this chapter againbecause getting a firm grasp on hex</p> <p style="text-align: center">is essential to cracking and moding programs.</p> <p style="text-align: center">----------------------------------------------------------------------------------------------------------</p> <p style="text-align: center"><strong>---RAM and ROM--------</strong></p><p></p><p style="text-align: center">In this section we are gonna learn about RAM and ROM. Many people kno about</p> <p style="text-align: center">the hardware part of RAM and ROM and that's gonna be very useful to you......</p> <p style="text-align: center">just not in this tutorial. =) We are about to learn about the "software" side. I use the</p> <p style="text-align: center">term software loosly in that software tends to have a GUI (Graphical User Interface)</p> <p style="text-align: center">and this does not. BUT, there are ways to access and modify the behavior of it that</p> <p style="text-align: center">I will talk about in this chapter, as well as in the next. To start off, I'll answer some</p> <p style="text-align: center">common questions:</p> <p style="text-align: center">What is RAM?</p> <p style="text-align: center">RAM (Random Access Memory) is basically memory and the process of accessing it.</p> <p style="text-align: center">The term "Random Access Memory" was approprietly given to this memory unit because</p> <p style="text-align: center">when executing a command, the CPU doesn't have to scroll through all the memory on</p> <p style="text-align: center">your PC until it finds the right address. It "randomly" whips out the addy from it's back</p> <p style="text-align: center">pocket and serves it up.This process is both quick and efficient. Learning this process</p> <p style="text-align: center">will help you understand the ASM functions in the next chapter.</p> <p style="text-align: center">How does RAM work?</p> <p style="text-align: center">When a command is issued and the memory is pulled from file, it must first go through</p> <p style="text-align: center">what is called a "vector". A vector is a "gateway" or a "sector" of RAM where the address</p> <p style="text-align: center">of the function is stored with others of it's own kind. An example of a vector would be</p> <p style="text-align: center">something like this:</p> <p style="text-align: center">8c0000b4-8c00ffff</p> <p style="text-align: center">This means that all "addressii" (hehe) that are between those values are stored in that</p> <p style="text-align: center">sector of RAM. A vector acts as a gateway in that, first, pass through a vector to get to</p> <p style="text-align: center">address. Your average program probley has about 30 to 40 main vectors, sectioning</p> <p style="text-align: center">off from boot until exit. Knowing the vector of an addy or a function will greatly reduce</p> <p style="text-align: center">your headache when you start searching for it.</p> <p style="text-align: center">ROM. ROM is a part of memory that doesn't change. (Although we can change it.=) )</p> <p style="text-align: center">Boot ROM for instance, follows the same plan of action it is called upon. ROM also has</p> <p style="text-align: center">vectors, just like RAM. ROM is not that important when it comes to cracking to we will</p> <p style="text-align: center">leave it alone for now.</p> <p style="text-align: center">Back to RAM. Believe it or not, but addressii (there I go again, I'm such a g33k.)</p> <p style="text-align: center">actually follow certain formats or syntax's for certain functions. Take hot keys for</p> <p style="text-align: center">example: In the under ground, we call them "Joker commands". By pressing a certain</p> <p style="text-align: center">combonation of keys, a program will run, close, be stupid, whatever. The syntax for a</p> <p style="text-align: center">Joker command is as follows:</p> <p style="text-align: center">0d-aaaaaf</p> <p style="text-align: center">000zvvvv</p> <p style="text-align: center">Let's examine this format a little closer.</p> <p style="text-align: center">0d= The proclemation of a specifyed format</p> <p style="text-align: center">aaaaa= The address of the function</p> <p style="text-align: center">f= The float or remainder; "Floating point number" ; decimal</p> <p style="text-align: center">000= "NOP" No operation</p> <p style="text-align: center">z= The "Booleon" as we the C++ programmers call it. A booleon is an "IF, THEN" statement.</p> <p style="text-align: center">"IF this is true, THEN do this." Value 0= equal; 1= different; 2=less than; 3=greater than.</p> <p style="text-align: center">vvvv= The combonation of hex values (The values of the keys pressed) used to execute the "CALL"</p> <p style="text-align: center">Say the "A" key had a vlaue of fffb and the "B" key has a vlaue of fffd. You would then add both</p> <p style="text-align: center">values using a hex calculator and get fff9 as the sum. The output on you calculator would</p> <p style="text-align: center">show 1fff8. Add the first value and the last value to find the fourth byte segment. So say</p> <p style="text-align: center">we've found the address of the Joker function (usually in the boot ROM sector) commonly</p> <p style="text-align: center">called the "Maple address" and we are ready to program in some hex code. Our code may</p> <p style="text-align: center">look like this:</p> <p style="text-align: center">0d7ae671</p> <p style="text-align: center">0000fff9</p> <p style="text-align: center">This means that IF the value of fff9 (A and B) is equal (0) to the address (aaaaf) of the function,</p> <p style="text-align: center">THEN execute it. See? Easy isn't it? You'll need to know things like this when modding programs</p> <p style="text-align: center">as a use of executing of your arbitrary code in certain parts of your program at a certain time.</p> <p style="text-align: center">Joker commands are also reversable in that if you enter the same code except with a 1,2, or 3,</p> <p style="text-align: center">in the z slot and by changing the button combonations. Reversable meaning terminating the</p> <p style="text-align: center">function or other functions that were started. A good use for this is for firewalls and babysitting</p> <p style="text-align: center">programs. Are you on a college machine and can't download stuff because of that pesky firewall?</p> <p style="text-align: center">Crack it open and program in some Joker commands so you can turn it on and off at will</p> <p style="text-align: center">WITHOUT the administrator's password!</p> <p style="text-align: center">--------------------------------------------------------------------------------------------------------------</p> <p style="text-align: center"><strong>---ASM---</strong></p><p></p><p> </p><p style="text-align: center">To start off with our small and to the point ASM section, I'll warn you in advance, after reading this,</p> <p style="text-align: center">you'll need to go take a shower cause this is disgusting! Here we go!</p> <p style="text-align: center">To begin, I'm gonna define for you some functions that you'll be seeing alot of, and be using. Here they are:</p> <p style="text-align: center">.:Hex:. .:ASM:. .:MEANING:.</p> <p style="text-align: center">75,0f85 jne jump if not equal</p> <p style="text-align: center">74,0f84 je jump is equal</p> <p style="text-align: center">eb jmp jump directly to</p> <p style="text-align: center">90 nop no operation</p> <p style="text-align: center">77,0f87 ja jump if above</p> <p style="text-align: center">0f86 jna jump if not above</p> <p style="text-align: center">0f83 jae jump if above or equal to</p> <p style="text-align: center">0f82 jnae jump if not above or equal</p> <p style="text-align: center">0f82 jb jump if below</p> <p style="text-align: center">0f83 jnb jump is not below</p> <p style="text-align: center">of86 jbe jump if below or equal</p> <p style="text-align: center">0f87 jnbe jump if not below or equal</p> <p style="text-align: center">0f8f jg jump if greater</p> <p style="text-align: center">0f8e jng jump if not greater</p> <p style="text-align: center">0f8d jge jump if greater or equal</p> <p style="text-align: center">0f8c jnge jump if not greater or equal</p> <p style="text-align: center">0f8c jl jump if less</p> <p style="text-align: center">0f8d jnl jump if not less</p> <p style="text-align: center">0f8e jle jump if less or equal</p> <p style="text-align: center">0f8f jnle jump if not less or equal</p> <p style="text-align: center">The easy thing about most of the functions in ASM are that they sound like what they mean.</p> <p style="text-align: center">Jump, means of coarse, to Jump from one thing to another. Example:</p> <p style="text-align: center">"jmp 00401744" would mean to jump directly to the address 00401744 once the code</p> <p style="text-align: center">hits the function.</p> <p style="text-align: center">Let's look at "CALL". Call is a function that is used to "call" a certain task, string, address, whatever.</p> <p style="text-align: center">Take a look at this example:</p> <p style="text-align: center">"Call 0040ccc2" this would of coarse call the address 0040ccc2 and use it. Those are the functions</p> <p style="text-align: center">you'll be using.</p> <p style="text-align: center">The reason why I'm not going into loads of detail in this chapter is because when</p> <p style="text-align: center">cracking software, not an extensive amount of knowledge of ASM is needed. If you want</p> <p style="text-align: center">to know more or need help with something, e-mail me at the address provided at the end of</p> <p style="text-align: center">this tutorial. This chapter wasn't so nasty was it? Nah, it was easy =)</p> <p style="text-align: center">------------------------------------------------------------------------------------------------------------------------</p> <p style="text-align: center">---Needed Programs----------------</p> <p style="text-align: center">The programs you will need are as follows:</p> <p style="text-align: center">WDasm 8.9 or Higher</p> <p style="text-align: center">Hiew 6.1</p> <p style="text-align: center">Softice for win9x v3.24</p> <p style="text-align: center">SubmitWolf(demo)v4.01 (<a href="http://www.trellian.com/swolf" target="_blank">http://www.trellian.com/swolf</a>)</p> <p style="text-align: center">Programming Language (C,C++,Pascal,ASM whatever you would like) Prefably C for this tutorial!</p> <p style="text-align: center">And a brain (no seriously)</p> <p style="text-align: center">--------------------------------------------------------------------------------------------------------------------------</p> <p style="text-align: center"><strong>---Cracking---</strong></p><p></p><p style="text-align: center">Ok, here we go! The first thing you need to do is to open up SoftIce and then swolf32.exe which is the name given to our</p> <p style="text-align: center">target program. Go to the help menu and select register. Here's where your brain will come in, start to look</p> <p style="text-align: center">for how the protection is running by entering some random crap into the blank space. Don't press the OK button yet though.</p> <p style="text-align: center">Instead, press CTRL-D to bring up SoftIce. What we are gonna try to do is define a breakpoint, using BPX hmemcpy.</p> <p style="text-align: center">Hit CTRL-D again and it will bring you back to the program. Click OK on the box and SoftIce will again pop up. Now press F12</p> <p style="text-align: center">and it will bring you to the target program code. Scroll down a few lines and find:</p> <p style="text-align: center">:004167D9 8D4C2410 lea ecx, dword ptr {esp+10}--;ecx=the random crap you typed in.</p> <p style="text-align: center">:004167DD 8D94290000000 lea edx, dword ptr {esp+00000090}-;edx=name</p> <p style="text-align: center">:004167E4 51 push ecx</p> <p style="text-align: center">:004167E5 52 push edx</p> <p style="text-align: center">:004167E6 E8B5450100 call 0042ADA0----;this is the call which calculates the serial</p> <p style="text-align: center">:004167EB 83C410 add esp, 00000010--;</p> <p style="text-align: center">:004167EE 85C0 test eax, eax----;and return eax=1 if true (booleon =) )</p> <p style="text-align: center">:004167F0 0F8596000000 jne 0041688C----;jump to registered</p> <p style="text-align: center">:004167F6 8D442408 lea eax, dword ptr {esp+08}</p> <p style="text-align: center">:004167FA 8D8C2488000000 lea ecx, dword ptr {esp+00000088}</p> <p style="text-align: center">:00416801 50 push eax</p> <p style="text-align: center">:00416802 51 push ecx</p> <p style="text-align: center">:00416803 E868470100 call 0042AF70----;this call tests our serial</p> <p style="text-align: center">:00416808 83C408 add esp, 00000008---;</p> <p style="text-align: center">:0041680B 85C0 test eax, eax----;for v3.XX one.</p> <p style="text-align: center">:0041680D 7433 je 00416842;jump is equal</p> <p style="text-align: center">The call that we want to focas on is at 004167E6. This call tests wether our serial is for the correct version or not.</p> <p style="text-align: center">Let's trace the call 004ADA0:</p> <p style="text-align: center">*Referenced by a CALL at address:</p> <p style="text-align: center">:0042ABFC</p> <p style="text-align: center">:0042ADA 83EC30 sub esp, 00000030</p> <p style="text-align: center">:0042ADA3 55 push ebp</p> <p style="text-align: center">:0042ASA4 56 push esi</p> <p style="text-align: center">:004ADA5 57 push edi</p> <p style="text-align: center">:0042ADA6 8B7C24444 mov edi, dword ptr {esp+44}--;edi=our fake serial</p> <p style="text-align: center">:004ADAA 85FF test edi, edi</p> <p style="text-align: center">:004ADAC 0F4A7010000 je 0042AF59----;die if empty</p> <p style="text-align: center">:004ADB2 8B6C2440 mov ebp, dword ptr {esp+40}--ebp=our name</p> <p style="text-align: center">:0042ADB6 85ED test ebp, ebp</p> <p style="text-align: center">:004ADB8 0F849B010000 je 0042AF59---;die if empty</p> <p style="text-align: center">:004ADBE 8A07 mov al, byte ptr {edi}--;compare 1st byte of serial with 'p', die</p> <p style="text-align: center">:0042ADC0 3C50 cmp al, 50----;</p> <p style="text-align: center">:0042ADC2 0F8587010000 jne 0042AF4F----;if not equal</p> <p style="text-align: center">:0042ADC8 807F0134 cmp byte ptr {edi+01}, 34--:compare byte of serial with '4'</p> <p style="text-align: center">:004ADCC 750C jne 0042ADDA----;</p> <p style="text-align: center">:0042ADCE C70500C8430000000000 mov dword ptr {0043C800}, 00000000</p> <p style="text-align: center">:0042ADD8 EB1C jmp 0042ADF6</p> <p style="text-align: center">As we can see by the above, the code tells us that the first value of our serial will</p> <p style="text-align: center">be 'p' and a cycle of a four byte algorythm. I could go on and on about all of the internals</p> <p style="text-align: center">of all this stuff but that would be going beyond the scope of this tutorial. The idea was to show</p> <p style="text-align: center">how to crack this pro, and thats what I'm going to do. Based on the information I've given you, and the</p> <p style="text-align: center">information that you can deduce from reading the code, I've written a small key generator in C.</p> <p style="text-align: center">If you know C, then you'll be able to tell where i got the algorythms to write it. So here it is:</p> <p style="text-align: center">#include<stdio.h></p> <p style="text-align: center">#include<conio.h></p> <p style="text-align: center">int main(void)</p> <p style="text-align: center">{</p> <p style="text-align: center">long code=555583,count1,count2;</p> <p style="text-align: center">char name[25],cod[5],type='0';</p> <p style="text-align: center">clrscr();</p> <p style="text-align: center">textcolor(14);</p> <p style="text-align: center">printf("This is a simple key-generator written by k33t of CYBNET Security Group");</p> <p style="text-align: center">printf("=================================================");</p> <p style="text-align: center">text color(10);</p> <p style="text-align: center">printf("SubmitWolf(demo)ver4.1 cracked by k33t");</p> <p style="text-align: center">textcolor(14);</p> <p style="text-align: center">printf("%c%c%c",0x10,0x10,0x10");</p> <p style="text-align: center">textcolor(12);</p> <p style="text-align: center">printf("Yup")</p> <p style="text-align: center">prinf("-November 2002");</p> <p style="text-align: center">prinf("'\n\nSelect Edition PRO(0) or Enterprise(1) (0/1)=");</p> <p style="text-align: center">scanf("%c",&type);</p> <p style="text-align: center">if(type=='1')code=557283;</p> <p style="text-align: center">getchar();</p> <p style="text-align: center">prinf("Enter Registration Name=");</p> <p style="text-align: center">scanf("%[^\n]",name);</p> <p style="text-align: center">for(count1=0;count1<=3;count1++</p> <p style="text-align: center">cod[count1]=name[count1];</p> <p style="text-align: center">for(count=1;count1=3;count1++){</p> <p style="text-align: center">for(count2=0;count2<=3;count2++)</p> <p style="text-align: center">cod[count2]=cod[count2]*(code%100);</p> <p style="text-align: center">code=code/100;</p> <p style="text-align: center">}</p> <p style="text-align: center">for(count1=0;name[count1]>0;count1++);</p> <p style="text-align: center">for(count2=0;count2<=3;count2++)</p> <p style="text-align: center">cod[count2]=cod[count2]^(name[count1]+3);</p> <p style="text-align: center">for=(count1-3;count1>=0;count1--){</p> <p style="text-align: center">code=code+(cod[count1]&0xFF);</p> <p style="text-align: center">if(count1>0)</p> <p style="text-align: center">code=code*0x100;</p> <p style="text-align: center">}</p> <p style="text-align: center">if(code<0)code=-code;</p> <p style="text-align: center">for(;code<10000code=code*10;</p> <p style="text-align: center">for(;code>999999code=code/10;</p> <p style="text-align: center">printf(Your Serial Number=P%c4-%ld",(type=='1')? 'E':'4'code);</p> <p style="text-align: center">return ;</p> <p style="text-align: center">}</p> <p style="text-align: center">Ok! So! An overall conclusion of this code is:</p> <p style="text-align: center">1.First two characters of the serial must be either 'PE' or 'P4'.</p> <p style="text-align: center">2.Multiply every first four characters or our name with every byte of our serial before '-'</p> <p style="text-align: center">3.XOR every four byte with every byte of our name.</p> <p style="text-align: center">4.Convert to positive number if<0.</p> <p style="text-align: center">5.Convert to number between 10000 and 1000000.</p> <p style="text-align: center">Forgive me if this code is buggy as I wrote it very quickly in the little spare time I had.</p> <p style="text-align: center">-----------------------------------------------------------------------------------------------------------</p> <p style="text-align: center">---Conclusion-------</p> <p style="text-align: center">Well how was your first cracking expierience? Not bad eh? Ok well if you have any questions,</p><p></p><p> </p><p style="text-align: center">problems,comments,.....criticsms.......you can e-mail them at <a href="mailto:k33t@hushmail.com">k33t@hushmail.com</a></p> <p style="text-align: center">------------------------------</p><p></p><p> </p><p> </p><p style="text-align: left"><strong>If you are interested in these subjects leave a comment..............</strong></p></blockquote><p></p>
[QUOTE="DragonD, post: 3736899, member: 146813"] [CENTER][SIZE=4]I found a very valuable article on REVERSE CODING..................[/SIZE][/CENTER] [CENTER][SIZE=3]Any one interested on these and don't know any thing on cracking too can learn from this[/SIZE][/CENTER] [CENTER][SIZE=4]This is for Elakirians who are interested on [B]PROGRAMMING , HACKING , CRACKING & DEVELOPING[/B][/SIZE][/CENTER] [CENTER]Index: ------- 1.Introduction 2.Disclaimer 3.Hexadecimal 4.RAM and ROM 5.ASM 6.Needed programs 7.Cracking 8.Conclusion[/CENTER] [CENTER]--------------------------- ---[B]Introduction[/B]---[/CENTER] [CENTER]Welcome to my Reverse Coding tutorial! In this paper, you will learn how to crack and modify your own software. I'll try to get into as much detail as possible, yet also dumb it down a bit. =)[/CENTER] [CENTER]------------------------------------------------------------------------------------------------------ [B]---Disclaimer---[/B][/CENTER] [CENTER]All information is purely for educational purposes only! The author cannot be held responsible for any (ab)use of this information. USE AT YOUR OWN RISK!!![/CENTER] [CENTER]------------------------------------------------------------------------------------------------------ [B]---Hexadecimal-------[/B][/CENTER] [CENTER]To begin, I'm going to teach you about hexadecimal, so if you already know it, then move on. Even if you do already know it, I suggest sticking around for a refreshment of your memory.=) Hexadecimal, or hex as it's more commonly known, is a base 16 numbering system. Base 16 meaning that it consists of 16 numbers: 0-9 and A-F. Each of these numbers (A-F=10-16) have a value of 4 bits and are also called nibbles. In representing a hexadecimal number, one would write an "0x" before the actual bit set. 0x is simply a tag put before a hex number to let programmers know that it is in fact, hex. When writing hex, you will not need to use this prefix. If you haven't already noticed, the 0x prefix looks similar to that of exponential notation. Actually this is where 0x has been derived, seeing as how hex is simply a number that has been raised to a power of 16. This means 10 in hexadecimal represents the value 16+0, or 16. So check out this example: 0xB3 (hex)= 2*16(squared)+11*16(to the 1st power)+3*16(to the power of 0 ) =2*256+11*16+3=691 (decimal) Yeah, you could do all of that, or you could be lazy and use an automated program that does it all for you. Why do you need to know hex? Because it's used by every piece of software and hardware. How? Memory based address allocation. Here's an example: When you clicked on your browsers icon to launch it, the click triggered a "call" (an asm function that will be discussed more in depth in later chapters.) which went back to the programs memory with the "click in it's hand." It finds the address where the code is that makes the program launch and executes it. The address is written in, you guessed it, hex. An example of an address would be something like this: 101c5018 5108 would be the actual specific address and 101c would be the sector of RAM were the address is located. Those are the basics of Hexadecimal You should probley read this chapter againbecause getting a firm grasp on hex is essential to cracking and moding programs. ---------------------------------------------------------------------------------------------------------- [B]---RAM and ROM--------[/B][/CENTER] [CENTER]In this section we are gonna learn about RAM and ROM. Many people kno about the hardware part of RAM and ROM and that's gonna be very useful to you...... just not in this tutorial. =) We are about to learn about the "software" side. I use the term software loosly in that software tends to have a GUI (Graphical User Interface) and this does not. BUT, there are ways to access and modify the behavior of it that I will talk about in this chapter, as well as in the next. To start off, I'll answer some common questions: What is RAM? RAM (Random Access Memory) is basically memory and the process of accessing it. The term "Random Access Memory" was approprietly given to this memory unit because when executing a command, the CPU doesn't have to scroll through all the memory on your PC until it finds the right address. It "randomly" whips out the addy from it's back pocket and serves it up.This process is both quick and efficient. Learning this process will help you understand the ASM functions in the next chapter. How does RAM work? When a command is issued and the memory is pulled from file, it must first go through what is called a "vector". A vector is a "gateway" or a "sector" of RAM where the address of the function is stored with others of it's own kind. An example of a vector would be something like this: 8c0000b4-8c00ffff This means that all "addressii" (hehe) that are between those values are stored in that sector of RAM. A vector acts as a gateway in that, first, pass through a vector to get to address. Your average program probley has about 30 to 40 main vectors, sectioning off from boot until exit. Knowing the vector of an addy or a function will greatly reduce your headache when you start searching for it. ROM. ROM is a part of memory that doesn't change. (Although we can change it.=) ) Boot ROM for instance, follows the same plan of action it is called upon. ROM also has vectors, just like RAM. ROM is not that important when it comes to cracking to we will leave it alone for now. Back to RAM. Believe it or not, but addressii (there I go again, I'm such a g33k.) actually follow certain formats or syntax's for certain functions. Take hot keys for example: In the under ground, we call them "Joker commands". By pressing a certain combonation of keys, a program will run, close, be stupid, whatever. The syntax for a Joker command is as follows: 0d-aaaaaf 000zvvvv Let's examine this format a little closer. 0d= The proclemation of a specifyed format aaaaa= The address of the function f= The float or remainder; "Floating point number" ; decimal 000= "NOP" No operation z= The "Booleon" as we the C++ programmers call it. A booleon is an "IF, THEN" statement. "IF this is true, THEN do this." Value 0= equal; 1= different; 2=less than; 3=greater than. vvvv= The combonation of hex values (The values of the keys pressed) used to execute the "CALL" Say the "A" key had a vlaue of fffb and the "B" key has a vlaue of fffd. You would then add both values using a hex calculator and get fff9 as the sum. The output on you calculator would show 1fff8. Add the first value and the last value to find the fourth byte segment. So say we've found the address of the Joker function (usually in the boot ROM sector) commonly called the "Maple address" and we are ready to program in some hex code. Our code may look like this: 0d7ae671 0000fff9 This means that IF the value of fff9 (A and B) is equal (0) to the address (aaaaf) of the function, THEN execute it. See? Easy isn't it? You'll need to know things like this when modding programs as a use of executing of your arbitrary code in certain parts of your program at a certain time. Joker commands are also reversable in that if you enter the same code except with a 1,2, or 3, in the z slot and by changing the button combonations. Reversable meaning terminating the function or other functions that were started. A good use for this is for firewalls and babysitting programs. Are you on a college machine and can't download stuff because of that pesky firewall? Crack it open and program in some Joker commands so you can turn it on and off at will WITHOUT the administrator's password! -------------------------------------------------------------------------------------------------------------- [B]---ASM---[/B][/CENTER] [CENTER]To start off with our small and to the point ASM section, I'll warn you in advance, after reading this, you'll need to go take a shower cause this is disgusting! Here we go! To begin, I'm gonna define for you some functions that you'll be seeing alot of, and be using. Here they are: .:Hex:. .:ASM:. .:MEANING:. 75,0f85 jne jump if not equal 74,0f84 je jump is equal eb jmp jump directly to 90 nop no operation 77,0f87 ja jump if above 0f86 jna jump if not above 0f83 jae jump if above or equal to 0f82 jnae jump if not above or equal 0f82 jb jump if below 0f83 jnb jump is not below of86 jbe jump if below or equal 0f87 jnbe jump if not below or equal 0f8f jg jump if greater 0f8e jng jump if not greater 0f8d jge jump if greater or equal 0f8c jnge jump if not greater or equal 0f8c jl jump if less 0f8d jnl jump if not less 0f8e jle jump if less or equal 0f8f jnle jump if not less or equal The easy thing about most of the functions in ASM are that they sound like what they mean. Jump, means of coarse, to Jump from one thing to another. Example: "jmp 00401744" would mean to jump directly to the address 00401744 once the code hits the function. Let's look at "CALL". Call is a function that is used to "call" a certain task, string, address, whatever. Take a look at this example: "Call 0040ccc2" this would of coarse call the address 0040ccc2 and use it. Those are the functions you'll be using. The reason why I'm not going into loads of detail in this chapter is because when cracking software, not an extensive amount of knowledge of ASM is needed. If you want to know more or need help with something, e-mail me at the address provided at the end of this tutorial. This chapter wasn't so nasty was it? Nah, it was easy =) ------------------------------------------------------------------------------------------------------------------------ ---Needed Programs---------------- The programs you will need are as follows: WDasm 8.9 or Higher Hiew 6.1 Softice for win9x v3.24 SubmitWolf(demo)v4.01 ([URL="http://www.trellian.com/swolf"]http://www.trellian.com/swolf[/URL]) Programming Language (C,C++,Pascal,ASM whatever you would like) Prefably C for this tutorial! And a brain (no seriously) -------------------------------------------------------------------------------------------------------------------------- [B]---Cracking---[/B][/CENTER] [CENTER]Ok, here we go! The first thing you need to do is to open up SoftIce and then swolf32.exe which is the name given to our target program. Go to the help menu and select register. Here's where your brain will come in, start to look for how the protection is running by entering some random crap into the blank space. Don't press the OK button yet though. Instead, press CTRL-D to bring up SoftIce. What we are gonna try to do is define a breakpoint, using BPX hmemcpy. Hit CTRL-D again and it will bring you back to the program. Click OK on the box and SoftIce will again pop up. Now press F12 and it will bring you to the target program code. Scroll down a few lines and find: :004167D9 8D4C2410 lea ecx, dword ptr {esp+10}--;ecx=the random crap you typed in. :004167DD 8D94290000000 lea edx, dword ptr {esp+00000090}-;edx=name :004167E4 51 push ecx :004167E5 52 push edx :004167E6 E8B5450100 call 0042ADA0----;this is the call which calculates the serial :004167EB 83C410 add esp, 00000010--; :004167EE 85C0 test eax, eax----;and return eax=1 if true (booleon =) ) :004167F0 0F8596000000 jne 0041688C----;jump to registered :004167F6 8D442408 lea eax, dword ptr {esp+08} :004167FA 8D8C2488000000 lea ecx, dword ptr {esp+00000088} :00416801 50 push eax :00416802 51 push ecx :00416803 E868470100 call 0042AF70----;this call tests our serial :00416808 83C408 add esp, 00000008---; :0041680B 85C0 test eax, eax----;for v3.XX one. :0041680D 7433 je 00416842;jump is equal The call that we want to focas on is at 004167E6. This call tests wether our serial is for the correct version or not. Let's trace the call 004ADA0: *Referenced by a CALL at address: :0042ABFC :0042ADA 83EC30 sub esp, 00000030 :0042ADA3 55 push ebp :0042ASA4 56 push esi :004ADA5 57 push edi :0042ADA6 8B7C24444 mov edi, dword ptr {esp+44}--;edi=our fake serial :004ADAA 85FF test edi, edi :004ADAC 0F4A7010000 je 0042AF59----;die if empty :004ADB2 8B6C2440 mov ebp, dword ptr {esp+40}--ebp=our name :0042ADB6 85ED test ebp, ebp :004ADB8 0F849B010000 je 0042AF59---;die if empty :004ADBE 8A07 mov al, byte ptr {edi}--;compare 1st byte of serial with 'p', die :0042ADC0 3C50 cmp al, 50----; :0042ADC2 0F8587010000 jne 0042AF4F----;if not equal :0042ADC8 807F0134 cmp byte ptr {edi+01}, 34--:compare byte of serial with '4' :004ADCC 750C jne 0042ADDA----; :0042ADCE C70500C8430000000000 mov dword ptr {0043C800}, 00000000 :0042ADD8 EB1C jmp 0042ADF6 As we can see by the above, the code tells us that the first value of our serial will be 'p' and a cycle of a four byte algorythm. I could go on and on about all of the internals of all this stuff but that would be going beyond the scope of this tutorial. The idea was to show how to crack this pro, and thats what I'm going to do. Based on the information I've given you, and the information that you can deduce from reading the code, I've written a small key generator in C. If you know C, then you'll be able to tell where i got the algorythms to write it. So here it is: #include<stdio.h> #include<conio.h> int main(void) { long code=555583,count1,count2; char name[25],cod[5],type='0'; clrscr(); textcolor(14); printf("This is a simple key-generator written by k33t of CYBNET Security Group"); printf("================================================="); text color(10); printf("SubmitWolf(demo)ver4.1 cracked by k33t"); textcolor(14); printf("%c%c%c",0x10,0x10,0x10"); textcolor(12); printf("Yup") prinf("-November 2002"); prinf("'\n\nSelect Edition PRO(0) or Enterprise(1) (0/1)="); scanf("%c",&type); if(type=='1')code=557283; getchar(); prinf("Enter Registration Name="); scanf("%[^\n]",name); for(count1=0;count1<=3;count1++ cod[count1]=name[count1]; for(count=1;count1=3;count1++){ for(count2=0;count2<=3;count2++) cod[count2]=cod[count2]*(code%100); code=code/100; } for(count1=0;name[count1]>0;count1++); for(count2=0;count2<=3;count2++) cod[count2]=cod[count2]^(name[count1]+3); for=(count1-3;count1>=0;count1--){ code=code+(cod[count1]&0xFF); if(count1>0) code=code*0x100; } if(code<0)code=-code; for(;code<10000code=code*10; for(;code>999999code=code/10; printf(Your Serial Number=P%c4-%ld",(type=='1')? 'E':'4'code); return ; } Ok! So! An overall conclusion of this code is: 1.First two characters of the serial must be either 'PE' or 'P4'. 2.Multiply every first four characters or our name with every byte of our serial before '-' 3.XOR every four byte with every byte of our name. 4.Convert to positive number if<0. 5.Convert to number between 10000 and 1000000. Forgive me if this code is buggy as I wrote it very quickly in the little spare time I had. ----------------------------------------------------------------------------------------------------------- ---Conclusion------- Well how was your first cracking expierience? Not bad eh? Ok well if you have any questions,[/CENTER] [CENTER]problems,comments,.....criticsms.......you can e-mail them at [EMAIL="k33t@hushmail.com"]k33t@hushmail.com[/EMAIL] ------------------------------[/CENTER] [LEFT][B]If you are interested in these subjects leave a comment..............[/B][/LEFT] [/QUOTE]
Insert quotes…
Verification
Dahaya deken beduwama keeyada?
Post reply
Top
Bottom