|
发表于 2009-12-7 15:36:20
|显示全部楼层
过程
最近很多朋友加我QQ问我ASProtect 2.1x SKE怎么脱,我都做过教程了,只不过修复方法没公布
出来而已,今天我就在把总体步骤写给大家,大家自己看吧,我也很忙,不可能一个个辅导大家怎么脱!
脱壳基本功就要熟悉初步的汇编知识,只有懂得这些,才能顺利的找出壳的下手点!
用 PEid 0.94 显示为 ASProtect 2.1x SKE -> Alexey Solodovnikov
用flyDBG载入,ALT+O, 设置内存访问异常,以及下面“同时忽略以下指定的异常或者异常范围”,其余选项全部忽略。(注:怎么设置内存访问,选项-调试设置-忽乐所有内存访问异常,把底下的全部去掉!)
008D2001 > 60 pushad ; OD入口 (这里就是壳的入口点)
008D2002 E8 03000000 call TestDogj.008D200A (这里千万记住不要用ESP定律脱)
008D2007 - E9 EB045D45 jmp 45EA24F7
008D200C 55 push ebp
008D200D C3 retn
008D200E E8 01000000 call TestDogj.008D2014
---------------------------------------------------------------------------------------------------------------
找到OEP (这个壳大概30几次异常,这里我重点说下,各位兄弟先一直访问异常,看看程序在哪运行的,在程序之前运行的访问异常,找到大跳转的地方,或者返回值!下断)
Shift+F9,一直到第二次出现855CCAEF。
Alt+M,在该dll的code段,F2下断。
Shift+F9,来到OEP了。
008BFF4C 55 push ebp
008BFF4D 8BEC mov ebp,esp
008BFF4F 83C4 B4 add esp,-4C
008BFF52 B8 E4FD8B00 mov eax,TestDogj.008BFDE4
008BFF57 E8 E064FBFF call TestDogj.0087643C
008BFF5C E8 EF38FBFF call TestDogj.00873850
008BFF61 8D40 00 lea eax,dword ptr ds:[eax]
008BFF64 0000 add byte ptr ds:[eax],al
---------------------------------------------------------------------------------------------------------------
二、发现IAT、call xxxxxxxx。
Ctrl+B:FF 25。
008711D8 - FF25 A8318C00 jmp dword ptr ds:[8C31A8] ; kernel32.CloseHandle
008711DE 8BC0 mov eax,eax
008711E0 - FF25 A4318C00 jmp dword ptr ds:[8C31A4] ; kernel32.CreateFileA
008711E6 8BC0 mov eax,eax
008711E8 E8 13EE2D00 call 00B50000 ; call xxxxxxxx①
008711ED 7B 8B jpo short TestDog1.0087117A
008711EF C0E8 0B shr al,0B
008711F2 EE out dx,al
008711F3 2D 00D48BC0 sub eax,C08BD400 ; call xxxxxxxx①
008711F8 E8 03EE2D00 call 00B50000
右键--->数据窗口跟随--->内存地址。
在数据窗口右键--->长型--->地址。
向上滚动来到IAT开始。
008C3104 1FFC7DB3
008C3108 7C93188A ntdll.RtlDeleteCriticalSection ; IAT开始②
008C310C 7C9210ED ntdll.RtlLeaveCriticalSection
008C3110 7C921005 ntdll.RtlEnterCriticalSection
008C3114 7C809FA1 kernel32.InitializeCriticalSection
.................
008C3134 7C80A0C7 kernel32.WideCharToMultiByte
008C3138 7C809CAD kernel32.MultiByteToWideChar
008C313C 768C6426 ; IAT加密
008C3140 7C810311 kernel32.lstrcpynA
008C3144 7C80C729 kernel32.lstrcpyA
008C3148 397191AA ; IAT加密
008C314C 4524D92E ; IAT加密
008C3150 5083EFAF ; IAT加密
008C3154 7C80AC28 kernel32.GetProcAddress
008C3158 82EE7A98 ; IAT加密
..................
008C36F0 5D17BD2E comctl32.ImageList_Destroy
008C36F4 5D17BB5B comctl32.ImageList_Create
008C36F8 00000000
008C36FC 77DC3238 ADVAPI32.StartServiceA ; IAT结束③
008C3700 BC9A88FE
向上滚动来到IAT结束。
现在,我们得到这些必要的数据,开始解决IAT加密的问题。 |
|