天狼星加密又更新了,6月底的视频无法去除黑屏问题了
分析-去除天狼星视频加密系统的各种限制 转自天草此帖售价 30 铜币,已有 4 人购买
大家好,最近看到去除天狼星加密系统的各种限制炒得比较火爆,那个 混蛋论坛 居然还要公开对外出售。觉得好奇,于是就拿来分析了一下,还算收获不少,把分析过程贴出来,希望高手别见笑。^言归正传,限制主要有 智能防翻录(抓屏)、防止屏幕录像软件翻录,用户名(水印)、3389检测、断网限制。那就下面就逐一来分析一下吧。
一、智能防翻录(抓屏)
这个就是用一些冷门的翻录软件、或者截屏时,虽然不被发现,但是录出来却是黑屏的。原理是:软件调用了Direct3D加速,普通的录像软件自然黑屏了。解决方法:自然是不让他启用Direct3D加速了。用OD载入我们的录像文件,在字符串里找到DirectDrawCreate,然后双击,跳转到相应的汇编代码处。如下:
复制代码 [*]00413B35 8B85 FCFEFFFF mov eax, dword ptr [*]00413B3B F680 27060000 02 test byte ptr , 0x2[*]00413B42 74 10 je short 00413B54[*]00413B44 8B15 E8844B00 mov edx, dword ptr [*]00413B4A C782 6C020000 0200>mov dword ptr , 0x2[*]00413B54 8B0D E8844B00 mov ecx, dword ptr [*]00413B5A 83B9 6C020000 00 cmp dword ptr , 0x0[*]00413B61 0F8E CC040000 jle 00414033[*]00413B67 68 43964B00 push 004B9643 ; ddraw.dll[*]00413B6C E8 9D2E0A00 call <jmp.&KERNEL32.LoadLibraryA> //加载ddraw.dll[*]00413B71 8B15 E8844B00 mov edx, dword ptr [*]00413B77 8982 EC010000 mov dword ptr , eax[*]00413B7D A1 E8844B00 mov eax, dword ptr [*]00413B82 83B8 EC010000 00 cmp dword ptr , 0x0[*]00413B89 75 05 jnz short 00413B90[*]00413B8B 83C9 FF or ecx, -0x1[*]00413B8E EB 78 jmp short 00413C08[*]00413B90 68 4D964B00 push 004B964D ; directdrawcreate[*]00413B95 A1 E8844B00 mov eax, dword ptr [*]00413B9A 8B90 EC010000 mov edx, dword ptr [*]00413BA0 52 push edx[*]00413BA1 E8 A22D0A00 call <jmp.&KERNEL32.GetProcAddress> // 初始化directdraw[*]00413BA6 8985 B4FEFFFF mov dword ptr , eax[*]00413BAC 83BD B4FEFFFF 00 cmp dword ptr , 0x0[*]00413BB3 75 07 jnz short 00413BBC[*]00413BB5 B9 FEFFFFFF mov ecx, -0x2
我们的目的是直接不让程序加载Direct,那么可以看出
复制代码 [*]00413B61 0F8E CC040000 jle 00414033
可以完全跳过direct加载,那就改成jmp了。 这样改了之后,就不黑屏了。但是会弹出一个错误框,提示)directx错误2,请关闭后重新运行试试。错误代码找到相应的代码:
复制代码 [*]0041C490 /75 67 jnz short 0041C4F9[*]0041C492 |66:C785 58FFFFFF E>mov word ptr , 0xE0[*]0041C49B |8D45 B0 lea eax, dword ptr [*]0041C49E |8B95 0CFFFFFF mov edx, dword ptr [*]0041C4A4 |E8 DF5A0800 call 004A1F88[*]0041C4A9 |FF85 64FFFFFF inc dword ptr [*]0041C4AF |8BD0 mov edx, eax[*]0041C4B1 |33C0 xor eax, eax[*]0041C4B3 |8D4D AC lea ecx, dword ptr [*]0041C4B6 |8945 AC mov dword ptr , eax[*]0041C4B9 |B8 489A4B00 mov eax, 004B9A48 ; directx错误2,请关闭后重新运行试试。错误代码:[*]0041C4BE |FF85 64FFFFFF inc dword ptr [*]0041C4C4 |E8 AB5F0800 call 004A2474
这句
0041C490 /75 67 jnz short 0041C4F9//改为jmp就行了
复制代码
这样经过测试,就完美解决智能防翻录问题了。此时用不知名的录像软件录就不黑屏了,抓屏自然也没问题。
二、防止屏幕录像软件翻录
防止屏幕录像软件翻录,这里主要就是指的屏幕录像专家。这里下断GetWindowTextA,载入教程,运行断下后,取消断点,alt+F9返回,
复制代码 [*]00411482|.68 549B4B00 push 004B9B54 ; /pmlxzj[*]00411487|.6A 00 push 0x0 ; |Inheritable = FALSE[*]00411489|.68 01001F00 push 0x1F0001 ; |Access = 1F0001[*]0041148E|.E8 B1550A00 call <jmp.&KERNEL32.OpenMutexA> ; \OpenMutexA[*]00411493|.85C0 test eax, eax[*]00411495|.74 2C je short 004114C3[*]00411497|.50 push eax ; /hObject[*]00411498|.E8 BB530A00 call <jmp.&KERNEL32.CloseHandle> ; \CloseHandle[*]0041149D|.B8 01000000 mov eax, 0x1[*]004114A2|.BA 02000000 mov edx, 0x2[*]00411482|.68 549B4B00 push 004B9B54 ; /pmlxzj[*]00411487|.6A 00 push 0x0 ; |Inheritable = FALSE[*]00411489|.68 01001F00 push 0x1F0001 ; |Access = 1F0001[*]0041148E|.E8 B1550A00 call <jmp.&KERNEL32.OpenMutexA> ; \OpenMutexA[*]00411493|.85C0 test eax, eax[*]00411495|.74 2C je short 004114C3[*]00411497|.50 push eax ; /hObject[*]00411498|.E8 BB530A00 call <jmp.&KERNEL32.CloseHandle> ; \CloseHandle[*]0041149D|.B8 01000000 mov eax, 0x1[*]004114A2|.BA 02000000 mov edx, 0x2[*]004114A7|.50 push eax[*]004114A8|.8D45 FC lea eax, dword ptr [*]004114AB|.FF4D EC dec dword ptr [*]004114AE|.E8 5D0B0900 call 004A2010[*]004114B3|.58 pop eax[*]004114B4|.8B55 D0 mov edx, dword ptr [*]004114B7|.64:8915 00000>mov dword ptr fs:, edx[*]004114BE|.E9 B1010000 jmp 00411674[*]004114C3|>33F6 xor esi, esi[*]004114C5|.85DB test ebx, ebx[*]004114C7|.0F84 4E010000 je 0041161B[*]004114CD|>68 00040000 /push 0x400 ; /Arg3 = 00000400[*]004114D2|.6A 00 |push 0x0 ; |Arg2 = 00000000[*]004114D4|.8D85 C8F7FFFF |lea eax, dword ptr ; |[*]004114DA|.50 |push eax ; |Arg1[*]004114DB|.E8 A4290800 |call 00493E84 ; \第十八讲.00493E84[*]004114E0|.83C4 0C |add esp, 0xC[*]004114E3|.8D95 C8F7FFFF |lea edx, dword ptr [*]004114E9|.68 00040000 |push 0x400 ; /Count = 400 (1024.)[*]004114EE|.52 |push edx ; |Buffer[*]004114EF|.53 |push ebx ; |hWnd[*]004114F0|.E8 E55A0A00 |call <jmp.&USER32.GetWindowTextA> ; \GetWindowTextA[*]004114F5|.66:C745 E0 20>|mov word ptr , 0x20 //返回到这里[*]; 004114FB|.8D95 C8F7FFFF |lea edx, dword ptr [*][*]向上看还发现[*]00411482|.68 549B4B00 push 004B9B54 ; /pmlxzj[*]00411487|.6A 00 push 0x0 ; |Inheritable = FALSE[*]00411489|.68 01001F00 push 0x1F0001 ; |Access = 1F0001[*]0041148E|.E8 B1550A00 call <jmp.&KERNEL32.OpenMutexA> ; \OpenMutexA[*][*]这个地方OpenMutexA一般用来进程互斥,看到pmlxzj,很明显是 屏幕录像专家的缩写吧。哈哈F8F8F8">/ e6 \* a6 y+ I: w# E那就修改这里,[*]00411493|.85C0 test eax, eax[*]00411495|.74 2C je short 004114C3[*][*]改为[*]00411493 33C0 xor eax, eax[*]00411495 EB 2C jmp short 004114C3[*][*]还有这里[*]004114C3|> \33F6 xor esi, esi[*]004114C5|.85DB test ebx, ebx[*]004114C7|.0F84 4E010000 je 0041161B[*][*]改为[*]004114C3|> \33F6 xor esi, esi[*]004114C5|.85DB test ebx, ebx[*]004114C7 90 nop[*]004114C8 E9 4E010000 jmp 0041161B[*][*]这样就修改好了。顺便在这个程序的断尾下段,看看这个call的上一层是什么。[*]00411677|.8BE5 mov esp, ebp[*]00411679|.5D pop ebp[*]0041167A\.C3 retn//在这里F2,断下后F8来到下面[*]复制代码[*]00414A3F .50 push eax ; /Arg1[*]00414A40 .E8 DBC9FFFF call 00411420 ; \第十八讲.00411420//刚才的那个call[*]00414A45 .59 pop ecx //来到这里。 ;00B12724[*]00414A46 .48 dec eax[*]00414A47 .0F85 98000000 jnz 00414AE5//有个跳转,不跳就检测到非法软件[*]00414A4D .66:C785 10FFF>mov word ptr , 0x1DC[*]00414A56 .8B95 FCFEFFFF mov edx, dword ptr [*]00414A5C .33C0 xor eax, eax[*]00414A5E .8B8A 401B0000 mov ecx, dword ptr [*]00414A64 .8D95 40FFFFFF lea edx, dword ptr [*]00414A6A .51 push ecx[*]00414A6B .8985 40FFFFFF mov dword ptr , eax[*]00414A71 .52 push edx[*]00414A72 .FF85 1CFFFFFF inc dword ptr [*]00414A78 .E8 E34D0200 call 00439860[*]00414A7D .33C0 xor eax, eax[*]00414A7F .83C4 08 add esp, 0x8[*]00414A82 .8985 3CFFFFFF mov dword ptr , eax[*]00414A88 .B8 45994B00 mov eax, 004B9945 ;播放时请关闭其它不相关软件:[*]00414A8D .FF85 1CFFFFFF inc dword ptr
从上面的代码,可以看出下GetWindowTextA 还是比较准确的。至于
00414A47 .0F85 98000000 jnz 00414AE5
这里就没有必要修改了,因为我们已经在关键call里面改动了相关的代码了,这样 防止屏幕录像软件翻录的限制 就去除了,现在可以使用屏幕录像专家或者其他知名录像软件来翻录了。
用户名(水印)
这个所谓的水印就是指跳动的用户名、屏幕上固定不动的字符`原理应该是:视频解码之后,然后在临时电脑屏幕上绘上去的吧。, i那就下bp GDI32.ExtTextOutA 这个断点既然是视频解码之后,然后在临时电脑屏幕上绘上去的,那我们就等录像显示正在打开那个进度条时,再下段吧。一开始就下断点,可能断的次数太多。重新载入教程,bp GDI32.ExtTextOutA,断下之后,看堆栈:
复制代码 [*]0012F2DC 0044D30E/CALL to ExtTextOutA from 第十八讲.0044D309[*]0012F2E0 E6011DDD|hDC = E6011DDD[*]0012F2E4 00000000|X = 0[*]0012F2E8 00000000|Y = 0[*]0012F2EC 00000000|Options = 0[*]0012F2F0 00000000|pRect = NULL[*]0012F2F4 00B4F3BC|String = "用",BB,"?wWw.Begin09.COM"[*]0012F2F8 00000016|StringSize = 16 (22.)[*]0012F2FC 00000000\pSpacing = NULL
很明显,"用",BB,"?http://www.begin09.com/" ,这个就是漂浮着的那个水印。那我们可以修改成任意的名字,这也就是传说中的替换水印。注意:(不能把这个内容清空,因为程序会校验,清空了,播放一段时间,就出错)。
0012F2F8 00000016|StringSize = 16 (22.)指的就是水印的大小,我们改为1(注意不能改为0,因为程序会校验,改为0,播放一段时间,就出错b|! D) w. w- N2 B# t0 J- L结合上面的分析,我们这样修改:修改水印大小为1,把用户名变为“-”,很小的字符,占两个像素,几乎看不出来了。
四、3389检测
这个的话,也非常容易。查找字符串“请断开远程终端后再播放”
复制代码 [*]00412F5D . /74 21 je short 00412F80[*]00412F5F . |66:C785 10FFF>mov word ptr , 0x50[*]00412F68 . |8B55 E0 mov edx, dword ptr [*]00412F6B . |52 push edx ; /Arg1[*]00412F6C . |E8 677F0200 call 0043AED8 ; \第十八讲.0043AED8[*]00412F71 . |59 pop ecx[*]00412F72 . |66:C785 10FFF>mov word ptr , 0x44[*]00412F7B . |8B5D E0 mov ebx, dword ptr [*]00412F7E . |EB 03 jmp short 00412F83[*]00412F80 > \8B5D E0 mov ebx, dword ptr [*]00412F83 >53 push ebx ; /Arg1[*]00412F84 .E8 EF800200 call 0043B078 ; \第十八讲.0043B078[*]00412F89 .59 pop ecx[*]00412F8A .48 dec eax[*]00412F8B .75 3E jnz short 00412FCB[*]00412F8D .66:C785 10FFF>mov word ptr , 0x5C[*]00412F96 .BA C3954B00 mov edx, 004B95C3 ;请断开远程终端后再播放[*]00412F9B .8D45 DC lea eax, dword ptr [*]00412F9E .E8 71EF0800 call 004A1F14[*]00412FA3 .FF85 1CFFFFFF inc dword ptr [*]00412FA9 .8B00 mov eax, dword ptr [*]00412FAB .E8 7C120500 call 0046422C[*]00412FB0 .FF8D 1CFFFFFF dec dword ptr [*]00412FB6 .8D45 DC lea eax, dword ptr [*]00412FB9 .BA 02000000 mov edx, 0x2[*]00412FBE .E8 4DF00800 call 004A2010[*]00412FC3 .6A 00 push 0x0[*]00412FC5 .E8 C69F0800 call 0049CF90[*]00412FCA .59 pop ecx[*]00412FCB >6A 03 push 0x3 ; /Arg2 = 00000003[*]00412FCD .53 push ebx ; |Arg1
复制代码
直接修改这个就行吧
00412F8B .75 3E jnz short 00412FCB// jnz改jmp即可
不过,我更喜欢进上面的关键call里改。
00412F84 .E8 EF800200 call 0043B078
F7进到这里面,现在本机没有开3389,那就在OD里走一遍,把发生跳转的都改jmp,没跳的都nop,就行了。这里就不演示了。这样,就去除了3389检测 的限制。
五、断网限制
断网限制,下断IPHLPAPI.PfCreateInterface,断下之后alt+F9返回
复制代码 [*]00401854/$55 push ebp[*]00401855|.8BEC mov ebp, esp[*]00401857|.83C4 D0 add esp, -0x30[*]0040185A|.53 push ebx[*]0040185B|.56 push esi[*]0040185C|.8B75 10 mov esi, dword ptr [*]0040185F|.8B5D 08 mov ebx, dword ptr [*]00401862|.8D04B3 lea eax, dword ptr [*]00401865|.83C0 50 add eax, 0x50[*]00401868|.50 push eax[*]00401869|.6A 01 push 0x1[*]0040186B|.6A 00 push 0x0[*]0040186D|.6A 01 push 0x1[*]0040186F|.6A 01 push 0x1[*]00401871|.6A 00 push 0x0[*]00401873|.E8 804F0B00 call <jmp.&IPHLPAPI.PHLPAPI._PfCreate>[*]00401878|.85C0 test eax, eax[*]0040187A|.74 07 je short 00401883[*]0040187C|.33C0 xor eax, eax[*]0040187E|.E9 8C000000 jmp 0040190F[*]00401883|>8B15 EC844B00 mov edx, dword ptr [*]00401889|.8955 FC mov dword ptr , edx
很明显把
0040187A|.74 07 je short 00401883
改为
0040187A 90 nop
0040187B 90 nop
即可这样,就去掉了断网限制。; 总结一下,以上分析,就完美去掉了 天狼系加密系统的所有限制,经测试,对于不同的录像文件,这个限制部分的程序的代码结构是一模一样的。感兴趣的朋友可以做一个 通用的去限制补丁。附上我刚才分析的那个录像文件,供大家分析。
[PS:衷心祝愿混蛋的那个去限制工具一件也卖不出去。哈哈。
转载请注明出处,谢谢
by zbzb97. 的确不错,很多断点第一次见 好文章!! 哈哈,精品文章呀…… 学习中 这个得好好学习,谢谢楼主分享 貌似很强大。补丁怎么写 怎么没有看到文中提到的练习文件?