【文章标题】: ASProtect SKE 2.4 0226之98记事本
【文章作者】: yangjt
【作者邮箱】: yangjietao123@163.com
【作者主页】: http://blog.sina.com.cn/yangjt
【作者QQ号】: 325002492
【下载地址】: 自己搜索下载
【保护方式】: ASProtect SKE 2.4 0226
【使用工具】: OllyICE,PhantOm
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
/*
保护时选择了一下项目:
Resources Protection
Preserve Extra Data
Anti-Debugger Protection
CheckSum Protection
*/
//入口:
00401000 > 68 01D04000 push 0040D001
00401005 E8 01000000 call 0040100B
0040100A C3 retn
0040100B C3 retn
//PhantOm全选以后Ctrl+G来到GetSystemTime,F2设置断点,然后F9运行程序,中断两次取消断点返回。
7C80176F kernel32.GetSystemTime 8BFF mov edi, edi //F2
7C801771 55 push ebp
7C801772 8BEC mov ebp, esp
7C801774 83EC 18 sub esp, 18
7C801777 A1 1800FE7F mov eax, dword ptr [7FFE0018]
//返回到此处
00AC2777 0FB745 F0 movzx eax, word ptr [ebp-10]
00AC277B 6BC0 3C imul eax, eax, 3C
00AC277E 66:0345 F2 add ax, word ptr [ebp-E]
00AC2782 6BC0 3C imul eax, eax, 3C
00AC2785 31D2 xor edx, edx
00AC2787 66:8B55 F4 mov dx, word ptr [ebp-C]
00AC278B 01D0 add eax, edx
00AC278D 69C0 E8030000 imul eax, eax, 3E8
00AC2793 66:8B55 F6 mov dx, word ptr [ebp-A]
00AC2797 01D0 add eax, edx
00AC2799 8905 3C30B000 mov dword ptr [B0303C], eax
00AC279F 8BE5 mov esp, ebp
00AC27A1 5D pop ebp
00AC27A2 C3 retn //此处F2然后F9运行到这里,之后F8单步返回
00AE15D0 8BC7 mov eax, edi //返回到此处
00AE15D2 E8 39FAFFFF call 00AE1010
00AE15D7 C747 18 FFFFFFF>mov dword ptr [edi+18], -1
00AE15DE A1 482BB000 mov eax, dword ptr [B02B48]
00AE15E3 83C0 0D add eax, 0D
00AE15E6 8947 0C mov dword ptr [edi+C], eax
00AE15E9 33D2 xor edx, edx
.......
.......
00AE1683 83C4 0C add esp, 0C
00AE1686 8BC7 mov eax, edi
00AE1688 5F pop edi
00AE1689 5E pop esi
00AE168A 5B pop ebx
00AE168B C3 retn //段尾Ret处F2然后F9,F8
00B00226 8B15 982BB000 mov edx, dword ptr [B02B98] //返回到这里
00B0022C 8902 mov dword ptr [edx], eax
00B0022E A1 982BB000 mov eax, dword ptr [B02B98]
00B00233 8B00 mov eax, dword ptr [eax]
00B00235 E8 462BFEFF call 00AE2D80
.......
.......
00B002C5 59 pop ecx
00B002C6 5A pop edx
00B002C7 5B pop ebx
00B002C8 C3 retn //段尾Ret处F2然后F9,F8
00ACED60 68 A75915E2 push E21559A7 //返回到这里……
00ACED65 68 F0290000 push 29F0
00ACED6A 68 B4150200 push 215B4
00ACED6F 68 C0200000 push 20C0
00ACED74 68 9CCC0000 push 0CC9C
00ACED79 68 00500500 push 55000
00ACED7E FF35 D434B000 push dword ptr [B034D4]
00ACED84 E8 23D1FFFF call 00ACBEAC
00ACED89 310424 xor dword ptr [esp], eax
00ACED8C 8B05 D434B000 mov eax, dword ptr [B034D4]
00ACED92 010424 add dword ptr [esp], eax
00ACED95 C3 retn //段尾Ret处F2然后F9,F8
00B002E0 68 9B311C0B push 0B1C319B //返回到这里……
00B002E5 68 E0020000 push 2E0
00B002EA 68 6C590100 push 1596C
00B002EF 68 5C140000 push 145C
00B002F4 68 80EE0300 push 3EE80
00B002F9 68 00500500 push 55000
00B002FE FF35 D434B000 push dword ptr [B034D4]
00B00304 E8 01000000 call 00B0030A
00B00309 8183 C404E89A B>add dword ptr [ebx+9AE804C4], E8FFFC>
00B00313 0100 add dword ptr [eax], eax
00B00315 0000 add byte ptr [eax], al
00B00317 8183 C4043104 2>add dword ptr [ebx+43104C4], 1E824
00B00321 0000 add byte ptr [eax], al
00B00323 68 83C4048B push 8B04C483
00B00328 05 D434B000 add eax, 0B034D4
00B0032D E8 02000000 call 00B00334
00B00332 E8 6883C404 call 0574869F
00B00337 010424 add dword ptr [esp], eax
00B0033A C3 retn //段尾Ret处F2然后F9,F8
00AFFC8A E8 61F1FFFF call 00AFEDF0 //在离返回出最近的一处Call处F2然后F9,F7
00AFFC8F 83C4 24 add esp, 24
00AFFC92 5F pop edi
00AFFC93 5E pop esi
00AFFC94 5B pop ebx
00AFFC95 C3 retn
00AFFC96 8BC0 mov eax, eax
00AFFC98 E8 E7FEFFFF call 00AFFB84 //返回到这里
00AFFC9D C3 retn
00AFEDF0 BF 02DB4A00 mov edi, 4ADB02 //到这里,往下单步跟踪到返回
00AFEDF5 337C24 28 xor edi, dword ptr [esp+28]
......
......
00AFEF17 037C24 18 add edi, dword ptr [esp+18]
00AFEF1B C3 retn //返回处
01B70000 80F2 23 xor dl, 23 //返回到这里
01B70003 E8 05000000 call 01B7000D
01B70008 D99E 7F4C95B6 fstp dword ptr [esi+B6954C7F]
01B7000E DB58 BE fistp dword ptr [eax-42]
01B70011 1312 adc edx, dword ptr [edx]
01B70013 696D 81 C0E2000>imul ebp, dword ptr [ebp-7F], 0E2C0
01B7001A 0068 0A add byte ptr [eax+A], ch
//然后往下拉……
01B700B5 15 2A1BB891 adc eax, 91B81B2A
01B7008B /E9 36000000 jmp 01B700C6 //上面最近一处Jmp,Enter跟随
01B70090 |3B58 B1 cmp ebx, dword ptr [eax-4F]
01B70093 |96 xchg eax, esi
01B70094 |17 pop ss
01B70095 |04 ED add al, 0ED
01B70097 |22B3 70E96E0F and dh, byte ptr [ebx+F6EE970]
01B7009D |9C pushfd
01B7009E |A5 movs dword ptr es:[edi], dword ptr [e>
01B7009F |0F8C 09000000 jl 01B700AE
01B700A5 |68 07547301 push 1735407
01B700AA |66:8BD8 mov bx, ax
01B700AD |5B pop ebx
01B700AE ^\E9 7AFFFFFF jmp 01B7002D //此处有个向回跳的大跳转,判断上面的代码用于返回代码的解压缩
01B700B3 FFCC dec esp
.....
.....
01B700C6 /EB 51 jmp short 01B70119 //跟随到此处……硬件执行断点
01B700C8 |34 E2 xor al, 0E2
01B700CA |3006 xor byte ptr [esi], al
01B700CC |AE scas byte ptr es:[edi]
01B700CD |BC 485E755F mov esp, 5F755E48
01B700D2 |8890 D6B0FB53 mov byte ptr [eax+53FBB0D6], dl
//下面代码漏出真实面目……
01B700C6 BB 4EE24900 mov ebx, 49E24E
01B700CB 035C24 18 add ebx, dword ptr [esp+18]
01B700CF 5B pop ebx
01B700D0 23C7 and eax, edi
01B700D2 58 pop eax
01B700D3 8D8418 CB50AFF9 lea eax, dword ptr [eax+ebx+F9AF50CB>
01B700DA 2BC3 sub eax, ebx
01B700DC 03C3 add eax, ebx
01B700DE 5C pop esp
01B700DF FFE0 jmp eax //飞向光明之巅……
004010CC 55 push ebp //到达OEP
004010CD 8BEC mov ebp, esp
004010CF 83EC 44 sub esp, 44
004010D2 56 push esi
004010D3 E8 28EF7801 call 01B90000 //次出被ASPr保护……现在想办法恢复回来……硬件执行断点
004010D8 AE scas byte ptr es:[edi]
004010D9 8BF0 mov esi, eax
004010DB 8A00 mov al, byte ptr [eax]
004010DD 3C 22 cmp al, 22
004010DF 75 1B jnz short 004010FC
004010E1 56 push esi
004010E2 FF15 F4644000 call dword ptr [4064F4] ; USER32.CharNextA
//中断两次以后此处变成这个样……
004010D3 E8 2CEF9900 call 00DA0004 //F7进
//ASPr很狡猾……把系统Call代码抽到自己家里运行去了
00DA0004 FF0424 inc dword ptr [esp]
00DA0007 - E9 F4FFF4FF jmp 00CF0000 //到这里看看……
00CF0000 A1 F455887C mov eax, dword ptr [7C8855F4] //此处正是kernel32.GetCommandLineA的入口代码
00CF0005 C3 retn
//对比一下
7C812FAD kernel32.GetCommandLineA A1 F455887C mov eax, dword ptr [7C8855F4]
7C812FB2 C3 retn
7C812FB3 90 nop
//其他处代码恢复诸如此类……形势一样……
//修复好了就可以Dump,然后ImportREC伺候……因为没有选择高技输入表保护,所以修复起来就简单了
--------------------------------------------------------------------------------
【经验总结】
总结一下,感觉ASPr2.4SKE的确狡猾了很多……系统标准DLL代码都抽到自己空间运行给恢复代码带来很大困难,即便要恢
复,也对代码进行恢复的人员要求很高,必须熟悉WindowsDll的标准调用,所以个人感觉还是Volx的脚本方便些……呵呵…
…本教程只作娱乐,看到没有手脱2.4SKE的教程……特此写一篇……当脚本不好用的时候……我想手工可能会好些
吧
2008年08月06日
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!