吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 15300|回复: 28
收起左侧

[原创] xxx2018SS加密视频机器码替换工具的分析过程二

[复制链接]
simont 发表于 2018-11-18 11:05
本帖最后由 H夜 于 2019-6-6 18:17 编辑

本节对生成的播放器(LOADER)进行分析。双击LOADER后,直接运行了播放器。前面讲过播放器是写在LOADER尾部,现在双击直接运行了播放器,就说明它读取了播放器并创建了新进程,用到的函数:ReadFile、CreateProcess
同样把生成的播放器加载到OD里,查找下字符串看能发现些什么:

我们看到该LOADER里有这些API,应该是做了提权、注入、创建新进程、进程遍历、生成文件等操作从路径来看,程序是由VS2010生成的。

现在我们直接对ReadFile函数下断,F9运行程序。看它断下来读什么东西
[Asm] 纯文本查看 复制代码
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自身读取播放器。为了更清晰的分析它的过程,我们在堆栈中对红色右键 反汇编跟随后,找到段首下断,在重新运行播放器

[Asm] 纯文本查看 复制代码
0020EDE0  |010320A3  返回到 JDPlayer.010320A3 来自 JDPlayer.01043494
段首位置下断:

F9运行,F8走下如下图:它在获取系统路径,并和一常量拼接。
[Asm] 纯文本查看 复制代码
01031F30  |.  68 04010000   push 0x104                               ; /BufSize = 104 (260.)
01031F35  |.  8D8C24 A00100>lea ecx,dword ptr ss:[esp+0x1A0]         ; |
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:[esp+0x1A0]
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:[esp+0x99]
F8继续往下走,它进行了内存空间申请操作
F8走,下面位置进行了文件偏移:001E6800
[Asm] 纯文本查看 复制代码
00AD208F  |.  E8 8F140100   call JDPlayer.00AE3523
 
0111352E  |.  FF75 10       push [arg.3]                             ; /Origin
01113531  |.  8BF1          mov esi,ecx                              ; |
01113533  |.  8B4D 0C       mov ecx,[arg.2]                          ; |
01113536  |.  894D FC       mov [local.1],ecx                        ; |
01113539  |.  8D4D FC       lea ecx,[local.1]                        ; |
0111353C  |.  51            push ecx                                 ; |pOffsetHi
0111353D  |.  50            push eax                                 ; |OffsetLo
0111353E  |.  FF76 04       push dword ptr ds:[esi+0x4]              ; |hFile
01113541  |.  8945 F8       mov [local.2],eax                        ; |
01113544  |.  FF15 3C532201 call dword ptr ds:[<&KERNEL32.SetFilePoi>; \SetFilePointer
同样采用该偏移我们在文件中支看下是什么内容:

对,正是播放器的二进制代码。
F8继续。。。。。。。。把播放器读出来放在申请的空间里,它在系统目录中创建了一个“JDPlayer.exe“的程序,并且是系统隐藏文件。
创建成功后,把读取的播放器直接成出到文件里。后进行了清尾工作。
F8往下走,它在次获取系统目录,和一个常量字符串拼接,然后又释放了一个DLL文件在系统目录下
[Asm] 纯文本查看 复制代码
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文件:
[Asm] 纯文本查看 复制代码
00AD1C8D  |> \53            push ebx
00AD1C8E  |.  57            push edi                                 ; /hResource
00AD1C8F  |.  56            push esi                                 ; |hModule
00AD1C90  |.  C745 FC 00000>mov [local.1],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,[local.1]                        ; |
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在走,它开始创建进程了:


[Asm] 纯文本查看 复制代码
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文件,恢复进程。
[Asm] 纯文本查看 复制代码
00AD22A7  |> \8B4C24 44     mov ecx,dword ptr ss:[esp+0x44]
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:[esp+0x40]
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功能。

免费评分

参与人数 5吾爱币 +11 热心值 +5 收起 理由
Hmily + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
vitas5566 + 1 + 1 谢谢@Thanks!
xinkui + 1 + 1 用心讨论,共获提升!
jewboy + 1 + 1 热心回复!
fangchang819 + 1 + 1 热心回复!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

椿寶彡 发表于 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
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
谢谢分享啊~~~~~~~~~~~~~~~~~~~~~~
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 16:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表