hmimys-Packer V1.2、1.3 脱脱脱
hmimys-Packer V1.2、1.3 脱脱脱娱乐一下,看论坛没朋友写这个,就忽悠一下!
今天有朋友叫我帮忙脱一壳,并要文章,闲着没事,脱~~
查壳后发现是hmimys-Packer V1.2 -> hmimys,但感觉奇怪,似乎这个壳被某人修改过,代码有所不同(后面证明):
★一、OD载入目标程序:
/*1012CD8*/call PYG脱客_.01012D72 //EP
/*1012CDD*/add byte ptr ds:,dl
/*1012CDF*/add dword ptr ds:,eax
/*1012CE1*/add byte ptr ds:,dl
/*1012CE3*/add byte ptr ds:,al
/*1012CE5*/in al,dx
/*1012CE6*/dec esp
/*1012CE7*/add byte ptr ds:,al
/*1012CE9*/iretd
★二、Alt+M 打开内存镜像:
Memory map
地址 大小 属主 区段 包含 类型 访问 初始访问已映射为
01000000 00001000 PYG脱客_ 01000000 (自身) PE 文件头 Imag R RWE
01001000 00011000 PYG脱客_ 01000000 hmimys 代码 Imag R RWE
01012000 0000E000 PYG脱客_ 01000000 hmimys SFX,输入表,资源 Imag R RWE
01020000 00001000 PYG脱客_ 01000000 hmimys Imag R RWE
在第一“PE 文件头”区段上,F2设置访问中断,F9运行中断:
Memory map, 条目 17
地址=01000000
大小=00001000 (4096.)
属主=PYG脱客_ 01000000 (自身)
区段=
包含=PE 文件头
类型=Imag 01001002
访问=R
初始访问=RWE
中断后来到这里:
/*7C930806*/cmp word ptr ds:,5A4D
/*7C93080B*/jnz short ntdll.7C93082A
/*7C93080D*/mov edx,dword ptr ds:
/*7C930810*/cmp edx,10000000
/*7C930816*/jnb short ntdll.7C93082A
/*7C930818*/lea eax,dword ptr ds:
/*7C93081B*/mov dword ptr ss:,eax
/*7C93081E*/cmp dword ptr ds:,4550
/*7C930824*/jnz ntdll.7C958BB5
/*7C93082A*/or dword ptr ss:,FFFFFFFF
/*7C93082E*/call ntdll.7C92EE02
/*7C930833*/retn 4
★三、再次 Alt+M 打开内存镜像:
在第一区段上,F2设置访问中断,F9运行中断:
Memory map, 条目 18
地址=01001000
大小=00011000 (69632.)
属主=PYG脱客_ 01000000
区段=hmimys
包含=代码
类型=Imag 01001002
访问=R
初始访问=RWE
中断后来到这里:
/*10102D3*/mov dword ptr ss:,eax
/*10102D6*/call PYG脱客_.010102E7
/*10102DB*/inc ebx
/*10102DC*/insb
/*10102DD*/outsd
/*10102DE*/jnb short PYG脱客_.01010345
/*10102E0*/dec eax
/*10102E1*/popad
/*10102E2*/outsb
/*10102E3*/insb
/*10102E5*/add byte ptr gs:,dl
/*10102E9*/salc
/*10102EA*/call eax
/*10102EC*/push 0
/*10102EE*/call PYG脱客_.010102FE
四、Ctrl+S搜索代码:
popad
push eax
找到这里:
/*10106C9*/popad
/*10106CA*/push eax
/*10106CB*/push E82BBDF5
/*10106D0*/pushad
/*10106D1*/push C748640E
/*10106D6*/sub esp,-4
/*10106D9*/popad
/*10106DA*/sub esp,-4
/*10106DD*/pop eax
/*10106DE*/call PYG脱客_.010106E3
/*10106E3*/jmp short PYG脱客_.010106E6
/*10106E5*/outsb
/*10106E6*/add ebx,7B30DA6E
/*10106EC*/sub ebx,7B30DA6E
/*10106F2*/retn //在这里F2设置断点,经过2次中断后飞向OEP
飞向OEP:
/*1006420*/push ebp //OEP
/*1006421*/mov ebp,esp
/*1006423*/push -1
/*1006425*/push PYG脱客_.01001888
/*100642A*/push PYG脱客_.010065D0
/*100642F*/mov eax,dword ptr fs:
/*1006435*/push eax
/*1006436*/mov dword ptr fs:,esp
/*100643D*/add esp,-68
/*1006440*/push ebx
/*1006441*/push esi
/*1006442*/push edi
/*1006443*/mov dword ptr ss:,esp
/*1006446*/mov dword ptr ss:,0
/*100644D*/push 2
/*100644F*/call dword ptr ds:
★五、LoadPE脱壳、Import REC修复即可!
OEP=1006420-1000000=0006420
为了证明我开场的观点,于是用真正的hmimys-Packer V1.2加了几个试炼程序(包括脱壳后我们的目标程序):
脱壳前三步与以上的一样,接着我们来说第四步,也就是找OEP:(这里目标为脱壳后再加壳的目标程序)
★一(略)
★二(略)
★三(略)
四、Ctrl+B搜索代码:
AB EB E4 AD 50 55 FF 53 04 AB EB E0 C3
来到:
/*1028DB8*/lodsb
/*1028DB9*/test al,al
/*1028DBB*/jnz short PYG脱客_.01028DB8
/*1028DBD*/lodsw
/*1028DBF*/test ax,ax
/*1028DC2*/je short PYG脱客_.01028DAD
/*1028DC4*/lodsb
/*1028DC5*/sub esi,3
/*1028DC8*/test al,al
/*1028DCA*/je short PYG脱客_.01028DD4
/*1028DCC*/push esi
/*1028DCD*/push ebp
/*1028DCE*/call dword ptr ds:
/*1028DD1*/stosd //找到这里
/*1028DD2*/jmp short PYG脱客_.01028DB8
/*1028DD4*/lodsd
/*1028DD5*/push eax
/*1028DD6*/push ebp
/*1028DD7*/call dword ptr ds:
/*1028DDA*/stosd
/*1028DDB*/jmp short PYG脱客_.01028DBD
/*1028DDD*/retn //在这里F2设置断点,中断后F8飞向OEP
飞向OEP:
/*1006420*/push ebp
/*1006421*/mov ebp,esp
/*1006423*/push -1
/*1006425*/push PYG脱客_.01001888
/*100642A*/push PYG脱客_.010065D0
/*100642F*/mov eax,dword ptr fs:
/*1006435*/push eax
/*1006436*/mov dword ptr fs:,esp
/*100643D*/add esp,-68
/*1006440*/push ebx
/*1006441*/push esi
/*1006442*/push edi
/*1006443*/mov dword ptr ss:,esp
/*1006446*/mov dword ptr ss:,0
/*100644D*/push 2
/*100644F*/call dword ptr ds:
★五(略)
原来hmimys-Packer 1.30也可以这么脱~~o(∩_∩)o... hmimys-Packer 1.30 主程序更为简便脱法(亦可应用于附件中的试炼品):
壳主程序EP:
/*
/*418360*/call hmiPack1.004183FA
/*418365*/add byte ptr ds:,al
/*418368*/add byte ptr ds:,al
/*41836A*/adc byte ptr ds:,al
/*41836D*/xlat byte ptr ds:
/*41836E*/add byte ptr gs:,al
/*418371*/push edi
/*418372*/mov dword ptr ds:,eax
/*418375*/add al,dh
/*418377*/inc ecx
/*418378*/add byte ptr ds:,dh
/*41837B*/inc eax
/*41837C*/add byte ptr ds:,al
/*41837E*/inc eax
/*41837F*/inc ecx
/*418380*/add byte ptr ds:,dh
/*418383*/cmp byte ptr ds:,80
/*418388*/jl short hmiPack1.0041838A
/*41838A*/add byte ptr ds:,al
*/
Alt+M打开内存镜像,在第一区段F2设置访问断点:
/*
Memory map, 条目 18
地址=00401000
大小=00014000 (81920.)
属主=hmiPack1 00400000
区段=hmimys
包含=代码
类型=Imag 01001002
访问=R
初始访问=RWE
*/
F9 运行中断:
/*
/*418719*/mov byte ptr ds:,bl
/*41871C*/jge short hmiPack1.00418727
/*41871E*/and dword ptr ss:,0
/*418722*/jmp hmiPack1.00418944
/*418727*/cmp dword ptr ss:,0A
/*41872B*/jge short hmiPack1.00418736
/*41872D*/sub dword ptr ss:,3
/*418731*/jmp hmiPack1.00418944
/*418736*/sub dword ptr ss:,6
/*41873A*/jmp hmiPack1.00418944
*/
Ctrl+B搜索代码:5F 5E 5B C9 C2 14 00
/*
/*418950*/pop edi
/*418951*/pop esi
/*418952*/pop ebx
/*418953*/leave
/*418954*/retn 14 // F2设置访问断点,F9运行中断后F7跟进
*/
Ctrl+B搜索代码:AB EB E4 AD 50 55 FF 53 04 AB EB E0 C3
/*
/*418459*/stosd
/*41845A*/jmp short hmiPack1.00418440
/*41845C*/lodsd
/*41845D*/push eax
/*41845E*/push ebp
/*41845F*/call dword ptr ds:
/*418462*/stosd
/*418463*/jmp short hmiPack1.00418445
/*418465*/retn // F2设置访问断点,F9运行中断后F7跟进,飞向OEP
*/
找到OEP,LoadPE脱壳、Import REC修复即可!
/*
/*406B70*/push 60
/*406B72*/push hmiPack1.0040B378
/*406B77*/call hmiPack1.00407DFC
/*406B7C*/mov edi,94
/*406B81*/mov eax,edi
/*406B83*/call hmiPack1.00407F60
/*406B88*/mov dword ptr ss:,esp
/*406B8B*/mov esi,esp
/*406B8D*/mov dword ptr ds:,edi
/*406B8F*/push esi
*/ 看不懂啊
好好研究下 1.3的主程序哪里有下? K 哥的文章要学习的。 真的不错,/:001 /:001 /:001 这个看不太懂啊!/:L 在好多论坛看到着东西 /:012 /:012 /:012 /:good /:good /:good
KGG的咚咚哦
嘿嘿
‘今天有朋友叫我帮忙脱一壳,并要文章’嘿嘿,这是个秘密。。。/:018 /:018
页:
[1]