手动脱壳入门第十九篇ASProtect 1.1
程序员文章站
2022-03-19 11:20:07
【脱文标题】 手动脱壳入门第十九篇ASProtect 1.1
【脱文作者】 weiyi75[Dfcg]
【作者邮箱】 weiyi75@sohu.com
【作者主页】 Dfcg官方大本营
【使用工具】 Peid,... 08-10-08...
【脱文标题】 手动脱壳入门第十九篇asprotect 1.1
【脱文作者】 weiyi75[dfcg]
【作者邮箱】 weiyi75@sohu.com
【作者主页】 dfcg官方大本营
【使用工具】 peid,ollydbg,loadpe,importrec1.42
【脱壳平台】 win2000/xp
【软件名称】 chap709.exe
【下载地址】 本地下载
chap709.rar
【软件简介】 asprotect 1.1b registered 加密win98的记事本。
【软件大小】 58.2k
【加壳方式】 asprotect 1.1b registered [sac] -> alexey solodovnikov
【脱壳声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:
--------------------------------------------------------------------------------
【脱壳内容】
首先peid查壳,为asprotect 1.1b registered [sac] -> alexey solodovnikov,asprotect 1.1b registered 很少弄过,与现在的asprotect1.2x seh不同,不过也很容易。seh异常全部是由13个精心设计的非法指令seh组成的,这样就无法用模拟跟踪找oep了。二哥脱壳没有什么耐心,喜欢快。先大概了解了一下程序开始脱壳。
od载入程序,除了错误或有特权的指令外异常全部忽略,1.1b不检测od,根本无需隐藏。
0040d001 > 60 pushad //外壳入口,f9运行。
0040d002 e9 95050000 jmp chap709.0040d59c
0040d007 f710 not dword ptr ds:[eax]
0040d009 0f0f ??? ; 未知命令
0040d00b 0f9f6c90 fc setg byte ptr ds:[eax edx*4-4]
0040d010 57 push edi
0040d011 c5540f ca lds edx, fword ptr ds:[edi ecx-36]
0040d015 4b dec ebx
0040d016 c5540f 12 lds edx, fword ptr ds:[edi ecx 12]
0040d01a ec in al, dx
0040d01b 3aac90 cd540f92 cmp ch, byte ptr ds:[eax edx*4 920f54cd]
0040d022 cc int3
.............................................................
第一次异常
0092ff94 8dc0 lea eax, eax ; 非法使用寄存器
0092ff96 eb 01 jmp short 0092ff99
0092ff98 68 648f0500 push 58f64
0092ff9d 0000 add byte ptr ds:[eax], al
0092ff9f 00eb add bl, ch
0092ffa1 02e8 add ch, al
0092ffa3 0158 68 add dword ptr ds:[eax 68], ebx
0092ffa6 98 cwde
0092ffa7 e5 92 in eax, 92
0092ffa9 0068 d0 add byte ptr ds:[eax-30], ch
0092ffac ff92 00687cf5 call dword ptr ds:[edx f57c6800]
0092ffb2 92 xchg eax, edx
0092ffb3 0068 14 add byte ptr ds:[eax 14], ch
...................................................................
继续shift f9 12次达第十三次也是最后一次异常。
0093053d 8dc0 lea eax, eax ; 非法使用寄存器
0093053f eb 01 jmp short 00930542
00930541 68 648f0500 push 58f64
00930546 0000 add byte ptr ds:[eax], al
00930548 00eb add bl, ch
0093054a 02e8 add ch, al
0093054c 0158 33 add dword ptr ds:[eax 33], ebx
0093054f c05a 59 59 rcr byte ptr ds:[edx 59], 59
00930553 64:8910 mov dword ptr fs:[eax], edx
00930556 68 78059300 push 930578
0093055b 8d45 f0 lea eax, dword ptr ss:[ebp-10]
0093055e e8 2d2cffff call 00923190
00930563 8d45 f8 lea eax, dword ptr ss:[ebp-8]
.............................................................
alt m 打开内存镜像。
内存镜像,项目 21
地址=00401000
大小=00004000 (16384.)
owner=chap709 00400000
区段=
包含=code //对这里下内存访问断点,shift f9运行。
类型=imag 01001002
访问=r
初始访问=rwe
004010cc 55 push ebp //到达oep,用loadpe脱壳吧。
004010cd 8bec mov ebp, esp
004010cf 83ec 44 sub esp, 44
004010d2 56 push esi
004010d3 ff15 e4634000 call dword ptr ds:[4063e4]
004010d9 8bf0 mov esi, eax
004010db 8a00 mov al, byte ptr ds:[eax]
004010dd 3c 22 cmp al, 22
004010df 75 1b jnz short chap709.004010fc //往下看看iat被加密了不少。
004010e1 56 push esi
004010e2 ff15 f4644000 call dword ptr ds:[4064f4]
004010e8 8bf0 mov esi, eax
004010ea 8a00 mov al, byte ptr ds:[eax]
004010ec 84c0 test al, al
004010ee 74 04 je short chap709.004010f4
004010f0 3c 22 cmp al, 22
004010f2 ^ 75 ed jnz short chap709.004010e1
004010f4 803e 22 cmp byte ptr ds:[esi], 22
004010f7 75 15 jnz short chap709.0040110e
004010f9 46 inc esi
004010fa eb 12 jmp short chap709.0040110e
...........................................................
iat修复
运行importrec,oep填入10cc,自动搜索,获得输入信息,有111个指针没有修复,先用跟踪等级1修复98个,剩下的13个用等级3全部修复,正常运行。
火眼金精区段减肥,去除垃圾区段,重建pe。
这个需要一点pe知识,没有也不要紧,跟着一起学,积累经验。
备份好脱壳程序,区段减肥有时过量会导致程序无法运行。
这次区段减肥只是例子,大家要学会举一反三。
我们用od同时载入未加密的win98计事本,和脱壳程序。
win98 记事本
本地下载
notepad.rar
alt m打开内存镜像同步分析。
原程序内存镜像
地址 大小 owner section contains 类型 访问 初始访问 映射为
003e0000 00002000 map r r
00400000 00001000 notepad pe header imag r rwe
00401000 00004000 notepad .text code imag r rwe
00405000 00001000 notepad .data data imag r rwe
00406000 00001000 notepad .idata imports imag r rwe
00407000 00005000 notepad .rsrc resources imag r rwe
0040c000 00001000 notepad .reloc relocations imag r rwe
contains
.text //代码段,我们反编译程序经常看到。
.data //数据快,程序初始化用。
.idata //输入表,现在加密壳搞破坏的对象,坏的输入表
【脱文作者】 weiyi75[dfcg]
【作者邮箱】 weiyi75@sohu.com
【作者主页】 dfcg官方大本营
【使用工具】 peid,ollydbg,loadpe,importrec1.42
【脱壳平台】 win2000/xp
【软件名称】 chap709.exe
【下载地址】 本地下载
chap709.rar
【软件简介】 asprotect 1.1b registered 加密win98的记事本。
【软件大小】 58.2k
【加壳方式】 asprotect 1.1b registered [sac] -> alexey solodovnikov
【脱壳声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:
--------------------------------------------------------------------------------
【脱壳内容】
首先peid查壳,为asprotect 1.1b registered [sac] -> alexey solodovnikov,asprotect 1.1b registered 很少弄过,与现在的asprotect1.2x seh不同,不过也很容易。seh异常全部是由13个精心设计的非法指令seh组成的,这样就无法用模拟跟踪找oep了。二哥脱壳没有什么耐心,喜欢快。先大概了解了一下程序开始脱壳。
od载入程序,除了错误或有特权的指令外异常全部忽略,1.1b不检测od,根本无需隐藏。
0040d001 > 60 pushad //外壳入口,f9运行。
0040d002 e9 95050000 jmp chap709.0040d59c
0040d007 f710 not dword ptr ds:[eax]
0040d009 0f0f ??? ; 未知命令
0040d00b 0f9f6c90 fc setg byte ptr ds:[eax edx*4-4]
0040d010 57 push edi
0040d011 c5540f ca lds edx, fword ptr ds:[edi ecx-36]
0040d015 4b dec ebx
0040d016 c5540f 12 lds edx, fword ptr ds:[edi ecx 12]
0040d01a ec in al, dx
0040d01b 3aac90 cd540f92 cmp ch, byte ptr ds:[eax edx*4 920f54cd]
0040d022 cc int3
.............................................................
第一次异常
0092ff94 8dc0 lea eax, eax ; 非法使用寄存器
0092ff96 eb 01 jmp short 0092ff99
0092ff98 68 648f0500 push 58f64
0092ff9d 0000 add byte ptr ds:[eax], al
0092ff9f 00eb add bl, ch
0092ffa1 02e8 add ch, al
0092ffa3 0158 68 add dword ptr ds:[eax 68], ebx
0092ffa6 98 cwde
0092ffa7 e5 92 in eax, 92
0092ffa9 0068 d0 add byte ptr ds:[eax-30], ch
0092ffac ff92 00687cf5 call dword ptr ds:[edx f57c6800]
0092ffb2 92 xchg eax, edx
0092ffb3 0068 14 add byte ptr ds:[eax 14], ch
...................................................................
继续shift f9 12次达第十三次也是最后一次异常。
0093053d 8dc0 lea eax, eax ; 非法使用寄存器
0093053f eb 01 jmp short 00930542
00930541 68 648f0500 push 58f64
00930546 0000 add byte ptr ds:[eax], al
00930548 00eb add bl, ch
0093054a 02e8 add ch, al
0093054c 0158 33 add dword ptr ds:[eax 33], ebx
0093054f c05a 59 59 rcr byte ptr ds:[edx 59], 59
00930553 64:8910 mov dword ptr fs:[eax], edx
00930556 68 78059300 push 930578
0093055b 8d45 f0 lea eax, dword ptr ss:[ebp-10]
0093055e e8 2d2cffff call 00923190
00930563 8d45 f8 lea eax, dword ptr ss:[ebp-8]
.............................................................
alt m 打开内存镜像。
内存镜像,项目 21
地址=00401000
大小=00004000 (16384.)
owner=chap709 00400000
区段=
包含=code //对这里下内存访问断点,shift f9运行。
类型=imag 01001002
访问=r
初始访问=rwe
004010cc 55 push ebp //到达oep,用loadpe脱壳吧。
004010cd 8bec mov ebp, esp
004010cf 83ec 44 sub esp, 44
004010d2 56 push esi
004010d3 ff15 e4634000 call dword ptr ds:[4063e4]
004010d9 8bf0 mov esi, eax
004010db 8a00 mov al, byte ptr ds:[eax]
004010dd 3c 22 cmp al, 22
004010df 75 1b jnz short chap709.004010fc //往下看看iat被加密了不少。
004010e1 56 push esi
004010e2 ff15 f4644000 call dword ptr ds:[4064f4]
004010e8 8bf0 mov esi, eax
004010ea 8a00 mov al, byte ptr ds:[eax]
004010ec 84c0 test al, al
004010ee 74 04 je short chap709.004010f4
004010f0 3c 22 cmp al, 22
004010f2 ^ 75 ed jnz short chap709.004010e1
004010f4 803e 22 cmp byte ptr ds:[esi], 22
004010f7 75 15 jnz short chap709.0040110e
004010f9 46 inc esi
004010fa eb 12 jmp short chap709.0040110e
...........................................................
iat修复
运行importrec,oep填入10cc,自动搜索,获得输入信息,有111个指针没有修复,先用跟踪等级1修复98个,剩下的13个用等级3全部修复,正常运行。
火眼金精区段减肥,去除垃圾区段,重建pe。
这个需要一点pe知识,没有也不要紧,跟着一起学,积累经验。
备份好脱壳程序,区段减肥有时过量会导致程序无法运行。
这次区段减肥只是例子,大家要学会举一反三。
我们用od同时载入未加密的win98计事本,和脱壳程序。
win98 记事本
本地下载
notepad.rar
alt m打开内存镜像同步分析。
原程序内存镜像
地址 大小 owner section contains 类型 访问 初始访问 映射为
003e0000 00002000 map r r
00400000 00001000 notepad pe header imag r rwe
00401000 00004000 notepad .text code imag r rwe
00405000 00001000 notepad .data data imag r rwe
00406000 00001000 notepad .idata imports imag r rwe
00407000 00005000 notepad .rsrc resources imag r rwe
0040c000 00001000 notepad .reloc relocations imag r rwe
contains
.text //代码段,我们反编译程序经常看到。
.data //数据快,程序初始化用。
.idata //输入表,现在加密壳搞破坏的对象,坏的输入表
上一篇: 从UNIX系统获取密码档(一)
下一篇: 从UNIX系统获取密码档(三)