某格仔铺软件注册码算法的分析
来源:互联网 发布:skype 4.3 for ubuntu 编辑:程序博客网 时间:2024/05/16 19:40
昨天,有个朋友给了个软件让我看看,说他有个朋友在深圳开格仔铺,想用这个软件。我一直没搞懂格仔铺这种东西怎么会有人去租呢,据说在日韩很流行,现在国内也有不少年轻人在玩。我想,可能这种模式正好填补了C2C实体店的空缺,看看现在如火如荼的淘宝也许就不难理解了。我家不远就有一间,装修得挺潮流的,改天有空去体验一下。。。
该软件是用于格仔铺管理的,版本是最新的v7.4,分析如下:
首先用PEiD分析主程序GZPManager1.exe,显示“ACProtect V2.0 -> risco *”壳,根据堆栈平衡原理很快找到OEP,然后用LordPE dump下来,再用ImportREC修复IAT,很容易就把该壳脱掉。然后,再用PEiD分析,显示“Borland Delphi 6.0 - 7.0”,表示程序是用Delphi开发的。打开DeDe分析已经脱壳的GZPManager1.exe,我们可以轻松得到“软件注册”窗口“确定”按钮的事件响应函数地址。接下来就可以用OllyDbg调试该函数了。该函数的结构很简单,大概注册码检验过程如下:计算C1=F(F(机器码)),F()是个算法,然后计算C2=F(输入的注册码),最后通过比较C1和C2来判断输入注册码是否有效。从上面原理可以清楚知道当输入注册码等于F(机器码)时,则C1==C2,校验就通过,所以注册机只要实现F()算法就可生成注册码。F()的代码和分析如下:
- 004DE4C4 /$ 55 push ebp
- 004DE4C5 |. 8BEC mov ebp, esp
- 004DE4C7 |. 83C4 F8 add esp, -8
- 004DE4CA |. 53 push ebx
- 004DE4CB |. 56 push esi
- 004DE4CC |. 894D F8 mov dword ptr [ebp-8], ecx
- 004DE4CF |. 8BDA mov ebx, edx ; ebx=12E4EA8, initialization constant, for further calculation
- 004DE4D1 |. 8945 FC mov dword ptr [ebp-4], eax
- 004DE4D4 |. 8B45 FC mov eax, dword ptr [ebp-4]
- 004DE4D7 |. E8 186AF2FF call 00404EF4
- 004DE4DC |. 33C0 xor eax, eax
- 004DE4DE |. 55 push ebp
- 004DE4DF |. 68 5AE54D00 push 004DE55A
- 004DE4E4 |. 64:FF30 push dword ptr fs:[eax]
- 004DE4E7 |. 64:8920 mov dword ptr fs:[eax], esp
- 004DE4EA |. 8B45 FC mov eax, dword ptr [ebp-4] ; [ebp-4] is input string
- 004DE4ED |. E8 1268F2FF call 00404D04 ; get input string len, return to eax
- 004DE4F2 |. 8BC8 mov ecx, eax
- 004DE4F4 |. 85C9 test ecx, ecx
- 004DE4F6 |. 7E 3B jle short 004DE533 ; len<=0 ,jmp
- 004DE4F8 |. BE 01000000 mov esi, 1 ; begin calculating SN using input string
- 004DE4FD |> 8B45 FC /mov eax, dword ptr [ebp-4] ; get base addreass of input string, start of calc loop
- 004DE500 |. 0FB64430 FF |movzx eax, byte ptr [eax+esi-1] ; get a char of input string
- 004DE505 |. 33D2 |xor edx, edx
- 004DE507 |. 52 |push edx
- 004DE508 |. 50 |push eax
- 004DE509 |. 8BC3 |mov eax, ebx
- 004DE50B |. 99 |cdq
- 004DE50C |. 330424 |xor eax, dword ptr [esp] ; xor char got before with ebp, initialization constant, or result of previous calculation
- 004DE50F |. 335424 04 |xor edx, dword ptr [esp+4]
- 004DE513 |. 83C4 08 |add esp, 8 ; balance stack
- 004DE516 |. 25 FF000000 |and eax, 0FF ; get the lowest byte
- 004DE51B |. 8B0485 24AC71>|mov eax, dword ptr [eax*4+71AC24] ; get data from table using eax as index
- 004DE522 |. C1EB 08 |shr ebx, 8 ; shift ebx by 8
- 004DE525 |. 81E3 FFFFFF00 |and ebx, 0FFFFFF ; get the 3 lower byte
- 004DE52B |. 33C3 |xor eax, ebx ;
- 004DE52D |. 8BD8 |mov ebx, eax
- 004DE52F |. 46 |inc esi
- 004DE530 |. 49 |dec ecx
- 004DE531 |.^ 75 CA /jnz short 004DE4FD ; end of calc loop, ebx is ouput
- 004DE533 |> 8B4D F8 mov ecx, dword ptr [ebp-8]
- 004DE536 |. 8BC3 mov eax, ebx
- 004DE538 |. F7D0 not eax ; SN in hex is ~eax
- 004DE53A |. BA 08000000 mov edx, 8
- 004DE53F |. E8 E4BCF2FF call 0040A228 ; transform SN from hex format to string format
- 004DE544 |. 33C0 xor eax, eax
- 004DE546 |. 5A pop edx
- 004DE547 |. 59 pop ecx
- 004DE548 |. 59 pop ecx
- 004DE549 |. 64:8910 mov dword ptr fs:[eax], edx
- 004DE54C |. 68 61E54D00 push 004DE561
- 004DE551 |> 8D45 FC lea eax, dword ptr [ebp-4]
- 004DE554 |. E8 DB64F2FF call 00404A34
- 004DE559 /. C3 retn
- 004DE55A .^ E9 555DF2FF jmp 004042B4
- 004DE55F .^ EB F0 jmp short 004DE551
- 004DE561 . 5E pop esi
- 004DE562 . 5B pop ebx
- 004DE563 . 59 pop ecx
- 004DE564 . 59 pop ecx
- 004DE565 . 5D pop ebp
- 004DE566 . C3 retn
注册机部分代码如下:
- //F()算法里所要查的表,该表可在主程序文件里找到,大小为1024。使用HEX Workshop可以直接导出C格式
- // Generated by BreakPoint Software's Hex Workshop v4.20
- // http://www.hexworkshop.com
- // http://www.bpsoft.com
- //
- // Source File: GZPManager1_unpacked.exe
- // Time: 2009-1-14 9:53
- // Orig. Offset: 3255332 / 0x00000000
- // Length: 1024 / 0x00000400 (bytes)
- unsigned char rawData[1024] =
- {
- 0x00, 0x00, 0x00, 0x00, 0x96, 0x30, 0x07, 0x77, 0x2C, 0x61, 0x0E, 0xEE, 0xBA, 0x51, 0x09, 0x99,
- 0x19, 0xC4, 0x6D, 0x07, 0x8F, 0xF4, 0x6A, 0x70, 0x35, 0xA5, 0x63, 0xE9, 0xA3, 0x95, 0x64, 0x9E,
- 0x32, 0x88, 0xDB, 0x0E, 0xA4, 0xB8, 0xDC, 0x79, 0x1E, 0xE9, 0xD5, 0xE0, 0x88, 0xD9, 0xD2, 0x97,
- 0x2B, 0x4C, 0xB6, 0x09, 0xBD, 0x7C, 0xB1, 0x7E, 0x07, 0x2D, 0xB8, 0xE7, 0x91, 0x1D, 0xBF, 0x90,
- 0x64, 0x10, 0xB7, 0x1D, 0xF2, 0x20, 0xB0, 0x6A, 0x48, 0x71, 0xB9, 0xF3, 0xDE, 0x41, 0xBE, 0x84,
- 0x7D, 0xD4, 0xDA, 0x1A, 0xEB, 0xE4, 0xDD, 0x6D, 0x51, 0xB5, 0xD4, 0xF4, 0xC7, 0x85, 0xD3, 0x83,
- 0x56, 0x98, 0x6C, 0x13, 0xC0, 0xA8, 0x6B, 0x64, 0x7A, 0xF9, 0x62, 0xFD, 0xEC, 0xC9, 0x65, 0x8A,
- 0x4F, 0x5C, 0x01, 0x14, 0xD9, 0x6C, 0x06, 0x63, 0x63, 0x3D, 0x0F, 0xFA, 0xF5, 0x0D, 0x08, 0x8D,
- 0xC8, 0x20, 0x6E, 0x3B, 0x5E, 0x10, 0x69, 0x4C, 0xE4, 0x41, 0x60, 0xD5, 0x72, 0x71, 0x67, 0xA2,
- 0xD1, 0xE4, 0x03, 0x3C, 0x47, 0xD4, 0x04, 0x4B, 0xFD, 0x85, 0x0D, 0xD2, 0x6B, 0xB5, 0x0A, 0xA5,
- 0xFA, 0xA8, 0xB5, 0x35, 0x6C, 0x98, 0xB2, 0x42, 0xD6, 0xC9, 0xBB, 0xDB, 0x40, 0xF9, 0xBC, 0xAC,
- 0xE3, 0x6C, 0xD8, 0x32, 0x75, 0x5C, 0xDF, 0x45, 0xCF, 0x0D, 0xD6, 0xDC, 0x59, 0x3D, 0xD1, 0xAB,
- 0xAC, 0x30, 0xD9, 0x26, 0x3A, 0x00, 0xDE, 0x51, 0x80, 0x51, 0xD7, 0xC8, 0x16, 0x61, 0xD0, 0xBF,
- 0xB5, 0xF4, 0xB4, 0x21, 0x23, 0xC4, 0xB3, 0x56, 0x99, 0x95, 0xBA, 0xCF, 0x0F, 0xA5, 0xBD, 0xB8,
- 0x9E, 0xB8, 0x02, 0x28, 0x08, 0x88, 0x05, 0x5F, 0xB2, 0xD9, 0x0C, 0xC6, 0x24, 0xE9, 0x0B, 0xB1,
- 0x87, 0x7C, 0x6F, 0x2F, 0x11, 0x4C, 0x68, 0x58, 0xAB, 0x1D, 0x61, 0xC1, 0x3D, 0x2D, 0x66, 0xB6,
- 0x90, 0x41, 0xDC, 0x76, 0x06, 0x71, 0xDB, 0x01, 0xBC, 0x20, 0xD2, 0x98, 0x2A, 0x10, 0xD5, 0xEF,
- 0x89, 0x85, 0xB1, 0x71, 0x1F, 0xB5, 0xB6, 0x06, 0xA5, 0xE4, 0xBF, 0x9F, 0x33, 0xD4, 0xB8, 0xE8,
- 0xA2, 0xC9, 0x07, 0x78, 0x34, 0xF9, 0x00, 0x0F, 0x8E, 0xA8, 0x09, 0x96, 0x18, 0x98, 0x0E, 0xE1,
- 0xBB, 0x0D, 0x6A, 0x7F, 0x2D, 0x3D, 0x6D, 0x08, 0x97, 0x6C, 0x64, 0x91, 0x01, 0x5C, 0x63, 0xE6,
- 0xF4, 0x51, 0x6B, 0x6B, 0x62, 0x61, 0x6C, 0x1C, 0xD8, 0x30, 0x65, 0x85, 0x4E, 0x00, 0x62, 0xF2,
- 0xED, 0x95, 0x06, 0x6C, 0x7B, 0xA5, 0x01, 0x1B, 0xC1, 0xF4, 0x08, 0x82, 0x57, 0xC4, 0x0F, 0xF5,
- 0xC6, 0xD9, 0xB0, 0x65, 0x50, 0xE9, 0xB7, 0x12, 0xEA, 0xB8, 0xBE, 0x8B, 0x7C, 0x88, 0xB9, 0xFC,
- 0xDF, 0x1D, 0xDD, 0x62, 0x49, 0x2D, 0xDA, 0x15, 0xF3, 0x7C, 0xD3, 0x8C, 0x65, 0x4C, 0xD4, 0xFB,
- 0x58, 0x61, 0xB2, 0x4D, 0xCE, 0x51, 0xB5, 0x3A, 0x74, 0x00, 0xBC, 0xA3, 0xE2, 0x30, 0xBB, 0xD4,
- 0x41, 0xA5, 0xDF, 0x4A, 0xD7, 0x95, 0xD8, 0x3D, 0x6D, 0xC4, 0xD1, 0xA4, 0xFB, 0xF4, 0xD6, 0xD3,
- 0x6A, 0xE9, 0x69, 0x43, 0xFC, 0xD9, 0x6E, 0x34, 0x46, 0x88, 0x67, 0xAD, 0xD0, 0xB8, 0x60, 0xDA,
- 0x73, 0x2D, 0x04, 0x44, 0xE5, 0x1D, 0x03, 0x33, 0x5F, 0x4C, 0x0A, 0xAA, 0xC9, 0x7C, 0x0D, 0xDD,
- 0x3C, 0x71, 0x05, 0x50, 0xAA, 0x41, 0x02, 0x27, 0x10, 0x10, 0x0B, 0xBE, 0x86, 0x20, 0x0C, 0xC9,
- 0x25, 0xB5, 0x68, 0x57, 0xB3, 0x85, 0x6F, 0x20, 0x09, 0xD4, 0x66, 0xB9, 0x9F, 0xE4, 0x61, 0xCE,
- 0x0E, 0xF9, 0xDE, 0x5E, 0x98, 0xC9, 0xD9, 0x29, 0x22, 0x98, 0xD0, 0xB0, 0xB4, 0xA8, 0xD7, 0xC7,
- 0x17, 0x3D, 0xB3, 0x59, 0x81, 0x0D, 0xB4, 0x2E, 0x3B, 0x5C, 0xBD, 0xB7, 0xAD, 0x6C, 0xBA, 0xC0,
- 0x20, 0x83, 0xB8, 0xED, 0xB6, 0xB3, 0xBF, 0x9A, 0x0C, 0xE2, 0xB6, 0x03, 0x9A, 0xD2, 0xB1, 0x74,
- 0x39, 0x47, 0xD5, 0xEA, 0xAF, 0x77, 0xD2, 0x9D, 0x15, 0x26, 0xDB, 0x04, 0x83, 0x16, 0xDC, 0x73,
- 0x12, 0x0B, 0x63, 0xE3, 0x84, 0x3B, 0x64, 0x94, 0x3E, 0x6A, 0x6D, 0x0D, 0xA8, 0x5A, 0x6A, 0x7A,
- 0x0B, 0xCF, 0x0E, 0xE4, 0x9D, 0xFF, 0x09, 0x93, 0x27, 0xAE, 0x00, 0x0A, 0xB1, 0x9E, 0x07, 0x7D,
- 0x44, 0x93, 0x0F, 0xF0, 0xD2, 0xA3, 0x08, 0x87, 0x68, 0xF2, 0x01, 0x1E, 0xFE, 0xC2, 0x06, 0x69,
- 0x5D, 0x57, 0x62, 0xF7, 0xCB, 0x67, 0x65, 0x80, 0x71, 0x36, 0x6C, 0x19, 0xE7, 0x06, 0x6B, 0x6E,
- 0x76, 0x1B, 0xD4, 0xFE, 0xE0, 0x2B, 0xD3, 0x89, 0x5A, 0x7A, 0xDA, 0x10, 0xCC, 0x4A, 0xDD, 0x67,
- 0x6F, 0xDF, 0xB9, 0xF9, 0xF9, 0xEF, 0xBE, 0x8E, 0x43, 0xBE, 0xB7, 0x17, 0xD5, 0x8E, 0xB0, 0x60,
- 0xE8, 0xA3, 0xD6, 0xD6, 0x7E, 0x93, 0xD1, 0xA1, 0xC4, 0xC2, 0xD8, 0x38, 0x52, 0xF2, 0xDF, 0x4F,
- 0xF1, 0x67, 0xBB, 0xD1, 0x67, 0x57, 0xBC, 0xA6, 0xDD, 0x06, 0xB5, 0x3F, 0x4B, 0x36, 0xB2, 0x48,
- 0xDA, 0x2B, 0x0D, 0xD8, 0x4C, 0x1B, 0x0A, 0xAF, 0xF6, 0x4A, 0x03, 0x36, 0x60, 0x7A, 0x04, 0x41,
- 0xC3, 0xEF, 0x60, 0xDF, 0x55, 0xDF, 0x67, 0xA8, 0xEF, 0x8E, 0x6E, 0x31, 0x79, 0xBE, 0x69, 0x46,
- 0x8C, 0xB3, 0x61, 0xCB, 0x1A, 0x83, 0x66, 0xBC, 0xA0, 0xD2, 0x6F, 0x25, 0x36, 0xE2, 0x68, 0x52,
- 0x95, 0x77, 0x0C, 0xCC, 0x03, 0x47, 0x0B, 0xBB, 0xB9, 0x16, 0x02, 0x22, 0x2F, 0x26, 0x05, 0x55,
- 0xBE, 0x3B, 0xBA, 0xC5, 0x28, 0x0B, 0xBD, 0xB2, 0x92, 0x5A, 0xB4, 0x2B, 0x04, 0x6A, 0xB3, 0x5C,
- 0xA7, 0xFF, 0xD7, 0xC2, 0x31, 0xCF, 0xD0, 0xB5, 0x8B, 0x9E, 0xD9, 0x2C, 0x1D, 0xAE, 0xDE, 0x5B,
- 0xB0, 0xC2, 0x64, 0x9B, 0x26, 0xF2, 0x63, 0xEC, 0x9C, 0xA3, 0x6A, 0x75, 0x0A, 0x93, 0x6D, 0x02,
- 0xA9, 0x06, 0x09, 0x9C, 0x3F, 0x36, 0x0E, 0xEB, 0x85, 0x67, 0x07, 0x72, 0x13, 0x57, 0x00, 0x05,
- 0x82, 0x4A, 0xBF, 0x95, 0x14, 0x7A, 0xB8, 0xE2, 0xAE, 0x2B, 0xB1, 0x7B, 0x38, 0x1B, 0xB6, 0x0C,
- 0x9B, 0x8E, 0xD2, 0x92, 0x0D, 0xBE, 0xD5, 0xE5, 0xB7, 0xEF, 0xDC, 0x7C, 0x21, 0xDF, 0xDB, 0x0B,
- 0xD4, 0xD2, 0xD3, 0x86, 0x42, 0xE2, 0xD4, 0xF1, 0xF8, 0xB3, 0xDD, 0x68, 0x6E, 0x83, 0xDA, 0x1F,
- 0xCD, 0x16, 0xBE, 0x81, 0x5B, 0x26, 0xB9, 0xF6, 0xE1, 0x77, 0xB0, 0x6F, 0x77, 0x47, 0xB7, 0x18,
- 0xE6, 0x5A, 0x08, 0x88, 0x70, 0x6A, 0x0F, 0xFF, 0xCA, 0x3B, 0x06, 0x66, 0x5C, 0x0B, 0x01, 0x11,
- 0xFF, 0x9E, 0x65, 0x8F, 0x69, 0xAE, 0x62, 0xF8, 0xD3, 0xFF, 0x6B, 0x61, 0x45, 0xCF, 0x6C, 0x16,
- 0x78, 0xE2, 0x0A, 0xA0, 0xEE, 0xD2, 0x0D, 0xD7, 0x54, 0x83, 0x04, 0x4E, 0xC2, 0xB3, 0x03, 0x39,
- 0x61, 0x26, 0x67, 0xA7, 0xF7, 0x16, 0x60, 0xD0, 0x4D, 0x47, 0x69, 0x49, 0xDB, 0x77, 0x6E, 0x3E,
- 0x4A, 0x6A, 0xD1, 0xAE, 0xDC, 0x5A, 0xD6, 0xD9, 0x66, 0x0B, 0xDF, 0x40, 0xF0, 0x3B, 0xD8, 0x37,
- 0x53, 0xAE, 0xBC, 0xA9, 0xC5, 0x9E, 0xBB, 0xDE, 0x7F, 0xCF, 0xB2, 0x47, 0xE9, 0xFF, 0xB5, 0x30,
- 0x1C, 0xF2, 0xBD, 0xBD, 0x8A, 0xC2, 0xBA, 0xCA, 0x30, 0x93, 0xB3, 0x53, 0xA6, 0xA3, 0xB4, 0x24,
- 0x05, 0x36, 0xD0, 0xBA, 0x93, 0x06, 0xD7, 0xCD, 0x29, 0x57, 0xDE, 0x54, 0xBF, 0x67, 0xD9, 0x23,
- 0x2E, 0x7A, 0x66, 0xB3, 0xB8, 0x4A, 0x61, 0xC4, 0x02, 0x1B, 0x68, 0x5D, 0x94, 0x2B, 0x6F, 0x2A,
- 0x37, 0xBE, 0x0B, 0xB4, 0xA1, 0x8E, 0x0C, 0xC3, 0x1B, 0xDF, 0x05, 0x5A, 0x8D, 0xEF, 0x02, 0x2D,
- } ;
- //注册机算法
- void CGeZaiPu_KeyGenDlg::OnButtonGen()
- {
- char *pMC = NULL;
- char szSN[32];
- int nSize = 0;
- unsigned long nMC = 0;
- unsigned long nVal = 0;
- unsigned long nPrevVal = 0x12e4ea8;
- UpdateData();
- if(m_strMC.GetLength() <= 0)
- {
- MessageBox("Machine code must not be empty!","Error",MB_ICONERROR);
- return;
- }
- nSize = m_strMC.GetLength();
- pMC = (char*)malloc(nSize);
- memcpy(pMC,m_strMC,nSize);
- for(int i = 0; i < nSize; i++)
- {
- nMC = (unsigned long)*(pMC + i);
- nMC ^= nPrevVal;
- nMC &= 0xff;
- nVal = *(unsigned long*)(rawData + nMC * 4);
- nPrevVal >>= 8;
- nPrevVal &= 0x0ffffff;
- nPrevVal ^=nVal;
- }
- nPrevVal = ~nPrevVal;
- sprintf(szSN,"%X",nPrevVal);
- m_strSN = szSN;
- UpdateData(FALSE);
- if(pMC)
- free(pMC);
- }
0 0
- 某格仔铺软件注册码算法的分析
- 某格仔铺软件注册码算法的分析
- 无法破解的软件注册码算法
- 无法破解的软件注册码算法
- 无法破解的软件注册码算法
- 软件注册码算法
- 简单的算法分析-------得到固定注册码
- C#实现软件注册码算法
- asp.net 无法破解的软件注册码算法
- asp.net 无法破解的软件注册码算法
- C#实现无法破解的软件注册码算法
- C#实现无法破解的软件注册码算法
- 找软件的注册码
- 一些软件的注册码
- 蛙蛙推荐:蛙蛙牌软件注册码算法
- GIFMovieGear4.2注册码算法分析+注册机
- [转]不易破解的软件注册码算法(By 笑望人生)
- [转]不易破解的软件注册码算法(By 笑望人生)
- jsdoc块和内联标签
- 不固定流量的最小费用流 生产销售规划 uva11613 - Acme Corporation
- LeetCode-Lowest Common Ancestor of a Binary Search Tree
- nyoj--32--组合数
- android开发的各种bug-1
- 某格仔铺软件注册码算法的分析
- 【Linux学习笔记】Day1:U盘安装Debian8
- 同时持有多单和空单
- http://blog.csdn.net/u011975949/article/details/46868373
- sessionId 失效 ,后台“品”字后台跳转
- 15_09_14 English 学习
- How far away ? (hdu 2586 LCA)
- 开博MARK
- 算法系列--Climbing Stairs