请选择 进入手机版 | 继续访问电脑版

    搜索
    热搜: 活动 交友 discuz
    Hi~登录注册
    查看: 174|回复: 0

    金盾2018SS加密视频机器码替换工具的分析过程二

    [复制链接]
    发表于 2018-11-15 20:35:47 | 显示全部楼层 |阅读模式
    前一篇分析了生成器的功能
    本节对生成的播放器(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功能。


    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?加入我们

    x
    IT资源社区 - 免责声明 1、本站会员可发帖,本主题所有言论和图片纯属会员个人意见,与本论坛立场无关.
    2、本站所有帖子由该帖子作者发表,该帖子作者享有帖子相关权益.
    3、本帖内容来源网友及会员分享和其它网络媒体.
    4、本站仅提供学习的平台,所有资料均来自于网络,版权归原创者所有!本站不提供任何保证,并不承担任何法律责任,如果对您的版权或者利益造成损害,请提供相应的资质证明,我们将于3个工作日内予以删除并致以最深的歉意!
    5、若因内容问题IT资源社区管理员和版主有权不事先通知发贴者而删除本文.
    6、本站教程仅供本站会员学习参考,不得传播及用于其他用途,学习完后请在24小时内自行删除.
    7、本站邮箱地址:admin@it0365.com
    IT资源社区 it0365.com 更多精彩内容等你发现
    回复

    使用道具 举报

    游客
    回复
    懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
    您需要登录后才可以回帖 登录 | 加入我们

    关闭

    站长推荐上一条 /2 下一条

    QQ|Archiver|手机版|小黑屋|IT资源社区(IT0365.COM)

    GMT+8, 2018-12-10 10:21 , Processed in 0.048760 second(s), 15 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

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