【原创】献给新手(一)--不用脱壳就能调试加壳软件(SoftICE还旧之旅)

於版,我己不能在新人交流投稿发贴,但贴是要新手入看的,因是自己加入论坛,搞不清楚,所以就先到了『求助问答区』,但因不是真的悬赏贴,所以发得心理怕怕的,在发
『伴你成长』园地,就快把之前的贴移到,不是要灌水重发贴,先前不懂版的地方,版主及各位雪友多多原!!

【作者】ninymay
【说明】我是,了一篇於OCX控件的破解文章
(http://bbs.pediy.com/showthread.php?p=905878#post905878)

除了得版主了邀请码外,也勾起大家的,坐光机回到SoftICE的年代,雪友whypro希望我再多篇,所以我就抱著回大家的心了,我水平不高,的不好多多包涵

老,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
【软件简介】非常的程序,供用,有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 DriverStudioSettings 叫出SoftICE的定程式在左 SoftICE Initialzation中的Exports右方是不是有C:\WINDOWS\system32\advapi32.dll字,如果有要自己按下右的 “Add…”自行加入,才能使SoftICERegOpenKeyAAPI等一下才能正入做中。



在可以SoftICE了,因SoftICE是Ring 0的除工具,了避免等一下做任何作都SoftICE我最好先行 RenameRegKey UPX.exe之後才去按Ctrl+D叫出SoftICE然後入BPX RegOpenKeyA了保起可以入BL指令已被接受



各位可以在截中看到RenameRegKey.exe已了,在按F5SoftICE先消失,之後就可以按下RenameRegKey.exe 中的Button1了一下子SoftICE就跳起,它已到RenameRegKey UPX.exe登表的作了,



只是在在Advapi32.dll的空上,我可以中下方色那行字:
advapi32!.text+0002B41A的字得知,
在我要按一下F12它可以回到
RenameRegKey UPX.exe的空



在回到RenameRegKey UPX.exe的空,往下看就可以知道程式是怎去更改登表或是除登表的:原登表不像案管那可以直接下Rename的指令去修改案或目名,至少有RegRenameKeyAPI嘛!它必需先重新造一新的名,然後把原的容一份到新的中,最後再把原的掉。

考到新手可能械的不是熟,在是稍微一下追的程好了。我程式步行(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住APIAPI先做自己想做的事情,做完了再去做原本API做的事情,而些都很逃SoftICE的法眼,上面的明和示相信者可以知道SoftICE的的有它到的地方是OllyDBG所不及的,在入可以新手一些助。


【後】
挑剔的者也到如果不壳,那在找到性的程式要修改,但是到了案中找又找不到,那又如何能修改呢?心,不壳不但可以分析也可以修改,才是完美的破解方案,期待下一篇:新手(二)--不用脱壳就能修改加壳软件(SoftICE之旅)。

看完

【原创】献新手(二)--不用脱壳就能修改加壳软件(SoftICE还旧之旅)

抱歉各位久等了,新年期,路不太,看雪的老不太起,所以至今日才第二篇,大家

在始第二篇的正:
挑剔的者也到如果不壳,那在找到性的程式要修改,但是到了案中找又找不到,那又如何能修改呢?心,不壳不但可以分析也可以修改,才是完美的破解方案。

,我回到上一篇:献给新手(一)--不用脱壳就能调试加壳软件(SoftICE还旧之旅)
http://bbs.pediy.com/showthread.php?t=127562
RegOpenKeyA被中下的地方,但在下去之前忘了把才被程式改的MyReg2自己在登程式中改回MyReg1

4019C5  E8A6F90500    CALL  ADVAPI32!RegOpenKeyA
4019CA  8945EC        MOV  [EBP-14],EAX  <--程式在
4019CD  837DEC00      CMP  DWORT PTR [EBP-14],00
4019D1  7405          JZ 004019D8  <--注意行
…       …            …
…       …            …

正常行到SoftICE回要跳(JUMP)
各位可以看把4019D1的7405改成7505(用E EIP指令下去改)
SoftICE就回不跳(NO JUMP)



在按F5SoftICE全速行,然程式是提示MyReg1已改成MyReg2了,但是在登程式中按下F5重新整理後MyReg1是MyReg1有被改名才!!

因一旦在4019D1有跳,往下行到了4019D6的械是跳 JMP  401A33,下副程式全束了,根本有去行RegCreateKeyA
更遑後面的RegSetValueExA和RegDeleteValueA,等於程式就失去作用了!

但是如果抄下83 7D EC 00 74 05些械要去RenameRegKey UPX.exe中用HexEdit或UltraEdit中去找又找不到,那程序怎改呢?

心您可以使用d UP 2
dup2.beta.rar
我用的是V2.19 Beta9,如果要最新版本可以考:
http://bbs.pediy.com/showthread.php?p=909414#post909414
生一Loader案,什叫Loader而不叫Patch呢?因程序被加了壳,在有行前有法修改,所以Patch用武之地,就要先用Loader程式入有壳的那程序,全程加以控,直到我要修改的料出加以修改止,就可以不壳也能到修改程序的目的了^^



我要 “New Project”在出的表中意填上些料,接著 “Add”



在出的中 “[Search & Replace Patch]”

回到主中多了一[Search & Replace Patch]我用滑鼠它之後再按右的 “Edit”,


在右上方的 “…”按下後我才追的RenameRegKey UPX.exe
另外在中央的空白域按下滑鼠右



出一副在 “Add”



接著出一Edit Search and Replace Pattern的框,我在Search Pattern中入才想要入HexEdit中找的十六位字串 83 7D EC 00 74 05(每字和要有空格)Replace Pattern入83 7D EC 00 75 05由於只有74改75所以就成面上看到的?? ?? ?? ?? 75 ?? 按下 “Save”



回到Search and Replace Patch面我得要在下方的Target is a compressed PE File前面打勾,之後按下 “Save”。



在最後回到主,按下右的 “Create Loader” “simple loader” 按下 “OK” 即可生一Loader。

前得按一下 “Save Project” 整流程存下。
由於我不得程式在d UP2的掌握下行的位址,所以第一次行d UP2先把我它的料搜一遍。



如果找到了就有一框告我



且在目下生一snr_offsets.ldr,但由於第一次行只是去搜有做即的Patch工作,所以如果你用登程式按F5更新後去看,MyReg1是被改成MyReg2的,我先手把它改回,在再行一次Loader就不有那框出了,且MyReg1也不被改成MyReg2了,至此我真的有脱壳就完成了分析和破解意程式的任了。

是成品以及本:
Loader.rar

是不是使用SoftICE不壳就能分析或破解程序比有信心了,下一篇我用低核心程序(.sys)示SoftICE,OllyDBG它也是不能直接分析,用了OllyDBG的人,只能再去加WinDBG或其他支援Ring0的件,但如果你一始碰的就是SoftICE,那就不用再一工具了,既可以分析EXE也可以分析SYS喔

是那句老,本篇是完全新手看的,不是指加入看雪院的新手,而是完全接OllyDBG或SoftICE的新手,所以容很,用SoftICE可以新手不太需要看的机,他一始就可以生趣,不久久都入不了,有OllyDBG不好的意思,不要才好

【原创】献给新手(三)--Windows还有更低阶的API--(SoftICE怀旧之旅)


    前面帖所介绍的全部都是属于User端(Ring 3)层级的API,但是如果您对付的是恶意程式
(病毒、木马及后门程式等…)那么这些骇客级的玩家就不会用这么高阶的API了,
他们会去用非常低阶非常冷门的API,也就是Ring 0层级的API,对于没写过程序的读者,根本不会听过这些API的名字,而对于只是用VC、BCB或是VB、Delphi写应用程序的
读者也不会用到这样的API,只有写低阶核心程序或是驱动程序的读者才会‘稍微’去涉猎这些API,为什么说是稍微呢?因为这些底层的API实在太多了,而且是层层呼叫的,
举例来说吧!我们之前用Ring 3层级的RegOpenKeyA这个API可以开启Windows的档(Registry),但是有心的读者可以在SoftICE中继续往下Trace看看,就会发现它会去呼叫
NtOpenKey最后实际去执行的则是ZwOpenKey这个API,如果您只知道RegOpenKeyA这个API那么您永远也拦不到用ZwOpenKey写的恶意程序。

此外,有些软件狗(KeyPro)例如早期的彩虹狗(Rainbow Sentinel SuperPro)--后来公司被并购现在叫赛孚耐(SafeNet)狗,也是用低阶核心驱动来做保护的,了解驱动可以帮我们
对付更多的保护手法喔

各位读者您可以在SoftICE中输入NTCALL指令,您就会看到一堆Nt开头的API名称,当然还有其他字样的低阶API名称,这下总算见识到了,为什么别人能成为黑客而我们不能,
或是别人能解开的软件而我们不能,秘密就在这里…



但是因为NtOpenKey是未公开的API所以并没有导出,因此您可能看了半天却找不到NtOpenKey这个API,各位可以上网找一下冰刃(IceSword)这个软体
http://www.antirootkit.com/software/IceSword.htm
安装后按左边长条状的功能键再按SSDT就可以看到完整导出的低阶API名称



在右边名称栏位最下方就可以看到NtOpenKey这个API的名称。
但是还是看不到ZwOpenKey这个API名称,而且也无从得知NtOpenKey的用法,
这时您需要安装微软的Windows Driver Kit(WDK)
https://www.microsoft.com/taiwan/whd...dk/WDKpkg.mspx



在这个网页中点选中间的 “Microsoft Download Center” 就会进入真正的下载页面:



下载后可以执行KitSetup.exe进行安装,
安装时千万注意不要选Device Simulation Framework(DSF)选项,否则安装完成后Windows将会无法重启,
系统会出现system32\drivers\dsfksvcs.sys损坏的错误讯息!!

重开机成功之后,您可以在Windows Driver Kits-->Help-->WDK Documentation中找到所有有关低阶API的使用讯息,



例如我们打入NtOpenKey就会告诉我门微软不主张我们在写程式时叫用这个API



那我改键入ZwOpenKey



这时就会有完整的呼叫方式和回传的介绍出现了。

现在我们来实作看看,在我上传的附件Ring0 API Test.rar
面有一个KmdManager.exe(Kernel-Mode Driver Manager)执行这个程序按右上方的
 “…” 按键载入zwdemo first.sys



这就是低阶核心程序以.sys的型态出现,各位可以叫出OllyDBG试试看无论您用开启档案或是附加档案的方式都不支援这种类型的,但我们用SoftICE却很容易来分析和破解它!

KmdManager是一个可以模拟低阶核心程式执行的小程式,因为一般这种类型的程式都是被放入Windows Registry区中的
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 以及
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services
… … …
这几个机码之中,在Windows启动的时候就会被执行,不是只有之前介的
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run而已


这个是CurrentControlSet中会在开机时被执行的sys


这个是ControlSet002中的sys

而平常的时候是不会主动被执行的,这就是这种类型程序的可怕之处,一般程度的人很难发现它的存在,也很难去分析它到底做了什么事?
所以是最常被骇客们拿来写恶意程式的管道!而有了KmdManager.exe就可以把.sys程式当成.exe程式来执行和分析。

我们把Windows中的RegEdit.exe(登录编辑程式)打开并且让它显示
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
这个机码区域,这个区域里的所有程式也是Windows启动时会全部被载入执行程式!!所以也是兵家必争之地,这个地方被植入程式的名称也就保证
以后这个作业统每次重新启动时都一定会被执行。

我们先按一下KmdManager.exe中的Register按键,再按Run按键,经过上述的动作之后,就等于zwdemo first.sys这个低阶核心程式在开机时被完整执行了,
现在我们到下方的注册表编辑器,我们按一下 检视-->重新整理 键或是直接按下F5键,这时您会看到在Run的机码区中多了一行名称为Test资料为C:\A.txt的机码在上面,
因为我们只是拿来做教学用,否则就可以放入一个真正的exe档,那么以后这台电脑的这个操作系统每次开机时这个程式都会被执行。



知道了zwdemo first.sys的执行模式后,我们先把Test这一行的键值先删掉,
并且在KmdManager.exe中按下Stop
现在叫出SoftICE键入BPX ZwOpenKey 没有任何讯息回应就表示SoftICE接受了这个指令,如果不放心可以再输入BL 
SoftICE会回应BPX ntoskrnl!ZwOpenKey
表示确实在ZwOpenKey设下了中断点,而这个ZwOpenKey是属于ntoskrnl.exe这个NT系统核心程式中的一个API。



现在回到Windows桌面再按KmdManager.exe 中的Run让zwdemo first.sys再执行一次,马上您就会发现SoftICE跳出来了,在程式执行到ZwOpenKey的时候就被中断了



大约按32下F12就可以回到zwdemo first.sys的领空(注意:不可以先下bd指令否则无去回到zwdemo first.sys的领空)



现在您可以看到主程式用ZwOpenKey开启档之后在下方不远处我们可以看到程式又叫用了ZwSetValueKey来写入关键的机码,最后叫用ZwClose来关闭,
如果不想按那么多下F12就可以迅速来到程式的关键区,那么在SoftICE中下
BPX ZwSetValueKey会比较快!而读者也要养成习惯赶快用WDK中的Help文件查一下ZwSetValueKey的用法,这样对低阶API才会愈来愈了解。



如果只是想要了解程式的内容,那么断点下在ZwSetValueKey是很好的地方,但是如果想要破解这个程式想要让这个程式没有作用那么下在ZwOpenKey会是比较好的决定,
因为接下来有一个CMP比较的指令,接着是JNZ指令,



让程式执行到这里您会发现程式不会跳开,会继续往下执行,所以只要在这个地方让程式跳开不会执行到ZwSetValueKey这个API自然也就不会写东西到Run的位置了。

经由SoftICE的帮助我们是不是很容易就可以找出 .SYS 类型的恶意程序攻击的内容?SoftICE只是一个工具,重点是您要对低阶核心的API要熟练,
除了Nt和Zw开头的低阶核心API,还有以Ex、Rtl、Ke、Ps、Io、Ndis、Wdf有心要深入的读者可以在WDK的Help文件中多多查阅自然就会认识愈来愈多的低阶核心API了。

好消息是市面上的任何加壳工具,对.sys档都不能工作,----也就是说.SYS档都不会是有壳的----
顶多是让你在重点程序码的地方做片断的保护:
(因为有许多雪友会误会说市面上很多软件都可以给.SYS加壳,比如说VMP...,我特别加以说明,
 不然我这个版一定会被塞爆)

对EXE档的加壳,是可以把 "整个" EXE档重新包装,改变了PE档头,
因此对使用OD的入门者,如果没有脱壳工具或脚本,就必需从头一行一行追起...
但对SYS档,只能利用标记在机码上做段落记号,VMP再对那个 "部份" 做打乱的动作,
不是把整个SYS加壳!!---->不是你用VMP把SYS档载入,按个按键就可以把SYS档整个加壳的

也因为这样,PE档头就没被破坏,就可以观察输入表中到底叫用了哪些低阶API了

这个对IDA Pro的静分析比较能防,对SoftICE来说,尤其是我现在发上来的例子,
除非你整个写入登录档的过程都不用任何API,否则你用VMP在所谓"关键段落"
打得再乱再多虚拟码也没有用,最后你一定要解码为正确的x86机码(注)并且和Windows
底层API打交道,这时难逃SoftICE的监督,在写入机码的相关位置,一定会被拦下做分析的

注:接受网友的指正,为避免让雪友误会,特更正如下,被vmp加壳后的sys,用SoftICE下
低阶API断点,仍可成功拦下,这时你看到的是x86机码没错,但如果按F12想要回去程序领空,
对不起,就没有x86机码了,只有vmp的虚拟码,因此只能分析,无法做更改...
(想要对付vmp,看雪有许多牛人的帖子,但我想这不是刚入门的新手该碰的啦!!)

我这里有一个把zwOpenKey关键呼叫加上vmp保护的例子,
zwdemo first.vmp.rar
有经验的老手,用IDA Pro分析就知道现在在105BF处,已经看不到zwOpenKey的call了,
可是因为vmp不像exe的加壳法把整个exe档都加壳,所PE档头并没被破坏,我们用LordPE
仍可以看见输入表中有叫用zwOpenKey这个API,




当然就可以在SoftICE中下这个断点,
因此我们可以用zwOpenKey断下,对以观察API为主的初学者来说,我说.SYS是没有被加壳的,
原因在此,却没想到引来一堆前辈指正,希望现在你们都了解我在说什么了才好

断下后,记得要取消断点(BD *),然后一路按F12,可以看到我丢出的
DebugView的字串,可以一路看到叫用的zw API群,对分析这个恶意程序仍是有帮助的

但由于我们这帖是给新人看的,不用讲的那么深入,也没有要还原vmp保护后的代码,希望前辈们
不要再在这个地方多作文章了,我知道你们是为我好,怕我不知道有可以对sys加壳的软件,也
怕我不知道vmp打乱后会变成进入虚拟机器中执行的虚拟码,谢谢你们的关心和教导
我也会努力加强我的简中表达能力的喔

所以如果你是初学者,不先学Windows API,一味的学脱壳,你只能对
付EXE档,对SYS的世界你将一无所知,这就是我这几帖的目的,如果你是完完全全的初学者,不要先去碰脱壳--即使有壳也可以用SoftICE先闪过,而要把重心放在Windows API
上,无论是Ring 3或Ring 0层级的API,而SoftICE让你学一个调试工具,就可以同时一探两个层级的API,你的入门会变得又快又有效率啦

最后我用这一句名言来结尾:

‘加壳与脱壳’坛主 kanxue在加密与解密 脱壳入门初级教学 
http://bbs.pediy.com/showthread.php?t=20366 中说道:
不建议那些加解密刚入门,调试一个普通软件都费劲的朋友来脱壳。至少要等你有一定的调试技能再来学脱壳。

各位初学者不晓得是不是认同呢

献给新手(四)--把SoftICE装在VM下(图解版)--SoftICE怀旧之旅

面对OllyDBG的容易使用,根本不用安装,SoftICE的安装不易,就成了现没什么人要用的最大致命伤!!如果介绍了半天SoftICE对新手入门的好处,但是新手怎么样都没办法把SoftICE安装成功,那前面的帖,不就白写了,但看雪学院的前辈有很多安装SoftICE的帖子,我这么写并不是说他们写的不好,也没有要灌水的意思,而是高手回头写这些给新手看的帖子时,往往图比较少(甚至于没有图!!),更不会在他们认为"简单"但新人却很可能 "搞很久都搞不定" 的事情上一步步的详解,所以会变成好像都看懂了,但实作的时候,还是差一步做不出来,...也许我比较笨,至少我做新手时,就常常拿着看雪前辈
的帖子,看的时候很高兴,但动手做的时候问题一堆,可是又不好意思问,因为要大牛回答我们这种新手级的问题,实在很不好意思啊

为了不要再让这种遗憾发生,自己稍微入门了以后,写帖子时就会比较 "嗦" ,讲的比较细, 而且会大量抓图做示范,也会常回来巡一下自己的版子,看看有没有雪友有问题要解决(反正失业在家闲着也是闲着,哈!),在台湾有同好想上看雪学院时,我也会先劝他们把基本功练好再上来,免得问一些没有营养的问题,浪费前辈们的时间啊,不过人之患在好为人师嘛!一个刚入门没多久的人就在这里长篇大论,
典型就 "半桶水最会响" 的人啦,就怕热心有余,实力不足就是了.

这帖史上最大灌水帖--SoftICE安装篇,就是这样来的 ~~~

由于电脑硬体不断的进步,而微软的作业系统也不断的更新,要想在不同的作业系统下使用SoftICE最好的方法就是在读者现在所使用的作业系统中安装VMware--
VMware Workstation (www.vmware.com
这样微软作业系统再怎么更新,都可以用SoftICE,



建议雪友们购买21以上解析度可达1920x1200以上的荧幕,甚至于是更高的解析度(例如DELL的3008WFP是30机种解析度可达2560x1600),这样就程式执行的主画面就不会被SoftICE弹出的视窗遮住了,而用其他的辅助工具例如LordPE等程序也不会被遮住画面而要切来切去,
另外像SAMSUNG的2343BWXPLUS 解析度也有到2048x1152价格也不高,是可以考虑做为VMware + SoftICE用的荧幕喔!



请安装VMware 6.0以上版本,然后在VM里安装一个全新的Windows XP并且升级到SP2,注意不要用SP3最重要的是把XP中的自动更新关掉!!安装时要记得是装在哪一个子目录,为接下来讲解方便,我们假设你把XP SP2装在 C:\PureXP 里,而VMware的主程式是放在 C:\Program Files\VMware\VMware Workstation 里

现在把Driver Studio 3.2中的SoftICE安装完成(只要装SoftICE就好,其他的功能不必装)。
注:Driver Studio 3.2由于原厂已经宣布不再支援,可以到这里下载:
http://www.pediy.com/tools/Debuggers...CE/SoftICE.htm
另外可以一并下载 “Drierstudio3.2 for winxp,win2003 完全补丁”<== 但是先不要安装

下载回来的档案名称为DS3.2.1.ZIP,但这个档案先备而不用,如果您的系统在VM下的XP SP2使用SoftICE一切顺利,我发上来的的例子也都可以正常执行,那您就不用使用这个补丁,如果不能顺利执行,或是Windows本身自带的记事本或小算盘程式用Symbol Loader无法载入让程式停在入口处才要使用这个补丁!

在启动VM中的XP SP2前请再做好下列的检查,首先不要使用双核心,使用单一CPU才可以(即Processors的值为1),记忆体(Memory)的值也不要太小在我的VM中存配置了192MB而硬(Hard Disk)也配置了8GB



另外在你安装XP SP2的目录里(我们这帖的例子是放在 C:\PureXP),打开其副档名为vmx的文件,



在其未端添加:
Vmmouse.present = “FALSE”
svga.maxFullscreenRefreshTick = "5" 



Vmmouse.present = “FALSE”是为了让SoftICE启动后,不会出现两个滑鼠指标,一个是系统的箭头指标,一个是方型SoftICE的指标.

svga.maxFullscreenRefreshTick = "5" 这行不加SoftICE用Crtl-D叫出来以后会看不到,以为SoftICE死当了,其实是有在正常工作的!!


现在可以按下绿色的箭头(Powered On)让VM中的XP SP2启动了。

但是还先别忙着进SoftICE先再确认下面的动作是否有确实做好:
开始-->程式集-->Compuware DriverStudio-->Settings
General中的Inilialization string:加上 LINE 45;WD 4;WC 30;SET FONT 2;FAULTS OFF;CODE ON;X;



Exports要加上的dll整理如下:
    advapi32.dll, comctl32.dll, comdlg32.dll,  
    msvbvm60.dll , msvcrt.dll , ole32.dll,
    oleaut32.dll, shell32.dll, version.dll, ws2_32.dll
而画面中示范的ntkrnlpa.exe则可放可不放因为那是给双核心用的



现在在VM中使用SoftICE的前置作业已经全部完成,接下来就可以来练习了。



注:要使用SoftICE的VMware系统内其XP SP2千万不要安装虚拟光装置软体,例如:酒精120%(Alcohol 120%)、Daemon Tools等…

一切都安装好以后,先用我这个软件 Message Box.exe 试一下,

Message Box.rar

测试一: 用Symbol Loader
        1.先运行 开始->程式集-->Compuware->Debug-->Start SoftICE
          正常的话会出现一个SoftICE的窗口,然后闪一下就消失了,这时你按下Ctrl+D,
          SoftICE主画面就应该要在正中间出现才对,而滑鼠光标也会变成方型.
          再按一次Ctrl+D SoftICE就会消失

        2. 开始->程式集-->Compuware->Debug-->Symbol Loader
           注意下方的灯号应为绿色,显示 SoftICE is active


(这里要人家看灯号颜色,如果再放黑白图片,雪友会杀了我!!!)

           按上方功能表 File --> Open 去载入 Message Box.exe
           再选 Module --> Load
           会出现 "An error occured during symbol translation/load. Load executable
           ayway?" 对话框
           按下 "是(Y)"
           SoftICE就应该会正常弹出来了,


     
           虽然中间的机码都是invalid,但是下方绿色字样已经出现 Message Box +0FFE 字样,表
           示是在Message Box.exe程序领空上了,
           我们再按一下F8键,就可以看到有意义的机码了



           以上这个动作,就等于是把Message Box.exe这个程式从头载入分析,如果SoftICE弹不出来,直接你就看到Message Box.exe 的主画面,那就表示SoftICE没有装好



           请初学者一定要用我这每程式测试,如果随便拿一个程式来试,刚好碰到有壳的,就会断不下来,但因为变数多了,你就会不知道到底SoftICE安装成功没有?
    
测试二: 用bpx MessageBoxA
        1.如果在测试一中SoftICE有成功跳出来,我们就输入 BPX MessageBoxA 做断点,记得按
           下回车键,然后按下F5让程序全速运行.
        2.在主程序画面中随便输入4位数字,并按下OK键,正常的话你应该会看到SoftICE再次跳出,



          断在程序调用MessageBoxA这个API的地方,如果SoftICE没有跳出来,直接你就看到密码错误或是密码正确的对话框,那么这个测试就失败了



以上测试如果有任可一个不能通过,就要打补丁 DS3.2.1.zip,(如果以上两个测试都通过了,就不可打补丁,切记!!):
先将VMware中的XP SP2重启,重启后先不要运行SoftICE
现在将 zip 档里面的 \Host\ DS.EXE OSINFO.DAT OSINFOB.DAT这三个档拷贝到 Program Files\Compuware\DriverStudio 内盖掉原来的档案
再将 \Target 内的 CptHook.sys ntice.sys osidata.sys osinfo.dat osinfob.dat及 \Target\x86\SIKSYM.SYS
这6个档拷贝到 \Windows\system32\drivers 内盖掉原来的档案

等补丁打完,再回头做测试一及测试二,如果OK了,就表示这个调环境没问题了,
现在我们最好先把可以正常运作的VMware环境先 “快照” 下来,
我们可以在VMware上方的功能Bar中选取VM-->Snapshot-->Take Snapshot…
这样万一我们之后安装的东西有问题可以很快的回覆到之前没有改变的样子,而不需要重灌!



最后整个VM用的XP SP2子目录可以备份,到别台电脑使用,注意:是备份你装在VM中的XP SP2的那个目录(本帖中讲的是 C:\PrueXP),不是在Program Files里的VMware主程序目录喔!!
到了一台新的电脑上使用时,也是一样先安装好VM WorkStation,然后把先前备份好的整个VM用的XP SP2, 一样拷贝到 C:\PrueXP中,这样就不用重新安装和设定了^^

第一次在新电脑中启用VMware就在上方工具列选 File-->Open 点选刚才拷贝好的 C:\PrueXP 里面的 vmx档就可以了,这时VMware会问你是 copy it 或是 move it, 选 copy it 就可以了

如果有雪友有装好的,也可以提供出来分享,但最好别放在论坛的空间里,因为我不知道微软在你们那儿抓得凶不凶?我们台湾这边抓得紧,微软告得凶,所以只能请在大陆的雪友帮忙了
希望新手们都可以不被SoftICE的安装给吓跑了,都可以顺利安装,享受SoftICE在反组译和破解上带给新手的方便和快乐