xxx2018SS加密视频机器码替换工具的分析过程二
本帖最后由 H夜 于 2019-6-6 18:17 编辑本节对生成的播放器(LOADER)进行分析。双击LOADER后,直接运行了播放器。前面讲过播放器是写在LOADER尾部,现在双击直接运行了播放器,就说明它读取了播放器并创建了新进程,用到的函数:ReadFile、CreateProcess
同样把生成的播放器加载到OD里,查找下字符串看能发现些什么:
http://it0365.com/data/attachment/forum/201811/15/203831qpxbhyz7vvb8jbhy.png
我们看到该LOADER里有这些API,应该是做了提权、注入、创建新进程、进程遍历、生成文件等操作从路径来看,程序是由VS2010生成的。
现在我们直接对ReadFile函数下断,F9运行程序。看它断下来读什么东西
0020EDC0 010434BB/CALL 到 ReadFile 来自 JDPlayer.010434B5
0020EDC4 00000114|hFile = 00000114 (window)
0020EDC8 044B0000|Buffer = 044B0000
0020EDCC 01CA4000|BytesToRead = 1CA4000 (30031872.)
0020EDD0 0020EDE8|pBytesRead = 0020EDE8
0020EDD4 00000000\pOverlapped = NULL
0020EDD8 0060AFB0
0020EDDC/0020F0A8
0020EDE0|010320A3返回到 JDPlayer.010320A3 来自 JDPlayer.01043494
它在从LOADER自身读取播放器。为了更清晰的分析它的过程,我们在堆栈中对红色右键 反汇编跟随后,找到段首下断,在重新运行播放器
0020EDE0|010320A3返回到 JDPlayer.010320A3 来自 JDPlayer.01043494段首位置下断:http://it0365.com/data/attachment/forum/201811/15/204110b2y1mzr8xvbscu8n.png
F9运行,F8走下如下图:它在获取系统路径,并和一常量拼接。
01031F30|.68 04010000 push 0x104 ; /BufSize = 104 (260.)
01031F35|.8D8C24 A00100>lea ecx,dword ptr ss: ; |
01031F3C|.51 push ecx ; |Buffer
01031F3D|.FF15 0C541501 call dword ptr ds:[<&KERNEL32.GetSystemD>; \GetSystemDirectoryA
01031F43|.68 08DB1701 push JDPlayer.0117DB08 ;\JDPlayer.exe
01031F48|.8D9424 A00100>lea edx,dword ptr ss:
01031F4F|.68 04010000 push 0x104
01031F54|.52 push edx
01031F55|.E8 BBF60F00 call JDPlayer.01131615
01031F5A|.83C4 0C add esp,0xC
01031F5D|.68 03010000 push 0x103
01031F62|.8D8424 990000>lea eax,dword ptr ss:F8继续往下走,它进行了内存空间申请操作F8走,下面位置进行了文件偏移:001E6800
00AD208F|.E8 8F140100 call JDPlayer.00AE3523
0111352E|.FF75 10 push ; /Origin
01113531|.8BF1 mov esi,ecx ; |
01113533|.8B4D 0C mov ecx, ; |
01113536|.894D FC mov ,ecx ; |
01113539|.8D4D FC lea ecx, ; |
0111353C|.51 push ecx ; |pOffsetHi
0111353D|.50 push eax ; |OffsetLo
0111353E|.FF76 04 push dword ptr ds: ; |hFile
01113541|.8945 F8 mov ,eax ; |
01113544|.FF15 3C532201 call dword ptr ds:[<&KERNEL32.SetFilePoi>; \SetFilePointer同样采用该偏移我们在文件中支看下是什么内容:http://it0365.com/data/attachment/forum/201811/15/204918yazrar807sbj7xcl.png
对,正是播放器的二进制代码。
F8继续。。。。。。。。把播放器读出来放在申请的空间里,它在系统目录中创建了一个“JDPlayer.exe“的程序,并且是系统隐藏文件。
创建成功后,把读取的播放器直接成出到文件里。后进行了清尾工作。
F8往下走,它在次获取系统目录,和一个常量字符串拼接,然后又释放了一个DLL文件在系统目录下
00AD2113|.68 04010000 push 0x104 ; /BufSize = 104 (260.)
00AD2118|.68 F853C400 push JDPlayer.00C453F8 ; |Buffer = JDPlayer.00C453F8
00AD211D|.FF15 0C54BF00 call dword ptr ds:[<&KERNEL32.GetSystemD>; \GetSystemDirectoryA
00AD2123|.68 34DBC100 push JDPlayer.00C1DB34 ;\sunflover.dll
00AD2128|.68 04010000 push 0x104
00AD212D|.68 F853C400 push JDPlayer.00C453F8 ;ASCII "C:\Windows\system32\sunflover.dll"
00AD2132|.E8 DEF40F00 call JDPlayer.00BD1615 ;拼接
00AD2137|.83C4 0C add esp,0xC
00AD213A|.E8 21FBFFFF call JDPlayer.00AD1C60;释放DLL
00AD213F|.85C0 test eax,eax
00AD2141|.0F85 89000000 jnz JDPlayer.00AD21D0
00AD2147|.50 push eax释放DLL文件:00AD1C8D|> \53 push ebx
00AD1C8E|.57 push edi ; /hResource
00AD1C8F|.56 push esi ; |hModule
00AD1C90|.C745 FC 00000>mov ,0x0 ; |
00AD1C97|.FF15 2C54BF00 call dword ptr ds:[<&KERNEL32.LoadResour>; \LoadResource
00AD1C9D|.50 push eax ; /hResource
00AD1C9E|.FF15 2854BF00 call dword ptr ds:[<&KERNEL32.LockResour>; \LockResource
00AD1CA4|.57 push edi ; /hResource
00AD1CA5|.56 push esi ; |hModule
00AD1CA6|.8BD8 mov ebx,eax ; |
00AD1CA8|.FF15 2454BF00 call dword ptr ds:[<&KERNEL32.SizeofReso>; \SizeofResource
00AD1CAE|.6A 00 push 0x0 ; /hTemplateFile = NULL
00AD1CB0|.6A 06 push 0x6 ; |Attributes = HIDDEN|SYSTEM
00AD1CB2|.6A 02 push 0x2 ; |Mode = CREATE_ALWAYS
00AD1CB4|.6A 00 push 0x0 ; |pSecurity = NULL
00AD1CB6|.6A 07 push 0x7 ; |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE|4
00AD1CB8|.68 00000040 push 0x40000000 ; |Access = GENERIC_WRITE
00AD1CBD|.68 F853C400 push JDPlayer.00C453F8 ; |FileName = "C:\Windows\system32\sunflover.dll"
00AD1CC2|.8BF8 mov edi,eax ; |
00AD1CC4|.FF15 5452BF00 call dword ptr ds:[<&KERNEL32.CreateFile>; \CreateFileA
00AD1CCA|.6A 00 push 0x0 ; /pOverlapped = NULL
00AD1CCC|.8BF0 mov esi,eax ; |
00AD1CCE|.8D45 FC lea eax, ; |
00AD1CD1|.50 push eax ; |pBytesWritten
00AD1CD2|.57 push edi ; |nBytesToWrite
00AD1CD3|.53 push ebx ; |Buffer
00AD1CD4|.56 push esi ; |hFile
00AD1CD5|.FF15 2054BF00 call dword ptr ds:[<&KERNEL32.WriteFile>>; \WriteFile
00AD1CDB|.5B pop ebx
00AD1CDC|.83FE FF cmp esi,-0x1
00AD1CDF|.^ 74 A4 je XJDPlayer.00AD1C85
00AD1CE1|.56 push esi ; /hObject
00AD1CE2|.FF15 7454BF00 call dword ptr ds:[<&KERNEL32.CloseHandl>; \CloseHandle
00AD1CE8|.5F pop edi
00AD1CE9|.B8 01000000 mov eax,0x1
00AD1CEE|.5E pop esi
00AD1CEF|.8BE5 mov esp,ebp
00AD1CF1|.5D pop ebp
F8在走,它开始创建进程了:
http://it0365.com/data/attachment/forum/201811/15/201803js50izx0aun0351e.png
0031ED2C 0031EEF0|ModuleFileName = "C:\Windows\system32\JDPlayer.exe"
0031ED30 00000000|CommandLine = NULL
0031ED34 00000000|pProcessSecurity = NULL
0031ED38 00000000|pThreadSecurity = NULL
0031ED3C 00000000|InheritHandles = FALSE
0031ED40 00000004|CreationFlags = CREATE_SUSPENDED
0031ED44 00000000|pEnvironment = NULL
0031ED48 00000000|CurrentDir = NULL
0031ED4C 0031EDA0|pStartupInfo = 0031EDA0
0031ED50 0031ED90\pProcessInfo = 0031ED90创建了一个挂起的进程。而后进行了对该进程提权并注入生成的DLL文件,恢复进程。00AD22A7|> \8B4C24 44 mov ecx,dword ptr ss:
00AD22AB|.51 push ecx
00AD22AC|.E8 8FF8FFFF call JDPlayer.00AD1B40 ;提权,注入DLL
00AD22B1|.83C4 04 add esp,0x4
00AD22B4|.85C0 test eax,eax
00AD22B6|.75 0C jnz XJDPlayer.00AD22C4
00AD22B8|.50 push eax
00AD22B9|.50 push eax
00AD22BA|.68 7CDBC100 push JDPlayer.00C1DB7C ;DLL注入失败!
00AD22BF|.^ E9 8AFEFFFF jmp JDPlayer.00AD214E
00AD22C4|>68 8CDBC100 push JDPlayer.00C1DB8C ; /CreateProcess JDPlayer.exe \r\n
00AD22C9|.FF15 0054BF00 call dword ptr ds:[<&KERNEL32.OutputDebu>; \OutputDebugStringA
00AD22CF|.8B5424 40 mov edx,dword ptr ss:
00AD22D3|.52 push edx ; /hThread
00AD22D4|.FF15 F453BF00 call dword ptr ds:[<&KERNEL32.ResumeThre>; \ResumeThread
00AD22DA|.68 ACDBC100 push JDPlayer.00C1DBAC ; /ResumeThread JDPlayer.exe \r\n
00AD22DF|.FF15 0054BF00 call dword ptr ds:[<&KERNEL32.OutputDebu>; \OutputDebugStringA
后面做清理工作。。。。。。。。。。。。。。。。。。。。。。
到此该LOADER的执行就分析完了。
总结:
1、从尾部读取播放器,并生成到系统目录下面。播放器的大小就是LOADER总大小减支偏移量就是视频大小。
2、释放一个DLL文件也生成到系统目录下。
3、创建新进程,挂起后。将生成的DLL文件注入到播放器。恢复进程。
4、完工
继续走,2018SS替换机器码的功能应该是在这生成的DLL里面。具体怎么实现,我们后面在分析该DLL功能。 感谢分享 都是大神啊,小弟只能膜拜,以前经常去找一些教程看刚刚看着挺好,可能中途就看不了需要授权的密码才能继续观看, 我不太明白啊 st大神来个2019的, 要申精的节奏 @simont {:301_1003:}
st大神来个2019的, 谢谢分享
谢谢分享 谢谢分享啊~~~~~~~~~~~~~~~~~~~~~~