用OLLDBG脫ASPR1.23(翻譯)

看雪資料發表於2015-11-15

標 題:用OLLDBG脫ASPR1.23(翻譯)

發信人:ikki

時 間:2003年10月09日 07:32 

詳細資訊: 




這個是論壇上別人轉的一篇帖子,看看裡面手工修復IAT的部分寫的挺詳細,所以大概翻譯了一下,希望能給和我一樣的新手一些幫助。
----by  ikki

用OLLDBG脫ASPR1.23
(ASPR 1.23 Unpacking "Step-By-Step")                                  
=========================================================           
目標連線:              : www.systemcleaner.com                     
程式:                  : System Cleaner. 4.91d                     
作者:                  : LaBBa                                     
                                                  
========================                                            
在我開始嘗試脫這個程式和別的新版本的aspr壓縮的程式的時候,我dump下來的檔案都是錯誤的,
因為我在錯誤的地方dump程式,並因此常常導致脫殼後的程式崩潰。所以,這個教程將說明這個
錯誤的原因以及這樣對這個版本的aspr檔案脫殼。
                                
需要的工具:                                                 
-----------------------                                             
1) 你的頭腦                                
2) OllyDbg 1.09d             
3) Olly的外掛 : Cmdline and Plug108 (http://home.t-online.de/home/Ollydbg/)
4) ProcDump 或者 Lord-Pe                                              
5) Hview 或者 Hex Editor                                              
6) ImpRec 1.6 Final Public (Mackt/UCF)                              
* 以及一些pe檔案結構的知識 ..                       
===============================                                     
脫殼步驟:                                        
===============================                                     
1) 如何繞過Anti-Debugger保護                           
2) 如何找到合適的位置來dump檔案                  
3) 如何找到程式真正的OEP                                             
4) 關於stolen bytes                                        
5) 如何用ImpRec修復IAT                                       
6) 如何修復OEP並補上Stolen bytes                      
7) 致謝                                                          
=======================================                             
如何繞過Anti-Debugger保護:                              
=======================================                             
這個版本的ASPR含有Atni-Debugger程式碼                       
在Cmdline中簡單的設定BP IsDebuggerPresents然後按Shift+F9我們將會到達這裡:                                             
77E72E92 > 64:A1 18000000   MOV EAX,DWORD PTR FS:[18]               
77E72E98   8B40 30          MOV EAX,DWORD PTR DS:[EAX+30]           
77E72E9B   0FB640 02        MOVZX EAX,BYTE PTR DS:[EAX+2]           
77E72E9F   C3               RETN                                    
在: MOVZX EAX,BYTE PTR DS:[EAX+2]處                                  
我們看到: BYTE PTR DS:[EAX+2] ==7FFDF002 == 01                  
01 - 表示發現偵錯程式 .. 所以每次都要把這個值修改為00以便我們能夠執行程式。按Ctrl+F2重新執行程式,執行到上面那個地方,然後在dump視窗中右鍵單擊選擇:轉到-->表示式(GoTo->Expression),輸入地址:7FFDF002,把記憶體中這個地址的值修改為:00。現在我們可以開始脫殼了.

===================================================                 
如何找到合適的位置來dump檔案                     
===================================================                 
一次次的按Shift+F9,一直到我們到達這兒:
00FF3A2C   3100             XOR DWORD PTR DS:[EAX],EAX              
00FF3A2E   64:8F05 00000000 POP DWORD PTR FS:[0]                    
00FF3A35   58               POP EAX                                 
00FF3A36   833D B07EFF00 00 CMP DWORD PTR DS:[FF7EB0],0             
00FF3A3D   74 14            JE SHORT 00FF3A53                       
00FF3A3F   6A 0C            PUSH 0C                                 
00FF3A41   B9 B07EFF00      MOV ECX,0FF7EB0                         
00FF3A46   8D45 F8          LEA EAX,DWORD PTR SS:[EBP-8]            
00FF3A49   BA 04000000      MOV EDX,4                               
00FF3A4E   E8 EDD0FFFF      CALL 00FF0B40                           
00FF3A53   FF75 FC          PUSH DWORD PTR SS:[EBP-4]               
00FF3A56   FF75 F8          PUSH DWORD PTR SS:[EBP-8]               
00FF3A59   8B45 F4          MOV EAX,DWORD PTR SS:[EBP-C]            
00FF3A5C   8338 00          CMP DWORD PTR DS:[EAX],0                
00FF3A5F   74 02            JE SHORT 00FF3A63                       
00FF3A61   FF30             PUSH DWORD PTR DS:[EAX]                 
00FF3A63   FF75 F0          PUSH DWORD PTR SS:[EBP-10]              
00FF3A66   FF75 EC          PUSH DWORD PTR SS:[EBP-14]              
00FF3A69   C3               RETN                                    
按F2在RET那裡設定一個斷點,然後再次按Shift+F9 ..                                                             
我們會在停在RET這一行..                                  
現在是設定跟蹤命令(Trace Command)的時候了..                               
我們知道,大多數pe檔案的開始地址是 : 400000 -- FFFFFFFF                                      
但是小程式並不是這樣 .. 小程式通常結束於 9FFFFF
我們現在停在的地址是 : 00FF3A69                                 
所以我們可以透過命令列外掛來跟蹤這個程式直到它返回OEP,就象這樣:                                 
按Alt+F1再命令列外掛的輸入框中輸入: TC EIP<900000 然後回車。
這樣,當程式執行到小於900000的地址時,將會象我們希望的那樣自動中斷下來..                                       
我們停在這裡 :                                                
00407278  -FF25 2C235700    JMP DWORD PTR DS:[57232C] <<--這裡     
0040727E   8BC0             MOV EAX,EAX                             
00407280  -FF25 28235700    JMP DWORD PTR DS:[572328]               
00407286   8BC0             MOV EAX,EAX                             
00407288  -FF25 24235700    JMP DWORD PTR DS:[572324]               
0040728E   8BC0             MOV EAX,EAX                             
00407290  -FF25 20235700    JMP DWORD PTR DS:[572320]               
00407296   8BC0             MOV EAX,EAX                             
00407298   50               PUSH EAX                                
00407299   6A 40            PUSH 40                                 
0040729B   E8 E0FFFFFF      CALL SystemCl.00407280                  
004072A0   C3               RETN                                    
如果我們按一次F8我們將回到殼的程式碼中,    
所以我們按一次F8並再次執行跟蹤命令(Trace Command)       
這一次,我們來到這裡:                                     
0040734D   A3 68E65600      MOV DWORD PTR DS:[56E668],EAX            ; SystemCl.00400000
00407352   A1 68E65600      MOV EAX,DWORD PTR DS:[56E668]           
00407357   A3 D8505600      MOV DWORD PTR DS:[5650D8],EAX           
0040735C   33C0             XOR EAX,EAX                             
0040735E   A3 DC505600      MOV DWORD PTR DS:[5650DC],EAX           
00407363   33C0             XOR EAX,EAX                             
00407365   A3 E0505600      MOV DWORD PTR DS:[5650E0],EAX           


0040736A   E8 C1FFFFFF      CALL SystemCl.00407330                  
0040736F   BA D4505600      MOV EDX,SystemCl.005650D4               
00407374   8BC3             MOV EAX,EBX                             
00407376   E8 75D8FFFF      CALL SystemCl.00404BF0                  
0040737B   5B               POP EBX                                 
0040737C   C3               RETN                                    
這些是什麼東西??                                             
這個問題花了我一些時間但在除錯了更多的別的程式之後,我認為這是對GetModuleHandleA的呼叫程式碼的一部分,看起來應該象這樣的:                               
CALL <JMP.&kernel32.GetModuleHandleA>                               
MOV DWORD PTR DS:[584668],EAX            ; SystemCl.00400000        
MOV EAX,DWORD PTR DS:[584668]                                       
MOV DWORD PTR DS:[5780D8],EAX                                       
XOR EAX,EAX                                                         
MOV DWORD PTR DS:[5780DC],EAX                                       
XOR EAX,EAX                                                         
MOV DWORD PTR DS:[5780E0],EAX                                       
CALL SystemCl.00407450                                              
MOV EDX,SystemCl.005780D4                                           
MOV EAX,EBX                                                         
CALL SystemCl.00404BFC                                              
POP EBX                                                             
RETN                                                                
因為這是我們需要Dump的檔案的一部分,所以我們應該在第二次跟蹤到達這裡的時候dump: 0040734D..
開啟ProcDump / Lord-PE 選擇dump(full)來dump程式                  
=======================                                             
如何找到程式真正的OEP                                                
=======================                                             
地址0040734D並不是OEP,我們按F8單步執行,直到RET,返回(ret)後我們來到這裡:                                           
00564BEC   FF15 A4D15600    CALL DWORD PTR DS:[56D1A4]               ; SystemCl.00564460
00564BF2   E8 C101EAFF      CALL SystemCl.00404DB8                  
00564BF7   90               NOP                                     
00564BF8   0000             ADD BYTE PTR DS:[EAX],AL                
00564BFA   0000             ADD BYTE PTR DS:[EAX],AL                
00564BFC   0000             ADD BYTE PTR DS:[EAX],AL                
好了.. 現在我們可以用ProcDump/Pe-Tool來dump程式了,然後得到一個dump檔案 ..                                                  
但那裡才是OEP ?                                                
是這兒嗎: 00564BEC ??                                                 
NO!                                                                 
如果你往上看,你會發現這樣的程式碼:                             
00564BD3   0000             ADD BYTE PTR DS:[EAX],AL                
00564BD5   0000             ADD BYTE PTR DS:[EAX],AL                
00564BD7   00A444 56000000  ADD BYTE PTR SS:[ESP+EAX*2+56],AH       
00564BDE   0000             ADD BYTE PTR DS:[EAX],AL                
00564BE0   0000             ADD BYTE PTR DS:[EAX],AL                
00564BE2   0000             ADD BYTE PTR DS:[EAX],AL                
00564BE4   0000             ADD BYTE PTR DS:[EAX],AL                
00564BE6   00E8             ADD AL,CH                               
真正的OEP是 :                                                   
00564BDC                                                     

你可能會問"為什麼 ?"...                                          
ASPR使用了一種叫做 "Steal-Bytes"的技術:                           
asrp隱藏了PE檔案OEP開始處的位元組,並把這些位元組從原始PE檔案中擦除..
=====================                                               
關於stolen bytes                                                    
=====================                                               
稍微說明一下:                                                   
每一種編譯工具例如 : VC++ , Delphi , Borland , etc..               
在OEP有一個唯一的/相同的PE頭                             
其中的一些是這樣的:                                            
Push EBP                                                            
MOV Ebp,Esp                                                         
Add ESP , -010                                                      
Mov EAX, SOME_VALUE                                                 
(共11bytes)                                                  
或者:                                                                
Push EBP                                                            
MOV Ebp,Esp                                                         
Add ESP , -010                                                      
Push EBX                                                            
Push ESi                                                            
Push EDi                                                            
Mov EAX, SOME_VALUE                                                 
(共14 bytes)                                                  
我不能確定ADD ESP的數值,但在這個程式中是:add esp,-10,當然,不是所有的程式都一樣的。 
在這個程式中,我們看看:                                            
00564BD7   00A444 56000000  ADD BYTE PTR SS:[ESP+EAX*2+56],AH       
00564BDE   0000             ADD BYTE PTR DS:[EAX],AL                
00564BE0   0000             ADD BYTE PTR DS:[EAX],AL                
00564BE2   0000             ADD BYTE PTR DS:[EAX],AL                
00564BE4   0000             ADD BYTE PTR DS:[EAX],AL                
00564BE6   00E8             ADD AL,CH                               
從地址: 00564BE6開始到我們找到的真正的OEP:00564BDC,總共是11位元組            
所以我們需要補上這11位元組,現在的問題就是:EAX的值是多少?                        
我發現這其實很容易找到..         
看看這段程式碼:                                                
0040734D   A3 68E65600      MOV DWORD PTR DS:[56E668],EAX            ; SystemCl.00400000
00407352   A1 68E65600      MOV EAX,DWORD PTR DS:[56E668]                                        
00407357   A3 D8505600      MOV DWORD PTR DS:[5650D8],EAX                                        
0040735C   33C0             XOR EAX,EAX                                                          
0040735E   A3 DC505600      MOV DWORD PTR DS:[5650DC],EAX                                        
00407363   33C0             XOR EAX,EAX                                                          
00407365   A3 E0505600      MOV DWORD PTR DS:[5650E0],EAX                                        
0040736A   E8 C1FFFFFF      CALL SystemCl.00407330                                               
0040736F   BA D4505600      MOV EDX,SystemCl.005650D4                                            
00407374   8BC3             MOV EAX,EBX                                                          
00407376   E8 75D8FFFF      CALL SystemCl.00404BF0                                               
0040737B   5B               POP EBX                                                              
0040737C   C3               RETN                                                                 
注意這裡:                                                                                      
00407374   8BC3             MOV EAX,EBX                                                          
我們將得到我們需要的EAX的正確值                                                          
在這個例子是 : 5644CC                                                                        
ok,現在剩下的工作就是修復IAT了。                                                        
=================                                                                                
如何IAT                                                                                   
=================                                                                                
在improved ImpRec 1.6 Final中選取程式,然後     
點選: IAT AutoSearch                                                                
修改RVA的大小(Size of the RVA )為1000                                                           
然後點選獲取輸入表(GetImports)                                                                   點選顯示無效地址(Show Invalid)                                                                   在無效地址列表(invalid list)中點選右鍵選擇"Trace Level 1"                                        這一步驟完成之後,把那些太大的需要刪除的地址清除掉(右鍵 , Cut Thunks)                                                                 
例如:                                                                       
1           00172278                kernel32.dll            019D        GetStartupInfoA          
0           0017227C                ?           0000        00FF17E4                <<-- don't cut
0           00172280                ?           0000        00FF1CA4                            <<-- don't cut
1           00172284                kernel32.dll            0166        GetModuleFileNameA       
1           00172288                kernel32.dll            015E        GetLocaleInfoA           
1           0017228C                kernel32.dll            015B        GetLastError             
1           00172290                kernel32.dll            012E        GetCurrentDirectoryA     
0           00172294                ?           0000        00FF1D18                            <<-- don't cut
1           00172298                kernel32.dll            00E6        FreeLibrary              
1           0017229C                kernel32.dll            00C6        FindFirstFileA           
1           001722A0                kernel32.dll            00C2        FindClose                
1           001722A4                kernel32.dll            00AC        ExitProcess              
1           001722A8                kernel32.dll            00AD        ExitThread               
1           001722AC                kernel32.dll            0066        CreateThread             
1           001722B0                kernel32.dll            0377        WriteFile                
1           001722B4                kernel32.dll            0343        UnhandledExceptionFilter 
1           001722B8                kernel32.dll            02F2        SetFilePointer           
1           001722BC                kernel32.dll            02E9        SetEndOfFile             
1           001722C0                kernel32.dll            02B2        RtlUnwind                
1           001722C4                kernel32.dll            0291        ReadFile                 
1           001722C8                kernel32.dll            0284        RaiseException           
1           001722CC                kernel32.dll            024B        MoveFileA                
1           001722D0                kernel32.dll            019F        GetStdHandle             
1           001722D4                kernel32.dll            014E        GetFileSize              
1           001722D8                kernel32.dll            0151        GetFileType              
1           001722DC                kernel32.dll            0079        DeleteFileA              
1           001722E0                kernel32.dll            004B        CreateFileA              
1           001722E4                kernel32.dll            002D        CloseHandle              
0           001722E8                ?           0000        CCB36727                            <<-- CUT !
1           001722EC                user32.dll              0128        GetKeyboardType         

1           001722F0                user32.dll              01C9        LoadStringA              
1           001722F4                user32.dll              01DD        MessageBoxA              
1           001722F8                user32.dll              002B        CharNextA                
0           001722FC                ?           0000        2C24B7E9                            <<-- CUT !
1           00172300                advapi32.dll            01EC        RegQueryValueExA         
1           00172304                advapi32.dll            01E2        RegOpenKeyExA            
1           00172308                advapi32.dll            01C9        RegCloseKey              
0           0017230C                ?           0000        48E33A34                            <<-- CUT !
1           00172310                oleaut32.dll            0006        SysFreeString            
1           00172314                oleaut32.dll            0005        SysReAllocStringLen      
1           00172318                oleaut32.dll            0004        SysAllocStringLen        
在清除完後,我們還有8個無效的項需要修復 :                                         
1) 00FF1CCC                                                                                      
2) 00FF17E4                                                                                      
3) 00FF1CA4                                                                                      
4) 00FF1D18                                                                                      
5) 00FF1D08                                                                                      
6) 00FF1D00                                                                                      
7) 00FF1CF8                                                                                      
8) 00FF1D30                                                                                      
點選show invalid並右鍵單擊選擇其中的一個,讓我們來修復它 :                                                                             
00FF1D30 <- 右鍵單擊選擇DeasmHexView檢視:             
push ebp                                                                                         
00FF1D31                                                                                         
mov ebp,esp                                                                                      
00FF1D33                                                                                         
mov eax,[FF7E24]    // DWORD value: 00152398                                                     
00FF1D39                                                                                         
pop ebp                                                                                          
00FF1D3A                                                                                         
retn 4                                                                                           
仔細瞧瞧 .. 這個函式在開始的時候push EBP然後在結束的時候Pop EBP,所以這個函式什麼都沒執行,應該是LockResource或者FreeResource                                                                  
我選擇的是: FreeResource                                                                         
----------------------------------------------------------------------------------------------                                                                                           
在新版本的imprec中有個Deasmbler/HexView的功能,你可以選擇一個無效的api檢視呼叫程式碼 ...                                                            
修復8個無效的地址:                                                                               
1) 00FF1CCC                                                                                      
00FF1CCC   FF35 147EFF00    PUSH DWORD PTR DS:[FF7E14]                                           
00FF1CD2   58               POP EAX                                                              
00FF1CD3   C3               RETN                                                                 
如果你執行這段程式碼你會看到:                                     
00407235   25 FF000000      AND EAX,0FF                                                          
在我這裡,執行完這段程式碼後(OS WinXP Pro)EAX=5                                                    這個是作業系統的值。每個作業系統都有一個唯一的標識             
所以這個是: GetVersion  <-- Good Imprec !                                                       
----------------------------------------------------------------------------------               
2) 00FF17E4                                                                             

00FF17E4   55               PUSH EBP                                
00FF17E5   8BEC             MOV EBP,ESP                             
00FF17E7   8B55 0C          MOV EDX,DWORD PTR SS:[EBP+C]            
00FF17EA   8B45 08          MOV EAX,DWORD PTR SS:[EBP+8]            
00FF17ED   8B0D 8464FF00    MOV ECX,DWORD PTR DS:[FF6484]           
00FF17F3   8B09             MOV ECX,DWORD PTR DS:[ECX]              
00FF17F5   3BC8             CMP ECX,EAX                             
00FF17F7   75 09            JNZ SHORT 00FF1802                      
00FF17F9   8B0495 D863FF00  MOV EAX,DWORD PTR DS:[EDX*4+FF63D8]     
00FF1800   EB 07            JMP SHORT 00FF1809                      
00FF1802   52               PUSH EDX                                
00FF1803   50               PUSH EAX                                
00FF1804   E8 B739FFFF      CALL 00FE51C0     ; JMP to kernel32.GetProcAddress
00FF1809   5D               POP EBP                                 
00FF180A   C2 0800          RETN 8                                  
正如我們看到的那樣: GetProcAddress  <-- Good Imprec !             
-----------------------------------------------------------------------------------
3) 00FF1CA4                                                         
00FF1CA4   55               PUSH EBP                                
00FF1CA5   8BEC             MOV EBP,ESP                             
00FF1CA7   8B45 08          MOV EAX,DWORD PTR SS:[EBP+8]            
00FF1CAA   85C0             TEST EAX,EAX                            
00FF1CAC   75 13            JNZ SHORT 00FF1CC1                      
00FF1CAE   813D A47AFF00 00>CMP DWORD PTR DS:[FF7AA4],400000   ; ASCII "MZP"
00FF1CB8   75 07            JNZ SHORT 00FF1CC1                      
00FF1CBA   A1 A47AFF00      MOV EAX,DWORD PTR DS:[FF7AA4]           
00FF1CBF   EB 06            JMP SHORT 00FF1CC7                      
00FF1CC1   50               PUSH EAX                                
00FF1CC2   E8 F134FFFF      CALL 00FE51B8    ; JMP to kernel32.GetModuleHandleA
00FF1CC7   5D               POP EBP                                 
00FF1CC8   C2 0400          RETN 4                                  
00FF1CCB   90               NOP                                     
00FF1CCC   FF35 147EFF00    PUSH DWORD PTR DS:[FF7E14]              
00FF1CD2   58               POP EAX                                 
00FF1CD3   C3               RETN                                    
如上: GetModuleHandleA   <-- Good Imprec !          
------------------------------------------------------------------------------------
4) 00FF1D18                                                         
00FF1D18   6A 00            PUSH 0                                  
00FF1D1A   E8 9934FFFF      CALL 00FE51B8    ; JMP to kernel32.GetModuleHandleA
00FF1D1F   FF35 147EFF00    PUSH DWORD PTR DS:[FF7E14]              
00FF1D25   58               POP EAX                                 
00FF1D26   8B05 247EFF00    MOV EAX,DWORD PTR DS:[FF7E24]           
00FF1D2C   C3               RETN                                    
仔細看看,你會發現這個可不是GetModuleHandleA
為什麼呢? 因為在API GetModuleHandleA的呼叫之後程式利用這段程式碼來獲取某些資訊存入EAx作為呼叫的返回值 ..                          
那麼這個是是什麼函式呢? 執行完這段程式碼之後你會發現EAX中是程式路徑的ascii字串。                 所以這個是: GetCommandLineA   <-- Good Imprec !                    
------------------------------------------------------------------------------------
5) 00FF1D08                                                         
00FF1D08   55               PUSH EBP                                
00FF1D09   8BEC             MOV EBP,ESP                             
00FF1D0B   8B05 247EFF00    MOV EAX,DWORD PTR DS:[FF7E24]           
00FF1D11   8B45 08          MOV EAX,DWORD PTR SS:[EBP+8]            
00FF1D14   5D               POP EBP                                 
00FF1D15   C2 0400          RETN 4                                  
仔細瞧瞧 .. 這個函式在開始的時候push EBP然後在結束的時候Pop EBP,所以這個函式什麼都沒執行,應該是LockResource或者FreeResource                                                                  
我選擇的是: FreeResource       <-- Good Imprec !                      
------------------------------------------------------------------------------------
6) 00FF1D00                                                         
00FF1D00   A1 207EFF00      MOV EAX,DWORD PTR DS:[FF7E20]           
00FF1D05   C3               RETN                                    
這個真有趣 .. 執行這段程式碼你會看到在EAX中有一個值, 這個值是程式的PID!                        
開啟ImpRec在程式列表中你會看到同樣的PID值(PID - Process ID)                                        
所以這個是 : GetCurrentProcessId   <-- Good Imprec !                
------------------------------------------------------------------------------------
7) 00FF1CF8                                                         
00FF1CF8   A1 187EFF00      MOV EAX,DWORD PTR DS:[FF7E18]           
00FF1CFD   C3               RETN                                    
在:00FF1CF8和00FF1D00這兩個鄰近的地址中我只能在00FF1D00這個地址設定斷點,發現是: GetCurrentProcessId  
我只能得出一個結論 .. 這個api一定是: GetCurrentProcess
新版本的imprec也把這個地址修復為GetCurrentProcessId...   
在新版本的Imprec的News.txt中說明了:                                  
"出色的disassembler/hew-viewer功能有助於你檢視重定向程式碼. 你不再需要ASProtect修復外掛,因為ASProtect修復外掛並沒有更新,只是做為一個例子放在那兒"                                           問題不是出在ImpRec而是那個外掛,我說這些只是為了你能有一些瞭解。
.. GetCurrentProcessId 也工作的很好...
------------------------------------------------------------------------------------
8) 00FF1D30                                                         
00FF1D30   55               PUSH EBP                                
00FF1D31   8BEC             MOV EBP,ESP                             
00FF1D33   8B05 247EFF00    MOV EAX,DWORD PTR DS:[FF7E24]           
00FF1D39   5D               POP EBP                                 
00FF1D3A   C2 0400          RETN 4                                  
如前所敘,我選的是   : FreeResource    <-- Good Imprec !                       
好了,IAT修復完了 ..           
=============================================                       
如何修復OEP並補上Stolen bytes                         
=============================================                       
用Pe-Editor of ProcDump  Lord-PE把OEP修改為:564BDC 
然後開啟Hex-Edit  Hview把OEP處的"00"修改為
Push EBP                                                       
Mov EBP,ESP                                                         
Add ESP,-010                                                        
Mov eax, 05644CC                                                    
到這裡aspr的脫殼就完成了...                                      
致謝 :                                                           
=============                                                       
to all the ppl that have helped me lern and beeing there for me ..  
Mackt , ^Daemon^ , VAG , EvilWT , dynm8 , urad0x , parabytes , Jb__ , NeOXQuiCK , SexyGeek , 
ThE-SAiNt                                                           
SAC , NchantA , Eternal Bliss , evaluator , Bengaly , Termin-X , jond .
all the ppl at http://woodmann.cjb.net -  RCE Messageboard's        
and to all the ppl the i forgoted :D

相關文章