软件:Optilayer Demmo
工具:OllyDbg、LordPE、ImportREC、PEiD
壳:[ASProtect 2.1x SKE -> Alexey Solodovnikov]
过程:
1、用PEiD查看主程序dopti.exe,得壳为ASProtect 2.1x SKE -> Alexey Solodovnikov;用其插件Vera 0.15查Version: ASProtect 2.xx (may be 2.11) Registered [1]
2、OllyDbg载入dopti.exe,Hide Olly后运行,总是提示Protection Erorr:Debugger Detected! Olly隐藏不了
无意间发现,原来这样就可以HideOD了
插件->HideOD->Option
在OPtion中选择“AutoRun HideOD”及HideNtDebugBit 即可隐藏OD了
原来虽然每次运行这个插件,但却没选HideNtDebugBit, 因此没有起作用
直接单步运行,一到这段,在11111111到22222222间运行6次,就跳出 debugger detected!
7C92EAE9 CC int3
7C92EAEA 8BFF mov edi, edi
7C92EAEC > 8B4C24 04 mov ecx, dword ptr [esp+4]
7C92EAF0 8B1C24 mov ebx, dword ptr [esp] //11111111
7C92EAF3 51 push ecx
7C92EAF4 53 push ebx
7C92EAF5 E8 C78C0200 call 7C9577C1
7C92EAFA 0AC0 or al, al
7C92EAFC 74 0C je short 7C92EB0A
7C92EAFE 5B pop ebx
7C92EAFF 59 pop ecx
7C92EB00 6A 00 push 0
7C92EB02 51 push ecx
7C92EB03 E8 11EBFFFF call ZwContinue //22222222
7C92EB08 EB 0B jmp short 7C92EB15
7C92EB0A 5B pop ebx
7C92EB0B 59 pop ecx
7C92EB0C 6A 00 push 0
第5次call进ZwContinue就是:
7C92D619 > B8 20000000 mov eax, 20
7C92D61E BA 0003FE7F mov edx, 7FFE0300
7C92D623 FF12 call dword ptr [edx] ; ntdll.KiFastSystemCall
7C92D625 C2 0800 retn 8
进一步进入7C92D623 就是:
7C92EB8A 90 nop
7C92EB8B > 8BD4 mov edx, esp
7C92EB8D 0F34 sysenter
一过sysenter就提示Debugger detected!
谁有办法躲过Debugger detect过程?
引用:
最初由 轩辕小聪发布
当call进ZwContinue时,查堆栈[esp+4]处,即更新的_CONTEXT结构。查该结构的0xB8偏移处的值,则是新的EIP地址。在这个地址下断,就可以断下。断下后看看它是怎么检测调试器的。...
程序总共Call进ZwContinue 5次,第4次后检测Debugger程序;第5次后弹出Debuuger Detected!对话框。
在7C92EB03 E8 11EBFFFF call ZwContinue 处设断,当第4次断下时,单步进入;查堆栈[esp+4]处,即更新的_CONTEXT结构。查该结构的0xB8偏移处的值,则是新的EIP地址:0198B0E4,转到此处设断,再运行则在此停下:
0198B0E4 67:64:8F06 0000 pop dword ptr fs:[0] ; 0012FE48
0198B0EA 83C4 04 add esp, 4
0198B0ED 3E:EB 02 jmp short 0198B0F2
0198B0F0 CD20 8DB41D08 vxdjump 81DB48D
0198B0F6 67:47 inc edi
0198B0F8 002B add byte ptr [ebx], ch
0198B0FA F3: prefix rep:
0198B0FB 5E pop esi
0198B0FC E8 47C6FFFF call 01987748 ; 在这里检测Debugger! 在次单步进入
0198B101 8BD8 mov ebx, eax
0198B103 881D 8C949901 mov byte ptr [199948C], bl
0198B109 E8 2AC7FFFF call 01987838
0198B10E 8B15 84979901 mov edx, dword ptr [1999784]
0198B114 8842 02 mov byte ptr [edx+2], al
0198B117 56 push esi
进入Debugger 检测段
01987748 53 push ebx
01987749 56 push esi
0198774A 57 push edi
0198774B 33DB xor ebx, ebx
0198774D 33C0 xor eax, eax
0198774F A3 90949901 mov dword ptr [1999490], eax
01987754 B2 01 mov dl, 1
01987756 A1 9C609801 mov eax, dword ptr [198609C]
0198775B E8 98E9FFFF call 019860F8
01987760 8BF0 mov esi, eax
01987762 A1 F0979901 mov eax, dword ptr [19997F0]
01987767 8B00 mov eax, dword ptr [eax]
01987769 8946 04 mov dword ptr [esi+4], eax
0198776C A1 E0979901 mov eax, dword ptr [19997E0]
01987771 8B40 0C mov eax, dword ptr [eax+C]
01987774 50 push eax
01987775 56 push esi
01987776 E8 05EAFFFF call 01986180 ; 检测Debugger!在此单步进入
0198777B 8BF8 mov edi, eax
0198777D 85FF test edi, edi
0198777F 74 2E je short 019877AF ; 无Debbuger则跳转
01987781 8B47 04 mov eax, dword ptr [edi+4]
01987784 40 inc eax
01987785 E8 BAADFEFF call 01972544
0198778A A3 90949901 mov dword ptr [1999490], eax
0198778F 8B57 04 mov edx, dword ptr [edi+4]
01987792 42 inc edx
01987793 A1 90949901 mov eax, dword ptr [1999490]
01987798 E8 33E1FEFF call 019758D0
0198779D 8D57 08 lea edx, dword ptr [edi+8]
019877A0 8B4F 04 mov ecx, dword ptr [edi+4]
019877A3 A1 90949901 mov eax, dword ptr [1999490]
019877A8 E8 0FE1FEFF call 019758BC
019877AD B3 01 mov bl, 1 ; 检测到Debugger则EBX=1 改为mov bl,0 即可骗过Debugger检测程序
019877AF 8BC6 mov eax, esi
019877B1 E8 6AB3FEFF call 01972B20
019877B6 8BC3 mov eax, ebx
019877B8 5F pop edi
019877B9 5E pop esi
019877BA 5B pop ebx
019877BB C3 retn
都说Volx大虾的脚本就可以脱了,我怎么脱不了,好郁闷
运行脚本Aspr2.XX_unpacker_v1.14aSC.osc后,停在这里:
01BB0447 55 push ebp ; 538F70
01BB0448 336C24 28 xor ebp, dword ptr [esp+28]
01BB044C EB 01 jmp short 01BB044F
01BB044E 9A 83DDA7C1 DD1>call far 1FDD:C1A7DD83
01BB0455 65:EB 01 jmp short 01BB0459
01BB0458 698B 6C2410C1 C>imul ecx, dword ptr [ebx+C110246C], 6>
01BB0462 24 18 and al, 18
01BB0464 8D6C34 4C lea ebp, dword ptr [esp+esi+4C]
01BB0468 2BEE sub ebp, esi
01BB046A F3: prefix rep:
01BB046B EB 02 jmp short 01BB046F
01BB046D CD20 8D6C0DB4 vxdcall B40D6C8D
打开ImportREC,选择进程dopti.exe,OEP填入138F70; 自动搜索IAT;点击GetImports,全部为Valid;
点击FixDump,修复Volx脚本生成的de_dopti.exe; 双击修复后的文件de_dopti_.exe,可以运行了, 哈哈, 成功脱壳!!!
原来用Volx大虾的脚本脱壳如此简单! 多谢Volx!
多谢曾经关注此帖的朋友们!!!!!!
[课程]Linux pwn 探索篇!