如何調(diào)試程序的 Release 版本
摘要: 很多時候程序的 Debug 版本運(yùn)行沒有任何問題,但是一旦發(fā)布 Release 版本后,運(yùn)行就出錯,著實(shí)讓人郁悶。大家知道,VC++ 中 Release 版本是對無法對源代碼進(jìn)行調(diào)試的。一般的做法是在懷疑有錯誤的代碼前后插入MessageBox 函數(shù),在函數(shù)中顯示可能導(dǎo)致錯誤的變量的值。或者插入寫文件的語句,輸出可能導(dǎo)致錯誤的變量的值到一個記錄文件。其實(shí),除了上面講的這個辦法之外,還有其它的途徑來調(diào)試 Release 版本的。下面就結(jié)合自己的經(jīng)驗(yàn)和網(wǎng)上查找的一些資料給出調(diào)試 Release 版本的兩個方法:
......
閱讀全文
HOOK專題(ZT)
摘要: 基本概念
鉤子(Hook),是Windows消息處理機(jī)制的一個平臺,應(yīng)用程序可以在上面設(shè)置子程以監(jiān)視指定窗口的某種消息,而且所監(jiān)視的窗口可以是其他進(jìn)程所創(chuàng)建的。當(dāng)消息到達(dá)后,在目標(biāo)窗口處理函數(shù)之前處理它。鉤子機(jī)制允許應(yīng)用程序截獲處理window消息或特定事件。
鉤子實(shí)際上是一個處理消息的程序段,通過系統(tǒng)調(diào)用,把它掛入系統(tǒng)。每當(dāng)特定的消息發(fā)出,在沒有到達(dá)目的窗口前,鉤子程序就先捕獲該消息,亦即鉤子函數(shù)先得到控制權(quán)。這時鉤子函數(shù)即可以加工處理(改變)該消息,也可以不作處理而繼續(xù)傳遞該消息,還可以強(qiáng)制結(jié)束消息的傳遞。
運(yùn)行機(jī)制
1、鉤子鏈表和鉤子子程:
.......
閱讀全文
cygwin下安裝DBI
摘要: 運(yùn)行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下執(zhí)行相應(yīng)pl文件,比如./
閱讀全文
翻動100萬級的數(shù)據(jù)(自定義的MSSQL分頁查詢過程)
摘要: 系統(tǒng)資源的占用情況
內(nèi)存 —— 很理想。SQL占用的內(nèi)存最大也沒有超過65M,一般是在35M左右;asp.net占用的內(nèi)存最大也沒有超過40M,一般是在25M左右。
CPU:8%左右,由于訪問次數(shù)不多,也不夠集中,所以這個數(shù)值也說明不了什么。自己連續(xù)點(diǎn)了n次下一頁,發(fā)現(xiàn)CPU的使用率飄高,達(dá)到了50%左右。
但是對于100萬的記錄,AMD XP2000+ 的CPU 幾十毫秒的放映速度,因該是可以接受的,甚至是很理想的吧。
畢竟服務(wù)器的CPU要比我的快很多吧,而且記錄也很難達(dá)到100萬吧。
結(jié)果還是很滿意的,但是美中不足的是,我想看一下海量訪問的情況下的效果,
另外說明一下:前n頁可以在60毫秒內(nèi)完成,n應(yīng)該是大于500的,小于多少嘛還沒有測試。后n頁就比較慢了,需要500毫秒左右。
下面討論一下翻頁的技巧吧。
我沒有用游標(biāo)、臨時表、not in、in 這些方法,并不是說他們的效率不高,而是我還沒有測試過。我只用了 top ,查了兩次表。
大家也可提供一些其他的方法,我來測試一下,看看在100萬條的情況下的效果。
<
閱讀全文
繞過堆棧保護(hù) 編寫shellcode(FY)
摘要: 概述
在本例中,我們來實(shí)際編寫一個可以在使用堆棧保護(hù)的系統(tǒng)中執(zhí)行的shellcode。該shellcode通過利用ntdll.dll的部分指令跳轉(zhuǎn)到我們的代碼執(zhí)行。在大多數(shù)的dll中都可以實(shí)現(xiàn)此方法,而且可以完全饒過堆棧保護(hù)機(jī)制,因?yàn)橥ㄟ^此方法并沒有任何代碼在堆棧非執(zhí)行區(qū)域中執(zhí)行。
詳述
我們也許都聽說過堆棧保護(hù)這么一個詞。很多安全程序提供了對堆棧中的代碼執(zhí)行的保護(hù)功能(譯者注:原文這里用的是“protect”,其實(shí)我個人認(rèn)為用 “disallow”或者“disable”更確切的。因?yàn)檫@類所謂的堆棧保護(hù),其實(shí)就是禁止代碼在堆棧中執(zhí)行。)。一些新的硬件產(chǎn)品也具有禁止代碼在 “非執(zhí)行”內(nèi)存區(qū)域中執(zhí)行(比如AMD64)。然而編寫一個饒過此機(jī)制的shellcode并不是件難事,下面我給大家簡單的介紹一下。
方法就是使用dll的部分代碼來達(dá)到我們的目的。如何做到呢?首先在堆棧發(fā)生溢出的時候我們將返回地址設(shè)置成ntdll.dll中的某個指令地址,我們要利用的ntdll的部分代碼如下:
.............
閱讀全文
教你如何分析未文檔化的數(shù)據(jù)結(jié)構(gòu)(ZT)
摘要: Editor:admin Time:2005-8-20 23:22 Read:9985 Score:8 Print
Writer:HSLY
Excerpt:80x86匯編小站
Preface:
分享逆向技術(shù)心德......
Content:
[標(biāo)題] 教你如何分析未文檔化的數(shù)據(jù)結(jié)構(gòu)
[作者] hsly110 或者 豬頭三
[個人網(wǎng)站] http://www.x86asm.com 80x86匯編小站
[Email] pliceman_110@163.com PS:本文如果有錯漏請來信指出
[范圍] 逆向工程
[目的] 分享逆向技術(shù)心德
[目標(biāo)API] 未文檔化的RtlInitializeGenericTable
[參考文獻(xiàn)] Secrets of Reverse Engineering
..........
閱讀全文
load_file()函數(shù)查看常用配置文件
摘要: /usr/local/app/apache2/conf/httpd.conf //apache2缺省配置文件
/usr/local/apache2/conf/httpd.conf
/usr/local/app/php5/lib/php.ini //PHP相關(guān)設(shè)置
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虛擬網(wǎng)站設(shè)置
/etc/my.cnf //mysql的配置文件
/etc/issue //系統(tǒng)版本
/etc/issue.net
/etc/redhat-release
C:\mysql\data\mysql\user.MYD //存儲了mysql.user表中的數(shù)據(jù)庫連接密碼
/etc/sysconfig/iptables //從中得到防火墻規(guī)則策略
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).
閱讀全文
圖片類型互轉(zhuǎn)(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).
.....
閱讀全文
堡耳機(jī)的方法
摘要: 堡耳機(jī)的方法
一般來說,新買來的好點(diǎn)的耳機(jī)都需要堡,堡了以后才能有比較好的音質(zhì)。
堡耳機(jī)的步驟如下:
1.正常聽音量的1/3驅(qū)動耳機(jī)24小時(100-10kHz)
2.正常聽音量的2/3驅(qū)動耳機(jī)24小時(50-15kHz)
3.正常聽音量驅(qū)動耳機(jī)72小時(20-20kHz)
4.正常聽音量的3/4驅(qū)動耳機(jī)24小時(20-20K)
5.正常聽音量聽歌
閱讀全文
通過活動鏈表或HOOK API隱藏進(jìn)程
摘要: 進(jìn)程隱藏的兩種方法
這兩種都是很古老的方法,因?yàn)闊o聊,所以寫了一下。代碼在XP_SP2下調(diào)試通過.
(1).從活動進(jìn)程鏈表(ActiveProcessLinks)中摘除自身,這種方法可以欺騙任務(wù)管理器,
下面這個程序做的就是雙向鏈表的刪除節(jié)點(diǎn)和插入節(jié)點(diǎn),十分的簡單。
(2).如果你反匯編taskmgr.exe,可以在發(fā)現(xiàn)taskmgr.exe是通過NtQuerySystemInformation枚舉進(jìn)程的,
因此可以通過掛鉤系統(tǒng)服務(wù)NtQuerySystemInformation修改這個函數(shù)的行為,從而實(shí)現(xiàn)在任務(wù)管理器中隱藏進(jìn)程的目的,下面就是實(shí)現(xiàn)代碼。
...........
閱讀全文
Hook API監(jiān)視驅(qū)動的加載
摘要: .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監(jiān)視注冊表
摘要: 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文件保護(hù)
摘要: #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.
閱讀全文
編寫進(jìn)程/線程監(jiān)視器(ZT)
摘要: 有時候我們希望能夠動態(tài)監(jiān)視系統(tǒng)中任意進(jìn)程/線程的創(chuàng)建與銷毀。為了達(dá)
到此目的我翻閱了 DDK 手冊,發(fā)現(xiàn)其提供的 PsSetCreateProcessNotifyRoutine(),
PsSetCreateThreadNotifyRoutine(),等函數(shù)可以實(shí)現(xiàn)此功能。這兩個函數(shù)可以
通過向系統(tǒng)注冊一個 CALLBALCK 函數(shù)來監(jiān)視進(jìn)程/線程等操作。函數(shù)原形如下:
NTSTATUS
PsSetCreateProcessNotifyRoutine(
IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine,
IN BOOLEAN Remove
);
......................
閱讀全文
SSDT Hook 的妙用-對抗 Ring0 Inline Hook(ZT)
摘要: 1,SSDT
SSDT即系統(tǒng)服務(wù)描述符表,它的結(jié)構(gòu)如下(參考《Undocument Windows 2000 Secretes》第二章):
typedef struct _SYSTEM_SERVICE_TABLE
{
PVOID ServiceTableBase; //這個指向系統(tǒng)服務(wù)函數(shù)地址表
PULONG ServiceCounterTableBase;
ULONG NumberOfService; //服務(wù)函數(shù)的個數(shù),NumberOfService*4 就是整個地址表的大小
ULONG ParamTableBase;
}SYSTEM_SERVICE_TABLE,*PSYSTEM_SERVICE_TABLE;
.........
閱讀全文
對抗殺毒軟件的內(nèi)存掃描(ZT)
摘要:
通過對 NtReadVirtualMemory 掛鉤,防止其他進(jìn)程對保護(hù)的模塊進(jìn)行掃描,
如果發(fā)現(xiàn)其他進(jìn)程讀被保護(hù)模塊的內(nèi)存,則返回0
typedef struct _LDR_DATA_TABLE_ENTRY {
LIST_ENTRY InLoadOrderLinks;
LIST_ENTRY InMemoryOrderLinks;
LIST_ENTRY InInitializationOrderLinks;
PVOID DllBase;
.........
閱讀全文
實(shí)用級反主動防御rootkit設(shè)計(jì)思路(ZT)
摘要:
目錄:
反主動防御rootkit的產(chǎn)生背景及其必要性
反網(wǎng)絡(luò)訪問主動防御
反API鉤子進(jìn)程行為主動防御
反系統(tǒng)Notify進(jìn)程行為主動防御
繞過監(jiān)控進(jìn)入ring0安裝驅(qū)動
實(shí)用級反主動防御rootkit的通用性問題
..............
閱讀全文
從PE文件入手繞過IAT HOOK(ZT)
摘要:
API HOOK估計(jì)沒必要多介紹了,簡單的來講就是通過某種方式來改變API函數(shù)的工作流程.一般來講有兩種方法:IAT HOOK和INLINE HOOK.前一種應(yīng)用較為廣泛,一方面因?yàn)楹唵?還一方面因?yàn)榉€(wěn)定.他的原理就是改寫進(jìn)程空間中要HOOK的API所在模塊的函數(shù)引入表,使之指向替換原 API函數(shù)的函數(shù)地址(某些木馬就是利用IAT HOOK的方式,掛鉤NtQuerySystemInformation的方式來實(shí)現(xiàn)進(jìn)程隱藏).這里感覺還是有必要再說一點(diǎn)INLINE HOOK,這個復(fù)雜點(diǎn),直接進(jìn)入被HOOK的API函數(shù)內(nèi)部去修改他,采用指令call或者jmp等,迫使API改變流程,跳到自己的替換函數(shù)中.通常都是在函數(shù)頭部前10個字節(jié)內(nèi)修改.
...............
閱讀全文
應(yīng)用層InLine Hook(ZT)
摘要: 1.得到本進(jìn)程中包含被掛接API的DLL的基地址,該DLL代碼節(jié)的虛擬偏移以及該API的入口地址.API入口地址-(代碼節(jié)虛擬偏移+DLL基地址)=函數(shù)入口相對于代碼節(jié)的偏移
2.得到目標(biāo)進(jìn)程的PID,以及目標(biāo)進(jìn)程包含被掛接API的DLL的基地址(注意一般來說和前面自身進(jìn)程的值相同)前面得到的函數(shù)入口偏移+DLL基地址+代碼節(jié)虛擬偏移=目標(biāo)進(jìn)程API函數(shù)入口地址
3.打開目標(biāo)進(jìn)程讀目標(biāo)進(jìn)程API函數(shù)入口處128字節(jié)代碼到自身進(jìn)程的變量中.然后調(diào)用z0mbie寫的LDE32庫取該API函數(shù)入口處幾個指令的長度當(dāng)長度>=5時保存該長度(這樣防止后面取指令沒有對齊)
4.為我們的假函數(shù)在目標(biāo)進(jìn)程加載的DLL中分配空間(我是把代碼寫在PE頭的后面)這兒要改該內(nèi)存的屬性為讀寫執(zhí)行(PAGE_EXECUTE_READWRITE).為了方便編譯我們的假函數(shù)是寫在代碼段中的,在運(yùn)行時要把這些代碼移到數(shù)據(jù)段,然后把第3步取出的指令放在數(shù)據(jù)段中相應(yīng)的偏移處.同時還要在數(shù)據(jù)段中設(shè)置跳回真實(shí)函數(shù)的JMP指令.
5.把真正的API開頭的指令改為JMP到我們的假函數(shù)中.
.
閱讀全文
什么是PE文件及PE文件的結(jié)構(gòu)和簡述(ZT)
摘要:
一個操作系統(tǒng)的可執(zhí)行文件格式在很多方面是這個系統(tǒng)的一面鏡子。雖然學(xué)習(xí)一個可執(zhí)行文件格式通常不是一個程序員的首要任務(wù),但是你可以從這其中學(xué)到大量的知識。在這篇文章中,我會給出 MicroSoft 的所有基于 win32系統(tǒng)(如winnt,win9x)的可移植可執(zhí)行(PE)文件格式的詳細(xì)介紹。在可預(yù)知的未來,包括 Windows2000 , PE 文件格式在 MicroSoft 的操作系統(tǒng)中扮演一個重要的角色。如果你在使用 Win32 或 Winnt ,那么你已經(jīng)在使用 PE 文件了。甚至你只是在 Windows3.1 下使用 Visual C++ 編程,你使用的仍然是 PE 文件(Visual C++ 的 32 位 MS-DOS 擴(kuò)展組件用這個格式)。簡而言之,PE 格式已經(jīng)普遍應(yīng)用,并且在不短的將來仍是不可避免的。現(xiàn)在是時候找出這種新的可執(zhí)行文件格式為操作系統(tǒng)帶來的東西了。
我最后不會讓你盯住無窮無盡的十六進(jìn)制Dump,也不會詳細(xì)討論頁面的每一個單獨(dú)的位的重要性。代替的,我會向你介紹包含在 PE 文件中的概念,并且將他們和你每天都遇到的東西聯(lián)系起來。比如,線程局部變量
閱讀全文
C++字符串完全指引(ZT)
摘要: 許多關(guān)于字符串的問題,在文章最后的參考文章中,相信有更加深入和精確的描述。不過關(guān)于中文的處理,我想先補(bǔ)充一些自己的看法。
背景:WIN32 console程序,使用printf輸出字符串。相信許多人都有使用過。
平臺:VisualStudio.NET 2003(MFC 7.1)。
MBCS UNICODE
蔡 b2 cc 21 85
A 41 00 41 00
程序段1:使用std::string
#include
.........
閱讀全文
關(guān)于PE可執(zhí)行文件的修改(ZT)
摘要: 1、PE文件框架構(gòu)成
DOS MZ header
DOS stub
PE header
Section table
Section 1
Section 2
Section ...
Section n
上表是PE文件結(jié)構(gòu)的總體層次分布。所有 PE文件(甚至32位的 DLLs) 必須以一個簡單的 DOS MZ header 開始,在偏移0處有DOS下可執(zhí)行文件的“MZ標(biāo)志”,有了它,一旦程序在DOS下執(zhí)行,DOS就能識別出這是有效的執(zhí)行體,然后運(yùn)行緊隨 MZ header 之后的 DOS stub。DOS stub實(shí)際上是個有效的EXE,在不支持 PE文件格式的操作系統(tǒng)中,它將簡單顯示一個錯誤提示,類似于字符串 " This program cannot run in DOS mode " 或者程序員可根據(jù)自己的意圖實(shí)現(xiàn)完整的 DOS代碼。通常DOS stub由匯編器/編譯器自動生成,對我們的用處不是很大,它簡單調(diào)用中斷21h服務(wù)9來顯示字符串"This program cannot run in DOS mode"。
閱讀全文
Windows應(yīng)用程序捆綁核心編程(ZT)
摘要:
1.1 引言 1.2 內(nèi)存管理概述 1.3 虛擬內(nèi)存訪問
1.4 文件的內(nèi)存映射 1.4 文件的內(nèi)存映射(2) 1.5 深入認(rèn)識指針的真正含義
1.6 本章小結(jié) 參考文獻(xiàn)
第2章 再談PE文件結(jié)構(gòu)
2.1 引言 2.2 PE文件格式概述 2.3 PE文件結(jié)構(gòu)
2.3 PE文件結(jié)構(gòu) 2.4 如何獲取PE文件中的OEP 2.5 PE文件中的資源
2.6 一個修改PE可執(zhí)行文件的完整實(shí)例(1) 2.6 一個修改PE可執(zhí)行文件的完整實(shí)例(2) 2.7 本章小結(jié)
參考文獻(xiàn)
第3章 進(jìn)程之間通信概述及初級技術(shù)
3.1 引言 3.2 進(jìn)程通信概述 3.3 使用自定義消息通信
3.4 使用WM_COPYDATA消息通信 3.4 使用WM_COPYDATA消息通信 3.5 使用內(nèi)存讀寫函數(shù)和內(nèi)存映射文件通信
3.6 使用動態(tài)鏈接庫通信 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的編譯參數(shù)優(yōu)化(ZT)
摘要:
/*
Author: void#ph4nt0m.org
*/
// 編譯器 cl.exe(Visual C++ 6.0)
// 沒有做任何優(yōu)化情況下,編譯大小為:16K
// 編譯優(yōu)化后: 1K (用16進(jìn)制編輯器把尾部的0x00去掉: 712bytes)
#include
#pragma comment(lib,"kernel32.lib")
// 作用: 指定節(jié)對齊為512字節(jié)
#pragma comment(linker, "/align:512")
..........
閱讀全文
向其他進(jìn)程注入代碼的三種方法(ZT)
摘要: 我們在Code project(www.codeproject.com)上可以找到許多密碼間諜程序(譯者注:那些可以看到別的程序中密碼框內(nèi)容的軟件),他們都依賴于Windows鉤子技術(shù)。要實(shí)現(xiàn)這個還有其他的方法嗎?有!但是,首先,讓我們簡單回顧一下我們要實(shí)現(xiàn)的目標(biāo),以便你能弄清楚我在說什么。
要讀取一個控件的內(nèi)容,不管它是否屬于你自己的程序,一般來說需要發(fā)送 WM_GETTEXT 消息到那個控件。這對edit控件也有效,但是有一種情況例外。如果這個edit控件屬于其他進(jìn)程并且具有 ES_PASSWORD 風(fēng)格的話,這種方法就不會成功。只有“擁有(OWNS)”這個密碼控件的進(jìn)程才可以用 WM_GETTEXT 取得它的內(nèi)容。所以,我們的問題就是:如何讓下面這句代碼在其他進(jìn)程的地址空間中運(yùn)行起來:
::SendMessage( hPwdEdit, WM_GETTEXT, nMaxChars, psBuffer );
一般來說,這個問題有三種可能的解決方案:
1. 把你的代碼放到一個DLL中;然后用 wind
閱讀全文
Inject your code to a Portable Executable file
摘要:
0序文
也許你想要了解一個病毒,注入到程序內(nèi)部并且感染他的方法,或者你對保護(hù)你特殊的PE文件的數(shù)據(jù)感興趣。你能使用這篇文章的源代碼構(gòu)建你自定義的EXE BUILDER。如果用在好的方面,他能教你怎樣保護(hù)或封裝加密你的PE文件,但是同樣如果你用在邪惡的方面,他能產(chǎn)生一個病毒。然而,我寫這篇文章的目的是前者,所以,我不會為不道德的使用負(fù)責(zé)。
1預(yù)備知識
按照主題這篇文章不需要特殊的預(yù)備知識,如果你已經(jīng)了解了DEBUGGER和文件結(jié)構(gòu),那么我建議你跳過2,3部分,這兩部分是為毫無基礎(chǔ)的人準(zhǔn)備的。
2.PE文件的結(jié)構(gòu)
規(guī)定PE文件的結(jié)構(gòu)為WINDOWS OS提供了最好的方式去執(zhí)行代碼,并且儲存一個程序運(yùn)行所需要的基本數(shù)據(jù)。例如常量,變量等等。
................
閱讀全文
VC編譯OCCI的解決方案
摘要: 1、增加接口。在OcciDml.hpp中增加extern "C" int __declspec(dllexport) funA(char* a); 在OcciDml.cpp中將函數(shù)聲明修改為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
否則會出現(xiàn)錯誤如下:
d:\oracle\ora92\oci\include\occicontrol.h(1132) : error C2995: 'getVector' : template function has already been defined
d:\oracle\ora92\oci\include\occicommon
閱讀全文
扭曲變換加密(ZT)
摘要:
一,一般來講,加密就是加殼
我們經(jīng)常考慮,一個可執(zhí)行文件,怎么樣加密才能安全呢?
一般用的手段,是加殼。加殼工具的工作原理,就是把可執(zhí)行文件的代碼與
數(shù)據(jù)都進(jìn)行加密變換,作為數(shù)據(jù)存放。生成的目標(biāo)文件入口代碼是加殼軟件
準(zhǔn)備好的防跟蹤代碼。經(jīng)過漫長的防跟蹤代碼后,會把原始可執(zhí)行文件的代碼
與數(shù)據(jù)段恢復(fù),然后跳轉(zhuǎn)到原來的入口處,繼續(xù)運(yùn)行。這樣做的缺點(diǎn)是,不管
你的加密多強(qiáng),防跟蹤代碼多牛,只要一運(yùn)行,在內(nèi)存中就全部恢復(fù)了。只要
把內(nèi)存映象dump下來,反匯編一下,就清清楚楚了。甚至有工具可以直接把
dump下來的內(nèi)存映象存為可執(zhí)行文件。這樣加密就徹底失敗了。
......
閱讀全文
OllyDbg Format String 0day分析和利用(ZT)
摘要:
OD作為一款Ring3下的調(diào)試器以優(yōu)異的性能博得了廣大密界愛好者的一致肯定,就在最近milw0rm上公布了一個OD 0 day的POC(OllyDbg v110 Local Format String Exploit),以前寫了很多棧溢出的漏洞,卻很少有Format String的漏洞,這次OD給我們提供了一個熟悉Format String問題的機(jī)會(只有原版的OD存在此問題,看雪論壇的修改版OllyIce不存在此問題)。
........
閱讀全文
編寫Unicode有效的Shellcode(ZT)
摘要:
對于溢出愛好者來說,能夠編寫Shellcode是一個必備的基本技能,特別是能應(yīng)對各種在實(shí)際情況中對Shellcode存在各種限制條件的時候,這種能力就顯得尤為重要了。黑防2007年第二期中介紹了純字母數(shù)字的Shellcode的編寫,在3期中的WinRAR 7z溢出中就派上了用場。Unicode大家應(yīng)該不陌生,在一些大型程序中,比如Word、Excel考慮到不同語言平臺的差異性,都會使用 Unicode,在利用這些漏洞的時候,我們以往的Shellcode就難以適用了。一個普通的Down&Exec的Shellcode經(jīng)過 MultiByteToWideChar函數(shù)轉(zhuǎn)換成Unicode后
..........
閱讀全文
插入DLL和掛接API(ZT)
摘要:
每個進(jìn)程都有它自己的私有地址空間。當(dāng)使用指針來引用內(nèi)存時,指針的值將引用你自己進(jìn)程的地址空間中的一個內(nèi)存地址,有些情況下,必須打破進(jìn)程的界限,訪問另一個進(jìn)程的地址空間,這些情況包括:
...........
閱讀全文
內(nèi)核級利用通用Hook函數(shù)方法檢測進(jìn)程(ZT)
摘要:
介紹通用Hook的一點(diǎn)思想:
在系統(tǒng)內(nèi)核級中,MS的很多信息都沒公開,包括函數(shù)的參數(shù)數(shù)目,每個參數(shù)的類型等。在系統(tǒng)內(nèi)核中,訪問了大量的寄存器,而很多寄存器的值,是上層調(diào)用者提供的。如果值改變系統(tǒng)就會變得不穩(wěn)定。很可能出現(xiàn)不可想象的后果。另外有時候?qū)π枰狧ook的函數(shù)的參數(shù)不了解,所以不能隨便就去改變它的堆棧,如果不小心也有可能導(dǎo)致藍(lán)屏。所以Hook的最佳原則是在自己的Hook函數(shù)中呼叫原函數(shù)的時候,所有的寄存器值,堆棧里面的值和Hook前的信息一樣。這樣就能保證在原函數(shù)中不會出錯。一般我們自己的Hook的函數(shù)都是寫在C文件里面的。例如Hook的目標(biāo)函數(shù)KiReadyThread。
........
閱讀全文