首页
社区
课程
招聘
[原创]献给新手(一)--不用脱壳就能调试加壳软件(SoftICE还旧之旅)
发表于: 2011-1-4 13:27 29327

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

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

礙於版規,我己經不能在新人交流投稿區发贴,但這贴是要給新手入門看的,因為是自己剛加入论坛,搞不清楚狀況,所以就先發到了『求助问答区』,但因為不是真的悬赏贴,所以发得心理怕怕的,現在发現
『伴你成长』這個园地,就趕快把之前的贴移到這裡,並不是要灌水重複发贴,先前不懂版規的地方,還請版主及各位雪友多多原諒!!

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

除了獲得版主給了邀请码外,也勾起大家的懷舊風,坐時光机回到SoftICE的年代,雪友whypro希望我再多發幾篇,所以我就抱著回饋大家的心態來獻醜了,我水平不高,寫的不好還請多多包涵

說老實話,OllyDBG真的太好用了,不用安裝,什麼作業系統都能Run,界面又漂亮,插件多到翻...不用它還真是個笨蛋咧
但如果你是初學软件调试的新手,恐怕OllyDBG的美好時光很快就會過去了,因為它有很多事情不是您想的那麼美好,在論壇扒一下文就知道,新手的汇编能力不好,當遇到加壳软件時,如果沒有脱壳机或脱壳插件、脱壳腳本...,那麼程序載入跟不了多久、看不了多少机碼就放棄了,即使不放棄也是白做工,繞來繞去不知道要做什麼?所以老覺得破解這個門難入,调试软件真不是人幹的...

這時如果新人先從SoftICE下手就不一樣了,它雖然不美觀,而且很挑作業系統,最重要是還得一步一步去安裝...雖然難裝,但總會裝起來,論壇上都有詳細說明:
http://www.pediy.com/tools/Debuggers/SoftICE/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 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懷舊之旅)。

謝謝看完

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
免费 7
支持
分享
最新回复 (41)
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
期待一下 二 吧

但我的感觉嘛,OD 脱壳方面比 SE 好很多的 ,无论从任何方面 (但也可能是我不会用 SE 之故 )
2011-1-4 14:24
0
雪    币: 557
活跃值: (10)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
编辑这样一文章不容易  楼主辛苦
2011-1-4 14:36
0
雪    币: 149
活跃值: (101)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
4
您別誤會,我沒說OD不好,只是希望新手(真正的新手,不是新加入論壇的新會員),可以先避開手動脫壳時要看一堆机碼,昏了頭也失了興趣,可以先從Windows API下手入門,這時可以先用SoftICE避開壳而直接到程序的要害

也請其他大牛別再誤會我這帖是說OD不好,我最怕筆戰了
2011-1-4 14:42
0
雪    币: 41
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
各有千秋,没有谁好谁不好,看你用什么好,那什么就好
2011-1-4 14:57
0
雪    币: 149
活跃值: (101)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
6
是啊!一次只能上四張圖,最近流量又比較慢,所以搞了好久
2011-1-4 16:37
0
雪    币: 149
活跃值: (101)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
7
第二篇 献給新手(二)--不用脱壳就能修改加壳软件(SoftICE还旧之旅) 已发:
http://bbs.pediy.com/showthread.php?t=127604
請多多指教,希望對新手有幫助
2011-1-5 03:51
0
雪    币: 1163
活跃值: (137)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
8
加精鼓励,感谢分享~lz文笔不错。呵呵
2011-1-5 11:57
0
雪    币: 354
活跃值: (157)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
9
想问问,是哪里的同胞啊?
2011-1-5 13:04
0
雪    币: 190
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
很明显是台湾同胞
2011-1-5 14:05
0
雪    币: 149
活跃值: (101)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
11
哈,我是广东人,現在住在台湾啦
简体字-繁體字混著用,請大家多多原谅

看雪学院教了我很多東西,可是當初学的時候很辛苦,
因為有些老手只讲重点,不太會讲细节,所以在我現在小有進步在教新手時,
會特別注意多放些图,多讲些细节,這樣新手可以快些看懂,希望大家不要嫌煩才好
2011-1-5 14:35
0
雪    币: 615
活跃值: (1132)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
突然想起  一块三毛钱...
2011-1-5 14:41
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
感谢分享,就是想问问“SoftICE可以對加壳软件直接下 Windows API斷點”,OD不是也可以吗?
2011-1-5 14:44
0
雪    币: 2393
活跃值: (1387)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
懷念美好的過去。。。
曾經每天的 Ctrl-D
2011-1-5 16:08
0
雪    币: 149
活跃值: (101)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
15
谢谢版主加精鼓励,我刚才才注意到,不好意思,而且好像加精后就立刻升为普通会员了,
真的很开心,谢谢版主和雪友们的鼓励啊
2011-1-5 20:05
0
雪    币: 149
活跃值: (101)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
16
是有什么故事吗?我不知道啊

哈!我知道了,是看雪的前辈啦!!他是2004年6月註冊的,目前有十一篇精华帖...
http://bbs.pediy.com/member.php?u=3553
我答对了吗
2011-1-5 20:12
0
雪    币: 149
活跃值: (101)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
17
在完全没有脱壳的软件上,OD不接受Windows API断点,虽然没有错误讯息,但是也不会帮你拦下程序
我的帖中有截图,你可以跟着做看看就知道了^^
2011-1-5 20:30
0
雪    币: 231
活跃值: (72)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
辛苦了!工作严谨
2011-1-6 16:24
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
非常详,辛苦了!
2011-1-6 17:22
0
雪    币: 98
活跃值: (26)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
20
不懂简体中文的可怜孩子..................
2011-1-6 17:59
0
雪    币: 154
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
so nice ,谢谢楼主分享
2011-1-6 23:08
0
雪    币: 286
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
好文章,拜读中!
2011-1-7 07:51
0
雪    币: 90
活跃值: (91)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
潜力贴留名.插图补丁.字数补丁..
2011-1-7 12:04
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
  学习中。。收藏。
2011-1-7 12:49
0
雪    币: 90
活跃值: (81)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
真的很详细,谢谢LZ,呵呵,好久不来看雪逛了
2011-1-7 23:17
0
游客
登录 | 注册 方可回帖
返回
//