Today, I’ll talk about how to crack WingIDE Professional 4.1.12.
Warning:
DO NOT make commercial use of anything.
If you believe something on this Site has infringed your intellectual property rights, please contact us.
What’s WingIDE?
Wingware's Python IDE is an Integrated Development Environment designed specifically for the Python programming language. Since 1999, Wingware has focused on Python.
How to get WingIDE?
You can download WingIDE from http://wingide.com/downloads.
It’s a cross-platform software and the latest version now is 4.1.12. It has three different versions: WingIDE 101, WingIDE Personal, and WingIDE Professional.
How to Crack WingIDE Professional 4.1.12?
After installing Python and WingIDE on your computer, DO NOT run WingIDE first. You should change the system time to a month ago. Then launch WingIDE and you can get a 10-day trial serial number for temporary use. After that, exit from WingIDE.
Open the installation folder of WingIDE, and open /bin/2.5/src.zip. Extract the file abstract.pyo in the process folder. The file is used for validating the software.
The file abstract.pyo is a bytecode in Python, so we should disassemble it and analyze it. Now, we need a tool called unpyclib library, and you can get it from http://pypi.python.org/pypi/unpyclib/0.8.1, and extract it.
Please notice that, if you use python 3.x or higher, you cannot run it properly (I even tried to translate it to python3 code by using 2to3 library which is supplied by python, but it still doesn’t work). So, please use a lower version of python.
After that, please execute a command in the shell window:
python application.py -d abstract.pyo > abstract.asm
And you will get a new file abstract.asm in the current folder. The file is used to analyze the file abstract.pyo.
The function we are concerned about is called _GetTermDaysLeft:
000051F0 STR: '_GetTermDaysLeft' (10 00 00 00 5F 47 65 74 54 65 72 6D...) …… 00005257 STR: 'tx00x00dx01x00x83x01x00|x01x00dx02x00<x6x00tx01x00D].x00}x03x00|x01x00ix02x00...' (A9 03 00 00 74 00 00 64 01 00 83 01...) …… 00000212 69 - LOAD_ATTR '_locale_valid' 00000215 7D - STORE_FAST 'valid' 00000218 57 - POP_BLOCK 00000219 6E - JUMP_FORWARD -> 00000229 0000021C 01 - POP_TOP 0000021D 01 - POP_TOP 0000021E 01 - POP_TOP 0000021F 64 - LOAD_CONST 0 00000222 7D - STORE_FAST 'valid' 00000225 6E - JUMP_FORWARD -> 00000229 00000228 58 - END_FINALLY 00000229 7C - LOAD_FAST 'valid' 0000022C 70 - JUMP_IF_TRUE -> 00000243 0000022F 01 - POP_TOP 00000230 74 - LOAD_GLOBAL 'kLicenseCorrupt' 00000233 74 - LOAD_GLOBAL '_' 00000236 64 - LOAD_CONST 'Invalid license activation' 00000239 83 - CALL_FUNCTION 0000023C 66 - BUILD_TUPLE 0000023F 53 - RETURN_VALUE 00000240 6E - JUMP_FORWARD -> 00000244 00000243 01 - POP_TOP 00000244 7C - LOAD_FAST 'self' 00000247 69 - LOAD_ATTR '_GetTermDaysLeft' 0000024A 7C - LOAD_FAST 'lic' 0000024D 83 - CALL_FUNCTION 00000250 7D - STORE_FAST 'daysleft' 00000253 7C - LOAD_FAST 'daysleft' 00000256 64 - LOAD_CONST -1 00000259 6A - COMPARE_OP "==" 0000025C 6F - JUMP_IF_FALSE -> 00000273
The most important step is to change 6F to 70. But how to change it? You need a binary editor such as UltraEdit.
After opening abstract.pyo with UltraEdit, you will find lots of hexadecimal code, and which address should we modify? We can calculate in the following way:
First, search “A9 03 00 00 74 00 00 64 01 00 83 01” in the file abstract.asm, and you will find an address at the front of the line: 00005257H. Next, find another line “6F - JUMP_IF_FALSE-> 00000273”, and get another address at the front of the line: 0000025CH. So the address we should modify in the abstract.pyo is 00005257H + 0000025CH = 54B3H.
So, the address of data we should modify is 54B3H. So, find the data in 54B3H. And change 6A into 70 as follows:

After modifying it, replace the file abstract.pyo in the /bin/2.5/src.zip/process/ with the new one.
Before launching the WingIDE, please change the system time to now. And you’ll see the WingIDE has been cracked.
