吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7300|回复: 9
收起左侧

[分享] 手脱PESpin:Debug Blocker(学习历程)

[复制链接]
开始的复活节 发表于 2017-5-5 00:52
声明:

       1.纪录自己成长历程,与大家分享
       2.由于技术与能力,如有疏漏错误,欢迎指出,高手轻喷

简述:
      
       来尝试PESpin的调试阻碍(Debug Blocker)的保护了,这个保护涉及了双进程保护,按照我的理解就是程序运行后会再创建一个进程来监控自己,如果发现被调试,保护进程会执行相关操作。下面看看怎么来搞定PESpin的双进程保护吧。

[Asm] 纯文本查看 复制代码
0042B0D4 > /EB 01           jmp short Hello_Wo.0042B0D7		;//程序入口
0042B0D6   |68 60E80000     push 0xE860
0042B0DB    0000            add byte ptr ds:[eax],al


先用常规方法做一下
[Asm] 纯文本查看 复制代码
0042B0D7    60              pushad
0042B0D8    E8 00000000     call Hello_Wo.0042B0DD
0042B0DD    8B1C24          mov ebx,dword ptr ss:[esp]               ; kernel32.7C817067		;//ESP定理法



发现程序跑飞。。。。。此时查看Windows任务管理器发现有两个Hello World.exe的进程,这就是双进程保护。可以用CreateMutexA创建同名互斥体,让程序以为已经创建过进程。

重载程序,删除所有断点。
Ctrl+G 输入CreateMutexA
[Asm] 纯文本查看 复制代码
7C80E9CF >  8BFF            mov edi,edi
7C80E9D1    55              push ebp
7C80E9D2    8BEC            mov ebp,esp
7C80E9D4    51              push ecx
7C80E9D5    51              push ecx
7C80E9D6    56              push esi
7C80E9D7    33F6            xor esi,esi
7C80E9D9    3975 10         cmp dword ptr ss:[ebp+0x10],esi
7C80E9DC    74 31           je short kernel32.7C80EA0F
7C80E9DE    64:A1 18000000  mov eax,dword ptr fs:[0x18]
7C80E9E4    FF75 10         push dword ptr ss:[ebp+0x10]
7C80E9E7    8DB0 F80B0000   lea esi,dword ptr ds:[eax+0xBF8]
7C80E9ED    8D45 F8         lea eax,dword ptr ss:[ebp-0x8]
7C80E9F0    50              push eax
7C80E9F1    FF15 8C10807C   call dword ptr ds:[<&ntdll.RtlInitAnsiSt>; ntdll.RtlInitAnsiString
7C80E9F7    6A 00           push 0x0
7C80E9F9    8D45 F8         lea eax,dword ptr ss:[ebp-0x8]
7C80E9FC    50              push eax
7C80E9FD    56              push esi
7C80E9FE    FF15 8810807C   call dword ptr ds:[<&ntdll.RtlAnsiString>; ntdll.RtlAnsiStringToUnicodeString
7C80EA04    85C0            test eax,eax
7C80EA06    0F8C B2550300   jl kernel32.7C843FBE
7C80EA0C    8B76 04         mov esi,dword ptr ds:[esi+0x4]
7C80EA0F    56              push esi
7C80EA10    FF75 0C         push dword ptr ss:[ebp+0xC]
7C80EA13    FF75 08         push dword ptr ss:[ebp+0x8]              ; Hello_Wo.<ModuleEntryPoint>
7C80EA16    E8 2CFFFFFF     call kernel32.CreateMutexW
7C80EA1B    5E              pop esi                                  ; kernel32.7C817067
7C80EA1C    C9              leave
7C80EA1D    C2 0C00         retn 0xC				;//F4此处ALT+F9


[Asm] 纯文本查看 复制代码
0042EDD6    8985 C66C4000   mov dword ptr ss:[ebp+0x406CC6],eax	     ;//接着单步
0042EDDC    8D85 3A271F03   lea eax,dword ptr ss:[ebp+0x31F273A]
0042EDE2    2D FCCEDE02     sub eax,0x2DECEFC
0042EDE7    FF10            call dword ptr ds:[eax]
0042EDE9    BB CA7DB9FE     mov ebx,0xFEB97DCA
0042EDEE    81EB 137DB9FE   sub ebx,0xFEB97D13
0042EDF4    3BC3            cmp eax,ebx
0042EDF6    9C              pushfd				     ;//到这步时将寄存器窗口中的Z置1
0042EDF7    C12C24 06       shr dword ptr ss:[esp],0x6
0042EDFB    F71424          not dword ptr ss:[esp]                   ; Hello_Wo.0042B51B
0042EDFE    832424 01       and dword ptr ss:[esp],0x1
0042EE02    58              pop eax                                  ; Hello_Wo.0042B51B
0042EE03    2BD2            sub edx,edx                              ; ntdll.KiFastSystemCallRet
0042EE05    BB BAE74D02     mov ebx,0x24DE7BA
0042EE0A    81EB 86E74D02   sub ebx,0x24DE786
0042EE10    F7E3            mul ebx
0042EE12    81CB FE12F40E   or ebx,0xEF412FE
0042EE18    8D8428 A60C91ED lea eax,dword ptr ds:[eax+ebp-0x126EF35A>
0042EE1F    2D 179B50ED     sub eax,0xED509B17
0042EE24  - FFE0            jmp eax				     ;//跳转


跳转后来到此处
[Asm] 纯文本查看 复制代码
0042EE3D    F1              int1				
0042EE3E    E8 1C030000     call Hello_Wo.0042F15F
0042EE43    85C0            test eax,eax                             ; Hello_Wo.0042EE3D
0042EE45    75 23           jnz short Hello_Wo.0042EE6A
0042EE47    8BC3            mov eax,ebx
0042EE49    35 08001F0E     xor eax,0xE1F0008


在堆栈窗口中可以查看到
[Asm] 纯文本查看 复制代码
0012FFA0   0042B51B  返回到 Hello_Wo.0042B51B
0012FFA4   00635EC0
0012FFA8   0012CE70


Ctrl+G 输入0042B51B
[Asm] 纯文本查看 复制代码
0042B51B    B8 C1A65D7A     mov eax,0x7A5DA6C1	;//右键此处为新的EIP
0042B520    2BC9            sub ecx,ecx
0042B522    83C9 15         or ecx,0x15
0042B525    0FA3C8          bt eax,ecx


Ctrl+B 搜索二进制字串F1 87 DF找下一处int1
[Asm] 纯文本查看 复制代码
0042F762   /E0 00           loopdne short Hello_Wo.0042F764
0042F764   \83F1 87         xor ecx,-0x79			;//来到此处


将上一句数值加1
[Asm] 纯文本查看 复制代码
0042F762   /E0 01           loopdne short Hello_Wo.0042F765 ;//Enter查看
0042F764   |83F1 87         xor ecx,-0x79


[Asm] 纯文本查看 复制代码
0042F765    F1              int1			;//F2下段 SHIFT+F9后取消断点
0042F766    87DF            xchg edi,ebx
0042F768    57              push edi                                 ; Hello_Wo.0042FDC6
0042F769    C3              retn
0042F76A    55              push ebp
0042F76B    8BEC            mov ebp,esp


这步跟上面类似了,在堆栈窗口中可以查看到
[Asm] 纯文本查看 复制代码
0012FF9C   0042C6AD  Hello_Wo.0042C6AD
0012FFA0   0042B51B  返回到 Hello_Wo.0042B51B
0012FFA4   00635EC0


Ctrl+G 输入0042C6AD
[Asm] 纯文本查看 复制代码
0042C6AD   /EB 04           jmp short Hello_Wo.0042C6B3	;//右键此处为新的EIP
0042C6AF   |7A EB           jpe short Hello_Wo.0042C69C
0042C6B1   |04 9A           add al,0x9A
0042C6B3  ^\EB FB           jmp short Hello_Wo.0042C6B0
0042C6B5    FFF6            push esi
0042C6B7    8591 6B400001   test dword ptr ds:[ecx+0x100406B],edx    ; Hello_Wo.0042F72F



寄存器窗口:
需要要平衡堆栈,我们留心会发现因为入栈操作esp减少了4,修补回去
[Asm] 纯文本查看 复制代码
EAX FFFFFFFF
ECX 00000000
EDX 0042F72F Hello_Wo.0042F72F
EBX B4801F41
ESP 0012FF9C		;修改为0012FFA0
EBP 00027CAE
ESI 00000000
EDI 0217FA48
EIP 0042C6AD Hello_Wo.0042C6AD


单步跟来到OEP(过程可能有弹窗,忽略后继续单步)
[Asm] 纯文本查看 复制代码
004010C0    55              push ebp			;//右键此处为新的EIP
004010C1    8dc0            lea eax,eax			;跳转到此处
004010C3    6A FF           push -0x1
004010C5    68 28214200     push Hello_Wo.00422128
004010CA    68 C02F4000     push Hello_Wo.00402FC0
004010CF    64:A1 00000000  mov eax,dword ptr fs:[0]
004010D5    50              push eax
004010D6    64:8925 0000000>mov dword ptr fs:[0],esp
004010DD    83C4 A4         add esp,-0x5C
004010E0    53              push ebx
004010E1    56              push esi
004010E2    57              push edi                                 ; Hello_Wo.0042B51B
004010E3    8965 E8         mov dword ptr ss:[ebp-0x18],esp
004010E6    FF15 63FE4200   call dword ptr ds:[0x42FE63]             ; kernel32.GetVersion


然后用LoadPE修正镜像大小,用importREC的高级命令获取API调用后剪切无效指针,修复
这是程序还是跑不起来的,还需要用专门修复工具Nanomites的SpiNano工具修复一下,程序运行成功


Debug Blocker.7z

162.39 KB, 下载次数: 9, 下载积分: 吾爱币 -1 CB

附件

免费评分

参与人数 2吾爱币 +7 热心值 +2 收起 理由
Hmily + 6 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
朱朱你堕落了 + 1 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

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

178021018 发表于 2017-5-5 08:31
谢谢分享
小村村 发表于 2017-5-5 08:53
tianhett 发表于 2017-5-5 10:03
birk 发表于 2017-5-5 10:44
先收藏了..
chenjingyes 发表于 2017-5-6 00:36
谢谢楼主分享
头像被屏蔽
love看看020 发表于 2017-5-6 08:02
提示: 作者被禁止或删除 内容自动屏蔽
Hmily 发表于 2017-5-16 18:56
新建EIP那是SEH的原因?没看到到怎么过双进程的?是修改了互斥检测?后面分析细说下好了。
..nOvOn.. 发表于 2017-11-30 14:02
给力.....................
ajie1099 发表于 2017-12-2 22:01
感谢分享,楼主辛苦了。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-17 03:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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