超级屏幕录像专家 V1.10(完全版)+注册机+算法分析
本帖最后由 speedboy 于 2015-2-4 12:54 编辑具体分析过程
1、OD加载程序后,查找字符窜“注册码不正确,请检查注册码是否输错!”,找到后双击来到反汇编程序(如图),上面的jnz判断判断是否注册,其上的Call就是调用计算注册码过程,在此Call处F2下断点,然后F9运行到此Call处,F7跟进分析。
2、F8跟进,直到下图Call调用处(如图)F7跟进
3、算法Call分析
00574D88/$55 push ebp
00574D89|.8BEC mov ebp,esp
00574D8B|.B9 05000000 mov ecx,0x5
00574D90|>6A 00 /push 0x0
00574D92|.6A 00 |push 0x0
00574D94|.49 |dec ecx
00574D95|.^ 75 F9 \jnz XScreenCa.00574D90
00574D97|.51 push ecx
00574D98|.53 push ebx
00574D99|.56 push esi
00574D9A|.57 push edi
00574D9B|.8955 FC mov ,edx
00574D9E|.8BF8 mov edi,eax
00574DA0|.33C0 xor eax,eax
00574DA2|.55 push ebp
00574DA3|.68 464F5700 push ScreenCa.00574F46
00574DA8|.64:FF30 push dword ptr fs:
00574DAB|.64:8920 mov dword ptr fs:,esp
00574DAE|.8B45 FC mov eax,
00574DB1|.E8 E2F5E8FF call ScreenCa.00404398
00574DB6|.8D55 F0 lea edx,
00574DB9|.8BC7 mov eax,edi
00574DBB|.E8 60FFFFFF call ScreenCa.00574D20
00574DC0|.8B45 F0 mov eax,
00574DC3|.E8 90F8E8FF call ScreenCa.00404658
00574DC8|.8BF0 mov esi,eax
00574DCA|.85F6 test esi,esi
00574DCC|.7E 30 jle XScreenCa.00574DFE
00574DCE|.BB 01000000 mov ebx,0x1
00574DD3|>8D55 E8 /lea edx,
00574DD6|.8BC7 |mov eax,edi
00574DD8|.E8 43FFFFFF |call ScreenCa.00574D20
00574DDD|.8B45 E8 |mov eax,
00574DE0|.0FB64418 FF |movzx eax,byte ptr ds: ;》按字符循环读取用户名并转换成16进制数据
00574DE5|.8D4D EC |lea ecx,
00574DE8|.33D2 |xor edx,edx
00574DEA|.E8 3145E9FF |call ScreenCa.00409320
00574DEF|.8B55 EC |mov edx,
00574DF2|.8D45 F8 |lea eax,
00574DF5|.E8 66F8E8FF |call ScreenCa.00404660
00574DFA|.43 |inc ebx
00574DFB|.4E |dec esi
00574DFC|.^ 75 D5 \jnz XScreenCa.00574DD3
00574DFE|>8B45 F8 mov eax, ;》把转换后的用户名(16进制)赋给EAX
00574E01|.E8 52F8E8FF call ScreenCa.00404658
00574E06|.8BF0 mov esi,eax
00574E08|.85F6 test esi,esi
00574E0A|.7E 2C jle XScreenCa.00574E38
00574E0C|.BB 01000000 mov ebx,0x1
00574E11|>8B45 F8 /mov eax,
00574E14|.E8 3FF8E8FF |call ScreenCa.00404658
00574E19|.2BC3 |sub eax,ebx
00574E1B|.8B55 F8 |mov edx,
00574E1E|.8A1402 |mov dl,byte ptr ds:
00574E21|.8D45 E4 |lea eax,
00574E24|.E8 57F7E8FF |call ScreenCa.00404580
00574E29|.8B55 E4 |mov edx,
00574E2C|.8D45 F4 |lea eax,
00574E2F|.E8 2CF8E8FF |call ScreenCa.00404660
00574E34|.43 |inc ebx
00574E35|.4E |dec esi
00574E36|.^ 75 D9 \jnz XScreenCa.00574E11
00574E38|>8D45 F8 lea eax,
00574E3B|.50 push eax
00574E3C|.B9 04000000 mov ecx,0x4
00574E41|.BA 01000000 mov edx,0x1
00574E46|.8B45 F4 mov eax, ;》把用户名数据(16进制)逆序输出到EAX(上面的循环是逆序实现过程)
00574E49|.E8 6AFAE8FF call ScreenCa.004048B8
00574E4E|.8D45 F4 lea eax,
00574E51|.50 push eax
00574E52|.B9 04000000 mov ecx,0x4
00574E57|.BA 05000000 mov edx,0x5
00574E5C|.8B45 F4 mov eax,
00574E5F|.E8 54FAE8FF call ScreenCa.004048B8 ;》截取逆序字符窜的前四位
00574E64|.8B45 F8 mov eax,
00574E67|.E8 ECF7E8FF call ScreenCa.00404658 ;》截取逆序字符窜的5-8位
00574E6C|.83F8 04 cmp eax,0x4
00574E6F|.7D 2F jge XScreenCa.00574EA0
00574E71|.8B45 F8 mov eax,
00574E74|.E8 DFF7E8FF call ScreenCa.00404658
00574E79|.8BD8 mov ebx,eax
00574E7B|.83FB 03 cmp ebx,0x3
00574E7E|.7F 20 jg XScreenCa.00574EA0
00574E80|>8D4D E0 /lea ecx,
00574E83|.8BC3 |mov eax,ebx
00574E85|.C1E0 02 |shl eax,0x2
00574E88|.33D2 |xor edx,edx
00574E8A|.E8 9144E9FF |call ScreenCa.00409320
00574E8F|.8B55 E0 |mov edx,
00574E92|.8D45 F8 |lea eax,
00574E95|.E8 C6F7E8FF |call ScreenCa.00404660
00574E9A|.43 |inc ebx
00574E9B|.83FB 04 |cmp ebx,0x4
00574E9E|.^ 75 E0 \jnz XScreenCa.00574E80
00574EA0|>8B45 F4 mov eax, ;》把第5-8位字符窜赋给EAX
00574EA3|.E8 B0F7E8FF call ScreenCa.00404658
00574EA8|.83F8 04 cmp eax,0x4
00574EAB|.7D 2F jge XScreenCa.00574EDC
00574EAD|.8B45 F4 mov eax,
00574EB0|.E8 A3F7E8FF call ScreenCa.00404658
00574EB5|.8BD8 mov ebx,eax
00574EB7|.83FB 03 cmp ebx,0x3
00574EBA|.7F 20 jg XScreenCa.00574EDC
00574EBC|>8D4D DC /lea ecx,
00574EBF|.8BC3 |mov eax,ebx
00574EC1|.C1E0 02 |shl eax,0x2
00574EC4|.33D2 |xor edx,edx
00574EC6|.E8 5544E9FF |call ScreenCa.00409320
00574ECB|.8B55 DC |mov edx,
00574ECE|.8D45 F4 |lea eax,
00574ED1|.E8 8AF7E8FF |call ScreenCa.00404660
00574ED6|.43 |inc ebx
00574ED7|.83FB 04 |cmp ebx,0x4
00574EDA|.^ 75 E0 \jnz XScreenCa.00574EBC
00574EDC|>8D45 D8 lea eax,
00574EDF|.50 push eax
00574EE0|.8B47 04 mov eax,dword ptr ds: ;》把程序设定的固定字符窜赋给EAX
00574EE3|.B9 04000000 mov ecx,0x4
00574EE8|.BA 01000000 mov edx,0x1
00574EED|.E8 C6F9E8FF call ScreenCa.004048B8 ;》取固定字符窜的前四位
00574EF2|.FF75 D8 push
00574EF5|.68 5C4F5700 push ScreenCa.00574F5C ;-
00574EFA|.FF75 F8 push
00574EFD|.8D45 D4 lea eax,
00574F00|.50 push eax
00574F01|.8B47 04 mov eax,dword ptr ds:
00574F04|.B9 05000000 mov ecx,0x5
00574F09|.BA 05000000 mov edx,0x5
00574F0E|.E8 A5F9E8FF call ScreenCa.004048B8 ;》取固定字符窜的5-9位
00574F13|.FF75 D4 push
00574F16|.68 5C4F5700 push ScreenCa.00574F5C ;-
00574F1B|.FF75 F4 push
00574F1E|.8B45 FC mov eax,
00574F21|.BA 06000000 mov edx,0x6
00574F26|.E8 EDF7E8FF call ScreenCa.00404718
00574F2B|.33C0 xor eax,eax
00574F2D|.5A pop edx
00574F2E|.59 pop ecx
00574F2F|.59 pop ecx
00574F30|.64:8910 mov dword ptr fs:,edx
00574F33|.68 4D4F5700 push ScreenCa.00574F4D
00574F38|>8D45 D4 lea eax,
00574F3B|.BA 0A000000 mov edx,0xA
00574F40|.E8 77F4E8FF call ScreenCa.004043BC
00574F45\.C3 retn
00574F46 .^ E9 91EDE8FF jmp ScreenCa.00403CDC
00574F4B .^ EB EB jmp XScreenCa.00574F38
00574F4D .5F pop edi
00574F4E .5E pop esi
00574F4F .5B pop ebx
00574F50 .8BE5 mov esp,ebp
00574F52 .5D pop ebp
00574F53 .C3 retn
4、合成注册码
“固定字符窜前4位”-“用户名得到的逆序字符窜前四位+固定字符窜的5-9位”-“用户名得到的逆序字符窜的5-8位”
楼主怎么没有注册机啊 很给力,学习一下,感谢楼主分析精彩 PYG有你更精彩!想给楼主评分,显示今日为0,明天看看,先手工顶一下 值得多看 赞一个了,羡慕会算法的大神,收下学习一下了 学习一下,感谢楼主分析精彩 不错 学习了 很不错,我来看看,介意不{:soso_e133:} 论坛就是因为有这样前辈无私的教授,我们才会被吸引,谢谢