吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 34015|回复: 107
收起左侧

[原创] Ollydbg手脱bass.dll(2.4.12)并修复IAT

  [复制链接]
jackyxinli 发表于 2016-4-21 11:53
本帖最后由 jackyxinli 于 2016-4-21 11:57 编辑

多年以前用delphi和bass音频库开发了一个简单的MP3播放器,为bass音频库的强大功能所吸引,前几年知道IDA Pro可以逆向分析二进制代码,也想试试。从bass网站(http://www.un4seen.com)上下载的dll在IDA Pro中打开却是一样也看不懂的二进制代码,更别提逆向分析了。无独有偶,在bing里搜索时发现已经有人在做同样的事情(http://bbs.pediy.com/showthread.php?p=1259424),好不容易联系上作者,作者说帮脱壳可以,要收费。一向喜好帮助人的我被强烈地刺激了,于是我决定自己做这件事情。
万事开头难,对脱壳、反编译汇编代码阅读一窍不通的我真的知道做这件事情的不易。于是我从亚马逊上买了5本关于软件加密解密、黑客编程、IDA Pro手册的书,认真研读了半个月时间,逐步有了一些理论知识的积累。同时,我在看雪安全论坛(http://bbs.pediy.com)和吾爱破解论坛(http://www.52pojie.cn)上注册了会员,发现这个论坛上有很多的脱壳教程,通过学习了解了脱壳需要的一些知识,包括ESP定律。此定律也将在bass.dll(2.4.12)脱壳时使用。
废话少说,先从bass网站上下载最新版本(2.4.12)的库,用PEiD 0.95无法识别。我随即在Petite(http://www.un4seen.com/petite)上发现Petite加壳软件的版本是2.4。而PEiD 0.95从2011年停止更新了,怪不得无法识别。
本文脱壳使用的软件有:
本文脱壳环境:VirtualBox 5.0.18,WindowsXP SP3。

一、寻找OEP
有过脱壳经历的朋友都知道加壳后的程序入口点(EP:EntryPoint)并不是最初的入口点了,而脱壳的第一步就是要找到真实的入口点(OEP:Original Entry Point)。启动Ollydbg,打开解压出来的bass.dll,调试器会停留在1004F004的地址上,观察寄存器EAX的值(10000000)并记下,对于有朋友在Windows 7下进行脱壳的,地址会随着每次在ollydbg里打开bass.dll发生变化,这也是我选择在Windows XP里脱壳的原因。如下图所示:
image001.png
image002.png

很快我们就能在反汇编代码窗口里发现1004F009的指令是pushad。根据ESP定律,在这里就要注意了,按两次F8执行到1004F010,这时需要在Ollydbg里跟踪ESP的值(0012F868),如下图所示:
image003.png
image004.png

在寄存器ESP上点击右键,选择在数据窗口中跟随,如下图所示:
image005.png

在左下角的数据窗口中选中0012F868内存对应的值,如下图:
image006.png

设置完硬件断点后,按Shift+F9执行直到ollydbg停住,如下图:
image007.png

至此,我们发现了与pushad指令配对的popad,也在下方发现了jmp指令,脱壳老手看到这个都会会心的笑了。按F8执行到00B202BF,观察寄存器EDX的值(10026916),如下图所示:
image008.png

到这里,每个指令的执行都要注意,我是随时用笔和纸将寄存器的值记下来(毕竟是第一次嘛),执行到00B202C8时是一个跳转(jmp)指令,这时按F7跟进,如下图所示: image009.png
执行到7C809B94时,接连按F8一直到执行完7C809B9A,就会跳转到一个地址10026916,也就是之前我们记下来的EDX的值,如下图所示:
image010.png

这个地址就是我们要找的真实入口点OEP。


二、修复IAT
首先用ImportREConstructor打开Ollydbg的loaddll.exe进程,如下图:
image011.png
点击Pick DLL按钮,在列表中选择bass.dll,再点OK,如下图:
image012.png
image013.png

这时你会发现左下角的OEP显示的是0004F004,这个是不对的,上面我们找到的OEP是10026916,减去最初打开bass.dll时EAX的值(10000000),可以得到OEP的偏移量为00026916,将这个值填入OEP文本框中,点击IAT AutoSearch按钮,会有提示,如下图所示:
image014.png

点击确定,ImportREConstructor就帮我们找到IAT在内存中的偏移地址及IAT的大小了,如下图所示:
image015.png

点击Get Imports按钮获取bass.dll引用的系统API函数,再点击Show Invalid按钮显示无效的IAT引用函数地址,如下图所示:
image016.png

这时,我们将看到并不是所有在IAT里引用的API函数都被识别出来了,在被选中的引用项上点右键选择Trace Level1/2/3,都不能找出引用的API函数。这时,我想未能被识别出来的函数应该是被某种方法加密了。遇到这种情况,只能手动修复IAT了。
根据ImportREConstructor帮我们找到IAT偏移量计算出IAT在内存中的地址为10026FFC,转到Ollydbg的反汇编窗口,按Ctrl+G,在出现的对话框中输入10026FFC,然后确定,在地址10026FFC上点击右键选择菜单“数据窗口中跟随”->“选择”,如下图所示:
image017.png
image018.png
仔细观察数据窗口,可以看到很多1004开头的地址,初步判断这些地址通过什么方法计算出引用的API函数地址,如下图所示:
image019.png
为了验证我的判断,在反汇编窗口中按Ctrl+G,在弹出窗口中输入1004F058,跳转到汇编代码,如下图所示:
image020.png
可以看到先将值0x4BE400B1压栈,然后用rol指令对这个值执行左移操作,于是我在VS2008里新建一个工程,将代码复制到源代码里,如下图所示:
image021.png
按F10开始单步执行,执行完rol指令,在监视窗口里按下图输入:
image022.png

貌似计算出来的这个地址是API函数,于是按照x86小端存储的顺序,倒置为2916807c,在Ollydbg的数据窗口中双击修改,修改前值为1004F058,修改后如下图所示:
image023.png

再回到ImportREConstructor窗口,点击Get Imports按钮,可以看到原来未能识别的引用API函数被认出来了,为DeviceIoControl。哇!!成功了,看来我的判断是正确的,剩下的未能识别的引用的系统API函数都按照此方法进行修改。修复好的IAT如下图所示:
image024.png

再回到ImportREConstructor窗口,点击Get Imports按钮,可以看到原来未被认出的API函数全部都认出来了。如下图所示:
image025.png


三、转储内存到磁盘文件在Ollydbg的反汇编窗口,按Ctrl+G,输入10026916来到OEP,然后点击鼠标右键,选择OllyDump脱壳调试进程,按照下图设置:
image026.png
点击脱壳,将文件保存为bass.dump.dll到磁盘上。接着使用ImportREConstructor修复转储的dll文件,点击Options按钮,按照下图设置:
image027.png
确定后点击Fix Dump按钮,修改刚才转储的bass.dump.dll文件,会在磁盘上生成bass.dump_.dll文件,使用eXescope可以正常查看导入的系统API函数。如下图所示: image028.png
四、压缩脱壳文件启动程序LordPE,如下图所示:
image029.png
点击重建PE按钮,选择文件bass.dump_.dll,压缩后文件大小从324K变为192K。
五、验证脱壳有效性解压bass音频库中C\bin下的spectrum.exe文件到脱壳dll文件所在目录,重命名bass.dump_.dll为bass.dll,双击运行spectrum.exe,程序没有崩溃,出现选择播放文件窗口,如下图所示:
image031.png

点击打开,开始播放,如下图所示:
image033.png

image034.png

image035.png

image036.png

可以正常播放,至此,脱壳成功!在IDA Pro中打开的效果如下图:
image037.png
脱壳文件下载: bass_2.4.12_已脱壳.zip (112.35 KB, 下载次数: 181)
image030.jpg
image032.jpg

免费评分

参与人数 50吾爱币 +1 热心值 +50 收起 理由
Alex_vk + 1 + 1 谢谢@Thanks!
qwerttqqaz + 1 已答复!
我乃常山赵子龙 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
hlrlqy + 1 谢谢@Thanks!
wnagzihxain + 1 研究的不错,赞
Lnairan + 1 谢谢@Thanks!
yywyf0001 + 1 鼓励转贴优秀软件安全工具和文档!
q74330 + 1 我很赞同!
Tortoise + 1 谢谢@Thanks!
风中风 + 1 用心讨论,共获提升!
yangqyloki + 1 谢谢@Thanks!
翼影 + 1 用心讨论,共获提升!
yunzl + 1 --------
yuuding + 1 热心回复!
tusdasa翼 + 1 我很赞同!
Rainy + 1 已经处理,感谢您对吾爱破解论坛的支持!
S.L.Kagura + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
我是哥布林 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
fa00x + 1 热心回复!
东吴周郎 + 1 谢谢@Thanks!
netle8 + 1 热心回复!
heb123 + 1 谢谢@Thanks!
guan911520 + 1 看不懂/膜拜
北鱼何为 + 1 已答复!
125733578 + 1 鼓励转贴优秀软件安全工具和文档!
speedboy + 1 谢谢@Thanks!
LOVE_TT + 1 很不错继续努力!
祈祷灬烦恼 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
hcloveld + 1 看着看着就看不懂啊
jacky520510 + 1 我很赞同!
sisco + 1 我很赞同!
FoodieOnTheWay + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
mancong122 + 1 请收下的我的膝盖.....
howsk + 1 文章言简意赅!
wshq + 1 谢谢@Thanks!
ieiqp + 1 手修 IAT,膜拜!
myouter + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
catty870807 + 1 为这份研究精神点个赞
0000000 + 1 很精彩 虽然bass比较专业的东西. !
yeyulang + 1 用心讨论,共获提升!
如果我徘徊 + 1 我很赞同!
gmh5225 + 1 已答复!
Terrorblade + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
2864095098 + 1 热心回复!
Dd_nirvana + 1 谢谢@Thanks!
逍遥枷锁 + 1 谢谢@Thanks!
ZF0806 + 1 用心讨论,共获提升!
爱飞的猫 + 1 手修 IAT,不得不服
krito + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩.
Sound + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩.

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| jackyxinli 发表于 2016-4-23 15:01
hahacker 发表于 2016-4-23 01:37
弱弱的问下Sound大牛,在这个贴子中,为什么没有修复DLL的重定位功能呢? 一般不是说,不修复的话,就运 ...

重定位的修复,我还没接触到。也许我运气好,正好这个壳没有搞DLL重定位,我只是修复IAT就可以了,呵呵。
朱朱你堕落了 发表于 2016-4-23 01:37
Sound 发表于 2016-4-22 00:44
除技术讨论,其他回帖请使用点评功能或者论坛短消息

弱弱的问下Sound大牛,在这个贴子中,为什么没有修复DLL的重定位功能呢? 一般不是说,不修复的话,就运行不了吗? 谢谢指点。

点评

因为壳没有对DLL进行重定位处理!  发表于 2016-4-24 18:27
榻榻米 发表于 2016-4-21 14:56
头像被屏蔽
吾爱我世界 发表于 2016-4-21 15:10
厉害 这么快就成大牛了

点评

除技术讨论,其他回帖请使用点评功能或者论坛短消息  发表于 2016-4-22 00:44
 楼主| jackyxinli 发表于 2016-4-21 16:25
吾爱我世界 发表于 2016-4-21 15:10
厉害 这么快就成大牛了

毛笑我了,我也是按照大牛们写的心得做的。

点评

除技术讨论,其他回帖请使用点评功能或者论坛短消息  发表于 2016-4-22 00:44
 楼主| jackyxinli 发表于 2016-4-21 16:28
榻榻米 发表于 2016-4-21 14:56
半个月就这么厉害了  可喜可贺啊。。

很多操作是照葫芦画瓢呢,IAT的修复都是参照看雪论坛上的一个大牛翻译的文件做的。
别人都叫我老木 发表于 2016-4-21 16:54
看头像就觉得 楼主将来必成大器,提前和楼主认识一下。
别人都叫我老木 发表于 2016-4-21 17:02
对了 楼主 如何在VC98里面还原OD代码然后看返回值。 求解答。
mrzcpo 发表于 2016-4-21 17:49
谢谢LZ,LZ精神可嘉  ,继续加油
Sound 发表于 2016-4-22 00:37
很不错,尤其是后面对IAT的处理.

新人贴加精鼓励。
Sound 发表于 2016-4-22 00:44
jackyxinli 发表于 2016-4-21 16:25
毛笑我了,我也是按照大牛们写的心得做的。

除技术讨论,其他回帖请使用点评功能或者论坛短消息
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 10:30

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表