何必丨在意妳 发表于 2015-7-20 11:20:16

ZD Soft Screen Recorder 8.1算法的简单分析+注册机

本帖最后由 何必丨在意妳 于 2015-7-20 11:22 编辑

ZD Soft Screen Recorder 是一款高性能的屏幕录像机,它可以录制屏幕活动(可以是全屏、指定的区域、指定的窗口等)为视频文件,并实时同步录制音频(使用LAME编码),供演示或讲解之用。
1.首先用PEID查壳,无壳,是QT程序 接着我们来到注册窗口,随便填入KEY等
由于软件会占用F8和F9键,最好提前修改一下


2.输入注册信息之后点击OK,我们用F12暂停法,ALT+K打开调用堆栈窗口我们会发现,有很多调用,其中绝大多数都是在系统领空,我们找到程序领空的调用就只有几个,我是直接给它们全部下断点,重载程序。看看那个能断下来,段下来之后通过它,再找关键位置


程序在此处断下00418790,往下F8,来到下面004187DE   .8B6D 00       mov ebp,dword ptr ss:
004187E1   .8B45 F8       mov eax,dword ptr ss:
004187E4   .85C0          test eax,eax
004187E6   .0F84 C5000000 je ScnRec.004188B1                            ;判断Name是否为空
004187EC   .8B07          mov eax,dword ptr ds:
004187EE   .8B48 F8       mov ecx,dword ptr ds:
004187F1   .85C9          test ecx,ecx
004187F3   .0F84 B8000000 je ScnRec.004188B1                            ;判断E-Mail是否为空
004187F9   .8B0B          mov ecx,dword ptr ds:
004187FB   .8B41 F8       mov eax,dword ptr ds:
004187FE   .85C0          test eax,eax
00418800   .0F84 AB000000 je ScnRec.004188B1                            ;判断Key是否为空
00418806   .8B4E 6C       mov ecx,dword ptr ds:
00418809   .55            push ebp
0041880A   .83C1 04       add ecx,0x4
0041880D   .E8 54BA0800   call <jmp.&MFC42u.#??4CString@@QAEABV0@PBG@Z_>
00418812   .8B17          mov edx,dword ptr ds:
00418814   .8B4E 6C       mov ecx,dword ptr ds:
00418817   .52            push edx
00418818   .83C1 08       add ecx,0x8
0041881B   .E8 46BA0800   call <jmp.&MFC42u.#??4CString@@QAEABV0@PBG@Z_>
00418820   .8B03          mov eax,dword ptr ds:
00418822   .8B4E 6C       mov ecx,dword ptr ds:
00418825   .50            push eax
00418826   .E8 D5F30000   call ScnRec.00427C00                        
0041882B   .8B4E 6C       mov ecx,dword ptr ds:
0041882E   .E8 BDF90000   call ScnRec.004281F0                           关键点
00418833   .85C0          test eax,eax
00418835   .75 3A         jnz short ScnRec.00418871
00418837   .E8 66BA0800   call <jmp.&MFC42u.#?AfxGetThread@@YGPAVCWinTh>
F7进入0041882E往下F800428245|.50            push eax
00428246|.E8 6FC00700   call jmp.&MFC42u.#??H@YG?AVCString@@ABV0@0@Z
往注册表里写入注册信息
0042824B|.8B00          mov eax,dword ptr ds:
0042824D|.8BCE          mov ecx,esi
0042824F|.50            push eax
00428250|.68 E8030000   push 0x3E8
00428255|.C64424 20 01mov byte ptr ss:,0x1
0042825A      E8 C1FDFFFF   call ScnRec.00428020                        ;算法
0042825F|.8D4C24 08   lea ecx,dword ptr ss:
00428263|.8946 18       mov dword ptr ds:,eax
00428266|.C64424 18 00mov byte ptr ss:,0x0
0042826B|.E8 E4BF0700   call <jmp.&MFC42u.#??1CString@@QAE@XZ_800>
F7进入0042825A 来到下面关键算法00428020/[      DISCUZ_CODE_11      ]nbsp; 64:A1 0000000>mov eax,dword ptr fs:                     ;   
00428026|.6A FF         push -0x1
00428028|.68 08295000   push ScnRec.00502908
0042802D|.50            push eax
0042802E|.64:8925 00000>mov dword ptr fs:,esp
00428035|.83EC 68       sub esp,0x68
00428038|.33C0          xor eax,eax
0042803A|.53            push ebx
0042803B|.55            push ebp
0042803C|.56            push esi
0042803D|.8BB424 840000>mov esi,dword ptr ss:                ;ScnRec.0042825F
00428044|.33DB          xor ebx,ebx
00428046|.57            push edi
00428047|.3BF3          cmp esi,ebx
00428049|.8BE9          mov ebp,ecx
0042804B|.0F8E 87010000 jle ScnRec.004281D8
00428051|.B9 08000000   mov ecx,0x8
00428056|.8D7C24 11   lea edi,dword ptr ss:
0042805A|.884424 10   mov byte ptr ss:,al
0042805E|.F3:AB         rep stos dword ptr es:
00428060|.8B8424 8C0000>mov eax,dword ptr ss:
00428067|.8D4C24 10   lea ecx,dword ptr ss:
0042806B|.50            push eax
0042806C|.51            push ecx
0042806D|.8BCD          mov ecx,ebp
0042806F|.E8 ECFDFFFF   call ScnRec.00427E60                           ;MD5加密
00428074|.85C0          test eax,eax
00428076|.75 08         jnz short ScnRec.00428080
00428078|.83C8 FF       or eax,-0x1
0042807B|.E9 58010000   jmp ScnRec.004281D8
00428080|>B9 10000000   mov ecx,0x10
00428085|.33C0          xor eax,eax
00428087|.8D7C24 36   lea edi,dword ptr ss:
0042808B|.66:895C24 34mov word ptr ss:,bx
00428090|.F3:AB         rep stos dword ptr es:
00428092|.8D45 0C       lea eax,
00428095|.8D8C24 8C0000>lea ecx,dword ptr ss:
0042809C|.50            push eax
0042809D|.E8 30C20700   call <jmp.&MFC42u.#??0CString@@QAE@ABV0@@Z_535>
004280A2|.33FF          xor edi,edi
004280A4|.3BF3          cmp esi,ebx
004280A6|.899C24 800000>mov dword ptr ss:,ebx
004280AD|.0F8E 09010000 jle ScnRec.004281BC
004280B3|.8B1D 64315200 mov ebx,dword ptr ds:[<&KERNEL32.MultiByteToWi>;kernel32.MultiByteToWideChar
004280B9|>8D5424 34   /lea edx,dword ptr ss:
004280BD|.6A 21         |push 0x21
004280BF|.52            |push edx
004280C0|.8D4424 18   |lea eax,dword ptr ss:
004280C4|.6A FF         |push -0x1
004280C6|.50            |push eax
004280C7|.6A 00         |push 0x0
004280C9|.6A 00         |push 0x0
004280CB|.FFD3          |call ebx
004280CD|.8D4C24 34   |lea ecx,dword ptr ss:
004280D1|.8D5424 10   |lea edx,dword ptr ss:
004280D5|.51            |push ecx
004280D6|.52            |push edx
004280D7|.8BCD          |mov ecx,ebp
004280D9|.E8 82FDFFFF   |call ScnRec.00427E60                        ;MD5加密
004280DE|.33F6          |xor esi,esi
004280E0|>66:8B4474 34|/mov ax,word ptr ss:
004280E5|.50            ||push eax                                     ; /w
004280E6|.FF15 D4365200 ||call dword ptr ds:[<&MSVCRT.iswalpha>]       ; \判断是否是字符或数字
004280EC|.83C4 04       ||add esp,0x4
004280EF|.85C0          ||test eax,eax
004280F1|.0F85 86000000 ||jnz ScnRec.0042817D
004280F7|.8BC6          ||mov eax,esi                                  ;先进行位数的比较,前一位
004280F9|.25 01000080   ||and eax,0x80000001                           ;前面得位数与0x80000001与运算
004280FE|.79 05         ||jns short ScnRec.00428105                  ;sf=0跳转
00428100|.48            ||dec eax
00428101|.83C8 FE       ||or eax,-0x2
00428104|.40            ||inc eax
00428105|>74 16         ||je short ScnRec.0042811D                     ;zf=1跳,当EAX=0时跳    奇数位不跳
00428107|.33C9          ||xor ecx,ecx
00428109|.66:8B4C74 34||mov cx,word ptr ss:          ;取当前数字的ASCII码
0042810E|.81E1 01000080 ||and ecx,0x80000001
00428114|.79 05         ||jns short ScnRec.0042811B
00428116|.49            ||dec ecx
00428117|.83C9 FE       ||or ecx,-0x2
0042811A|.41            ||inc ecx
0042811B|>75 60         ||jnz short ScnRec.0042817D                  ;ZF=0跳,数字的ASCII码为奇数位时,跳转
0042811D|>85C0          ||test eax,eax
0042811F|.75 16         ||jnz short ScnRec.00428137                  ;当EAX=0时不跳
00428121|.33D2          ||xor edx,edx
00428123|.66:8B5474 34||mov dx,word ptr ss:          ;取当前数字的ASCII码
00428128|.81E2 01000080 ||and edx,0x80000001
0042812E|.79 05         ||jns short ScnRec.00428135
00428130|.4A            ||dec edx
00428131|.83CA FE       ||or edx,-0x2
00428134|.42            ||inc edx
00428135|>74 46         ||je short ScnRec.0042817D
00428137|>33C0          ||xor eax,eax
00428139|.B9 14000000   ||mov ecx,0x14
0042813E|.66:8B4474 34||mov ax,word ptr ss:
00428143|.03C6          ||add eax,esi
00428145|.03C7          ||add eax,edi
00428147|.99            ||cdq
00428148|.F7F9          ||idiv ecx
0042814A|.8D42 47       ||lea eax,dword ptr ds:
0042814D|.66:3D 4F00    ||cmp ax,0x4F
00428151|.66:894474 34||mov word ptr ss:,ax
00428156|.75 07         ||jnz short ScnRec.0042815F
00428158|.66:C74474 34 >||mov word ptr ss:,0x30
0042815F|>66:837C74 34 >||cmp word ptr ss:,0x49
00428165|.75 07         ||jnz short ScnRec.0042816E
00428167|.66:C74474 34 >||mov word ptr ss:,0x31
0042816E|>66:837C74 34 >||cmp word ptr ss:,0x5A
00428174|.75 07         ||jnz short ScnRec.0042817D
00428176|.66:C74474 34 >||mov word ptr ss:,0x32
0042817D|>46            ||inc esi
0042817E|.83FE 20       ||cmp esi,0x20
00428181|.^ 0F8C 59FFFFFF |\jl ScnRec.004280E0
00428187|.8D5424 34   |lea edx,dword ptr ss:
0042818B|.8BCD          |mov ecx,ebp
0042818D|.52            |push edx
0042818E|.E8 6DFAFFFF   |call ScnRec.00427C00
00428193|.8B8424 8C0000>|mov eax,dword ptr ss:
0042819A|.8B4D 0C       |mov ecx,
0042819D|.50            |push eax                                    ; /wstr2 = 00000001 ???
0042819E|.51            |push ecx                                    ; |wstr1 = "??P..艟B?"
0042819F|.FF15 80365200 |call dword ptr ds:[<&MSVCRT.wcscmp>]          ; \wcscmp
004281A5|.83C4 08       |add esp,0x8
004281A8      85C0          test eax,eax
004281AA      74 10         je short ScnRec.004281BC
004281AC      8B8424 880000>mov eax,dword ptr ss:
004281B3|.47            |inc edi
004281B4|.3BF8          |cmp edi,eax                                 ;循环1000次
004281B6|.^ 0F8C FDFEFFFF \jl ScnRec.004280B9
004281BC|>8D8C24 8C0000>lea ecx,dword ptr ss:
004281C3|.8D77 01       lea esi,dword ptr ds:
004281C6|.C78424 800000>mov dword ptr ss:,-0x1
004281D1|.E8 7EC00700   call <jmp.&MFC42u.#??1CString@@QAE@XZ_800>
004281D6|.8BC6          mov eax,esi
004281D8|>8B4C24 78   mov ecx,dword ptr ss:
004281DC|.5F            pop edi                                        ;0012F138
004281DD|.5E            pop esi                                        ;0012F138
004281DE|.5D            pop ebp                                        ;0012F138
004281DF|.5B            pop ebx                                        ;0012F138
004281E0|.64:890D 00000>mov dword ptr fs:,ecx
004281E7|.83C4 74       add esp,0x74
004281EA\.C2 0800       retn 0x8

3.算法流程
这个0042806F|.E8ECFDFFFF   call ScnRec.00427E60          ; 是MD5加密
将你输入的 “Software\ZDSoft\Screen Recorder\输入的E-Mail”加密(不包括引号)
程序会先将E-Mail中的大写字母转化为小写字母
也就是本例中Software\ZDSoft\Screen Recorder\[email protected] 加密
加密后的结果D8BE24247C846E0343B4F0E9B870A097
004280D9 |.E8 82FDFFFF   |call ScnRec.00427E60(此处加密不进行算法运算)
将上次的MD5结果再次进行MD5加密,保存,以被下次循环时直接使用

先判断是否是字母,若是字母直接保留,循环验证下一位。若不是则

1.判断他的前一位,位数是否为奇数,是,则判断该数字的ASCII码是否为奇数,如果是则不改变数字

2.判断他的前一位,位数是否为偶数,是,则判断该数字的ASCII码是否为奇数,如果是奇数则进行运算

3.判断他的前一位,位数是否为奇数,是,则判断该数字的ASCII码是否为偶数,如果是偶数则进行运算

4.判断他的前一位,位数是否为偶数,是,则判断该数字的ASCII码是否为偶数,如果是则不改变数字

一共分为4中情况,同是偶数或同是奇数是不改变数字的,否则将进行运算。

上面的偶数或奇数的称呼,只是我对与运算之后结果进行相应运算的称呼,纯属个人理解称呼。

其中的运算过程:
1.该数字的ASCII码+该数字在字符串中的位置序号-1+当前是第几次MD5循环

2.将上面的结果除以0x14取余数,余数+0x47的ASCII码转化为字符,填在该数字的相应位置

最后,将上面的结果与输入的KEY进行循环验证,循环1000次,只要其中的某一次正确,程序即注册成功




初学易语言,代码比较渣感谢大家观看


飘云 发表于 2015-7-20 11:22:56

        PYG有你更精彩! 好作品!!

Rooking 发表于 2015-7-20 11:28:06

欢迎来到飘云阁发布原创作品,PYG 有你更精彩

GGLHY 发表于 2015-7-20 11:41:36

前排学习,谢谢分享!

开心啦 发表于 2015-7-20 12:44:40

感谢分享原创,支持一下了

wgz001 发表于 2015-7-20 13:23:30

学习算法分析感谢 {:victory:}

dliwj 发表于 2015-7-20 14:08:50

很好的破文,感谢楼主

stormyyf 发表于 2015-7-20 14:19:27

膜拜算法分析!

yjf306 发表于 2015-7-20 15:49:55

谢谢楼主,水平太低,主要看楼主贴出的过程。

gujin162 发表于 2015-7-20 16:12:29


羡慕楼主,的确是很羡慕,顶一下
页: [1] 2 3
查看完整版本: ZD Soft Screen Recorder 8.1算法的简单分析+注册机