wuhanqi 发表于 2010-2-27 02:23

金盾视频加密2010.5正式版加密文件破解浅析 by wuhanqi[LCG]

本帖最后由 wuhanqi 于 2010-2-27 04:44 编辑

【文章标题】: 金盾视频加密2010.5正式版加密文件破解浅析 by wuhanqi
【文章作者】: wuhanqi
【作者主页】: hi.baidu.com/wuhanqi
【下载地址】: 自己搜索下载
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
关于这个软件,CHHSun大叔研究了前面的版本,在这个版本碰到了小问题,请我与他一起探讨,嘿嘿,太看得起我了,不过看得起我自然也会尽全力帮忙,经过了四个晚上(白天学业繁忙..)的研究...大概理解了程序的验证流程..只是流程...算法无能..各位大牛可以自己去分析分析,写点心得与我等小菜分享、
稍微来讲点我的分析结果吧!
首先呢,我们要运行软件主程序,保持密匙不变更改机器码,看看结果是啥:
9d64c560ad53b271d531c76c
9d30c260ad53b2718760c232

大概可以判断机器码验证的是用零替换的那几位:
9d000060ad53b27100000000

而我们指定一下用户水印信息,发现不再是9d开头了:c22e9135a05ab2718134c135f2
原来9d是没有水印的情况.既然我们要破解,又不是逆算法,不管那么多了,我们就9d开头把!
这样我们可以从主程序得到以上信息。

手头有CHHSun大叔送来的正式版加密的文件。并且有真码方便做坏事....那我们就开工吧!
PEID查下壳,Delphi,自然而然想到DELPHI事件脚本。
运行脚本,输入9d000060ad53b27100000000,点击确定会断下来,我们F8加F4狂跟..代码超长..来到提示错误的地方...

004A3D5F   .A1 84CE5300   MOV EAX,DWORD PTR DS:            ;53ce84的值是关键,下硬件断点!
004A3D64   .BA 64494A00   MOV EDX,004A4964
004A3D69   .E8 4219F6FF   CALL 004056B0
004A3D6E   .75 20         JNZ SHORT 004A3D90
004A3D70   .8D95 80F7FFFF LEA EDX,DWORD PTR SS:[EBP-880]
004A3D76   .B8 CC494A00   MOV EAX,004A49CC                         ;ASCII "03A7149157BF40AA03B976A95CD4"
004A3D7B   .E8 B4600000   CALL 004A9E34
004A3D80   .8B85 80F7FFFF MOV EAX,DWORD PTR SS:[EBP-880]
004A3D86   .E8 0180F9FF   CALL 0043BD8C                            ;这里出错了、
004A3D8B   .E9 1E030000   JMP 004A40AE
004A3D90   >A1 84CE5300   MOV EAX,DWORD PTR DS:

重载程序,在点击确定按钮后的第二次中断停下来,我们看下代码:
00405300|> \F0:FF42 F8    LOCK INC DWORD PTR DS:[EDX-8]
00405304|>8710          XCHG DWORD PTR DS:[EAX],EDX            ;EDX与EAX所指向的值交换,而我们的EAX是53ce84
00405306|.85D2          TEST EDX,EDX                           ;停在这
00405308|.74 14         JE SHORT 0040531E

上下看下代码,这里是个子程序,所以我们不能让这段子程序执行,我们走出去,来到:

004A38AC   .8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]
004A38AF      8B55 EC       MOV EDX,DWORD PTR SS:[EBP-14]
004A38B2   .E8 F91DF6FF   CALL 004056B0
004A38B7   .74 0F         JE SHORT 004A38C8
004A38B9   .B8 84CE5300   MOV EAX,0053CE84
004A38BE   .BA 64494A00   MOV EDX,004A4964
004A38C3   .E8 141AF6FF   CALL 004052DC                            ;这里就干坏事了!
004A38C8   >A1 7C775300   MOV EAX,DWORD PTR DS:

记得CHHSun说过:8b55ec→8b55f0
这下懂了为什么了..要保持EAX=EDX不让他修改关键标志位..
那我们Ctrl+b:8b45f08b55ece8????????74
大概有五处...全部修改后,对于0的部分就破解完成了、

那他什么时候验证密匙的呢?
CHHSun大叔提供了一个地址:004A45A5   .8D85 DCFBFFFF LEA EAX,DWORD PTR SS:
说此地址EDX很关键,那我们来这里看看。

EAX 00000000
ECX 00000001
EDX 00D3CFE8 ASCII "47600"
EBX 00CF0200
ESP 0012ED00 ASCII "OHJ"
EBP 0012F5B4
ESI 0053CF00 02礼仪.0053CF00
EDI 00417BC0 02礼仪.00417BC0
EIP 004A45A5 02礼仪.004A45A5

我输入的是正确的7-16位。而这里显示了47600。
程序什么时候对这个值进行了验证呢?我直接在D3CFE8下硬件断点.没断下来.
后来想到他可能把00D3CFE8这个地址保存到别的地方,然后再调用..
Alt+M打开内存镜像,Ctrl+b搜索:e8cfd300
0053CE8CE8 CF D3 00                                    柘?楺?
找到了,那我搜索所有常数,看看哪里调用这个...53ce8c,还是没有,难道有把他也保存到别的地方了?
再次内存镜像中Ctrl+b:8cce5300
005375EC8C CE 53 00                                    屛S.埼
004A1DD88C CE 53 00                                    屛S.棼

两个,经测试,第一个是关键,我们右键,搜索所有常数:5375EC
右键,在每个命令上设置断点,然后F9~

来到:
004A778A|.A1 EC755300   MOV EAX,DWORD PTR DS:
004A778F|.8B00          MOV EAX,DWORD PTR DS:[EAX]
004A7791|.E8 5A26F6FF   CALL 00409DF0
004A7796|.8BD0          MOV EDX,EAX

向下看看代码,是解码算法:
004A782C|> /8D55 D3       /LEA EDX,DWORD PTR SS:[EBP-2D]
004A782F|. |B9 01000000   |MOV ECX,1
004A7834|. |8B45 E0       |MOV EAX,DWORD PTR SS:[EBP-20]
004A7837|. |8B38          |MOV EDI,DWORD PTR DS:[EAX]
004A7839|. |FF57 0C       |CALL DWORD PTR DS:[EDI+C]
004A783C|. |0FB645 D3   |MOVZX EAX,BYTE PTR SS:[EBP-2D]
004A7840|. |8BD3          |MOV EDX,EBX
004A7842|. |C1EA 08       |SHR EDX,8
004A7845|. |3055 D3       |XOR BYTE PTR SS:[EBP-2D],DL
004A7848|. |0FB6C0      |MOVZX EAX,AL
004A784B|. |03D8          |ADD EBX,EAX
004A784D|. |0FAF5D D8   |IMUL EBX,DWORD PTR SS:[EBP-28]
004A7851|. |035D D4       |ADD EBX,DWORD PTR SS:[EBP-2C]
004A7854|. |8D55 D3       |LEA EDX,DWORD PTR SS:[EBP-2D]
004A7857|. |B9 01000000   |MOV ECX,1
004A785C|. |8B45 DC       |MOV EAX,DWORD PTR SS:[EBP-24]
004A785F|. |8B38          |MOV EDI,DWORD PTR DS:[EAX]
004A7861|. |FF57 10       |CALL DWORD PTR DS:[EDI+10]
004A7864|. |4E            |DEC ESI
004A7865|.^\75 C5         \JNZ SHORT 004A782C
**** Hidden Message *****
Special thx to:CHHSun upksky BeyondMe 鹭影依凌
--------------------------------------------------------------------------------
【版权声明】: 本文原创于LCG, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2010年02月27日 2:31:25

本代码的着色效果由xTiNt自动完成
下载xTiNt http://211.90.75.84/web/kanaun/download/xTiNt.rar

小举 发表于 2010-2-27 09:15

学习啦!楼主很强大

cxx54007 发表于 2010-2-27 08:42

学习下新的分析。

CHHSun 发表于 2010-2-27 08:42

本帖最后由 CHHSun 于 2010-2-27 09:05 编辑

分析的好有深度,三个字,“看不懂”:loveliness:
没有7-16位算出来的这5位数字是不会播放的,但是这5位是固定。
但是他一定是数字,没有事的可以从00000-99999一个一个猜哈。;www

coolqqt 发表于 2010-2-27 04:04

看不懂这些喔

kankan 发表于 2010-2-27 02:40

:DweeqwCC大叔对这情有独钟

wuhanqi 发表于 2010-2-27 02:31

sf自占备用了

cleanspace 发表于 2010-2-27 09:32

站在前辈的肩膀上进步

dpll 发表于 2010-2-27 09:57

学习啦!楼主很强大

井跳蛙 发表于 2010-2-27 11:16

在Unpack看到了
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 金盾视频加密2010.5正式版加密文件破解浅析 by wuhanqi[LCG]