安全中国首页 > 文章中心 > 脱壳技术
 
安全中国网友投稿专用上传FTP空间:
Ftp服务器:download.anqn.com
Ftp端口:21
用户名:anqn
密 码:anqn.com
 

ollydbg1.07脱壳之函数中断技巧篇(图)

更新时间:2005-11-30 0:33:00
责任编辑:池天
热 点:
教学目的:解决在加壳软件中,不能下函数断点的问题。

教学对象:已看过我前几篇的脱壳教学的朋友。

破解目标:已用ASPR1.23RC加壳的记事本(看过我的脱壳教学第一篇应该知道),而且你已经按照我第一篇教的,来到了程序真正的入口点.     

    注:对于其它种类的壳也有效,也不一定非要ASPR1.23c的壳。

破解工具:ollydbg1.07,Lordpe

开始:

   大家在用TRW2000 or SOFTICE跟踪软件的时候,一定知道在函数上下断点。比方说:bpx getwindowtexta  这样子的。在ollydbg中也有这样的功能。一般来说我们用的是:

   鼠标右击,在弹出菜单中选search for---Name(label).如下图:

如上图按确定后,会跳出一个如下图一样的窗口:

我们就在上图一样的列表中找到我们想下断的函数,双击就可以下断点了。

但是,这样的方法只能用于未被加壳的软件中。对于加过壳的软件,在上表中,你是不可能找到你想要的函数的,如图,

就是说,你不能在函数上下断点。那么我们就真的没有办法了吗?答案是:非也非也。要知后事,请看下回分解!

     按上,大家都知道。我们一般调用的函数都在WINDOW系统中的几个DLL中,比如:getopenfilenamew在comdlg32.dll中,regqueryvalueexa 在advapi32.dll中,而一般来说,WINDOWA API的地址,在同一台机器上运行的地址是一样的,也就是说不同的程序调用同一个函数的地址是一样的。通过这个特点,我们只要在一个程序中找到函数的地址,我们就可以知道在其它的程序中,这个函数被调 用的地址了,因为地址是一样的。那么,我们怎么样才知道函数的第一个地址呢?有两种方法:

1,跟踪一个未加壳而且会调用这个函数的程序。这样通过跟踪就可以知道函数的调用地址了。但是这样有一个麻烦,那就是我们要找这样的一个程序很不容易。我们还可以用第二种方法。

2,我发现在WINDOW自带的程序(比如:记事本,画图 之类的)中有这样的一个特点:在它们的程序中可以显示的看到函数的调用地址,而不用等到程序运行初始化。这一个特点,在其它的非WINDOW自带程序上是看不到的。

   我们用一个例子来讲解一下。我们假设要在记事本程序中下GETOPENFILENAMEW这个断点,来在打开文件的时候中断。

首先,我们用Lordpe载入未加壳的记事本程序。点击 目录 ---->导入表。就会跳出下图的窗口。

[page]

如上图,我们可以找到getopenfilenamew这个函数,注意此时右下方的“始终察看FirstThunk项还没有选上。下面我们把这一项选 上,就会变成如下图一样的了。

我们可以找到对应位置的地址是7633A7FC。这个值就是函数的调用地址。在你机器 上所有的程序调用getopenfilenamew这个函数,都是这个地址。也就是说,你只要在这个地址下断点,不管什么程序,只要它调用这个函数,就会中断。

    下面,我们回到正题。我们假设已经来到了我的脱壳第一篇教学中所讲的ASPR1.23C加壳的记事本的入口点处。我们点击右键,如下图一样做:

象上面一样做了后,就会跳出一个窗口。我们输入前面得到的getopenfilename函数的地址7633A7FC。如下图:

我们按确定后,就会来到如下图处:

我们在图中黄色的一栏处下个断点。为什么不在7633A7FC处下断点呢?因为有一些加壳的软件会复制前几条指令到别的地方去,然后再跳回来,这样就不会经过7633A7FC了,所以我们要下在函数入口的下面几条指令处。如图一样。

   下完断点,如果我们想回到程序运行地址,可以按下图一样做。

象上图一样做了后,我们就会回到程序入口点了。

我们按F9运行。出现了记事本的界面。当我们按

”文件“菜单--》”打开“一个文件时,我们就会发现中断在我们下的断点处了。程序要调 用这个函数来得到打开文件的名字。

    这样,我们就完成了在加壳程序中下函数断点了。

总结:

    1,对于加其它壳的软件也可以这样下断点。

    2,如果你在记事本中找不到你想要的函数的话,你可以在别的WINDOW自带程序中找一下,如:画图等。如果还是找不到的话,你就用我说的第一种函数地址查找法吧。

 
相关文章
一日一文章
 
一日一软件
一日一动画