GeekCat 发表于 2016-1-20 20:37:19

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,转载请注明作者及论坛并保存文章的完整!我们都爱月姐姐

gujin162 发表于 2016-1-20 20:57:09


好吧,我来支持一下~~~~

Dxer 发表于 2016-1-21 09:38:04

都是构造啊,牛逼

2857428593 发表于 2016-1-21 13:30:59

6666666,表示看不懂,只会单纯的爆破

千千万是福朋友 发表于 2016-1-21 15:31:25

厉害啊,算法牛,要好好学习

ZMLoveLH 发表于 2016-1-21 23:52:10

汇编语言我看不懂啊,头都大了

DaShanRen 发表于 2016-1-24 08:26:14

为什么就移不动呢?

GeekCat 发表于 2016-1-24 09:29:15

DaShanRen 发表于 2016-1-24 08:26
为什么就移不动呢?

难道是我的电脑或OD的问题~~~
移开后OD时方便多了~~
页: [1]
查看完整版本: Cool Capture v1.25 算法分析