首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>系统安全>文章内容
用Ollydbg手脱UPX加壳的DLL
来源:vfocus.net 作者:vfocus 发布时间:2004-06-04  

用Ollydbg手脱UPX加壳的DLL


【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!

【调试环境】:WinXP、Ollydbg1.10C、WinHex、LordPE、UPXAngela、ImportREC

—————————————————————————————————
【脱壳过程】:


其实这篇东东只是《加密与解密》第2版中关于UPX脱壳的Ollydbg脱壳翻版。
Ollydbg1.10C加UPXAngela脱UPX的DLL很是方便呀,呵呵。
—————————————————————————————————
一、得到重定位表RVA和OEP


代码:--------------------------------------------------------------------------------
003B8100 807C24 08 01 cmp byte ptr ss:[esp+8],1//进入OD后停在这
003B8105 0F85 7D010000 jnz EdrLib.003B8288
--------------------------------------------------------------------------------


不用跟踪,Ctrl+S 在当前位置下搜索命令序列:

代码:--------------------------------------------------------------------------------
xchg ah,al
rol eax,10
xchg ah,al
add eax,esi
--------------------------------------------------------------------------------


找到在003B826D处,在其上mov al,byte ptr ds:[edi]的003B825E处下断,F9运行,断下


代码:--------------------------------------------------------------------------------
003B825E 8A07 mov al,byte ptr ds:[edi]
//EDI=003B7318-当前基址003B0000=00007318 ★ 这就是重定位表的RVA
003B8260 47 inc edi
003B8261 09C0 or eax,eax
003B8263 74 22 je short EdrLib.003B8287
//重定位数据处理完毕则跳转
003B8265 3C EF cmp al,0EF
003B8267 77 11 ja short EdrLib.003B827A
003B8269 01C3 add ebx,eax
003B826B 8B03 mov eax,dword ptr ds:[ebx]
003B826D 86C4 xchg ah,al//找到这里
003B826F C1C0 10 rol eax,10
003B8272 86C4 xchg ah,al
003B8274 01F0 add eax,esi
003B8276 8903 mov dword ptr ds:[ebx],eax
003B8278 EB E2 jmp short EdrLib.003B825C
003B827A 24 0F and al,0F
003B827C C1E0 10 shl eax,10
003B827F 66:8B07 mov ax,word ptr ds:[edi]
003B8282 83C7 02 add edi,2
003B8285 EB E2 jmp short EdrLib.003B8269
--------------------------------------------------------------------------------


在003B8287处下断,F9运行,断下,重定位数据处理完毕
当我们在003B8287处中断下来时,EDI=003B74EA,就是重定位表结束的地址


代码:--------------------------------------------------------------------------------
003B8287 61 popad
//此时EDI=003B74EA ★
003B8288 E9 3C8FFFFF jmp EdrLib.003B11C9
//飞向光明之点巅!
--------------------------------------------------------------------------------


代码:--------------------------------------------------------------------------------
003B11C9 55 push ebp//OEP ★
003B11CA 8BEC mov ebp,esp
003B11CC 53 push ebx
003B11CD 8B5D 08 mov ebx,dword ptr ss:[ebp+8]
003B11D0 56 push esi
003B11D1 8B75 0C mov esi,dword ptr ss:[ebp+C]
003B11D4 57 push edi
003B11D5 8B7D 10 mov edi,dword ptr ss:[ebp+10]
003B11D8 85F6 test esi,esi
003B11DA 75 09 jnz short EdrLib.003B11E5
--------------------------------------------------------------------------------


用LordPE选中Ollydbg的loaddll.exe的进程,在下面的列表里选择EdrLib.dll,然后完整脱壳,得到dumped.dll。


—————————————————————————————————
二、输入表


随便从程序找一个API调用,如:

代码:--------------------------------------------------------------------------------
003B10FD FF15 20403B00 call dword ptr ds:[3B4020]; kernel32.GetVersion
--------------------------------------------------------------------------------

在转存中跟随3B4020,上下看到许多函数地址,很明显的可以找到IAT开始和结束的地址:


代码:--------------------------------------------------------------------------------
003B3FF0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
003B4000 1D 51 C4 77 1C 3A C4 77 3E E7 C4 77 CC D2 C4 77 .Q.w.:.w>..w...w

003B40B0 CE 7C E5 77 05 74 E5 77 F9 81 E5 77 EB 41 E4 77 .|.w.t.w...w.A.w
003B40C0 66 C8 E5 77 3E 18 F6 77 00 00 00 00 00 00 00 00 f..w>..w........
--------------------------------------------------------------------------------


开始地址=003B4000
结束地址=003B40C9

运行ImportREC,注意:去掉“使用来自磁盘的PE部首”的选项!

选中Ollydbg的loaddll.exe的进程,然后点“选取DLL”,选择EdrLib.dll,填入RVA=00004000、大小=000000C8 ,点“Get Import”,得到输入表。改OEP=000011C9,FixDump!


—————————————————————————————————
三、重定位表修复 + PE修正


UPX破坏了重定位表。在第一步我们已经得到重定位表的地址了,用WinHex打开dumped_.dll,复制4000-40C9之间的16进制数值,另存为fly.bin
运行 看雪 老师写的辅助修复UPX加壳DLL重定位表的工具UPXAngela.exe,打开fly.bin,很快的提示pediy.bin文件创建成功!

从dumped_.dll找块空白代码,如自UPX1段的6000处开始。够用就行,pediy.bin中的数据长度为3B0。
用WinHex把pediy.bin中的16进制数值全部复制、写入到dumped_.dll的6000处。
用LordPE修正dumped_.dll的重定位表RVA=00006000、大小=000003B0,保存之。

再用LordPE修正dumped_.dll的基址为003B0000,OK,脱壳完成啦。
http://bbs.pediy.com/upload/files/1085925706.rar



 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·Windows 系统调用功能列表
·windows入侵提权-创建隐藏帐号(
· CC_STACKPROTECTOR防止内核stac
·Linux内核安全研究之Stack Overf
· Exploit The Linux Kernel NULL
·Kernel Locking 中文版
·IA32上Linux内核中断机制分析
·Award BIOS Rootkit,universal
·PHP代码审计
·N种内核注入DLL的思路及实现
·glibc 2.3.5 的一些新安全特性
·Struts2/XWork < 2.2.0 Remote C
  相关文章
·AIX PowerPC体系结构及其溢出技
·杀毒软件的简单实现
·phrack #62 has been released
·获得进程的EPROCESS
·Linux 2.6 对新型 CPU 快速系统
·如何实现Windows 2000系统补丁的
·缓冲区溢出漏洞发掘之整数范围限
·如何在IE浏览器中禁用 ADODB.Str
·制作RAMDISK in KERNEL的OpenBSD
·用Bochs调试NTLDR
·剖析Windows系统服务调用机制
·获取Windows 系统的内核变量
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved