首页
社区
课程
招聘
[分享]WinLicense SDK 应用实例分析
发表于: 2012-12-24 17:30 42569

[分享]WinLicense SDK 应用实例分析

2012-12-24 17:30
42569

工具:原版OllyDbg v1.10 + StrongOD + ODBGScript + "Oreans UnVirtualizer ODBG Plug-in v1.5"
声明:JFF(JUST for FUN);转载请注明出处!

实例程序来自帖子“这家伙那么恐怖吗?才下1次,没人接单指点吗?
楼主的标题确实够吸引眼球,“电击率”也算不错。程序本身已经失效,大概是人家把漏子堵上了,所以才会有这篇文章。

if 只想使用目标程序 goto :EOF else goto Label_请继续往下看


后来铁打英雄的帖子“GetDuxiuStr破解 ---WL/TMD加密”也提到这个东西,不过他是有Key的,用"Bypass HWID"方法;而我没有,只能Keygen了。

不管用那种方法,按说过了WinLicense的"License System",就应该出现用户界面了,但是程序却莫名其妙地退出了。看来作者在用户代码中还设有“机关”。

WinLicense的"许可系统"就不用再关心它了,我们从用户代码开始找。起点当然是目标的OEP。

一.寻找OEP
本例是CISC虚拟机,除注明外,以下讨论只针对CISC VM。

直接跑LCF-AT的脚本"Themida - Winlicense 1.x - 2.x Multi PRO Edition 1.2",得到:"VM OEP ADDRESS is 5C88A7"
005C88A7   68 68E57B13           PUSH    137BE568               ; VM OEP by LCF-AT
005C88AC   E9 4B6FE5FF           JMP     0041F7FC

可见,OEP被虚拟化了,所以称为"VM OEP"。稍后可以看到"Entry Point Virtualization"的值,也就是说OEP处有多少条指令被虚拟化。
"VM OEP"处为一个典型的PUSH/JMP序列:PUSH KEY/JMP VM_ENTRY。

在一个TMD/WL保护的应用中,如果虚拟机的处理器类型选择CISC,一定有3~4个VMs。Themida是3个,WinLicense是4个。
按其出现的地址顺序,将它们依次命名为VM1、VM2、VM3、VM4:
    a) VM1是主控,包括三个重要DLL(KERNEL32.dll,USER32.dll,ADVAPI32.dll)的处理;WL中HWID的生成及处理;及部分Anti Checks。
    b) VM2 & VM3 基本就是打酱油的,主要是一些Anti Checks。
    c) VM4是WL才有的,负责处理"License System"相关的东西。VM4是WinLicense中Bypass或Keygen的关键。
cektop、quosego等等那些文章中著名的CmpEcxEaxAddress就是VM4中一个Handler的有效关键指令地址,明白了道理就不用满世界去找它。

查找这些个VMs的入口/出口地址、CONTEXT地址/大小、Handlers个数等等,可以用手工或脚本,本文不再深入。虚拟机的基本信息对写脚本、或正确理解使用插件工具非常重要。

在一个CISC虚拟机中,无论以何种方式,当来到VM_ENTRY时,栈上的第一个DWORD总是KEY。我把它称为"VM CALL",对每个"VM CALL"用VM#_KEY的格式来标识,它有可能只是一个过程,也可能是一个子程序被多次调用。
比如这里,"VM OEP"跳向VM1,用VM1_137BE568来表示。

好了,VM1_137BE568究竟干了些什么?显然需要弄清楚两件事:
     i) 模拟执行了哪些被虚拟的指令,也就是人们常说的"Stolen Code"——被偷的代码;
    ii) 没有不醒的梦——总要从虚拟回到现实的:这些代码执行完后,它一定会回到用户代码段(对EXE基本上是0x401000段)继续执行接下来的代码——返回地址。

第一点在Unpacking简单保护的Themida目标时很重要——“还原OEP”,在不清楚或不愿意碰虚拟机这个“黑匣子”的情况下,人们使用“类比法”来还原,即找目标的相同编程语言、编译连接版本等入口特征信息。
在WinLicense或保护得较好的Themida目标中,“还原OEP”已显得毫无意义,特别是虚拟机处理器为RISC时,情况会更加复杂,还涉及跨区段。所以返回地址对我们更加重要。
第二点取得返回地址,很简单,拦在VM1_EXIT处。

在这里我们可以避开“黑匣子”,但是在其他地方我们却不得不面对它。要打开它,如果不借助适当的工具是很困难的——不是说不可能。
事实上,我在逆向WL中那个用来自LicenseHash的“四小天鹅”(4 DWORDs)解密LicenseFileKey[0]~[2F]的算法时,只用到了脚本;而在使用下面提到的工具时,它崩溃了。
工具不是万能的,但是确实能为我们提供极大的便利,特别是当你理解并掌握了它。

要用到的工具就是"Oreans UnVirtualizer ODBG Plug-in",来自“伟大的Deathway”——请原谅我模仿一下“建翔体”。相信很多人是知道这个工具的,但大多数人是把这柄宝剑珍藏在箱底,连取出来舞弄一下的机会都没有。
这把利剑经过数年的磨砾,不能说有多完美,但已足够“神器”。如果不会用就放弃,可惜哦!总不能永远停留在“牛B”的阶段(NB = newbie?)吧。

我们在VM1_137BE568上小试“牛刀”:
        ...                                                     ; 此处省略数十行
@Label_005C8331
        005C8331        PUSH DWORD PTR [ESP]
        005C834D        MOV EBP,DWORD PTR [ESP]
        005C836E        ADD ESP,0x4
        005C8397        ADD ESP,0x4
        005C83F4        PUSH DWORD PTR [ESP]
        005C840A        MOV EAX,DWORD PTR [ESP]
        005C8426        ADD ESP,0x4
        005C846D        ADD ESP,0x4
        005C8488        MOV EBX,DWORD PTR [ESP]
        005C849E        PUSH ECX
        005C84A5        MOV ECX,ESP
        005C84B4        ADD ECX,0x4
        005C84CE        ADD ECX,0x4
        005C8518        PUSH DWORD PTR [ESP]
        005C851F        MOV DWORD PTR [ESP],ECX
        005C8582        POP ECX
        005C85AC        POP ESP                                 ; <-***
        005C85B4        PUSH EBP                                ; emulating OEP of MFC started here
        005C85BD        MOV EBP,ESP
        005C85D3        PUSH 0xff
        005C85D8        PUSH 0x411670
        005C8603        PUSH 0x40dfec                           ; SE handler installation
        005C863A        MOV EAX,DWORD PTR FS:[0x0]
        005C86AA        PUSH EAX
        005C86BD        MOV DWORD PTR FS:[0x0],ESP
        005C86CC        SUB ESP,0x68
        005C8732        PUSH EBX
        005C8747        PUSH ESI
        005C8755        PUSH EDI
        005C8768        MOV DWORD PTR [EBP+0xffffffe8],ESP      ; [EBP-18]
        005C8798        XOR EBX,EBX
        005C87F8        MOV DWORD PTR [EBP+0xfffffffc],EBX      ; [EBP-04]
        005C8867        JMP 0x40de8a                            ; back to the real world

以上复制自"Oreans UnVirtualizer"生成的"Cisc_Uv_Dump.txt"文件。
首先,本段反汇编的地址不是现实世界的地址,而是虚拟机的取指指针ESI。其次,地址不是连续的,除了虚拟机本身 (1字节指令代码) + (0/1/2/4字节操作码) 的因素外,还有大量垃圾指令的影响。
从005C85B4到005C87F8,随便找个MFC应用的OEP对比一下,看到它的神奇了吧。
005C8867处返回到用户代码0x40de8a处:

顺便说一下,OllyDBG的SFX功能或手工查找栈上的"SEH Record"也可以找到0040DE8A处,它是现实世界中执行的第一条用户程序指令。

二.用户代码跟踪
本段代码列表显示了从MFC入口跟踪到我们所关注代码处的过程,期间含有大量的"VM CALL",其中代码的虚实转换非常有意思,可以观察到SecureEngine是怎么把他们组合到一起的。你可以跳过本节直接到第三节。
0040DE8A   6A 02                 PUSH    2
0040DE8C   E8 EB747F77           CALL    msvcrt.__set_app_type
0040DE91   90                    NOP
0040DE92   59                    POP     ECX
...
0040DF80   6A 0A                 PUSH    0A
0040DF82   58                    POP     EAX
0040DF83   50                    PUSH    EAX
0040DF84   56                    PUSH    ESI
0040DF85   53                    PUSH    EBX
0040DF86   53                    PUSH    EBX
0040DF87   E8 33650900           CALL    004A44BF
0040DF8C   90                    NOP
0040DF8D   50                    PUSH    EAX
0040DF8E   E8 91000000           CALL    0040E024               ; <-***
0040DF93   8945 98               MOV     [EBP-68], EAX
0040DF96   50                    PUSH    EAX
0040DF97   90                    NOP
0040DF98   E8 E1BE7F77           CALL    msvcrt.exit
...
0040E024   FF7424 10             PUSH    DWORD PTR [ESP+10]     ; 0000000A
0040E028   FF7424 10             PUSH    DWORD PTR [ESP+10]     ; 00152371
0040E02C   FF7424 10             PUSH    DWORD PTR [ESP+10]     ; 00000000
0040E030   FF7424 10             PUSH    DWORD PTR [ESP+10]     ; 00400000
0040E034   E8 43000000           CALL    0040E07C
0040E039   C2 1000               RETN    10
...
0040E07C   E9 AAEE9273           JMP     mfc42.#1576
...
73D3CF2B > 8BFF                  MOV     EDI, EDI               ; in mfc42.dll
...
73D3CF71   FF50 58               CALL    NEAR [EAX+58]          ; back to 004013D0
...
004013D0   55                    PUSH    EBP
004013D1   8BEC                  MOV     EBP, ESP
004013D3   6A FF                 PUSH    -1
004013D5   68 F3E04000           PUSH    0040E0F3
004013DA   64:A1 00000000        MOV     EAX, FS:[0]
004013E0   50                    PUSH    EAX
004013E1   64:8925 00000000      MOV     FS:[0], ESP
004013E8   81EC C4010000         SUB     ESP, 1C4
004013EE   53                    PUSH    EBX
004013EF   56                    PUSH    ESI
004013F0   57                    PUSH    EDI
004013F1   8BF1                  MOV     ESI, ECX
004013F3   E8 D2C70000           CALL    0040DBCA
004013F8   E9 57081E00           JMP     005E1C54
...
005E1C54   68 2D5B7D13           PUSH    137D5B2D               ; VM1_137D5B2D
005E1C59   E9 9EDBE3FF           JMP     0041F7FC               ; VM1_EXIT back to 004044E0
...
004044E0   6A FF                 PUSH    -1
004044E2   68 20E94000           PUSH    0040E920
004044E7   64:A1 00000000        MOV     EAX, FS:[0]
...
004045A2   64:890D 00000000      MOV     FS:[0], ECX
004045A9   81C4 1C010000         ADD     ESP, 11C
004045AF   C3                    RETN                           ; return to 005DCA83
...
005DCA83   68 5B957D13           PUSH    137D955B               ; 以下"VM CALL"依次执行
005DCA88   E9 6F2DE4FF           JMP     0041F7FC
005DCA8D   68 36977D13           PUSH    137D9736
005DCA92   E9 652DE4FF           JMP     0041F7FC
005DCA97   68 F1987D13           PUSH    137D98F1
005DCA9C   E9 5B2DE4FF           JMP     0041F7FC
005DCAA1   68 A69A7D13           PUSH    137D9AA6
005DCAA6   E9 512DE4FF           JMP     0041F7FC
005DCAAB   68 E79B7D13           PUSH    137D9BE7
005DCAB0   E9 472DE4FF           JMP     0041F7FC
005DCAB5   68 2B9D7D13           PUSH    137D9D2B
005DCABA   E9 3D2DE4FF           JMP     0041F7FC
005DCABF   68 C99D7D13           PUSH    137D9DC9
005DCAC4   E9 332DE4FF           JMP     0041F7FC
005DCAC9   68 F19E7D13           PUSH    137D9EF1
005DCACE   E9 292DE4FF           JMP     0041F7FC
005DCAD3   68 80A07D13           PUSH    137DA080
005DCAD8   E9 1F2DE4FF           JMP     0041F7FC
005DCADD   68 98A17D13           PUSH    137DA198
005DCAE2   E9 152DE4FF           JMP     0041F7FC
005DCAE7   68 95A27D13           PUSH    137DA295
005DCAEC   E9 0B2DE4FF           JMP     0041F7FC
005DCAF1   68 50A37D13           PUSH    137DA350
005DCAF6   E9 012DE4FF           JMP     0041F7FC
005DCAFB   68 A2A47D13           PUSH    137DA4A2
005DCB00   E9 F72CE4FF           JMP     0041F7FC
005DCB05   68 6DA67D13           PUSH    137DA66D
005DCB0A   E9 ED2CE4FF           JMP     0041F7FC
005DCB0F   68 05A77D13           PUSH    137DA705
005DCB14   E9 E32CE4FF           JMP     0041F7FC
005DCB19   68 42A87D13           PUSH    137DA842
005DCB1E   E9 D92CE4FF           JMP     0041F7FC
005DCB23   68 63A97D13           PUSH    137DA963
005DCB28   E9 CF2CE4FF           JMP     0041F7FC
005DCB2D   68 FFA97D13           PUSH    137DA9FF
005DCB32   E9 C52CE4FF           JMP     0041F7FC
005DCB37   68 28AB7D13           PUSH    137DAB28
005DCB3C   E9 BB2CE4FF           JMP     0041F7FC               ; VM1_EXIT to 00401541
...
00401541   E9 C93A1E00           JMP     005E500F
...
005E500F   68 6FAC7D13           PUSH    137DAC6F
005E5014   E9 E3A7E3FF           JMP     0041F7FC               ; VM1_EXIT to 00404C10
...
00404C10   55                    PUSH    EBP
00404C11   8BEC                  MOV     EBP, ESP
00404C13   6A FF                 PUSH    -1
00404C15   68 90EA4000           PUSH    0040EA90
00404C1A   64:A1 00000000        MOV     EAX, FS:[0]
00404C20   50                    PUSH    EAX
00404C21   64:8925 00000000      MOV     FS:[0], ESP
00404C28   81EC 28070000         SUB     ESP, 728
00404C2E   53                    PUSH    EBX
00404C2F   56                    PUSH    ESI
00404C30   57                    PUSH    EDI
00404C31   E9 78E22000           JMP     00612EAE               ; <-***
...
00612EAE   68 D22D8013           PUSH    13802DD2               ; <-***
00612EB3   E9 44C9E0FF           JMP     0041F7FC



三.用户代码中的校验分析
00404C31处的JMP指向"VM CALL":VM1_13802DD2。“机关”就在这个里面,再次祭出"Oreans UnVirtualizer"进行UnVirtualizing。
处理CISC虚拟机VM1的Handlers:

反虚拟化真实地址:

反虚拟化完成:


“反虚拟化”后(以下全部为正确流程,否则就去msvcrt.exit了):
00404C31  /EB 10                 JMP     SHORT 00404C43
00404C33  |90                    NOP
00404C34  |90                    NOP
00404C35  |90                    NOP
00404C36  |90                    NOP
00404C37  |90                    NOP
00404C38  |90                    NOP
00404C39  |90                    NOP
00404C3A  |90                    NOP
00404C3B  |90                    NOP
00404C3C  |90                    NOP
00404C3D  |90                    NOP
00404C3E  |90                    NOP
00404C3F  |90                    NOP
00404C40  |90                    NOP
00404C41  |90                    NOP
00404C42  |90                    NOP
00404C43  \8D45 DC               LEA     EAX, [EBP-24]
00404C46   50                    PUSH    EAX
00404C47   E8 94F8FFFF           CALL    004044E0               ; Get CurrentFolder to [EBP-24], "C:\Temp"
00404C4C   83C4 04               ADD     ESP, 4
00404C4F   68 E8444100           PUSH    004144E8               ; ASCII "\regkey.dat"
00404C54   8D4D D8               LEA     ECX, [EBP-28]
00404C57   50                    PUSH    EAX
00404C58   51                    PUSH    ECX
00404C59   C745 FC 00000000      MOV     DWORD PTR [EBP-4], 0
00404C60   E8 5F8F0000           CALL    0040DBC4               ; mfc42.#924, string cat, "C:\Temp\regkey.dat"
00404C65   8B00                  MOV     EAX, [EAX]
00404C67   50                    PUSH    EAX
00404C68   FF15 34004100         CALL    NEAR [410034]          ; [00410034]=02B30000, kernel32.GetFileAttributesW, ret EAX=00000020
00404C6E   83CF FF               OR      EDI, FFFFFFFF
00404C71   8D4D D8               LEA     ECX, [EBP-28]
00404C74   39F8                  CMP     EAX, EDI
00404C76   0F94C3                SETE    BL
00404C79   E8 028E0000           CALL    0040DA80
00404C7E   8D4D DC               LEA     ECX, [EBP-24]
00404C81   897D FC               MOV     [EBP-4], EDI
00404C84   E8 F78D0000           CALL    0040DA80
00404C89   84DB                  TEST    BL, BL
00404C8B  /74 1C                 JE      SHORT 00404CA9
00404C8D  |8B55 08               MOV     EDX, [EBP+8]           ; 0012FEAC, [0012FEAC]=001605F0
00404C90  |5F                    POP     EDI
00404C91  |5E                    POP     ESI
00404C92  |31C0                  XOR     EAX, EAX
00404C94  |C702 91010000         MOV     DWORD PTR [EDX], 191
00404C9A  |5B                    POP     EBX
00404C9B  |8B4D F4               MOV     ECX, [EBP-C]
00404C9E  |64:890D 00000000      MOV     FS:[0], ECX
00404CA5  |89EC                  MOV     ESP, EBP
00404CA7  |5D                    POP     EBP
00404CA8  |C3                    RETN
00404CA9  \E8 70930000           CALL    0040E01E               ; VM1_137B4E2A, ret eax=00000001

调用0040E01E实际上就是虚拟化后的SDK函数:bool WLRegCheckMachineLocked(void);

if 只想使用目标程序 goto :EOF else goto Label_请继续往下看
005C88A7   68 68E57B13           PUSH    137BE568               ; VM OEP by LCF-AT
005C88AC   E9 4B6FE5FF           JMP     0041F7FC
        ...                                                     ; 此处省略数十行
@Label_005C8331
        005C8331        PUSH DWORD PTR [ESP]
        005C834D        MOV EBP,DWORD PTR [ESP]
        005C836E        ADD ESP,0x4
        005C8397        ADD ESP,0x4
        005C83F4        PUSH DWORD PTR [ESP]
        005C840A        MOV EAX,DWORD PTR [ESP]
        005C8426        ADD ESP,0x4
        005C846D        ADD ESP,0x4
        005C8488        MOV EBX,DWORD PTR [ESP]
        005C849E        PUSH ECX
        005C84A5        MOV ECX,ESP
        005C84B4        ADD ECX,0x4
        005C84CE        ADD ECX,0x4
        005C8518        PUSH DWORD PTR [ESP]
        005C851F        MOV DWORD PTR [ESP],ECX
        005C8582        POP ECX
        005C85AC        POP ESP                                 ; <-***
        005C85B4        PUSH EBP                                ; emulating OEP of MFC started here
        005C85BD        MOV EBP,ESP
        005C85D3        PUSH 0xff
        005C85D8        PUSH 0x411670
        005C8603        PUSH 0x40dfec                           ; SE handler installation
        005C863A        MOV EAX,DWORD PTR FS:[0x0]
        005C86AA        PUSH EAX
        005C86BD        MOV DWORD PTR FS:[0x0],ESP
        005C86CC        SUB ESP,0x68
        005C8732        PUSH EBX
        005C8747        PUSH ESI
        005C8755        PUSH EDI
        005C8768        MOV DWORD PTR [EBP+0xffffffe8],ESP      ; [EBP-18]
        005C8798        XOR EBX,EBX
        005C87F8        MOV DWORD PTR [EBP+0xfffffffc],EBX      ; [EBP-04]
        005C8867        JMP 0x40de8a                            ; back to the real world
0040DE8A   6A 02                 PUSH    2
0040DE8C   E8 EB747F77           CALL    msvcrt.__set_app_type
0040DE91   90                    NOP
0040DE92   59                    POP     ECX
...
0040DF80   6A 0A                 PUSH    0A
0040DF82   58                    POP     EAX
0040DF83   50                    PUSH    EAX
0040DF84   56                    PUSH    ESI
0040DF85   53                    PUSH    EBX
0040DF86   53                    PUSH    EBX
0040DF87   E8 33650900           CALL    004A44BF
0040DF8C   90                    NOP
0040DF8D   50                    PUSH    EAX
0040DF8E   E8 91000000           CALL    0040E024               ; <-***
0040DF93   8945 98               MOV     [EBP-68], EAX
0040DF96   50                    PUSH    EAX
0040DF97   90                    NOP
0040DF98   E8 E1BE7F77           CALL    msvcrt.exit
...
0040E024   FF7424 10             PUSH    DWORD PTR [ESP+10]     ; 0000000A
0040E028   FF7424 10             PUSH    DWORD PTR [ESP+10]     ; 00152371
0040E02C   FF7424 10             PUSH    DWORD PTR [ESP+10]     ; 00000000
0040E030   FF7424 10             PUSH    DWORD PTR [ESP+10]     ; 00400000
0040E034   E8 43000000           CALL    0040E07C
0040E039   C2 1000               RETN    10
...
0040E07C   E9 AAEE9273           JMP     mfc42.#1576
...
73D3CF2B > 8BFF                  MOV     EDI, EDI               ; in mfc42.dll
...
73D3CF71   FF50 58               CALL    NEAR [EAX+58]          ; back to 004013D0
...
004013D0   55                    PUSH    EBP
004013D1   8BEC                  MOV     EBP, ESP
004013D3   6A FF                 PUSH    -1
004013D5   68 F3E04000           PUSH    0040E0F3
004013DA   64:A1 00000000        MOV     EAX, FS:[0]
004013E0   50                    PUSH    EAX
004013E1   64:8925 00000000      MOV     FS:[0], ESP
004013E8   81EC C4010000         SUB     ESP, 1C4
004013EE   53                    PUSH    EBX
004013EF   56                    PUSH    ESI
004013F0   57                    PUSH    EDI
004013F1   8BF1                  MOV     ESI, ECX
004013F3   E8 D2C70000           CALL    0040DBCA
004013F8   E9 57081E00           JMP     005E1C54
...
005E1C54   68 2D5B7D13           PUSH    137D5B2D               ; VM1_137D5B2D
005E1C59   E9 9EDBE3FF           JMP     0041F7FC               ; VM1_EXIT back to 004044E0
...
004044E0   6A FF                 PUSH    -1
004044E2   68 20E94000           PUSH    0040E920
004044E7   64:A1 00000000        MOV     EAX, FS:[0]
...
004045A2   64:890D 00000000      MOV     FS:[0], ECX
004045A9   81C4 1C010000         ADD     ESP, 11C
004045AF   C3                    RETN                           ; return to 005DCA83
...
005DCA83   68 5B957D13           PUSH    137D955B               ; 以下"VM CALL"依次执行
005DCA88   E9 6F2DE4FF           JMP     0041F7FC
005DCA8D   68 36977D13           PUSH    137D9736
005DCA92   E9 652DE4FF           JMP     0041F7FC
005DCA97   68 F1987D13           PUSH    137D98F1
005DCA9C   E9 5B2DE4FF           JMP     0041F7FC
005DCAA1   68 A69A7D13           PUSH    137D9AA6
005DCAA6   E9 512DE4FF           JMP     0041F7FC
005DCAAB   68 E79B7D13           PUSH    137D9BE7
005DCAB0   E9 472DE4FF           JMP     0041F7FC
005DCAB5   68 2B9D7D13           PUSH    137D9D2B
005DCABA   E9 3D2DE4FF           JMP     0041F7FC
005DCABF   68 C99D7D13           PUSH    137D9DC9
005DCAC4   E9 332DE4FF           JMP     0041F7FC
005DCAC9   68 F19E7D13           PUSH    137D9EF1
005DCACE   E9 292DE4FF           JMP     0041F7FC
005DCAD3   68 80A07D13           PUSH    137DA080
005DCAD8   E9 1F2DE4FF           JMP     0041F7FC
005DCADD   68 98A17D13           PUSH    137DA198
005DCAE2   E9 152DE4FF           JMP     0041F7FC
005DCAE7   68 95A27D13           PUSH    137DA295
005DCAEC   E9 0B2DE4FF           JMP     0041F7FC
005DCAF1   68 50A37D13           PUSH    137DA350
005DCAF6   E9 012DE4FF           JMP     0041F7FC
005DCAFB   68 A2A47D13           PUSH    137DA4A2
005DCB00   E9 F72CE4FF           JMP     0041F7FC
005DCB05   68 6DA67D13           PUSH    137DA66D
005DCB0A   E9 ED2CE4FF           JMP     0041F7FC
005DCB0F   68 05A77D13           PUSH    137DA705
005DCB14   E9 E32CE4FF           JMP     0041F7FC
005DCB19   68 42A87D13           PUSH    137DA842
005DCB1E   E9 D92CE4FF           JMP     0041F7FC
005DCB23   68 63A97D13           PUSH    137DA963
005DCB28   E9 CF2CE4FF           JMP     0041F7FC
005DCB2D   68 FFA97D13           PUSH    137DA9FF
005DCB32   E9 C52CE4FF           JMP     0041F7FC
005DCB37   68 28AB7D13           PUSH    137DAB28
005DCB3C   E9 BB2CE4FF           JMP     0041F7FC               ; VM1_EXIT to 00401541
...
00401541   E9 C93A1E00           JMP     005E500F
...
005E500F   68 6FAC7D13           PUSH    137DAC6F
005E5014   E9 E3A7E3FF           JMP     0041F7FC               ; VM1_EXIT to 00404C10
...
00404C10   55                    PUSH    EBP
00404C11   8BEC                  MOV     EBP, ESP
00404C13   6A FF                 PUSH    -1
00404C15   68 90EA4000           PUSH    0040EA90
00404C1A   64:A1 00000000        MOV     EAX, FS:[0]
00404C20   50                    PUSH    EAX
00404C21   64:8925 00000000      MOV     FS:[0], ESP
00404C28   81EC 28070000         SUB     ESP, 728
00404C2E   53                    PUSH    EBX
00404C2F   56                    PUSH    ESI
00404C30   57                    PUSH    EDI
00404C31   E9 78E22000           JMP     00612EAE               ; <-***
...
00612EAE   68 D22D8013           PUSH    13802DD2               ; <-***
00612EB3   E9 44C9E0FF           JMP     0041F7FC
00404C31  /EB 10                 JMP     SHORT 00404C43
00404C33  |90                    NOP
00404C34  |90                    NOP
00404C35  |90                    NOP
00404C36  |90                    NOP
00404C37  |90                    NOP
00404C38  |90                    NOP
00404C39  |90                    NOP
00404C3A  |90                    NOP
00404C3B  |90                    NOP
00404C3C  |90                    NOP
00404C3D  |90                    NOP
00404C3E  |90                    NOP
00404C3F  |90                    NOP
00404C40  |90                    NOP
00404C41  |90                    NOP
00404C42  |90                    NOP
00404C43  \8D45 DC               LEA     EAX, [EBP-24]
00404C46   50                    PUSH    EAX
00404C47   E8 94F8FFFF           CALL    004044E0               ; Get CurrentFolder to [EBP-24], "C:\Temp"
00404C4C   83C4 04               ADD     ESP, 4
00404C4F   68 E8444100           PUSH    004144E8               ; ASCII "\regkey.dat"
00404C54   8D4D D8               LEA     ECX, [EBP-28]
00404C57   50                    PUSH    EAX
00404C58   51                    PUSH    ECX
00404C59   C745 FC 00000000      MOV     DWORD PTR [EBP-4], 0
00404C60   E8 5F8F0000           CALL    0040DBC4               ; mfc42.#924, string cat, "C:\Temp\regkey.dat"
00404C65   8B00                  MOV     EAX, [EAX]
00404C67   50                    PUSH    EAX
00404C68   FF15 34004100         CALL    NEAR [410034]          ; [00410034]=02B30000, kernel32.GetFileAttributesW, ret EAX=00000020
00404C6E   83CF FF               OR      EDI, FFFFFFFF
00404C71   8D4D D8               LEA     ECX, [EBP-28]
00404C74   39F8                  CMP     EAX, EDI
00404C76   0F94C3                SETE    BL
00404C79   E8 028E0000           CALL    0040DA80
00404C7E   8D4D DC               LEA     ECX, [EBP-24]
00404C81   897D FC               MOV     [EBP-4], EDI
00404C84   E8 F78D0000           CALL    0040DA80
00404C89   84DB                  TEST    BL, BL
00404C8B  /74 1C                 JE      SHORT 00404CA9
00404C8D  |8B55 08               MOV     EDX, [EBP+8]           ; 0012FEAC, [0012FEAC]=001605F0
00404C90  |5F                    POP     EDI
00404C91  |5E                    POP     ESI
00404C92  |31C0                  XOR     EAX, EAX
00404C94  |C702 91010000         MOV     DWORD PTR [EDX], 191
00404C9A  |5B                    POP     EBX
00404C9B  |8B4D F4               MOV     ECX, [EBP-C]
00404C9E  |64:890D 00000000      MOV     FS:[0], ECX
00404CA5  |89EC                  MOV     ESP, EBP
00404CA7  |5D                    POP     EBP
00404CA8  |C3                    RETN
00404CA9  \E8 70930000           CALL    0040E01E               ; VM1_137B4E2A, ret eax=00000001
00404CAE   84C0                  TEST    AL, AL                 ; Is locked to a specific machine?
00404CB0  /75 1C                 JNZ     SHORT 00404CCE         ; Yes
00404CB2  |8B45 08               MOV     EAX, [EBP+8]
00404CB5  |5F                    POP     EDI
00404CB6  |5E                    POP     ESI
00404CB7  |5B                    POP     EBX
00404CB8  |C700 92010000         MOV     DWORD PTR [EAX], 192
00404CBE  |31C0                  XOR     EAX, EAX
00404CC0  |8B4D F4               MOV     ECX, [EBP-C]
00404CC3  |64:890D 00000000      MOV     FS:[0], ECX
00404CCA  |89EC                  MOV     ESP, EBP
00404CCC  |5D                    POP     EBP
00404CCD  |C3                    RETN
00404CCE  \8D8D CCF8FFFF         LEA     ECX, [EBP-734]         ; 0012F5B0, pCustomData
00404CD4   8D95 CCFCFFFF         LEA     EDX, [EBP-334]         ; 0012F9B0, pCompanyName
00404CDA   51                    PUSH    ECX
00404CDB   8D85 CCFDFFFF         LEA     EAX, [EBP-234]         ; 0012FAB0, pName
00404CE1   52                    PUSH    EDX
00404CE2   50                    PUSH    EAX
00404CE3   E8 18930000           CALL    0040E000               ; VM1_137A376D, ret eax=00000001
00404CE8   84C0                  TEST    AL, AL                 ; Is succeeded?
00404CEA  /75 1C                 JNZ     SHORT 00404D08         ; Yes
00404CEC  |8B4D 08               MOV     ECX, [EBP+8]
00404CEF  |5F                    POP     EDI
00404CF0  |5E                    POP     ESI
00404CF1  |31C0                  XOR     EAX, EAX
00404CF3  |C701 93010000         MOV     DWORD PTR [ECX], 193
00404CF9  |5B                    POP     EBX
00404CFA  |8B4D F4               MOV     ECX, [EBP-C]
00404CFD  |64:890D 00000000      MOV     FS:[0], ECX
00404D04  |89EC                  MOV     ESP, EBP
00404D06  |5D                    POP     EBP
00404D07  |C3                    RETN
00404D08  \8D95 CCFDFFFF         LEA     EDX, [EBP-234]         ; pName
00404D0E   8D4D E8               LEA     ECX, [EBP-18]          ; 0012FCCC
00404D11   52                    PUSH    EDX
00404D12   E8 898E0000           CALL    0040DBA0               ; mfc42.#537, copy to [EBP-18]
00404D17   8D85 CCF8FFFF         LEA     EAX, [EBP-734]         ; pCustomData
00404D1D   8D4D F0               LEA     ECX, [EBP-10]
00404D20   50                    PUSH    EAX
00404D21   C745 FC 01000000      MOV     DWORD PTR [EBP-4], 1
00404D28   E8 738E0000           CALL    0040DBA0               ; mfc42.#537, copy to [EBP-10]
00404D2D   8B4D E8               MOV     ECX, [EBP-18]
00404D30   C645 FC 02            MOV     BYTE PTR [EBP-4], 2
00404D34   8B41 F8               MOV     EAX, [ECX-8]           ; length of Name
00404D37   83F8 02               CMP     EAX, 2
00404D3A   0F8C D7020000         JL      00405017
00404D40   83F8 0A               CMP     EAX, 0A                ; 0x02 <= length of Name <= 0x0A
00404D43   0F8F CE020000         JG      00405017
00404D49   8B55 F0               MOV     EDX, [EBP-10]
00404D4C   8B42 F8               MOV     EAX, [EDX-8]           ; length of CustomData
00404D4F   83F8 31               CMP     EAX, 31
00404D52   0F8F B4020000         JG      0040500C
00404D58   83F8 27               CMP     EAX, 27
00404D5B   0F8C AB020000         JL      0040500C               ; 0x27 <= length of CustomData <= 0x31
00404D61   68 E4444100           PUSH    004144E4               ; pointer to delimiter char: 0x7C('|')
00404D66   8D4D F0               LEA     ECX, [EBP-10]
00404D69   E8 4C8F0000           CALL    0040DCBA               ; mfc42.#2764, search '|' in CustomData string
00404D6E   50                    PUSH    EAX
00404D6F   8D45 E0               LEA     EAX, [EBP-20]
00404D72   50                    PUSH    EAX
00404D73   8D4D F0               LEA     ECX, [EBP-10]
00404D76   E8 1F8E0000           CALL    0040DB9A               ; mfc42.#4129, get Name string in CustomData to [EBP-20]
00404D7B   8B4D F0               MOV     ECX, [EBP-10]
00404D7E   68 E4444100           PUSH    004144E4
00404D83   C645 FC 03            MOV     BYTE PTR [EBP-4], 3
00404D87   8B71 F8               MOV     ESI, [ECX-8]
00404D8A   8D4D F0               LEA     ECX, [EBP-10]
00404D8D   E8 288F0000           CALL    0040DCBA
00404D92   29C6                  SUB     ESI, EAX
00404D94   8D55 EC               LEA     EDX, [EBP-14]
00404D97   4E                    DEC     ESI
00404D98   8D4D F0               LEA     ECX, [EBP-10]
00404D9B   56                    PUSH    ESI
00404D9C   52                    PUSH    EDX
00404D9D   E8 488F0000           CALL    0040DCEA               ; mfc42.#5710, RString(ecx, esi) to [EBP-10]: get Hardware ID sting in CustomData
00404DA2   8B4D E0               MOV     ECX, [EBP-20]          ; pName
00404DA5   C645 FC 04            MOV     BYTE PTR [EBP-4], 4
00404DA9   8B41 F8               MOV     EAX, [ECX-8]           ; length of Name
00404DAC   83F8 02               CMP     EAX, 2
00404DAF   0F8C 34020000         JL      00404FE9
00404DB5   83F8 14               CMP     EAX, 14
00404DB8   0F8F 2B020000         JG      00404FE9               ; 2<= length of Name <=0x14
00404DBE   8B45 E8               MOV     EAX, [EBP-18]
00404DC1   50                    PUSH    EAX                    ; EAX 003853D8 ASCII "MistHill", get by function WLRegGetLicenseInfo
00404DC2   51                    PUSH    ECX                    ; ECX 00385428 ASCII "MistHill", from CustomData
00404DC3   FF15 D8024100         CALL    NEAR [4102D8]          ; msvcrt._mbsicmp, if Name matches ret eax=0, else eax=FFFFFFFF

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (20)
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
来跟 LZ 学习的
2012-12-24 19:22
0
雪    币: 47147
活跃值: (20460)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
3
圣诞节快乐!
2012-12-24 20:35
0
雪    币: 41
活跃值: (490)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
圣诞快乐!学习
2012-12-24 21:00
0
雪    币: 1015
活跃值: (235)
能力值: ( LV12,RANK:440 )
在线值:
发帖
回帖
粉丝
5
圣诞节快乐!
2012-12-24 21:13
0
雪    币: 15121
活跃值: (4140)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
只能围观
2012-12-24 21:15
0
雪    币: 627
活跃值: (663)
能力值: ( LV9,RANK:270 )
在线值:
发帖
回帖
粉丝
7
祝各位平安夜快乐!
2012-12-24 21:26
0
雪    币: 221
活跃值: (2326)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
好帖,文中工具能一起提供?
2012-12-25 14:26
0
雪    币: 27
活跃值: (127)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
9
2012-12-25 16:51
0
雪    币: 297
活跃值: (265)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
10
怒mark aaa buzi
2012-12-26 16:35
0
雪    币: 1919
活跃值: (901)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
11
想当详细,跟到学学
2012-12-26 21:50
0
雪    币: 627
活跃值: (663)
能力值: ( LV9,RANK:270 )
在线值:
发帖
回帖
粉丝
12
文中截图是我自己对"Oreans UnVirtualizer ODBG Plug-in v1.5"的“汉化”,目前CISC部分已经完成。
前两天,"Oreans UnVirtualizer v1.6"已新鲜出炉,你可以搜索一下。
2012-12-27 09:08
0
雪    币: 164
活跃值: (39)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
楼主强大!赞一个!
2012-12-27 09:55
0
雪    币: 3279
活跃值: (3331)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
14
在第三步骤中,   这个地址饭虚拟化要输入这个地址: 0060e473  这个具体找到的原理是什么 或者Cisc_Uv_Dump.txt下来的内容,有什么具体的原理之类的,我看原作者的视频,也没解释过,只是操作而已~
2012-12-27 14:17
0
雪    币: 627
活跃值: (663)
能力值: ( LV9,RANK:270 )
在线值:
发帖
回帖
粉丝
15
Deathway在"Oreans UnVirtualizer 1.1 Sample"的文档"Sample Info.txt"中讲:

这个地址在WL中99.9%的机率会紧接着以下指令后面:
POP ESP
MOV ESP, DWORD PTR SS:[ESP]
ADD ESP,4


原理实际上还是保持堆栈平衡。实际运用中需要经验的积累。

00404C31处的"Cisc_Uv_Dump.txt"文件:
...
@Label_0060E006
        0060E006        MOV EBP,DWORD PTR [ESP]
        0060E03B        PUSH EDI
        0060E048        MOV DWORD PTR [ESP],EAX
        0060E0C9        MOV EAX,ESP
        0060E0EE        ADD EAX,0x4
        0060E148        ADD EAX,0x4
        0060E19D        PUSH DWORD PTR [ESP]
        0060E1AE        MOV DWORD PTR [ESP],EAX
        0060E222        POP EAX
        0060E235        POP ESP
        0060E23D        MOV EAX,DWORD PTR [ESP]
        0060E274        PUSH EAX
        0060E29F        MOV EAX,ESP
        0060E2B6        PUSH EBX
        0060E2E5        MOV EBX,0x4
        0060E32B        ADD EAX,EBX
        0060E382        POP EBX
        0060E390        ADD EAX,0x4
        0060E3D3        PUSH DWORD PTR [ESP]
        0060E3DD        MOV DWORD PTR [ESP],EAX
        0060E451        POP EAX
        0060E472        POP ESP                                 ; <-***
        0060E473        LEA EAX,DWORD PTR [EBP+0xffffffdc]      ; Fill in the EditBox with this address
        0060E4A6        PUSH EAX
        0060E4B8        CALL 0x4044e0
...


事实上,研究它生成的Cisc_Vm_XXXXXXXX.txt文件更有意义,当前虚拟机所有Handlers的信息全在里面。
2012-12-27 18:27
0
雪    币: 51
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
绝世经典好文,就只有几个人回复吗
2013-9-23 20:16
0
雪    币: 9580
活跃值: (3362)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
对M大知识的广度和深度,只能膜拜!
2014-2-9 10:26
0
雪    币: 135
活跃值: (63)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
19
我只记得有大神在写过帖子,但是不记得名字了,一下就搜到了,学习脚本,学习keygen跟踪代码的思路,刚看了一下qqmcc写的低版本的简单例子感觉IAT的处理不难,好像就是简单的加密壳做的一样。
绝世经典好文
顶一下
2014-4-7 17:36
0
雪    币: 0
活跃值: (226)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
太给力了啊
2017-4-11 15:13
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
好文,就是没有新版的.
2017-6-15 04:31
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
22
请问能接最新winlicense 脱壳吗?
2022-6-23 10:42
0
游客
登录 | 注册 方可回帖
返回
//