Software introduction:
ColorSchemer Studio 2 is a professional color matching application for anyone from hobbyists to advanced professionals.
Work with a dynamic visual color wheel, instantly release e harmony relationships and even let ColorSchemer Studio intelligently suggest color schemes for you!
Official Website: http://www.colorschemer.com/
I tried an article I saw in a forum and found that the version is different from the version, and the algorithm is somewhat different. So I tried to crack it myself.
When software is registered, the system compares them in plain text and reads the Real Registration Code directly from the memory after loading. Let's track the algorithm ....
1. After loading, use the string to find the registered keyword.
We can see that the registration process is: first calculate a large amount of data, then take the code1 and code2 entered at registration, connect code1 and code2 as CODE, then, check whether the data is equal to the CODE. If the data is equal to the CODE, the registration is successful. If the data is not equal, the registration fails ..
2. Go to the place where a large volume of data is computed
In the first part of the algorithm, how does one calculate a key1 (median? The process goes through this: get every bit of the input user name, multiply by 1024, and sum. It is then expressed in decimal format. The result is recorded as KEY1.
3. go backward and come
The above calculation process is as follows: Calculate a number (name [I] % 10 + key1 [I]) % 10 each time, and assign a value through the CALL 00404DCC below.
4. assignment process
Enter 00405150
5. the last eight digits of the registration code are generated after all values are assigned based on the length of the username being 8. The first eight digits of the registration code are two parts: The first part is the fixed "CSS", and the second part is the first five digits of key1.
Look, there are three strings in the stack, and the connection is the registration code ....
Self-reverse algorithms:
TCHAR szUserName [256] = {0};: GetDlgItemText (this-> m_hWnd, IDC_EDT_UserName, szUserName, 256); if (strlen (szUserName )! = 8) {AfxMessageBox ("the user name must contain eight letters or numbers... :) "); return;} DWORD key1 = 0; for (int I = 0; I <strlen (szUserName); I ++) {DWORD dwTemp = (TCHAR) szUserName [I] * pow (2, 16); key1 + = dwTemp;} TCHAR szTempResult [10] = {0}; itoa (key1, (TCHAR *) szTempResult, 10); TCHAR strResult [17] = {0}; for (I = 0; I <strlen (szUserName); I ++) {DWORD dwTemp1 = szUserName [I] % 10; DWORD dwTemp2 = szTempResult [I]-0x30; DWORD dwTemp3 = dwTemp1 + dwTemp2; DWORD dwTemp4 = dwTemp3 % 10; strResult [I + 8] = dwTemp4 + 0x30;} for (I = 0; I <5; I ++) {strResult [I + 3] = szTempResult [I];} strResult [0] = 'C'; strResult [1] ='s '; strResult [2] = 's';: SetDlgItemText (this-> m_hWnd, IDC_EDT_Code, strResult );
The program and code are in the following link.
: Http://download.csdn.net/detail/xiaocaiju/7493841 compressed password: xiaoju