Magic_Partition_Recovery算法分析
本帖最后由 GeekCat 于 2015-8-21 10:23 编辑文章标题】: _Magic_Partition_Recovery算法分析 【文章作者】: geekcat
【作者邮箱】: geek_huang@163.com
【作者主页】:
【软件名称】: Magic_Partition_Recovery【软件大小】: 13.6 MB (14,286,907 字节)【加壳方式】: 无【保护方式】: 注册码
【编写语言】: Borland Delphi
【使用工具】: OD、PEID
【操作平台】: XP SP3【下载地址】:http://www.magicuneraser.com【软件介绍】: 全站都是数据恢复软件【破解声明】:技术交流、学习,请不要用于商业用途!--------------------------------------------------------------------------------------------------------------------------------注册机源代码传送门:https://www.chinapyg.com/thread-80551-1-1.html
切入方式:1、工具按键事件;2、F12暂停法。
算法代码:00620358 .50 push eax
00620359 .FF75 E8 push dword ptr ss: ;(UNICODE "GEEKCAT")
0062035C .FF75 E0 push dword ptr ss: ;(UNICODE "MAGIC PARTITION RECOVERY")
0062035F .FF75 FC push dword ptr ss: ;(UNICODE "HOME EDITION")
00620362 .68 24056200 push Magic_Pa.00620524 ;UNICODE "6C78111B-1BD5-48E9-9F46-257BB8340404"
00620367 .8D45 A4 lea eax,dword ptr ss:
0062036A .BA 04000000 mov edx,0x4
0062036F .E8 DC8BDEFF call Magic_Pa.00408F50 ;拼接字符串并取前50位
00620374 .8B55 A4 mov edx,dword ptr ss: ;(UNICODE "GEEKCATMAGIC PARTITION RECOVERYHOME EDITION6C78111")
00620377 .8B45 D8 mov eax,dword ptr ss: ;(ASCII "xpa")
0062037A .59 pop ecx
0062037B .E8 AC63FFFF call Magic_Pa.0061672C ;计算字符串(注册名+软件名+版本+固定字符串:全部字母大写)MD5值
00620380 .8B45 A8 mov eax,dword ptr ss: ;(UNICODE "A89D5BA776F727619DCED47D4CAA9FF0")
00620383 .8D55 DC lea edx,dword ptr ss:
00620386 .E8 990FE0FF call Magic_Pa.00421324
0062038B .33C0 xor eax,eax
0062038D .8945 F4 mov dword ptr ss:,eax
00620390 >837D F4 00 cmp dword ptr ss:,0x0
00620394 .74 0D je short Magic_Pa.006203A3
00620396 .8D45 E4 lea eax,dword ptr ss:
00620399 .BA 7C056200 mov edx,Magic_Pa.0062057C ;UNICODE "-"
0062039E .E8 CD8ADEFF call Magic_Pa.00408E70
006203A3 >33C0 xor eax,eax
006203A5 .8945 F0 mov dword ptr ss:,eax
006203A8 >8B45 F4 mov eax,dword ptr ss:
006203AB .C1E0 02 shl eax,0x2
006203AE .0345 F0 add eax,dword ptr ss:
006203B1 .8B55 DC mov edx,dword ptr ss: ;(UNICODE "A89D5BA776F727619DCED47D4CAA9FF0")
006203B4 .0FB70442 movzx eax,word ptr ds: ;奇数位字符 AS值
006203B8 .8D55 EC lea edx,dword ptr ss:
006203BB .E8 E41BE0FF call Magic_Pa.00421FA4 ;字符AS值16进制转10进制
006203C0 .8B45 EC mov eax,dword ptr ss: ;AS值10进制数值
006203C3 .8945 D4 mov dword ptr ss:,eax
006203C6 .837D D4 00 cmp dword ptr ss:,0x0
006203CA .74 0B je short Magic_Pa.006203D7
006203CC .8B45 D4 mov eax,dword ptr ss:
006203CF .83E8 04 sub eax,0x4 ;eax减4
006203D2 .8B00 mov eax,dword ptr ds:
006203D4 .8945 D4 mov dword ptr ss:,eax
006203D7 >8D45 A0 lea eax,dword ptr ss:
006203DA .8B55 EC mov edx,dword ptr ss: ;字符AS值的10进制数
006203DD .8B4D D4 mov ecx,dword ptr ss:
006203E0 .66:8B544A FEmov dx,word ptr ds: ;10进制的最后一位转AS值
006203E5 .E8 9A88DEFF call Magic_Pa.00408C84 ;转AS值
006203EA .8B55 A0 mov edx,dword ptr ss: ;其实就是字符AS值转10进制的最后一位
006203ED .8D45 E4 lea eax,dword ptr ss:
006203F0 .E8 7B8ADEFF call Magic_Pa.00408E70
006203F5 .FF45 F0 inc dword ptr ss:
006203F8 .837D F0 04 cmp dword ptr ss:,0x4 ;每一段注册码循环4次为4位
006203FC .^ 75 AA jnz short Magic_Pa.006203A8
006203FE .FF45 F4 inc dword ptr ss:
00620401 .837D F4 04 cmp dword ptr ss:,0x4 ;每一段注册码后加一个中横线
00620405 .^ 75 89 jnz short Magic_Pa.00620390
00620407 .8B45 E4 mov eax,dword ptr ss:
总结:1、计算字符串(注册名+软件名+版本+固定字符串:全部字母大写)MD5值
2、依次取MD5值的每一位,取前16位;
3、所取的字符AS值转10进制;
4、10进制数值后一位作为输出结果;
5、输出的16位字符,每4位为一段,段与段之间用"-"分开。
----------------------------------------------------------------------------------------------------------------------------【版权声明】:本文原创于geekcat,转载请注明作者并保存文章的完整! 坐着沙发,前排学习 看了官网,一个恢复功能,拆分成多个应用程序,是专注呢,还是冗余, 好吧 虽然我干这家干的比较早。不过能写出注册机就是能人。支持GC
感谢楼主分享,非常感谢~~ 不错的软件,不知道恢复效果怎样。 膜拜分析大神,软件功能一般。 GGLHY 发表于 2015-8-21 10:29
坐着沙发,前排学习
GG 老师好。。你的算法才华让我小学生钦佩。。
页:
[1]