1、申 请 I D:ninymay
2、个人邮箱:ninymay@yahoo.com.tw
3、原创技术文章
(我在看雪等技术论坛有精华帖,這是其中之一技术文章原文:)
说老实话,OllyDbg真的太好用了,不用安装,什么作业系统都能Run,界面又漂亮,插件多到翻...不用它还真是个笨蛋咧
但如果你是初学软件调试的新手,恐怕OllyDBG的美好时光很快就会过去了,因为它有很多事情不是您想的那么美好,在论坛扒一下文就知道,新手的汇编能力不好,当遇到加壳软件时,如果没有脱壳机或脱壳插件、脱壳脚本...,那么程序载入跟不了多久、看不了多少机码就放弃了,即使不放弃也是白做工,绕来绕去不知道要做什么?所以老觉得破解这个门难入,调试软件真不是人干的...
这时如果新人先从SoftICE下手就不一样了,它虽然不美观,而且很挑作业系统,最重要是还得一步一步去安装...虽然难装,但总会装起来,论坛上都有详细说明:
http://www.pediy.com/tools/Debuggers...CE/SoftICE.htm
http://bbs.pediy.com/showthread.php?t=85389
如果还有问题,我也会把我的安装心得再发上来...
一旦装起来,过了这个门槛,您就轻松了:
您不用先去对付复杂的PE格式、IAT表格、不用去管什么演算法、加解密法,您可以先从比较人性的Windows API下手,配合几个简单常用的机码,就能有点小成就,为什么呢?因为:
‘SoftICE可以对加壳软件直接下 Windows API断点’(比如对话框弹出用的 MessageBox...),不用先脱壳,就能断在关键要害的地方,现阶段几乎没有程式可以‘完全’不调用Windows API,只要调用 API, SoftICE就能为您拦下,而且不管再厉害的壳它总是得执执行,一旦执行起来,它自己总得先脱壳,您就等着它自投罗网就好了
接下来您就可以好好分析了,这样才有乐趣,才不会把新手给吓跑嘛>_<,而且话又说回来,如果用SoftICE中断在关键的地方都无法往下分析,那么就算脱完壳给你,还不是一样看不懂,所以尤其是当您要对付的是‘有壳的恶意程序’时,重点是要分析恶意程序,而不是脱壳,
如果可以不脱壳就分析,就不用多费一道手续了对不对
好了,废话不多说,实战才是真的,先说好了,这是给新手入门的,大牛们千万别挑毛病啊!!还有OllyDBG并没有不好,OllyDBG的死忠拥护者,千万不要找我笔战,我只是希望借SoftICE的方便,
帮更多的新手进入这个无门之门
【破解等级】入门级
【使用工具】SoftICE(Driver Studio V3.2)
【破解平台】VM6.04/XP SP2
【软件名称】RenameRegKey UPX.exe MyReg1.reg
【下载地址】RenameRegKey.rar.
RenameRegKey.rar
(179.75 KB, 下载次数: 15)
【软件简介】非常简单的程序,专供练习用,没有Anti-Debug,不会检测是否在VM下执行...
【软件特性】会对Windows 登录区(Registry)做修改的动作
【软件大小】184KB(解压后)
【保护方式】UPX 2.92b--最简单的壳,万丈高楼平地起,一步一步慢慢来
【破解目的】用SoftICE在未脱壳的情况下就可以分析程序是如何修改登录区并加以阻止,
以此了解存取登录区的相关API
【破解声明】本范例程式如果您用脱壳机脱壳后,可以再用任何加壳方式加壳回去,都可以再用本篇
介绍的方式在未脱壳的情况下成功断下喔
【破解内容】
因为是教程,所以也别让大家摸索了,更不必去放在沙盒中或什么诱捕环境中,我先告诉大家这个程式要干嘛?
请大家先用记事本把MyReg1.reg打开来看看,
它会在
HKEY_LOCAL_MACHINE\SOFTWARE\
新增一个机码名字叫做 MyReg1
并且会在HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
新增一个机码叫做 “Virus” 机值为 “Virus.exe”
我们把记事本关闭,用滑鼠双击MyReg1.reg,不要理会系统的警告,按下 “确定” 键让这两个机码写入登录区,如果您有安装防毒程式
也请让它通过,否则后面无法测试。
现在请打开登录编辑程式(RegEdit.EXE)到HKEY_LOCAL_MACHINE\SOFTWARE\
会看到左方新增了一个名叫MyReg1的机码
再到HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
会看到右方多了一行Virus REG_SZ Virus.exe
放在这个位置的程序是每次Windows开机都会执行的,所以是恶意程式兵家必争之地!
※我们这个范例程序是示范用的,所以很友善,真的恶意程式就会去删除(不是改名而已)你重要的机码,并且在启动区增加(而不是删除)一个机码,以便下次Windows启动时可以载入它的恶意程序!!!!!
但透过这个范例,就可以了解登录区的API操作手法,日后可以变通运用
一切准备就绪就先执行RenameRegKey UPX.exe这个程式
我们看到主画面有两个大Button如果按下Button1会看到一个对话框告诉你MyReg1变成MyReg2了
再到登录编辑程式,按一下F5键让它重新整理,现在再去看看HKEY_LOCAL_MACHINE\SOFTWARE\下的MyReg1不见了变成MyReg2
而按下Button2则会出现启动区键值己经清除完成的对话框,
再到HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
Virus那一行机值己经不见了对不对?
好了,现在假设你是初学者不会剥壳,但却要对付这个程序或是分析它的关键程序码在哪里要怎么做呢?
如果你叫出OllyDBG假设这个是全新的壳或是变种壳没有插件可以帮忙剥壳,那么载入RenameRegKey UPX.exe这个程式就会出现警告讯息
不理会它继续载入,由于我们已经知道它是在登录区做手脚,所以我们可以下RegOpenKeyA来做中断点,在Windows要存取登录区都必需要靠这个API来开启登录机码,如果手边有MSDN,可以查一下它的原型宣告:
LONG RegOpenKey(
HKEY hKey, // handle to open key 在本教程中用 HKEY_LOCAL_MACHINE
LPCTSTR lpSubKey, // name of subkey to open
PHKEY phkResult // handle to open key
);
实务中会有RegOpenKeyA, RegOpenKeyW, RegOpenKeyExA, RegOpenKeyExW四种 A是For ANSI, W是For Unicode版本
在本教程中用的是RegOpenKeyA
现在我们在下方的Command区输入BPX RegOpenKeyA
出现的对话框怪怪的?!不像是有效的中断点,因为若是有效的中断点应该是会出现这样的对话框才对
这样才算是承认RegOpenKeyA是有效的中断点,但现在先不管那么多了,全速执行下去看拦不拦得到就知道了!在OllyDBG全速执行后,主画面出来了,按一下Button1结果告诉你MyReg1变成MyReg2的对话框出来了,在没剥壳的情况下,OllyDBG什么也没拦到??
如果拦到的话画面应该是这样才对啦!
如果不想慢慢的从头调试起,您可以有另外一种选择
现在换SoftICE上场了,先把VMware打开,先别启动SoftICE,先到开始 程式集--> Compuware DriverStudio--> Settings 叫出SoftICE的设定程式在左边选择 SoftICE Initialzation中的Exports确认右方是不是有C:\WINDOWS\system32\advapi32.dll字样,如果没有要自己按下右边的 “Add…”键自行加入,这样才能使SoftICE认识RegOpenKeyA这个API等一下才能正确输入做为中断点。
现在可以启动SoftICE了,因为SoftICE是Ring 0层级的除错工具,为了避免等一下做任何动作都会触发SoftICE我们最好先运行 RenameRegKey UPX.exe之后才去按Ctrl+D叫出SoftICE然后输入BPX RegOpenKeyA为了保险起见可以输入BL来确认指令已经被接受
各位可以在截图中看到RenameRegKey.exe已经启动了,现在按F5让SoftICE先消失,之后就可以按下RenameRegKey.exe 中的Button1了一下子SoftICE就跳起来,它已经拦到RenameRegKey UPX.exe开启登录表的动作了,
只是现在还在Advapi32.dll的领空上,我们可以从图中下方绿色那行字:
advapi32!.text+0002B41A的字样得知,
现在我们要按一下F12让它可以回到
RenameRegKey UPX.exe的领空
现在回到RenameRegKey UPX.exe的领空,往下看就可以知道这个程式是怎么样去更改登录表或是删除登录表的:原来登录表不像档案总管那样可以直接下个Rename的指令去修改档案或目录名称,至少没有RegRenameKey这个API嘛!它必需先重新创造一个新的机码名称,然后把原来机码的内容复制一份到新的机码中,最后再把原来的机码杀掉。
考虑到新手可能对机械码的阅读不是佷熟,在这边还是稍微讲一下追踪的过程好了。我们让程式单步执行(F10)下去,要特别注意分岐点的地方,像第一个分岐点是4019D1的地方(以我的截图为准,因为不同的机器上跑这个程式地址可能会有所不同!),JZ 4019D8,SoftICE告诉我们条件
成立所以程序会跳到4019D8(SoftICE会有一个往下的小箭头提示),在这里做了最重要的一件是就是呼叫RegCreateKeyA,来建立一个名为MyReg2的机码,之后到了第二个分岐点4019EE JZ 4019FD,SoftICE同样告诉我们条件成立,所以跳到4019FD,到了4019FD就去呼叫401A38
这是RegCreateKey的原型宣告
LONG RegCreateKey
(
HKEY hKey, // handle to an open key
LPCTSTR lpSubKey, // subkey name
PHKEY phkResult // buffer for key handle
);
我们按F8跟进来看看,一开始这边看不到什么API,如果有兴趣可以自己分析看看,一直走到401A69 JNZ 401A73,SoftICE告诉我们要跳,接下来情况就明朗了,程式先叫用了RegEnumValueA去列举原来MyReg1里面的键值,然后来到 401AB8 JNZ 401ADE SoftICE回报不跳,不跳就对了,下面才是重点:
先叫用RegSetValueExA写入和MyReg1列举出来一样的键值到MyReg2里面,再呼叫
RegDeleteValueA去杀掉MyReg1里面的机值,在401AE2的地方检查MyReg1的机值都列举完了吗?如果没有就回跳到401A84重复上面的动作直到整个MyReg1的东西都写到
MyReg2里面为止。
这是RegEnumKey的原型宣告
LONG RegEnumKey(
HKEY hKey, // handle to key to query
DWORD dwIndex, // index of subkey to query
LPTSTR lpName, // buffer for subkey name
DWORD cchName // size of subkey name buffer
);
这是RegSetValueEx的原型宣告
LONG RegSetValueEx
(
HKEY hKey, // handle to key
LPCTSTR lpValueName, // value name
DWORD Reserved, // reserved
DWORD dwType, // value type
CONST BYTE *lpData, // value data
DWORD cbData // size of value data
);
这是RegDeleteValue的原型宣告
LONG RegDeleteValue
(
HKEY hKey, // handle to key
LPCTSTR lpValueName // value name
);
现在您是不是恍然大悟,Windows现成的API真的很重要对不对?熟悉了之后要分析恶意程式真的很方便,配合SoftICE就算不剥壳也可以拦截下来
并且把它分析得清清楚楚啊!
如果不放心,可以把现在看到机械码随便抄几个下来然后去HexEdit或是UltraEdit把RenameRegKey UPX.exe载入后搜寻看看,是不是根本找不到这些机械码?所以可以证明程序档案仍是未脱壳的,但一旦运行起来被SoftICE拦下来时的确是已经脱壳干净的,如果有用虚拟机码保护的,也保证一定被还原成x86的机械码了啦^^
如同一开始的时候说的,本范例程式如果您用脱壳机脱壳后,可以再用任何加壳方式加壳回去,都可以再用本篇介绍的方式在未脱壳的情况下成功断下分析喔!各位不妨试试
而再厉害的骇客不管怎么小心,都很难完全不用Windows API写出一个像样的恶意程式,顶多是用冷门的、低阶的API(例如zwOpenkey...以后有机会的话会专文介绍),并且去Hide一些知名软体的追踪,再不就是Hook住API让API先做自己想做的事情,做完了再去做原本API该做的事情,而这些都很难逃过SoftICE的法眼,经过上面的说明和示范相信读者可以知道SoftICE的的确有它独到的地方是OllyDBG所不及的,在刚入门时可以给新手一些帮助。
【后记】
挑剔的读者也许会问到如果不脱壳,那么在记忆体找到关键性的程式码要修改,但是到了档案中找又找不到,那又如何能修改呢?别担心,不脱壳不但可以分析也可以修改,这才是完美的破解方案,期待下一篇:献给新手(二)--不用脱壳就能修改加壳软件(SoftICE怀旧之旅)。
谢谢看完
4、精华帖地址
http://bbs.pediy.com/showthread.php?t=127562
5、文章出处网站登录截图
谢谢版主耐心看完{:1_914:}
|