| 
注册时间2005-12-19
阅读权限30
最后登录1970-1-1UID5512 龙战于野 
 
 TA的每日心情|  | 开心 2022-9-25 11:58
 | 
|---|
 签到天数: 12 天 [LV.3]偶尔看看II | 
 
| hmimys-Packer V1.2、1.3 脱脱脱 
 娱乐一下,看论坛没朋友写这个,就忽悠一下!
 
 今天有朋友叫我帮忙脱一壳,并要文章,闲着没事,脱~~
 查壳后发现是hmimys-Packer V1.2 -> hmimys,但感觉奇怪,似乎这个壳被某人修改过,代码有所不同(后面证明):
 
 ★一、OD载入目标程序:
 
 /*1012CD8*/  call PYG脱客_.01012D72           //EP
 /*1012CDD*/  add byte ptr ds:[eax],dl
 /*1012CDF*/  add dword ptr ds:[eax],eax
 /*1012CE1*/  add byte ptr ds:[eax],dl
 /*1012CE3*/  add byte ptr ds:[ecx],al
 /*1012CE5*/  in al,dx
 /*1012CE6*/  dec esp
 /*1012CE7*/  add byte ptr ds:[eax],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:[ecx],5A4D
 /*7C93080B*/  jnz short ntdll.7C93082A
 /*7C93080D*/  mov edx,dword ptr ds:[ecx+3C]
 /*7C930810*/  cmp edx,10000000
 /*7C930816*/  jnb short ntdll.7C93082A
 /*7C930818*/  lea eax,dword ptr ds:[edx+ecx]
 /*7C93081B*/  mov dword ptr ss:[ebp-1C],eax
 /*7C93081E*/  cmp dword ptr ds:[eax],4550
 /*7C930824*/  jnz ntdll.7C958BB5
 /*7C93082A*/  or dword ptr ss:[ebp-4],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:[esp],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:[ebp-1],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:[0]
 /*1006435*/  push eax
 /*1006436*/  mov dword ptr fs:[0],esp
 /*100643D*/  add esp,-68
 /*1006440*/  push ebx
 /*1006441*/  push esi
 /*1006442*/  push edi
 /*1006443*/  mov dword ptr ss:[ebp-18],esp
 /*1006446*/  mov dword ptr ss:[ebp-4],0
 /*100644D*/  push 2
 /*100644F*/  call dword ptr ds:[1001160]
 
 ★五、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:[ebx+4]
 /*1028DD1*/  stosd                       //找到这里
 /*1028DD2*/  jmp short PYG脱客_.01028DB8
 /*1028DD4*/  lodsd
 /*1028DD5*/  push eax
 /*1028DD6*/  push ebp
 /*1028DD7*/  call dword ptr ds:[ebx+4]
 /*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:[0]
 /*1006435*/  push eax
 /*1006436*/  mov dword ptr fs:[0],esp
 /*100643D*/  add esp,-68
 /*1006440*/  push ebx
 /*1006441*/  push esi
 /*1006442*/  push edi
 /*1006443*/  mov dword ptr ss:[ebp-18],esp
 /*1006446*/  mov dword ptr ss:[ebp-4],0
 /*100644D*/  push 2
 /*100644F*/  call dword ptr ds:[1001160]
 
 ★五(略)
 
 原来hmimys-Packer 1.30也可以这么脱~~o(∩_∩)o...
 | 
 
x本帖子中包含更多资源您需要 登录 才可以下载或查看,没有账号?加入我们 
  |