Chinaunix首页 | 论坛 | 博客
  • 博客访问: 528817
  • 博文数量: 40
  • 博客积分: 6020
  • 博客等级: 准将
  • 技术积分: 1711
  • 用 户 组: 普通用户
  • 注册时间: 2005-09-20 18:49
文章分类

全部博文(40)

文章存档

2011年(10)

2010年(13)

2009年(12)

2008年(5)

分类: 网络与安全

2010-09-06 17:31:55

大家好,最近看到去除天狼星加密系统的各种限制炒得比较火爆,那个混蛋论坛居然还要公开对外出售。觉得好奇,于是就拿来分析了一下,还算收获不少,把分析过程贴出来,希望高手别见笑。^言归正传,限制主要有智能防翻录(抓屏)、防止屏幕录像软件翻录,用户名(水印)、3389检测、断网限制。那就下面就逐一来分析一下吧。

加密视频破解天狼星讨论群:88649216

加密视频破解天狼星讨论群:88649216

一、智能防翻录(抓屏)
这个就是用一些冷门的翻录软件、或者截屏时,虽然不被发现,但是录出来却是黑屏的。原理是:软件调用了Direct3D加速,普通的录像软件自然黑屏了。解决方法:自然是不让他启用Direct3D加速了。用OD载入我们的录像文件,在字符串里找到DirectDrawCreate,然后双击,跳转到相应的汇编代码处。如下:
00413B358B85FCFEFFFFmoveax,dwordptr[ebp-0x104]
00413B3BF6802706000002testbyteptr[eax+0x627],0x2
00413B427410jeshort00413B54
00413B448B15E8844B00movedx,dwordptr[0x4B84E8]
00413B4AC7826C0200000200>movdwordptr[edx+0x26C],0x2
00413B548B0DE8844B00movecx,dwordptr[0x4B84E8]
00413B5A83B96C02000000cmpdwordptr[ecx+0x26C],0x0
00413B610F8ECC040000jle00414033
00413B676843964B00push004B9643;ddraw.dll
00413B6CE89D2E0A00call//加载ddraw.dll
00413B718B15E8844B00movedx,dwordptr[0x4B84E8]
00413B778982EC010000movdwordptr[edx+0x1EC],eax
00413B7DA1E8844B00moveax,dwordptr[0x4B84E8]
00413B8283B8EC01000000cmpdwordptr[eax+0x1EC],0x0
00413B897505jnzshort00413B90
00413B8B83C9FForecx,-0x1
00413B8EEB78jmpshort00413C08
00413B90684D964B00push004B964D;directdrawcreate
00413B95A1E8844B00moveax,dwordptr[0x4B84E8]
00413B9A8B90EC010000movedx,dwordptr[eax+0x1EC]
00413BA052pushedx
00413BA1E8A22D0A00call//初始化directdraw
00413BA68985B4FEFFFFmovdwordptr[ebp-0x14C],eax
00413BAC83BDB4FEFFFF00cmpdwordptr[ebp-0x14C],0x0
00413BB37507jnzshort00413BBC
00413BB5B9FEFFFFFFmovecx,-0x2

我们的目的是直接不让程序加载Direct,那么可以看出

00413B610F8ECC040000jle00414033

可以完全跳过direct加载,那就改成jmp了。这样改了之后,就不黑屏了。但是会弹出一个错误框,提示)directx错误2,请关闭后重新运行试试。错误代码找到相应的代码:

0041C490/7567jnzshort0041C4F9
0041C492|66:C78558FFFFFFE>movwordptr[ebp-0xA8],0xE0
0041C49B|8D45B0leaeax,dwordptr[ebp-0x50]
0041C49E|8B950CFFFFFFmovedx,dwordptr[ebp-0xF4]
0041C4A4|E8DF5A0800call004A1F88
0041C4A9|FF8564FFFFFFincdwordptr[ebp-0x9C]
0041C4AF|8BD0movedx,eax
0041C4B1|33C0xoreax,eax
0041C4B3|8D4DACleaecx,dwordptr[ebp-0x54]
0041C4B6|8945ACmovdwordptr[ebp-0x54],eax
0041C4B9|B8489A4B00moveax,004B9A48;directx错误2,请关闭后重新运行试试。错误代码:
0041C4BE|FF8564FFFFFFincdwordptr[ebp-0x9C]
0041C4C4|E8AB5F0800call004A2474

这句
0041C490/7567jnzshort0041C4F9//改为jmp就行了

这样经过测试,就完美解决智能防翻录问题了。此时用不知名的录像软件录就不黑屏了,抓屏自然也没问题。

二、防止屏幕录像软件翻录
防止屏幕录像软件翻录,这里主要就是指的屏幕录像专家。这里下断GetWindowTextA,载入教程,运行断下后,取消断点,alt+F9返回,


00411482|.68549B4B00push004B9B54;/pmlxzj
00411487|.6A00push0x0;|Inheritable=FALSE
00411489|.6801001F00push0x1F0001;|Access=1F0001
0041148E|.E8B1550A00call;\OpenMutexA
00411493|.85C0testeax,eax
00411495|.742Cjeshort004114C3
00411497|.50pusheax;/hObject
00411498|.E8BB530A00call;\CloseHandle
0041149D|.B801000000moveax,0x1
004114A2|.BA02000000movedx,0x2
00411482|.68549B4B00push004B9B54;/pmlxzj
00411487|.6A00push0x0;|Inheritable=FALSE
00411489|.6801001F00push0x1F0001;|Access=1F0001
0041148E|.E8B1550A00call;\OpenMutexA
00411493|.85C0testeax,eax
00411495|.742Cjeshort004114C3
00411497|.50pusheax;/hObject
00411498|.E8BB530A00call;\CloseHandle
0041149D|.B801000000moveax,0x1
004114A2|.BA02000000movedx,0x2
004114A7|.50pusheax
004114A8|.8D45FCleaeax,dwordptr[ebp-0x4]
004114AB|.FF4DECdecdwordptr[ebp-0x14]
004114AE|.E85D0B0900call004A2010
004114B3|.58popeax
004114B4|.8B55D0movedx,dwordptr[ebp-0x30]
004114B7|.64:891500000>movdwordptrfs:[0],edx
004114BE|.E9B1010000jmp00411674
004114C3|>33F6xoresi,esi
004114C5|.85DBtestebx,ebx
004114C7|.0F844E010000je0041161B
004114CD|>6800040000/push0x400;/Arg3=00000400
004114D2|.6A00|push0x0;|Arg2=00000000
004114D4|.8D85C8F7FFFF|leaeax,dwordptr[ebp-0x838];|
004114DA|.50|pusheax;|Arg1
004114DB|.E8A4290800|call00493E84;\第十八讲.00493E84
004114E0|.83C40C|addesp,0xC
004114E3|.8D95C8F7FFFF|leaedx,dwordptr[ebp-0x838]
004114E9|.6800040000|push0x400;/Count=400(1024.)
004114EE|.52|pushedx;|Buffer
004114EF|.53|pushebx;|hWnd
004114F0|.E8E55A0A00|call;\GetWindowTextA
004114F5|.66:C745E020>|movwordptr[ebp-0x20],0x20//返回到这里
;004114FB|.8D95C8F7FFFF|leaedx,dwordptr[ebp-0x838]

向上看还发现
00411482|.68549B4B00push004B9B54;/pmlxzj
00411487|.6A00push0x0;|Inheritable=FALSE
00411489|.6801001F00push0x1F0001;|Access=1F0001
0041148E|.E8B1550A00call;\OpenMutexA

这个地方OpenMutexA一般用来进程互斥,看到pmlxzj,很明显是屏幕录像专家的缩写吧。哈哈F8F8F8">/e6\*a6y+I:w#E那就修改这里,
00411493|.85C0testeax,eax
00411495|.742Cjeshort004114C3

改为
0041149333C0xoreax,eax
00411495EB2Cjmpshort004114C3

还有这里
004114C3|>\33F6xoresi,esi
004114C5|.85DBtestebx,ebx
004114C7|.0F844E010000je0041161B

改为
004114C3|>\33F6xoresi,esi
004114C5|.85DBtestebx,ebx
004114C790nop
004114C8E94E010000jmp0041161B

这样就修改好了。顺便在这个程序的断尾下段,看看这个call的上一层是什么。
00411677|.8BE5movesp,ebp
00411679|.5Dpopebp
0041167A\.C3retn//在这里F2,断下后F8来到下面

00414A3F.50pusheax;/Arg1
00414A40.E8DBC9FFFFcall00411420;\第十八讲.00411420//刚才的那个call
00414A45.59popecx//来到这里。;00B12724
00414A46.48deceax
00414A47.0F8598000000jnz00414AE5//有个跳转,不跳就检测到非法软件
00414A4D.66:C78510FFF>movwordptr[ebp-0xF0],0x1DC
00414A56.8B95FCFEFFFFmovedx,dwordptr[ebp-0x104]
00414A5C.33C0xoreax,eax
00414A5E.8B8A401B0000movecx,dwordptr[edx+0x1B40]
00414A64.8D9540FFFFFFleaedx,dwordptr[ebp-0xC0]
00414A6A.51pushecx
00414A6B.898540FFFFFFmovdwordptr[ebp-0xC0],eax
00414A71.52pushedx
00414A72.FF851CFFFFFFincdwordptr[ebp-0xE4]
00414A78.E8E34D0200call00439860
00414A7D.33C0xoreax,eax
00414A7F.83C408addesp,0x8
00414A82.89853CFFFFFFmovdwordptr[ebp-0xC4],eax
00414A88.B845994B00moveax,004B9945;播放时请关闭其它不相关软件:
00414A8D.FF851CFFFFFFincdwordptr[ebp-0xE4]


从上面的代码,可以看出下GetWindowTextA还是比较准确的。至于
00414A47.0F8598000000jnz00414AE5

这里就没有必要修改了,因为我们已经在关键call里面改动了相关的代码了,这样防止屏幕录像软件翻录的限制就去除了,现在可以使用屏幕录像专家或者其他知名录像软件来翻录了。

 

用户名(水印)

这个所谓的水印就是指跳动的用户名、屏幕上固定不动的字符`原理应该是:视频解码之后,然后在临时电脑屏幕上绘上去的吧。,i那就下bpGDI32.ExtTextOutA这个断点既然是视频解码之后,然后在临时电脑屏幕上绘上去的,那我们就等录像显示正在打开那个进度条时,再下段吧。一开始就下断点,可能断的次数太多。重新载入教程,bpGDI32.ExtTextOutA,断下之后,看堆栈:


0012F2DC0044D30E/CALLtoExtTextOutAfrom第十八讲.0044D309
0012F2E0E6011DDD|hDC=E6011DDD
0012F2E400000000|X=0
0012F2E800000000|Y=0
0012F2EC00000000|Options=0
0012F2F000000000|pRect=NULL
0012F2F400B4F3BC|String="用",BB,"??"
0012F2F800000016|StringSize=16(22.)
0012F2FC00000000\pSpacing=NULL

 


很明显,"用",BB,"??",这个就是漂浮着的那个水印。那我们可以修改成任意的名字,这也就是传说中的替换水印。注意:(不能把这个内容清空,因为程序会校验,清空了,播放一段时间,就出错)。
0012F2F800000016|StringSize=16(22.)指的就是水印的大小,我们改为1(注意不能改为0,因为程序会校验,改为0,播放一段时间,就出错b|!D)w.w-N2B#t0J-L结合上面的分析,我们这样修改:修改水印大小为1,把用户名变为“-”,很小的字符,占两个像素,几乎看不出来了。

 


四、3389检测
这个的话,也非常容易。查找字符串“请断开远程终端后再播放”


00412F5D./7421jeshort00412F80
00412F5F.|66:C78510FFF>movwordptr[ebp-0xF0],0x50
00412F68.|8B55E0movedx,dwordptr[ebp-0x20]
00412F6B.|52pushedx;/Arg1
00412F6C.|E8677F0200call0043AED8;\第十八讲.0043AED8
00412F71.|59popecx
00412F72.|66:C78510FFF>movwordptr[ebp-0xF0],0x44
00412F7B.|8B5DE0movebx,dwordptr[ebp-0x20]
00412F7E.|EB03jmpshort00412F83
00412F80>\8B5DE0movebx,dwordptr[ebp-0x20]
00412F83>53pushebx;/Arg1
00412F84.E8EF800200call0043B078;\第十八讲.0043B078
00412F89.59popecx
00412F8A.48deceax
00412F8B.753Ejnzshort00412FCB
00412F8D.66:C78510FFF>movwordptr[ebp-0xF0],0x5C
00412F96.BAC3954B00movedx,004B95C3;请断开远程终端后再播放
00412F9B.8D45DCleaeax,dwordptr[ebp-0x24]
00412F9E.E871EF0800call004A1F14
00412FA3.FF851CFFFFFFincdwordptr[ebp-0xE4]
00412FA9.8B00moveax,dwordptr[eax]
00412FAB.E87C120500call0046422C
00412FB0.FF8D1CFFFFFFdecdwordptr[ebp-0xE4]
00412FB6.8D45DCleaeax,dwordptr[ebp-0x24]
00412FB9.BA02000000movedx,0x2
00412FBE.E84DF00800call004A2010
00412FC3.6A00push0x0
00412FC5.E8C69F0800call0049CF90
00412FCA.59popecx
00412FCB>6A03push0x3;/Arg2=00000003
00412FCD.53pushebx;|Arg1

 

直接修改这个就行吧
00412F8B.753Ejnzshort00412FCB//jnz改jmp即可

不过,我更喜欢进上面的关键call里改。
00412F84.E8EF800200call0043B078
F7进到这里面,现在本机没有开3389,那就在OD里走一遍,把发生跳转的都改jmp,没跳的都nop,就行了。这里就不演示了。这样,就去除了3389检测的限制。


五、断网限制
断网限制,下断IPHLPAPI.PfCreateInterface,断下之后alt+F9返回


00401854/$55pushebp
00401855|.8BECmovebp,esp
00401857|.83C4D0addesp,-0x30
0040185A|.53pushebx
0040185B|.56pushesi
0040185C|.8B7510movesi,dwordptr[ebp+0x10]
0040185F|.8B5D08movebx,dwordptr[ebp+0x8]
00401862|.8D04B3leaeax,dwordptr[ebx+esi*4]
00401865|.83C050addeax,0x50
00401868|.50pusheax
00401869|.6A01push0x1
0040186B|.6A00push0x0
0040186D|.6A01push0x1
0040186F|.6A01push0x1
00401871|.6A00push0x0
00401873|.E8804F0B00call
00401878|.85C0testeax,eax
0040187A|.7407jeshort00401883
0040187C|.33C0xoreax,eax
0040187E|.E98C000000jmp0040190F
00401883|>8B15EC844B00movedx,dwordptr[0x4B84EC]
00401889|.8955FCmovdwordptr[ebp-0x4],edx

 

很明显把
0040187A|.7407jeshort00401883

改为
0040187A90nop
0040187B90nop

即可这样,就去掉了断网限制。;总结一下,以上分析,就完美去掉了天狼系加密系统的所有限制,经测试,对于不同的录像文件,这个限制部分的程序的代码结构是一模一样的。感兴趣的朋友可以做一个通用的去限制补丁。附上我刚才分析的那个录像文件,供大家分析。

阅读(3562) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~