如何調試程序的 Release 版本
摘要: 很多時候程序的 Debug 版本運行沒有任何問題,但是一旦發布 Release 版本后,運行就出錯,著實讓人郁悶。大家知道,VC++ 中 Release 版本是對無法對源代碼進行調試的。一般的做法是在懷疑有錯誤的代碼前后插入MessageBox 函數,在函數中顯示可能導致錯誤的變量的值。或者插入寫文件的語句,輸出可能導致錯誤的變量的值到一個記錄文件。其實,除了上面講的這個辦法之外,還有其它的途徑來調試 Release 版本的。下面就結合自己的經驗和網上查找的一些資料給出調試 Release 版本的兩個方法:
......
閱讀全文
HOOK專題(ZT)
摘要: 基本概念
鉤子(Hook),是Windows消息處理機制的一個平臺,應用程序可以在上面設置子程以監視指定窗口的某種消息,而且所監視的窗口可以是其他進程所創建的。當消息到達后,在目標窗口處理函數之前處理它。鉤子機制允許應用程序截獲處理window消息或特定事件。
鉤子實際上是一個處理消息的程序段,通過系統調用,把它掛入系統。每當特定的消息發出,在沒有到達目的窗口前,鉤子程序就先捕獲該消息,亦即鉤子函數先得到控制權。這時鉤子函數即可以加工處理(改變)該消息,也可以不作處理而繼續傳遞該消息,還可以強制結束消息的傳遞。
運行機制
1、鉤子鏈表和鉤子子程:
.......
閱讀全文
cygwin下安裝DBI
摘要: 運行pl程序,提示:Can't locate DBI.pm in @INC,解決方法如下:
Install cygwin with these options:
- gcc (devel)
- make (devel)
- binutils (devel)
- Perl 5.8.6 (interpreters)
- Perl win32 API (libs)
- PostgreSQL (database)
installing DBI-1.48.tar.gz as follows:
- Unpack the kit into /usr/src (c:\cygwin\usr\src)
- Open a cygwin shell and cd to /usr/src/DBI-1.48
- perl Makefile.PL
- make
- make test
- make install
在cygwin的shell下執行相應pl文件,比如./
閱讀全文
翻動100萬級的數據(自定義的MSSQL分頁查詢過程)
摘要: 系統資源的占用情況
內存 —— 很理想。SQL占用的內存最大也沒有超過65M,一般是在35M左右;asp.net占用的內存最大也沒有超過40M,一般是在25M左右。
CPU:8%左右,由于訪問次數不多,也不夠集中,所以這個數值也說明不了什么。自己連續點了n次下一頁,發現CPU的使用率飄高,達到了50%左右。
但是對于100萬的記錄,AMD XP2000+ 的CPU 幾十毫秒的放映速度,因該是可以接受的,甚至是很理想的吧。
畢竟服務器的CPU要比我的快很多吧,而且記錄也很難達到100萬吧。
結果還是很滿意的,但是美中不足的是,我想看一下海量訪問的情況下的效果,
另外說明一下:前n頁可以在60毫秒內完成,n應該是大于500的,小于多少嘛還沒有測試。后n頁就比較慢了,需要500毫秒左右。
下面討論一下翻頁的技巧吧。
我沒有用游標、臨時表、not in、in 這些方法,并不是說他們的效率不高,而是我還沒有測試過。我只用了 top ,查了兩次表。
大家也可提供一些其他的方法,我來測試一下,看看在100萬條的情況下的效果。
<
閱讀全文
繞過堆棧保護 編寫shellcode(FY)
摘要: 概述
在本例中,我們來實際編寫一個可以在使用堆棧保護的系統中執行的shellcode。該shellcode通過利用ntdll.dll的部分指令跳轉到我們的代碼執行。在大多數的dll中都可以實現此方法,而且可以完全饒過堆棧保護機制,因為通過此方法并沒有任何代碼在堆棧非執行區域中執行。
詳述
我們也許都聽說過堆棧保護這么一個詞。很多安全程序提供了對堆棧中的代碼執行的保護功能(譯者注:原文這里用的是“protect”,其實我個人認為用 “disallow”或者“disable”更確切的。因為這類所謂的堆棧保護,其實就是禁止代碼在堆棧中執行。)。一些新的硬件產品也具有禁止代碼在 “非執行”內存區域中執行(比如AMD64)。然而編寫一個饒過此機制的shellcode并不是件難事,下面我給大家簡單的介紹一下。
方法就是使用dll的部分代碼來達到我們的目的。如何做到呢?首先在堆棧發生溢出的時候我們將返回地址設置成ntdll.dll中的某個指令地址,我們要利用的ntdll的部分代碼如下:
.............
閱讀全文
教你如何分析未文檔化的數據結構(ZT)
摘要: Editor:admin Time:2005-8-20 23:22 Read:9985 Score:8 Print
Writer:HSLY
Excerpt:80x86匯編小站
Preface:
分享逆向技術心德......
Content:
[標題] 教你如何分析未文檔化的數據結構
[作者] hsly110 或者 豬頭三
[個人網站] http://www.x86asm.com 80x86匯編小站
[Email] pliceman_110@163.com PS:本文如果有錯漏請來信指出
[范圍] 逆向工程
[目的] 分享逆向技術心德
[目標API] 未文檔化的RtlInitializeGenericTable
[參考文獻] Secrets of Reverse Engineering
..........
閱讀全文
load_file()函數查看常用配置文件
摘要: /usr/local/app/apache2/conf/httpd.conf //apache2缺省配置文件
/usr/local/apache2/conf/httpd.conf
/usr/local/app/php5/lib/php.ini //PHP相關設置
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虛擬網站設置
/etc/my.cnf //mysql的配置文件
/etc/issue //系統版本
/etc/issue.net
/etc/redhat-release
C:\mysql\data\mysql\user.MYD //存儲了mysql.user表中的數據庫連接密碼
/etc/sysconfig/iptables //從中得到防火墻規則策略
c:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini
C:\Program Files\Serv-U\Serv
閱讀全文
Terminal Services: reset Sessions
摘要:
The problem: you use terminal services in administration mode (which allows 2 sessions), now you cannot connect to the server because all sessions are used.
Windows 2000+ (includes Windows XP and 2003) have two command-line tools called qwinsta and rwinsta that can query and reset a remote session.
Query a server:
> qwinsta /server:192.168.12.12
.......
閱讀全文
Use CDO.Message (cdosys.dll) to send an SMTP Mail with importance (as a VBS Script)
摘要:
I had to create a .VBS script to create an automated E-Mail message. The hardest part was to set the importance of the mail, I've found the solution here: http://www.lewisroberts.com/?p=64
Here come's the script:
Dim iMsg
Dim iConf
Dim Flds
Dim strHTML
............
閱讀全文
Task Scheduler or RunAs without a password
摘要:
Standard user's in big companies usually runs as unprivileged users, thus they cannot execute admin tasks. But sometimes it's necessary to run a task with admin rights (automated software deploy) - runas, in some situations, is a bad idea because it needs a user and a clear text password (and no, the password compiled in an exe file is not very safe!).
......
閱讀全文
Quick and dirty PXE boot
摘要: Most new Servers or Workstations aren't equipped with a floppy drive anymore, but from time to time I need to boot from a floppy drive. And I don't want to burn a CD each time I need to boot from a floppy drive.. so the solution is tftpd32 and PXELINUX. With those 2 tools I'm able to boot disk images from the LAN.
You need tftpd32 from Ph. Jounin (http://tftpd32.jounin.net/) and PXELINUX, which is a part of the SYSLINUX package (http://syslinux.zytor.com).
閱讀全文
圖片類型互轉(png,bmp,jpg,gif)
摘要:
#include <windows.h>
#include <gdiplus.h>
#include <stdio.h>
#pragma comment(lib,"gdiplus.lib")
using namespace Gdiplus;
INT GetEncoderClsid(const WCHAR* format, CLSID* pClsid); // helper function
...........
閱讀全文
Terminal Service: Connect and/or Shadow to a Console Session...
摘要: Terminal Service: Connect and/or Shadow to a Console Session...
crosspost from http://blogs.msdn.com/rextang
Seems some of my friends still didn't know how to use Microsoft Terminal Service Client to connect to the console session of a windows pc (server or client OS) so here is a memo for it also during the search I found the other interesting thing that can let Terminal Service to function like a VNC server (2 users share the same session, called "shadow session" here).
.....
閱讀全文
堡耳機的方法
摘要: 堡耳機的方法
一般來說,新買來的好點的耳機都需要堡,堡了以后才能有比較好的音質。
堡耳機的步驟如下:
1.正常聽音量的1/3驅動耳機24小時(100-10kHz)
2.正常聽音量的2/3驅動耳機24小時(50-15kHz)
3.正常聽音量驅動耳機72小時(20-20kHz)
4.正常聽音量的3/4驅動耳機24小時(20-20K)
5.正常聽音量聽歌
閱讀全文
通過活動鏈表或HOOK API隱藏進程
摘要: 進程隱藏的兩種方法
這兩種都是很古老的方法,因為無聊,所以寫了一下。代碼在XP_SP2下調試通過.
(1).從活動進程鏈表(ActiveProcessLinks)中摘除自身,這種方法可以欺騙任務管理器,
下面這個程序做的就是雙向鏈表的刪除節點和插入節點,十分的簡單。
(2).如果你反匯編taskmgr.exe,可以在發現taskmgr.exe是通過NtQuerySystemInformation枚舉進程的,
因此可以通過掛鉤系統服務NtQuerySystemInformation修改這個函數的行為,從而實現在任務管理器中隱藏進程的目的,下面就是實現代碼。
...........
閱讀全文
Hook API監視驅動的加載
摘要: .386
.model flat, stdcall
option casemap:none
;**************************************************************************************************
include f:\masm32\include\w2k\ntstatus.inc
include f:\masm32\include\w2k\ntddk.inc
include f:\masm32\include\w2k\ntoskrnl.inc
includelib f:\masm32\lib\w2k\ntoskrnl.lib
include f:\masm32\Macros\Strings.mac
;**************************************************************************************************
閱讀全文
WMI監視注冊表
摘要: Set wmiServices = GetObject("winmgmts:root/default")
Set wmiSink = WScript.CreateObject("WbemScripting.SWbemSink", "SINK_")
wmiServices.ExecNotificationQueryAsync wmiSink, _
"SELECT * FROM RegistryKeyChangeEvent WHERE Hive='HKEY_LOCAL_MACHINE' AND " & _
"KeyPath='SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run'"
WScript.Echo "Listening..." & vbCrLf
While(1)
WScript.Sleep 1000
Wend
Sub SINK_OnObjectReady(wmiObject, wmiAsyncContext)
WScript.Echo "R
閱讀全文
Cookie注入手工檢測方法
摘要: 例:
http://xxxx/view.asp?id=1
先訪問http://xxxx/view.asp?id=1
接著在瀏覽器里輸入:
javascript:alert(document.cookie="id="+escape("1 and 1=1"))
再訪問http://xxxx/view.asp(未出錯)
再輸入:javascript:alert(document.cookie="id="+escape("188 and 1=2"))
再訪問:http://xxxx/view.asp(出錯)
該頁面出錯就表示可以用Cookie注入。
..........
閱讀全文
暫停Windows文件保護
摘要: #include <stdio.h>
#include <windows.h>
typedef DWORD(__stdcall *CPP) (DWORD param1, PWCHAR param2, DWORD param3);
void Disable_WFP()
{
HINSTANCE hmod=LoadLibrary("sfc_os.dll");
CPP SetSfcFileException;
// the function is stored at the fifth ordinal in sfc_os.dll
SetSfcFileException= (CPP)GetProcAddress(hmod,(LPCSTR)5);
SetSfcFileException(0, L"c:\\windows\\system32\\calc.exe",-1);
//Now we can modify the system file in a complete stealth.
閱讀全文
編寫進程/線程監視器(ZT)
摘要: 有時候我們希望能夠動態監視系統中任意進程/線程的創建與銷毀。為了達
到此目的我翻閱了 DDK 手冊,發現其提供的 PsSetCreateProcessNotifyRoutine(),
PsSetCreateThreadNotifyRoutine(),等函數可以實現此功能。這兩個函數可以
通過向系統注冊一個 CALLBALCK 函數來監視進程/線程等操作。函數原形如下:
NTSTATUS
PsSetCreateProcessNotifyRoutine(
IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine,
IN BOOLEAN Remove
);
......................
閱讀全文
SSDT Hook 的妙用-對抗 Ring0 Inline Hook(ZT)
摘要: 1,SSDT
SSDT即系統服務描述符表,它的結構如下(參考《Undocument Windows 2000 Secretes》第二章):
typedef struct _SYSTEM_SERVICE_TABLE
{
PVOID ServiceTableBase; //這個指向系統服務函數地址表
PULONG ServiceCounterTableBase;
ULONG NumberOfService; //服務函數的個數,NumberOfService*4 就是整個地址表的大小
ULONG ParamTableBase;
}SYSTEM_SERVICE_TABLE,*PSYSTEM_SERVICE_TABLE;
.........
閱讀全文
對抗殺毒軟件的內存掃描(ZT)
摘要:
通過對 NtReadVirtualMemory 掛鉤,防止其他進程對保護的模塊進行掃描,
如果發現其他進程讀被保護模塊的內存,則返回0
typedef struct _LDR_DATA_TABLE_ENTRY {
LIST_ENTRY InLoadOrderLinks;
LIST_ENTRY InMemoryOrderLinks;
LIST_ENTRY InInitializationOrderLinks;
PVOID DllBase;
.........
閱讀全文
實用級反主動防御rootkit設計思路(ZT)
摘要:
目錄:
反主動防御rootkit的產生背景及其必要性
反網絡訪問主動防御
反API鉤子進程行為主動防御
反系統Notify進程行為主動防御
繞過監控進入ring0安裝驅動
實用級反主動防御rootkit的通用性問題
..............
閱讀全文
從PE文件入手繞過IAT HOOK(ZT)
摘要:
API HOOK估計沒必要多介紹了,簡單的來講就是通過某種方式來改變API函數的工作流程.一般來講有兩種方法:IAT HOOK和INLINE HOOK.前一種應用較為廣泛,一方面因為簡單,還一方面因為穩定.他的原理就是改寫進程空間中要HOOK的API所在模塊的函數引入表,使之指向替換原 API函數的函數地址(某些木馬就是利用IAT HOOK的方式,掛鉤NtQuerySystemInformation的方式來實現進程隱藏).這里感覺還是有必要再說一點INLINE HOOK,這個復雜點,直接進入被HOOK的API函數內部去修改他,采用指令call或者jmp等,迫使API改變流程,跳到自己的替換函數中.通常都是在函數頭部前10個字節內修改.
...............
閱讀全文
應用層InLine Hook(ZT)
摘要: 1.得到本進程中包含被掛接API的DLL的基地址,該DLL代碼節的虛擬偏移以及該API的入口地址.API入口地址-(代碼節虛擬偏移+DLL基地址)=函數入口相對于代碼節的偏移
2.得到目標進程的PID,以及目標進程包含被掛接API的DLL的基地址(注意一般來說和前面自身進程的值相同)前面得到的函數入口偏移+DLL基地址+代碼節虛擬偏移=目標進程API函數入口地址
3.打開目標進程讀目標進程API函數入口處128字節代碼到自身進程的變量中.然后調用z0mbie寫的LDE32庫取該API函數入口處幾個指令的長度當長度>=5時保存該長度(這樣防止后面取指令沒有對齊)
4.為我們的假函數在目標進程加載的DLL中分配空間(我是把代碼寫在PE頭的后面)這兒要改該內存的屬性為讀寫執行(PAGE_EXECUTE_READWRITE).為了方便編譯我們的假函數是寫在代碼段中的,在運行時要把這些代碼移到數據段,然后把第3步取出的指令放在數據段中相應的偏移處.同時還要在數據段中設置跳回真實函數的JMP指令.
5.把真正的API開頭的指令改為JMP到我們的假函數中.
.
閱讀全文
什么是PE文件及PE文件的結構和簡述(ZT)
摘要:
一個操作系統的可執行文件格式在很多方面是這個系統的一面鏡子。雖然學習一個可執行文件格式通常不是一個程序員的首要任務,但是你可以從這其中學到大量的知識。在這篇文章中,我會給出 MicroSoft 的所有基于 win32系統(如winnt,win9x)的可移植可執行(PE)文件格式的詳細介紹。在可預知的未來,包括 Windows2000 , PE 文件格式在 MicroSoft 的操作系統中扮演一個重要的角色。如果你在使用 Win32 或 Winnt ,那么你已經在使用 PE 文件了。甚至你只是在 Windows3.1 下使用 Visual C++ 編程,你使用的仍然是 PE 文件(Visual C++ 的 32 位 MS-DOS 擴展組件用這個格式)。簡而言之,PE 格式已經普遍應用,并且在不短的將來仍是不可避免的。現在是時候找出這種新的可執行文件格式為操作系統帶來的東西了。
我最后不會讓你盯住無窮無盡的十六進制Dump,也不會詳細討論頁面的每一個單獨的位的重要性。代替的,我會向你介紹包含在 PE 文件中的概念,并且將他們和你每天都遇到的東西聯系起來。比如,線程局部變量
閱讀全文
C++字符串完全指引(ZT)
摘要: 許多關于字符串的問題,在文章最后的參考文章中,相信有更加深入和精確的描述。不過關于中文的處理,我想先補充一些自己的看法。
背景:WIN32 console程序,使用printf輸出字符串。相信許多人都有使用過。
平臺:VisualStudio.NET 2003(MFC 7.1)。
MBCS UNICODE
蔡 b2 cc 21 85
A 41 00 41 00
程序段1:使用std::string
#include
.........
閱讀全文
關于PE可執行文件的修改(ZT)
摘要: 1、PE文件框架構成
DOS MZ header
DOS stub
PE header
Section table
Section 1
Section 2
Section ...
Section n
上表是PE文件結構的總體層次分布。所有 PE文件(甚至32位的 DLLs) 必須以一個簡單的 DOS MZ header 開始,在偏移0處有DOS下可執行文件的“MZ標志”,有了它,一旦程序在DOS下執行,DOS就能識別出這是有效的執行體,然后運行緊隨 MZ header 之后的 DOS stub。DOS stub實際上是個有效的EXE,在不支持 PE文件格式的操作系統中,它將簡單顯示一個錯誤提示,類似于字符串 " This program cannot run in DOS mode " 或者程序員可根據自己的意圖實現完整的 DOS代碼。通常DOS stub由匯編器/編譯器自動生成,對我們的用處不是很大,它簡單調用中斷21h服務9來顯示字符串"This program cannot run in DOS mode"。
閱讀全文
Windows應用程序捆綁核心編程(ZT)
摘要:
1.1 引言 1.2 內存管理概述 1.3 虛擬內存訪問
1.4 文件的內存映射 1.4 文件的內存映射(2) 1.5 深入認識指針的真正含義
1.6 本章小結 參考文獻
第2章 再談PE文件結構
2.1 引言 2.2 PE文件格式概述 2.3 PE文件結構
2.3 PE文件結構 2.4 如何獲取PE文件中的OEP 2.5 PE文件中的資源
2.6 一個修改PE可執行文件的完整實例(1) 2.6 一個修改PE可執行文件的完整實例(2) 2.7 本章小結
參考文獻
第3章 進程之間通信概述及初級技術
3.1 引言 3.2 進程通信概述 3.3 使用自定義消息通信
3.4 使用WM_COPYDATA消息通信 3.4 使用WM_COPYDATA消息通信 3.5 使用內存讀寫函數和內存映射文件通信
3.6 使用動態鏈接庫通信 3.7 使用Windows剪貼板通信 3.
閱讀全文
Creating the smallest possible PE executable
摘要: Tiny PE
Creating the smallest possible PE executable
This work was inspired by the Tiny PE challenge by Gil Dabah. The object of the challenge was to write the smallest PE file that downloads a file from the Internet and executes it.
In the process of writing increasingly smaller PE files for the challenge I learned a lot of interesting details about the PE file format and the Windows loader. The goal of this document is to preserve this knowledge for future reference. In t
閱讀全文
vc的編譯參數優化(ZT)
摘要:
/*
Author: void#ph4nt0m.org
*/
// 編譯器 cl.exe(Visual C++ 6.0)
// 沒有做任何優化情況下,編譯大小為:16K
// 編譯優化后: 1K (用16進制編輯器把尾部的0x00去掉: 712bytes)
#include
#pragma comment(lib,"kernel32.lib")
// 作用: 指定節對齊為512字節
#pragma comment(linker, "/align:512")
..........
閱讀全文
向其他進程注入代碼的三種方法(ZT)
摘要: 我們在Code project(www.codeproject.com)上可以找到許多密碼間諜程序(譯者注:那些可以看到別的程序中密碼框內容的軟件),他們都依賴于Windows鉤子技術。要實現這個還有其他的方法嗎?有!但是,首先,讓我們簡單回顧一下我們要實現的目標,以便你能弄清楚我在說什么。
要讀取一個控件的內容,不管它是否屬于你自己的程序,一般來說需要發送 WM_GETTEXT 消息到那個控件。這對edit控件也有效,但是有一種情況例外。如果這個edit控件屬于其他進程并且具有 ES_PASSWORD 風格的話,這種方法就不會成功。只有“擁有(OWNS)”這個密碼控件的進程才可以用 WM_GETTEXT 取得它的內容。所以,我們的問題就是:如何讓下面這句代碼在其他進程的地址空間中運行起來:
::SendMessage( hPwdEdit, WM_GETTEXT, nMaxChars, psBuffer );
一般來說,這個問題有三種可能的解決方案:
1. 把你的代碼放到一個DLL中;然后用 wind
閱讀全文
Inject your code to a Portable Executable file
摘要:
0序文
也許你想要了解一個病毒,注入到程序內部并且感染他的方法,或者你對保護你特殊的PE文件的數據感興趣。你能使用這篇文章的源代碼構建你自定義的EXE BUILDER。如果用在好的方面,他能教你怎樣保護或封裝加密你的PE文件,但是同樣如果你用在邪惡的方面,他能產生一個病毒。然而,我寫這篇文章的目的是前者,所以,我不會為不道德的使用負責。
1預備知識
按照主題這篇文章不需要特殊的預備知識,如果你已經了解了DEBUGGER和文件結構,那么我建議你跳過2,3部分,這兩部分是為毫無基礎的人準備的。
2.PE文件的結構
規定PE文件的結構為WINDOWS OS提供了最好的方式去執行代碼,并且儲存一個程序運行所需要的基本數據。例如常量,變量等等。
................
閱讀全文
VC編譯OCCI的解決方案
摘要: 1、增加接口。在OcciDml.hpp中增加extern "C" int __declspec(dllexport) funA(char* a); 在OcciDml.cpp中將函數聲明修改為extern "C" int __declspec(dllexport) funA(char* a)
2、修改頭文件。在需要引入的所有類中,替換為
#ifndef OCCI_ORACLE
#define WIN32COMMON
#include "occi.h"
using namespace oracle::occi;
using namespace std;
#endif
否則會出現錯誤如下:
d:\oracle\ora92\oci\include\occicontrol.h(1132) : error C2995: 'getVector' : template function has already been defined
d:\oracle\ora92\oci\include\occicommon
閱讀全文
扭曲變換加密(ZT)
摘要:
一,一般來講,加密就是加殼
我們經常考慮,一個可執行文件,怎么樣加密才能安全呢?
一般用的手段,是加殼。加殼工具的工作原理,就是把可執行文件的代碼與
數據都進行加密變換,作為數據存放。生成的目標文件入口代碼是加殼軟件
準備好的防跟蹤代碼。經過漫長的防跟蹤代碼后,會把原始可執行文件的代碼
與數據段恢復,然后跳轉到原來的入口處,繼續運行。這樣做的缺點是,不管
你的加密多強,防跟蹤代碼多牛,只要一運行,在內存中就全部恢復了。只要
把內存映象dump下來,反匯編一下,就清清楚楚了。甚至有工具可以直接把
dump下來的內存映象存為可執行文件。這樣加密就徹底失敗了。
......
閱讀全文
OllyDbg Format String 0day分析和利用(ZT)
摘要:
OD作為一款Ring3下的調試器以優異的性能博得了廣大密界愛好者的一致肯定,就在最近milw0rm上公布了一個OD 0 day的POC(OllyDbg v110 Local Format String Exploit),以前寫了很多棧溢出的漏洞,卻很少有Format String的漏洞,這次OD給我們提供了一個熟悉Format String問題的機會(只有原版的OD存在此問題,看雪論壇的修改版OllyIce不存在此問題)。
........
閱讀全文
編寫Unicode有效的Shellcode(ZT)
摘要:
對于溢出愛好者來說,能夠編寫Shellcode是一個必備的基本技能,特別是能應對各種在實際情況中對Shellcode存在各種限制條件的時候,這種能力就顯得尤為重要了。黑防2007年第二期中介紹了純字母數字的Shellcode的編寫,在3期中的WinRAR 7z溢出中就派上了用場。Unicode大家應該不陌生,在一些大型程序中,比如Word、Excel考慮到不同語言平臺的差異性,都會使用 Unicode,在利用這些漏洞的時候,我們以往的Shellcode就難以適用了。一個普通的Down&Exec的Shellcode經過 MultiByteToWideChar函數轉換成Unicode后
..........
閱讀全文
插入DLL和掛接API(ZT)
摘要:
每個進程都有它自己的私有地址空間。當使用指針來引用內存時,指針的值將引用你自己進程的地址空間中的一個內存地址,有些情況下,必須打破進程的界限,訪問另一個進程的地址空間,這些情況包括:
...........
閱讀全文
內核級利用通用Hook函數方法檢測進程(ZT)
摘要:
介紹通用Hook的一點思想:
在系統內核級中,MS的很多信息都沒公開,包括函數的參數數目,每個參數的類型等。在系統內核中,訪問了大量的寄存器,而很多寄存器的值,是上層調用者提供的。如果值改變系統就會變得不穩定。很可能出現不可想象的后果。另外有時候對需要Hook的函數的參數不了解,所以不能隨便就去改變它的堆棧,如果不小心也有可能導致藍屏。所以Hook的最佳原則是在自己的Hook函數中呼叫原函數的時候,所有的寄存器值,堆棧里面的值和Hook前的信息一樣。這樣就能保證在原函數中不會出錯。一般我們自己的Hook的函數都是寫在C文件里面的。例如Hook的目標函數KiReadyThread。
........
閱讀全文