win98 NOTEPAD 学习Hying's PE-Armor0.75的问题
【目 标】:win98 NOTEPAD.exe
【工 具】:Olydbg1.1(diy版)
【任 务】:Hying's PE-Armor0.75
【操作平台】:Windows 2000 sp4
【相关链接】:看雪下载的Hying's PE-Armor0.75
【原创】某人最新 0.7x完整分析(一)http://bbs.pediy.com/showthread. ... ht=ZwsetInformation
hying 0.7x的脱壳过程http://bbs.pediy.com/showthread. ... ht=ZwsetInformation
Hying's PeLock v0.7x外壳分析(这个目标与上面两个不一样)http://bbs.pediy.com/showthread. ... amp;highlight=hying
0040D0D1 > 60 pushad
0040D0D2 E8 00000000 call notepad.0040D0D7
0040D0D7 5D pop ebp
0040D0D8 81ED D7000000 sub ebp,0D7
0040D0DE 8DB5 EE000000 lea esi,dword ptr ss:[ebp+EE]
0040D0E4 55 push ebp
0040D0E5 56 push esi
0040D0E6 81C5 11310000 add ebp,3111
0040D0EC 55 push ebp
0040D0ED C3 retn
1,首先用LOVEBOOM的方法。用OD载入,下断Bp VirtualAlloc然后执行到返回,之所以这样是因为前面的解压代码很是无聊,也没有什么价值,直接入主题更好:-).
0040D129 50 push eax ; 返回这里
0040D12A 8945 0C mov dword ptr ss:[ebp+C],eax
0040D12D 8B5D 08 mov ebx,dword ptr ss:[ebp+8]
0040D130 03DD add ebx,ebp
0040D132 50 push eax
0040D133 53 push ebx
0040D134 E8 18000000 call notepad.0040D151
0040D139 5A pop edx
0040D13A 52 push edx
0040D13B 55 push ebp
0040D13C 8D85 DE000000 lea eax,dword ptr ss:[ebp+DE]
0040D142 C600 EB mov byte ptr ds:[eax],0EB
0040D145 C640 01 10 mov byte ptr ds:[eax+1],10
0040D149 8B45 30 mov eax,dword ptr ss:[ebp+30]
0040D14C 8945 74 mov dword ptr ss:[ebp+74],eax
0040D14F FFE2 jmp edx ; 这里跳去壳的部分
jmp edx,来到这里:以下代码就和LOVEBOOM的目标程序不一样了。然后就跟着【破解作者】 hnhuqiong向下走。。。。
00340000 B9 04000000 mov ecx,4
00340005 E8 1F000000 call 00340029
0034000A ^ EB FA jmp short 00340006
0034000C E8 16000000 call 00340027
00340011 E9 EBF80000 jmp 0034F901
00340016 58 pop eax
00340017 EB 09 jmp short 00340022
总结:LOVEBOOM与 hnhuqiong都有申请空间。所以直接CTRL-F PUSH 1000来到下面。
0034380C 6A 04 push 4
0034380E 68 00100000 push 1000 ;F2下断
00343813 68 00100000 push 1000
00343818 6A 00 push 0
0034381A FF95 32F44000 call dword ptr ss:[ebp+40F432]
00343820 8985 1AFD4000 mov dword ptr ss:[ebp+40FD1A],eax
00343826 68 003C070A push 0A073C00
0034382B 68 9FFC0D75 push 750DFC9F
00343830 50 push eax
00343831 E8 5D000000 call 00343893 ;进这里就晕了。跟着【破解作者】 hnhuqiong向下走
前面跟半天心烦直接CTRL-B [5E 33 C0]
0034439E 5E pop esi ;CTRL-B [5E 33 C0],F4走到这里
0034439F 33C0 xor eax,eax
003443A1 64:FF35 00000000 push dword ptr fs:[0]
003443A8 64:8925 00000000 mov dword ptr fs:[0],esp
003443AF 0F0B ud2
------ 0034439E处看句柄跟着跑
0012FF9C 00340000
0012FFA0 00343980 返回到 00343980 来自 00344238
00343980 E8 04000000 call 00343989 ;0034439E处看句柄跟着跑到这里
00343985 0000 add byte ptr ds:[eax],al
00343987 0000 add byte ptr ds:[eax],al
00343989 5A pop edx
0034398A 8B4424 04 mov eax,dword ptr ss:[esp+4]
0034398E 8B00 mov eax,dword ptr ds:[eax]
00343990 8B4C24 0C mov ecx,dword ptr ss:[esp+C]
00343994 C701 17000100 mov dword ptr ds:[ecx],10017
0034399A 9C pushfd
0034399B 6A 03 push 3
003439C7 FF81 B8000000 inc dword ptr ds:[ecx+B8]
003439CD 3D 03000080 cmp eax,80000003
003439D2 0F85 05010000 jnz 00343ADD ;这里跳到下面
00343ADD 3D 1D0000C0 cmp eax,C000001D
00343AE2 0F85 8E010000 jnz 00343C76 ;继续跳到下面
00343C76 3D 0400007E cmp eax,7E000004
00343C7B 28D8 sub al,bl
00343C7D 50 push eax
00343C7E 8A0B mov cl,byte ptr ds:[ebx]
00343C80 04 04 add al,4
00343C82 46 inc esi
00343C83 90 nop
00343C84 40 inc eax
00343C85 91 xchg eax,ecx
00343C86 6363 CE arpl word ptr ds:[ebx-32],sp
00343C89 BA 1C496219 mov edx,1962491C
00343C8E 1A1B sbb bl,byte ptr ds:[ebx]
00343C90 57 push edi
00343C91 2096 17108173 and byte ptr ds:[esi+73811017],dl ;在这里就走不动了。
-----------------------------------------------------------
[问题1]
引用 某人最新 0.7x完整分析(二)、hying 0.7x的脱壳过程
;3733AC ★第一个SEH函数================================================
003733F9 3D 03000080 CMP EAX,80000003
003733FE 0F85 A9020000 JNZ 003736AD
003736AD 3D 1D0000C0 CMP EAX,C000001D
003736B2 0F85 8E010000 JNZ 00373846
00373846 3D 04000080 CMP EAX,80000004
0037384B 0F85 B6050000 JNZ 00373E07
00373E07 3D 940000CD CMP EAX,CD000094 ;这里应该是最后一次进入这个SEH函数,除0错误
00373E0C 23ACAB 121617A9 AND EBP,DWORD PTR DS:[EBX+EBP*4+A9171612>
;在这个版本的壳中,最巧妙的就是它的4个关键SEH. 接下来我们遇到了第一个.
;这个seh对反跟踪效果非常的好. 它首先利用一个int3中断进入seh, 设置4个单步断点于dr寄存器中.
;然后分别在四个单步中断处完成解码的相应操作,;最后经过一个除0异常进入seh,设置好dr寄存器的值后,拆除seh.
; 我们如果在4个单步断点之间进行软硬件中断调试,是不太可行的.
; a.软件: 很多代码没有解密,无法对其进行软件中断
; b.硬件: dr寄存器被占用,根本无法使用硬件中断
;所以,我们唯一的办法只有在它最后一次进入seh之后的代码上下软件断点"CMP EAX,CD000094". 幸好,这段代码部分没有加密,
不然就根本无法跟踪下去了.;然后,出第一个seh中断. 这个时候,我们必须把dr寄存器中的值记录下来,因为在第二个seh中要
用到. 除非,你在第一个和第二个seh之间不进行
然而 我只能看到
003439CD 3D 03000080 cmp eax,80000003
003439D2 0F85 05010000 jnz 00343ADD
00343ADD 3D 1D0000C0 cmp eax,C000001D
00343AE2 0F85 8E010000 jnz 00343C76
CMP EAX,80000004 没能走到这里
CMP EAX,CD000094 根就没有,我们唯一的办法只有在它最后一次进入seh之后的代码上下软件断点"CMP EAX,CD000094". 幸好,这段代码部分没有加密,
不然就根本无法跟踪下去了.
走动这里没办法向下走了,怎么办啊?
[问题2]工具ROMRA - The debugger是怎么用得呀。
ROMRA - The debugger for hying's PE-Armor 0.7x - 0.755
* Copyright (X) 2005 forgot/iPB
附件 1: Clip1.GIF (2006-1-3 05:00 PM, 17.44 K)
http://www.unpack.cn/attachments/month_0601/Clip1_K1GQl4c291z0.gif
附件 2: notepad.rar (2006-1-3 05:00 PM, 79.42 K)
http://www.unpack.cn/attachment.php?aid=1175&checkid=2242a&download=1
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)