金盾视频加密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 学习啦!楼主很强大 学习下新的分析。 本帖最后由 CHHSun 于 2010-2-27 09:05 编辑
分析的好有深度,三个字,“看不懂”:loveliness:
没有7-16位算出来的这5位数字是不会播放的,但是这5位是固定。
但是他一定是数字,没有事的可以从00000-99999一个一个猜哈。;www 看不懂这些喔 :DweeqwCC大叔对这情有独钟 sf自占备用了 站在前辈的肩膀上进步 学习啦!楼主很强大 在Unpack看到了