[原创]“VmpSDK.CrackMe.By.Hmily”分析记录080228.txt
发表于:
2008-2-28 23:55
13317
[原创]“VmpSDK.CrackMe.By.Hmily”分析记录080228.txt
【文章标题】: “VmpSDK.CrackMe.By.Hmily”分析记录
【文章作者】: 壳狼
【软件名称】: VmpSDK.CrackMe.By.Hmily
【下载地址】: 自己搜索下载
【加壳方式】: 未知
【保护方式】: vmprotect
【编写语言】: Dephi
【使用工具】: IDA,OD,Improtrec,LordPE
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
一、脱壳
1.1查壳
peid显示为nothing find
1.2脱壳
OD载入后,明显有壳
00488000 > 68 040E4500 push 00450E04
00488005 9C pushfd
00488006 60 pushad
00488007 E8 75060000 call 00488681
使用ESP定律,到达oep后,dump,然后修复IAT。运行脱壳后程序正常。
1.3再查壳
peid查已脱壳文件为Borland Delphi 6.0
二、分析
2.1静态分析
IDA载入。分析完成后,查看navigator,一大片青色(让人激动,都是识别的库函数),颜色分界比较清晰,不是那么杂乱。
看到一窄粉色的(IAT),一大片灰色中(数据,主要是虚拟机机器码)夹着一条蓝(虚拟机引擎)
Alt-V执行VMprotect1.2X_op伪代码识别插件,没有成功,说明不是1.2X版本,也不是1.5版本
IDA中鼠标点击navigator上的蓝色部分查看VM部分,应是典型的vmprotect结构,与以往略有差别,IDA5.2的jmptable好象
确实有所增强。标记标签VM_OP_TABLE,VM_ENGINE和几个简单的opcode如VM_RETN,VM_POP_CT,VM_PUSH_CT等。
VM_RETN很好识别
_VmpSDK:004586EC VM_RETN: ; CODE XREF: VM_ENGINE+27j
_VmpSDK:004586EC ; DATA XREF: VM_ENGINE+3D3o ...
_VmpSDK:004586EC mov esp, ebp
_VmpSDK:004586EE pop eax
_VmpSDK:004586EF pop edi
_VmpSDK:004586F0 pop esi
_VmpSDK:004586F1 pop eax
_VmpSDK:004586F2 pop ecx
_VmpSDK:004586F3 pop ebp
_VmpSDK:004586F4 pop ebx
_VmpSDK:004586F5 pop edx
_VmpSDK:004586F6 pop ecx
_VmpSDK:004586F7 popf
_VmpSDK:004586F8 retn
_VmpSDK:00450A68 _TForm1_Button1Click proc near ; DATA XREF: _VmpSDK:00450A0Co
_VmpSDK:00450A68
_VmpSDK:00450A68 arg_4 = byte ptr 0Ch
_VmpSDK:00450A68
_VmpSDK:00450A68 ; FUNCTION CHUNK AT _VmpSDK:00458D91 SIZE 00000041 BYTES
_VmpSDK:00450A68
_VmpSDK:00450A68 push ebp
_VmpSDK:00450A69 mov ebp, esp
_VmpSDK:00450A6B push 0
_VmpSDK:00450A6D push 0
_VmpSDK:00450A6F push ebx
_VmpSDK:00450A70 push esi
_VmpSDK:00450A71 mov ebx, eax
_VmpSDK:00450A73 xor eax, eax
_VmpSDK:00450A75 push ebp
_VmpSDK:00450A76 push offset loc_450B53
_VmpSDK:00450A7B push dword ptr fs:[eax]
_VmpSDK:00450A7E mov fs:[eax], esp
_VmpSDK:00450A81 jmp loc_458D91
_VmpSDK:00450A81 _TForm1_Button1Click endp
_VmpSDK:00458D91 Enter_VM: ; CODE XREF: _TForm1_Button1Click+19j
_VmpSDK:00458D91 push offset VM_OPCODE_PTR ; ptr
_VmpSDK:00458D96 call VM_ENGINE ;<=进入VMENGINE
....
_VmpSDK:004580AD ; int __cdecl VM_ENGINE(void *ptr)
_VmpSDK:004580AD VM_ENGINE proc near ; CODE XREF: _TForm1_Button1Click+832Ep
_VmpSDK:004580AD ; _VmpSDK:00459BEFp
_VmpSDK:004580AD
_VmpSDK:004580AD ptr = dword ptr 4
_VmpSDK:004580AD
_VmpSDK:004580AD ; FUNCTION CHUNK AT _VmpSDK:00458000 SIZE 000000AD BYTES
_VmpSDK:004580AD
_VmpSDK:004580AD pushf
_VmpSDK:004580AE push ecx
_VmpSDK:004580AF push edx
_VmpSDK:004580B0 push ebx
_VmpSDK:004580B1 push ebp
_VmpSDK:004580B2 push edx
_VmpSDK:004580B3 push eax
_VmpSDK:004580B4 push esi
_VmpSDK:004580B5 push edi
_VmpSDK:004580B6 push 0
_VmpSDK:004580BB mov esi, [esp+28h+ptr]
....
堆栈:
0012F608 0042FAD0 <dumped_.Controls::TControl::GetText(void)>
0012F60C 00459240 dumped_.00459240
堆栈:
0012F608 004045EC <dumped_.System::__linkproc__ LStrCmp(void)>
0012F60C 00459992 dumped_.00459992
寄存器:
EAX 00D73FE4 ASCII "shellwolf"
ECX 77D187FF user32.77D187FF
EDX 00450B68 ASCII "Hmily"
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)