欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

NtkrnlProtector简明脱壳笔记

NtkrnlProtector简明脱壳笔记

【脱壳对象】: NtkrnlProtector v0.1加壳的NotePad from q3 watcher  
【脱文作者】: cyclotron
【附属声明】: 太久没有脱壳了,有点手生,所以趁着周末闲暇捏个软柿子。只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教。
【脱壳笔记】: 
    首先载入NotePad.exe至LordPE,修改NumOfRVAandSizes为10,以便OllyDbg正常加载。
    忽略所有异常,OllyDbg载入文件,F9运行,来到这里:

代码:
004D0000    C3              RETN

004D0001    0000            ADD     BYTE PTR DS:[EAX],AL

004D0003    0000            ADD     BYTE PTR DS:[EAX],AL

004D0005    0000            ADD     BYTE PTR DS:[EAX],AL

004D0007    0000            ADD     BYTE PTR DS:[EAX],AL

004D0009    0000            ADD     BYTE PTR DS:[EAX],AL

004D000B    0000            ADD     BYTE PTR DS:[EAX],AL

004D000D    0000            ADD     BYTE PTR DS:[EAX],AL

    cyclotron请大家注意这里Olly由于内存访问断点而停下,事实上我们并没有在这里设置断点,所以属于NtkrnlProtector的Anti trick。注意到此时的堆栈已经准备好了SEH Handler,修改这行为int 3(thx 2bpx ),强行产生异常,并在GetProcAddress上下断点,Shift+F9运行返回:
代码:
01021445    52              PUSH    EDX

01021446    57              PUSH    EDI

01021447    E8 E4000000     CALL    01021530                         ; JMP to kernel32.GetProcAddress

0102144C    60              PUSHAD      ; 返回到这里

0102144D    8BF8            MOV     EDI,EAX

0102144F    B9 04000000     MOV     ECX,4

01021454    B8 60060000     MOV     EAX,660

01021459    C1E8 03         SHR     EAX,3

0102145C    F2:AE           REPNE   SCAS BYTE PTR ES:[EDI]

0102145E    85C9            TEST    ECX,ECX

01021460    74 04           JE      SHORT 01021466

01021462    834D EC 01      OR      DWORD PTR SS:[EBP-14],1

01021466    61              POPAD

01021467    FF75 F4         PUSH    DWORD PTR SS:[EBP-C]

0102146A    837D F0 01      CMP     DWORD PTR SS:[EBP-10],1

0102146E    74 05           JE      SHORT 01021475

01021470    E8 96000000     CALL    0102150B

01021475    8B4D FC         MOV     ECX,DWORD PTR SS:[EBP-4]

01021478    8901            MOV     DWORD PTR DS:[ECX],EAX

0102147A    8345 FC 04      ADD     DWORD PTR SS:[EBP-4],4

0102147E    8345 F8 04      ADD     DWORD PTR SS:[EBP-8],4

01021482  ^ EB 93           JMP     SHORT 01021417

01021484    83C3 14         ADD     EBX,14

01021487  ^ E9 51FFFFFF     JMP     010213DD

0102148C    8B5D 08         MOV     EBX,DWORD PTR SS:[EBP+8]

0102148F    035B 3C         ADD     EBX,DWORD PTR DS:[EBX+3C]

01021492    C783 80000000 0>MOV     DWORD PTR DS:[EBX+80],0

0102149C    C783 84000000 0>MOV     DWORD PTR DS:[EBX+84],0

010214A6    8B45 EC         MOV     EAX,DWORD PTR SS:[EBP-14]

010214A9    8BE5            MOV     ESP,EBP

010214AB    5D              POP     EBP

010214AC    C2 0400         RETN    4      ; 移动光标到这里按F4

    下断点bp VirtualProtect,F9运行,返回用户代码来到:
代码:
00B4B915    59              POP     ECX

00B4B916    C3              RETN

00B4BA72   /E9 00000000     JMP     00B4BA77

00B4BA77   \8B0D 3CA0B500   MOV     ECX,DWORD PTR DS:[B5A03C]

00B4BA7D    56              PUSH    ESI

00B4BA7E    57              PUSH    EDI

00B4BA7F    FF7424 0C       PUSH    DWORD PTR SS:[ESP+C]

00B4BA83    E8 DBE7FFFF     CALL    00B4A263

00B4BA88    8B35 3CA0B500   MOV     ESI,DWORD PTR DS:[B5A03C]

00B4BA8E    8B46 0C         MOV     EAX,DWORD PTR DS:[ESI+C]

00B4BA91    8B40 0C         MOV     EAX,DWORD PTR DS:[EAX+C]

00B4BA94    034424 0C       ADD     EAX,DWORD PTR SS:[ESP+C]

00B4BA98    8BFE            MOV     EDI,ESI

00B4BA9A    A3 48A0B500     MOV     DWORD PTR DS:[B5A048],EAX

00B4BA9F    E8 4FE7FFFF     CALL    00B4A1F3

00B4BAA4    57              PUSH    EDI

00B4BAA5    E8 6F650000     CALL    00B52019

00B4BAAA    59              POP     ECX

00B4BAAB    5F              POP     EDI

00B4BAAC    5E              POP     ESI

00B4BAAD    E9 00000000     JMP     00B4BAB2

00B4BAB2    55              PUSH    EBP

00B4BAB3    8BEC            MOV     EBP,ESP

00B4BAB5    53              PUSH    EBX

00B4BAB6    56              PUSH    ESI

00B4BAB7    57              PUSH    EDI

00B4BAB8    8B4C24 F4       MOV     ECX,DWORD PTR SS:[ESP-C]

00B4BABC    64:890D 0000000>MOV     DWORD PTR FS:[0],ECX

00B4BAC3    5F              POP     EDI

00B4BAC4    5E              POP     ESI

00B4BAC5    5B              POP     EBX

00B4BAC6    C9              LEAVE

00B4BAC7    83C4 3C         ADD     ESP,3C

00B4BACA    A1 48A0B500     MOV     EAX,DWORD PTR DS:[B5A048]

00B4BACF    894424 1C       MOV     DWORD PTR SS:[ESP+1C],EAX

00B4BAD3    61              POPAD

00B4BAD4    FFE0            JMP     EAX      ; 从这里飞向OEP

    注意返回到00B4BA72以后先不要往下走,为方便起见,我们先把输入表问题一并处理掉。下断点bp VirtualAlloc,然后运行返回至用户代码:
代码:
00B4979C    FFD7            CALL    EDI        ; 取消断点,从这里返回

00B4979E    85C0            TEST    EAX,EAX

00B497A0    8945 D4         MOV     DWORD PTR SS:[EBP-2C],EAX

00B497A3    0F84 83010000   JE      00B4992C

00B497A9    6A 40           PUSH    40

00B497AB    68 00100000     PUSH    1000

00B497B0    FF75 D0         PUSH    DWORD PTR SS:[EBP-30]

00B497B3    6A 00           PUSH    0

00B497B5    FFD7            CALL    EDI

00B497B7    85C0            TEST    EAX,EAX

00B497B9    8945 C8         MOV     DWORD PTR SS:[EBP-38],EAX

00B497BC    0F84 6A010000   JE      00B4992C

00B497C2    6A 40           PUSH    40

00B497C4    68 00100000     PUSH    1000

00B497C9    53              PUSH    EBX

00B497CA    6A 00           PUSH    0

00B497CC    FFD7            CALL    EDI

00B497CE    33DB            XOR     EBX,EBX

00B497D0    3BC3            CMP     EAX,EBX

00B497D2    8945 E0         MOV     DWORD PTR SS:[EBP-20],EAX

00B497D5    0F84 51010000   JE      00B4992C

00B497DB    68 7C7DB400     PUSH    0B47D7C                          ; ASCII "kernel32.dll"

00B497E0    FF15 E010B400   CALL    DWORD PTR DS:[B410E0]            ; kernel32.LoadLibraryA

00B497E6    68 0C7FB400     PUSH    0B47F0C                          ; ASCII "GetProcAddress"

00B497EB    50              PUSH    EAX

00B497EC    FF15 DC10B400   CALL    DWORD PTR DS:[B410DC]            ; kernel32.GetProcAddress

00B497F2    8945 EC         MOV     DWORD PTR SS:[EBP-14],EAX

00B497F5    8B46 04         MOV     EAX,DWORD PTR DS:[ESI+4]

00B497F8    8B08            MOV     ECX,DWORD PTR DS:[EAX]

00B497FA    895D E4         MOV     DWORD PTR SS:[EBP-1C],EBX

00B497FD    895D CC         MOV     DWORD PTR SS:[EBP-34],EBX

00B49800    895D D8         MOV     DWORD PTR SS:[EBP-28],EBX

00B49803    8948 04         MOV     DWORD PTR DS:[EAX+4],ECX

00B49806    8B46 04         MOV     EAX,DWORD PTR DS:[ESI+4]

00B49809    8B40 04         MOV     EAX,DWORD PTR DS:[EAX+4]

00B4980C    8B38            MOV     EDI,DWORD PTR DS:[EAX]

00B4980E    037D 08         ADD     EDI,DWORD PTR SS:[EBP+8]

00B49811    8D4D FC         LEA     ECX,DWORD PTR SS:[EBP-4]

00B49814    51              PUSH    ECX

00B49815    E8 81FCFFFF     CALL    00B4949B

00B4981A    83F8 FF         CMP     EAX,-1

00B4981D    0F84 09010000   JE      00B4992C

00B49823    FF75 FC         PUSH    DWORD PTR SS:[EBP-4]

00B49826    FF15 E010B400   CALL    DWORD PTR DS:[B410E0]            ; kernel32.LoadLibraryA

00B4982C    3BC3            CMP     EAX,EBX

00B4982E    8945 F8         MOV     DWORD PTR SS:[EBP-8],EAX

00B49831    0F84 F5000000   JE      00B4992C

00B49837    8B46 04         MOV     EAX,DWORD PTR DS:[ESI+4]

00B4983A    8B40 04         MOV     EAX,DWORD PTR DS:[EAX+4]

00B4983D    8B40 18         MOV     EAX,DWORD PTR DS:[EAX+18]

00B49840    8B08            MOV     ECX,DWORD PTR DS:[EAX]

00B49842    8948 04         MOV     DWORD PTR DS:[EAX+4],ECX

00B49845    8B46 04         MOV     EAX,DWORD PTR DS:[ESI+4]

00B49848    8B40 04         MOV     EAX,DWORD PTR DS:[EAX+4]

00B4984B    8B40 18         MOV     EAX,DWORD PTR DS:[EAX+18]

00B4984E    8B40 04         MOV     EAX,DWORD PTR DS:[EAX+4]

00B49851    8B40 04         MOV     EAX,DWORD PTR DS:[EAX+4]

00B49854    3BC3            CMP     EAX,EBX

00B49856    75 04           JNZ     SHORT 00B4985C

00B49858    33C0            XOR     EAX,EAX

00B4985A    EB 0B           JMP     SHORT 00B49867

00B4985C    25 FFFFFF7F     AND     EAX,7FFFFFFF

00B49861    8945 F0         MOV     DWORD PTR SS:[EBP-10],EAX

00B49864    33C0            XOR     EAX,EAX

00B49866    40              INC     EAX

00B49867    2BC3            SUB     EAX,EBX

00B49869    74 13           JE      SHORT 00B4987E

00B4986B    48              DEC     EAX

00B4986C    75 76           JNZ     SHORT 00B498E4

00B4986E    FF75 F0         PUSH    DWORD PTR SS:[EBP-10]

00B49871    FF75 F8         PUSH    DWORD PTR SS:[EBP-8]

00B49874    FF15 DC10B400   CALL    DWORD PTR DS:[B410DC]            ; kernel32.GetProcAddress

00B4987A    8907            MOV     DWORD PTR DS:[EDI],EAX

00B4987C    EB 66           JMP     SHORT 00B498E4

00B4987E    FF75 FC         PUSH    DWORD PTR SS:[EBP-4]

00B49881    E8 A1FDFFFF     CALL    00B49627

00B49886    85C0            TEST    EAX,EAX

00B49888    8B46 04         MOV     EAX,DWORD PTR DS:[ESI+4]

00B4988B    8B40 04         MOV     EAX,DWORD PTR DS:[EAX+4]

00B4988E    74 28           JE      SHORT 00B498B8      ; Magic jmp,这里改为jmp

00B49890    8D4D E0         LEA     ECX,DWORD PTR SS:[EBP-20]

00B49893    51              PUSH    ECX

00B49894    8D4D C8         LEA     ECX,DWORD PTR SS:[EBP-38]

00B49897    51              PUSH    ECX

00B49898    8D4D D4         LEA     ECX,DWORD PTR SS:[EBP-2C]

    跳过上面地IAT加密,现在我们可以安心F9直达OEP了。
代码:
01001000  77DA6FC8  ADVAPI32.RegQueryValueExW

01001004  77DA6BF0  ADVAPI32.RegCloseKey

01001008  77DC8F7D  ADVAPI32.RegCreateKeyW

0100100C  77DCD5FD  ADVAPI32.IsTextUnicode

01001010  77DA7883  ADVAPI32.RegQueryValueExA

01001014  77DA761B  ADVAPI32.RegOpenKeyExA

01001018  77DAD7CC  ADVAPI32.RegSetValueExW

0100101C  00000000

01001020  7718D2ED  comctl32.7718D2ED

01001024  00000000

01001028 >77F05923  GDI32.77F05923

0100102C >77F23412  GDI32.77F23412

01001030  77F05BB1  GDI32.77F05BB1

01001034  77EF6CA6  ASCII "s("

01001038  77F06AA6  GDI32.77F06AA6

    拿出ImportRec完美提取API地址生成新的输入表,Fix Dump。
    附件包含了一个Dll是从NtkrnlPacker外壳中提取出来用作处理License的,外壳在执行的过程中直接将该Dll映射到进程的临时地址空间,Demo Ver中调用了其中的一段代码借DialogParamBoxA生成一段小小的Nag,有兴趣的朋友不妨研究一下。
cyclotron
2007.5.12 晚

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功