[旧帖]
[原创]我爱MV1.3.0破解和算法分析手迹
0.00雪花
发表于:
2011-7-18 12:55
3423
[旧帖] [原创]我爱MV1.3.0破解和算法分析手迹
0.00雪花
【文章标题】: 我爱MV1.3.0破解和算法分析手迹
【文章作者】: Tocky
【下载地址】: 80aK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4y4Z5j5i4u0W2N6$3q4J5k6g2)9J5k6i4y4C8P5h3y4F1i4K6u0W2j5$3!0E0i4K6u0r3M7$3!0X3N6q4)9J5c8U0t1K6y4U0p5#2i4K6u0W2K9s2c8E0
【使用工具】: OllyDBG PEID LordPE
【软件介绍】: 『我爱MV』是一款方便快捷的MV制作软件,它拥有独创的动感歌词技术,实现漂亮大方、精确同步的卡拉OK字幕效果,配合几十种转场特效和灵活的文字动画,产生富有个性、动感十足的MV,不失为送给恋人、亲朋好友的一份别致的礼物!
【操作平台】: Windows XP SP3
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!小弟初来看雪,希望和各位多多交流,第一次写破文,不对之处请指出。还望哪位朋友能给个邀请码,先行谢过。
--------------------------------------------------------------------------------
【详细过程】
破解之旅开始,信心指数 0
软件安装好后,试运行了下,点击帮助-->输入注册码,弹出这个界面
注意看红色字体部分,呵呵,软件作者想的真周到呢,连软件的注册验证方式完完本本的都告诉我们了,只差没说下注册算法了呢(事实上注册算法也比较简单,下文会分析到)
OK,填写下注册信息吧,点击注册按钮
也不知道软件作者说的真的假的,咱还是具体验证下吧。打开注册表,搜索下注册名Tocky和注册码123456789 (一般建议使用自己设定的复杂点的数字和用户名,以防注册表中其他重复数据的干扰,这里我可以保证我的注册表中没有可以干扰的重复数据,所以就暂用他拉)
看到这,哈哈,注册码信息已经写入注册表了,并且明文存储没有加密,这样我们就不用去辛辛苦苦的去找软件的注册验证方式拉,刚开始破解信心指数就猛的+1
关掉软件,上PEID来查下壳吧
PEID查壳显示nothing found * ,是不是未知壳呢?看链接器版本显示8.0,查看区块,没有什么异常,初步断定这是VC++8.0写的软件,并且没有加壳。事实上以我个人经验来说,VC++7.0以上版本写的软件,PEID大都会显示nothing found *,这是因为VC++7.0以上版本写的软件的入口特征都不一样,和VC++6.0固定的入口特征完全不同,PEID还识别不了。这样简单的判断后,原来不是未知壳,破解信心指数再次+1
OD载入软件,点击运行。。。等等,出现了异常(如果你的OD异常选项没有忽略所有异常的话)
这是怎么回事呢?是不是软件有加壳呢?还是软件自身产生了这些异常?试一试忽略所有异常和忽略最近发生的异常,对软件进行调试,发现可以正常调试,初步判定软件并没有加壳,出现异常是软件自身产生的。这里需要特别说明的是,判断软件是否加壳有很多方法,有时需要多种方法的结合(例如看输入表有没加密,有没增加可疑的区块等等),但是更多的时候需要我们调试软件的经验和感觉,调试的软件多了,见的壳多了,直觉都能告诉我们软件有没加壳。
这样判断下来,软件没有加壳,哈哈,信心指数陡然+3
既然是通过注册表存储注册信息,那启动时必然要读取注册表,再加以判断。一般来说查询注册表用2个API函数RegQueryValueA和RegQueryValueExA,看下这个软件的输入表,里面只有一个注册表查询函数RegQueryValueExA,又省事多了啊,注册表存储注册码的键名是 Key ,这样我们可以下条件断点来到从注册表中获取注册码的地方。
命令行输入: bp RegQueryValueExA,[SRING [ESP+8]]=="Key"
说明:条件断点的知识可以在OD帮助手册中找到
中断下来啦,F2取消断点,ALT+F9执行到用户代码 ---->这个软件使用了mfc80.dll,如果你的OD没有导入mfc80.lib库的话,需要先导入下,这样才能看到mfc80.dll中的函数名,我导入mfc80.lib库以后,函数名显得有些乱码,原因不明,还望知道的朋友告诉我一声。
来到这里:
00410ED5 |. FF15 0C804400 CALL DWORD PTR DS:[<&ADVAPI32.RegOpenKeyExA>] ; \RegOpenKeyExA
00410EDB |. 3BC3 CMP EAX,EBX
00410EDD |. 0F85 13010000 JNZ MV_Build.00410FF6
00410EE3 |. 8B7424 14 MOV ESI,DWORD PTR SS:[ESP+14]
00410EE7 |. 8D4C24 14 LEA ECX,DWORD PTR SS:[ESP+14]
00410EEB |. 51 PUSH ECX
00410EEC |. 8D5424 28 LEA EDX,DWORD PTR SS:[ESP+28]
00410EF0 |. 52 PUSH EDX
00410EF1 |. 68 64BB4400 PUSH MV_Build.0044BB64 ; ASCII "Key" 00411088 |. E8 93560200 CALL MV_Build.00436720 ; 算注册码关键函数,将注册码压栈了且栈中有机器码
0041108D |. 83C4 08 ADD ESP,8
00411090 |. 8BCD MOV ECX,EBP
00411092 |. C68424 300100>MOV BYTE PTR SS:[ESP+130],2
0041109A |. FF15 0C854400 CALL DWORD PTR DS:[<&MFC80.#??B?$CSimpleStringT@D>; MFC80.#?GetString@?$CSimpleStringT@D$00@ATL@@QBEPBDXZ_3397
004110A0 |. 50 PUSH EAX ; EAX=机器码
004110A1 |. 8D4C24 20 LEA ECX,DWORD PTR SS:[ESP+20] ; ecx=经过计算后得到的注册码的地址
004110A5 |. FF15 20854400 CALL DWORD PTR DS:[<&MFC80.#?Compare@?$CStringT@D>; MFC80.#?Compare@?$CStringT@DV?$StrTraitMFC_DLL@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@QBEHPBD@Z_1482
[培训]科锐逆向工程师培训第53期2025年7月8日开班!
上传的附件: