目标程序是 加密与解密(第三版) 13.9的asprotect壳
我按书上写的试试了,不行。就决定用最后一次异常法,但是遇到一些问题,还望大牛解释下。
会后一次异常停在
00BCFAA5 C700 EFCA5C85 mov dword ptr ds:[eax],855CCAEF
00BCFAAB 67:64:8F06 0000 pop dword ptr fs:[0]
00BCFAB1 83C4 04 add esp,4
00BCFAB4 83E8 AF sub eax,-51
00BCFAB7 83C8 4B or eax,4B
00BCFABA 58 pop eax
堆栈中显示如下
0012FF34 0012FF80 指针到下一个 SEH 记录
0012FF38 00BCFA6E SE 句柄
0012FF3C E850D8BF
0012FF40 175256BF
数据窗口跟随 0012FF38
数据窗口显示如下
00BCFA6E 01EBF256
00BCFA72 247403F0
00BCFA76 83DEC138
00BCFA7A 1024748B
00BCFA6E 行下硬件执行断点
按shift+f9运行
运行到
00BCFA6E 56 push esi
00BCFA6F F2: prefix repne:
00BCFA70 EB 01 jmp short 00BCFA73
00BCFA72 F0:037424 38 lock add esi,dword ptr ss:[esp+38] ; 不允许锁定前缀
00BCFA77 C1DE 83 rcr esi,83
00BCFA7A 8B7424 10 mov esi,dword ptr ss:[esp+10]
删除硬件断点
按f7又到
00BCFA73 037424 38 add esi,dword ptr ss:[esp+38]
00BCFA77 C1DE 83 rcr esi,83
00BCFA7A 8B7424 10 mov esi,dword ptr ss:[esp+10]
00BCFA7E 8D76 52 lea esi,dword ptr ds:[esi+52]
00BCFA81 8346 66 06 add dword ptr ds:[esi+66],6
00BCFA85 8D7475 6F lea esi,dword ptr ss:[ebp+esi*2+6F]
00BCFA89 83EE 6F sub esi,6F
00BCFA8C 5E pop esi
00BCFA8D 83C8 FF or eax,FFFFFFFF
00BCFA90 40 inc eax
00BCFA91 C3 retn
按f8继续走,到
7C9232A8 |. 64:8B25 00000>mov esp,dword ptr fs:[0]
7C9232AF |. 64:8F05 00000>pop dword ptr fs:[0]
7C9232B6 |. 8BE5 mov esp,ebp
7C9232B8 |. 5D pop ebp
7C9232B9 \. C2 1400 retn 14
按f8继续走,到
7C92327A |. 5F pop edi ; 00BA0000
7C92327B |. 5E pop esi
7C92327C |. 5B pop ebx
7C92327D \. C2 1400 retn 14
按f8继续走,到
7C94AA0F . F605 FAE3997C>test byte ptr ds:[7C99E3FA],80
7C94AA16 . 8BF8 mov edi,eax
7C94AA18 . 0F85 0B570200 jnz ntdll.7C970129
7C94AA1E > 395D 08 cmp dword ptr ss:[ebp+8],ebx
7C94AA21 . 0F84 10570200 je ntdll.7C970137
7C94AA27 > 8BC7 mov eax,edi
7C94AA29 . 33C9 xor ecx,ecx
7C94AA2B . 2BC1 sub eax,ecx
7C94AA2D .^ 0F85 E2F8FFFF jnz ntdll.7C94A315
7C94AA33 . F646 04 01 test byte ptr ds:[esi+4],1
7C94AA37 . 0F85 44570200 jnz ntdll.7C970181
7C94AA3D . C645 FF 01 mov byte ptr ss:[ebp-1],1
7C94AA41 > 5F pop edi
7C94AA42 > 5B pop ebx
7C94AA43 > 8A45 FF mov al,byte ptr ss:[ebp-1]
7C94AA46 . 5E pop esi
7C94AA47 . C9 leave
7C94AA48 . C2 0800 retn 8
按f8继续走,到
7C92E48A |. 0AC0 or al,al
7C92E48C |. 74 0C je short ntdll.7C92E49A
7C92E48E |. 5B pop ebx
7C92E48F |. 59 pop ecx
7C92E490 |. 6A 00 push 0
7C92E492 |. 51 push ecx
7C92E493 |. E8 C6EBFFFF call ntdll.ZwContinue
7C92E498 |. EB 0B jmp short ntdll.7C92E4A5
7C92E49A |> 5B pop ebx
7C92E49B |. 59 pop ecx
在7C92E493 |. E8 C6EBFFFF call ntdll.ZwContinue跟进
7C92D05E >/$ B8 20000000 mov eax,20
7C92D063 |. BA 0003FE7F mov edx,7FFE0300
7C92D068 |. FF12 call dword ptr ds:[edx]
7C92D06A \. C2 0800 retn 8
在7C92D068 |. FF12 call dword ptr ds:[edx]跟进
7C92E510 >/$ 8BD4 mov edx,esp
7C92E512 |. 0F34 sysenter
7C92E514 >\$ C3 retn
到这后,我不论按f7还是f8,程序都运行了,不知道怎么回事。
那里错了?
本人刚学脱壳,一直不知道,遇到一个新壳怎么处理,脱这个壳,脱了好长时间都。。。。。
希望能指点下,看过一些教程,他们只讲在哪下断点,根本就不明白。。遇到新壳无从下手
[课程]Linux pwn 探索篇!