simont 发表于 2018-11-18 11:05

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功能。

椿寶彡 发表于 2018-11-18 11:25

感谢分享                     

vitas5566 发表于 2018-11-19 12:26

都是大神啊,小弟只能膜拜,以前经常去找一些教程看刚刚看着挺好,可能中途就看不了需要授权的密码才能继续观看,

VIP521178 发表于 2018-11-18 11:08

我不太明白啊

逍遥枷锁 发表于 2018-11-18 11:10

st大神来个2019的,

冥界3大法王 发表于 2018-11-18 11:14

要申精的节奏 @simont {:301_1003:}

haoii123 发表于 2018-11-18 11:21


st大神来个2019的,

shuxiang110 发表于 2018-11-18 11:22

谢谢分享

ray1003 发表于 2018-11-18 11:24


谢谢分享

swallow 发表于 2018-11-18 11:50

wstb1990 发表于 2018-11-18 11:55

谢谢分享啊~~~~~~~~~~~~~~~~~~~~~~
页: [1] 2 3
查看完整版本: xxx2018SS加密视频机器码替换工具的分析过程二