Cool Capture v1.25 算法分析
本帖最后由 GeekCat 于 2016-1-20 21:04 编辑【文章标题】: Cool Capture v1.25 算法分析【作者邮箱】: [email protected]
【作者主页】:
【软件名称】:Cool Capture v1.25 【软件大小】: 1.19 MB (1,252,703 字节)
【加壳方式】: 无壳【保护方式】: 注册码
【编写语言】: Microsoft Visual C++ 6.0【使用工具】: OD、PEID
【操作平台】: XP SP3【下载地址】: http://www.crsky.com/soft/8635.html【破解声明】: 破解在于交流思路和过程,结果并不重要,请不要用于非法用途;
【软件介绍】:Cool Capture是一款一站式的屏幕截图软件。用户可以包括全屏幕截图,区域截图,窗口截图,卷轴截图等多种方式来截取画面,该软件支持剪贴板,打印机,编辑软件等多种方式的输出。--------------------------------------------------------------------------------------------------------------------------------
程序内置一张表:OMBHGX25V9EASIULR3Z41Y7JKD0C86TWPNQF
0、OD调试程时序的注册窗口不能最小化和移动,遮挡住OD部分界面调试起来有点蛋疼;
1、字符串、万能断点、F12、API快速切入关键点;
2、关键点代码如下:
00415E7F .8D8C24 A00000>lea ecx,dword ptr ss:
00415E86 .E8 B5ADFFFF call CoolCapt.00410C40 ;不是关键的关键点=0x11赋值的常量后面运算时要用到
00415E8B .8D77 64 lea esi,dword ptr ds: ;(ASCII "1234567890qwertYUIOP")
00415E8E .8D6F 60 lea ebp,dword ptr ds: ;(ASCII "GeekCat")
00415E91 .56 push esi
00415E92 .55 push ebp
00415E93 .8D8C24 A80000>lea ecx,dword ptr ss:
00415E9A .C78424 D40100>mov dword ptr ss:,0x0
00415EA5 .E8 E6B0FFFF call CoolCapt.00410F90 ;算法CALL
00415EAA .84C0 test al,al
00415EAC .0F84 44020000 je CoolCapt.004160F6 ;关键跳转不能跳转
00415EB2 .8D8424 C00000>lea eax,dword ptr ss:
3、F7进算法CALL 代码如下:
00410FB8 .8378 F8 13 cmp dword ptr ds:,0x13 ;注册码要大于等于0x13-->19位
00410FBC .7D 15 jge short CoolCapt.00410FD3
————————————————————————略代码N行——————————————————————————————————
00410FDD .8B0F mov ecx,dword ptr ds: ;(ASCII "1234567890qwertYUIOP")
00410FDF .8A1431 mov dl,byte ptr ds: ;取注册码每1位,取前四位
00410FE2 .8BCB mov ecx,ebx
00410FE4 .8855 EC mov byte ptr ss:,dl
00410FE7 .8B45 EC mov eax,dword ptr ss:
00410FEA .50 push eax
00410FEB .E8 B0000000 call CoolCapt.004110A0 ;计算CLL -1 查表找到表中的位置 14、6、11、13
00410FF0 .8944B5 AC mov dword ptr ss:,eax
————————————————————————略代码N行——————————————————————————————————
00410FFC .8B0F mov ecx,dword ptr ds: ;(ASCII "1234567890qwertYUIOP")
00410FFE .8A5431 01 mov dl,byte ptr ds: ;从第6~9位开始取每次取1位,循环4次
00411002 .8BCB mov ecx,ebx
00411004 .8855 EC mov byte ptr ss:,dl
00411007 .8B45 EC mov eax,dword ptr ss:
0041100A .50 push eax
0041100B .E8 90000000 call CoolCapt.004110A0 ;计算CLL -2 查表找到表中的位置 1D、16、1C、9
00411010 .8944B5 AC mov dword ptr ss:,eax
————————————————————————略代码N行——————————————————————————————————
00411037 .8BCB mov ecx,ebx
00411039 .C745 FC 02000>mov dword ptr ss:,0x2
00411040 .E8 0BFEFFFF call CoolCapt.00410E50 ;计算CLL -3 计算注册码后两段(共8位)
00411045 .84C0 test al,al
————————————————————————略代码N行——————————————————————————————————
00411069 > \8B4D 0C mov ecx,dword ptr ss: ;(ASCII "1234-6789-XTFU-0J7N") 真码
0041106C .8B3F mov edi,dword ptr ds: ;(ASCII "1234567890qwertYUIOP")假码
0041106E .51 push ecx ; /s2
0041106F .57 push edi ; |s1
00411070 .FF15 A0D64100 call dword ptr ds:[<&MSVCRT._mbscmp>] ; \对比CALL
00411076 .83C4 08 add esp,0x8
4、F7进计算CLL -3 代码如下:
00410E50/$55 push ebp
————————————————————————略代码N行——————————————————————————————————
00410E79|.8945 FC mov dword ptr ss:,eax
00410E7C|.33FF xor edi,edi ;这个循环注册名AS值累加
00410E7E|>8B0A /mov ecx,dword ptr ds: ;(ASCII "GeekCat")
00410E80|.3B41 F8 |cmp eax,dword ptr ds:
00410E83|.7D 09 |jge short CoolCapt.00410E8E
00410E85|.0FBE0C01 |movsx ecx,byte ptr ds: ;取注册名的每1位
00410E89|.03F9 |add edi,ecx ;注册名各字符串AS值累加和 294
00410E8B|.40 |inc eax
00410E8C|.^ EB F0 \jmp short CoolCapt.00410E7E
00410E8E|>8B75 08 mov esi,dword ptr ss: ;前面查表的第1个值 14
00410E91|.B9 24000000 mov ecx,0x24
00410E96|.8B46 1C mov eax,dword ptr ds: ;前面查表的第8个值(最生1个) 9
00410E99|.8B16 mov edx,dword ptr ds: ;14
00410E9B|.33C2 xor eax,edx ;14 xor 9 = 1D
00410E9D|.03C7 add eax,edi ;1D+294=2B1
00410E9F|.99 cdq
00410EA0|.F7F9 idiv ecx ;2B1 mod 24 =5
00410EA2|.B9 01000000 mov ecx,0x1
00410EA7|.8956 20 mov dword ptr ds:,edx ;5
00410EAA|>83F9 08 /cmp ecx,0x8
00410EAD|.7D 1A |jge short CoolCapt.00410EC9 ;这个循环是查表的值依次xor运算
00410EAF|.8B448E FC |mov eax,dword ptr ds: ;查表的值第1、2、3、4、5、6、7
00410EB3|.8B1C8E |mov ebx,dword ptr ds: ;查表的值第2、3、4、5、6、7、8
00410EB6|.33C3 |xor eax,ebx ;14 xor 6 =12
00410EB8|.BB 24000000 |mov ebx,0x24
00410EBD|.03C7 |add eax,edi ;12 + 294 = 2A6
00410EBF|.99 |cdq
00410EC0|.F7FB |idiv ebx ;2A6 mod 24 =1E
00410EC2|.41 |inc ecx
00410EC3|.89548E 1C |mov dword ptr ds:,edx
00410EC7|.^ EB E1 \jmp short CoolCapt.00410EAA
——————————略代码N行(两个循环:一个无用一个反查注册名前8位)—————————
00410F10|> /83FF 08 /cmp edi,0x8
00410F13|. |7D 18 |jge short CoolCapt.00410F2D
00410F15|. |8B44BE 20 |mov eax,dword ptr ds:
00410F19|. |8B4D EC |mov ecx,dword ptr ss:
00410F1C|. |50 |push eax
00410F1D|. |E8 CE010000 |call CoolCapt.004110F0 ;00410EA0(1个值)、00410EC0(7个值)两处xor计算的结果为位置来查表得到注册码9~12及14~17位
00410F22|. |50 |push eax
00410F23|. |8BCB |mov ecx,ebx
00410F25|. |E8 7C920000 |call <jmp.&MFC42.#940>
00410F2A|. |47 |inc edi
00410F2B|.^\EB E3 \jmp short CoolCapt.00410F10
00410F2D|>68 AC484200 push CoolCapt.004248AC ;-
00410F32|.6A 04 push 0x4
00410F34|.8BCB mov ecx,ebx
00410F36|.E8 F3940000 call <jmp.&MFC42.#6779> ;第5位为‘-’
00410F3B|.68 AC484200 push CoolCapt.004248AC ;-
00410F40|.6A 09 push 0x9
00410F42|.8BCB mov ecx,ebx
00410F44|.E8 E5940000 call <jmp.&MFC42.#6779> ;第10位为‘-’
00410F49|.68 AC484200 push CoolCapt.004248AC ;-
00410F4E|.6A 0E push 0xE
00410F50|.8BCB mov ecx,ebx
00410F52|.E8 D7940000 call <jmp.&MFC42.#6779> ;第15位为‘-’---------------------------------------------------------------------------------------------------------------------------算法总结:
1、注册码要大于等于0x13-->19位;
2、注册码两段(前8位):数字和大写字母组成;
3、注册码格式:XXXX-XXXX-XXXX-XXXX ;
4、用注册码的前8位通过查表一得到8个数,并把查表得到的第1个和最后1个xor运算结果,设为A;
5、A加上注册名各字符AS值累加值,最后的和跟0x24 mod运算 结果设为B;
6、00410EA0(1个值)、00410EC0(7个值)两处xor计算的结果来查表得到注册码9~12及14~17位一组可用的注册信息:
注册名:GeekCat
注册码:PYGG-PYGC-F66S-S665(必须带PYG标记)---------------------------------------------------------------------------------------------------------------------------【版权声明】:本文原创于GeekCat/P.Y.G,转载请注明作者及论坛并保存文章的完整!我们都爱月姐姐
好吧,我来支持一下~~~~ 都是构造啊,牛逼 6666666,表示看不懂,只会单纯的爆破 厉害啊,算法牛,要好好学习 汇编语言我看不懂啊,头都大了 为什么就移不动呢?
DaShanRen 发表于 2016-1-24 08:26
为什么就移不动呢?
难道是我的电脑或OD的问题~~~
移开后OD时方便多了~~
页:
[1]