青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

TLS隱藏的入口點

轉(zhuǎn)載自:http://bbs.pediy.com/showthread.php?p=442958



TLS簡介
1. 什么是TLS?
 
TLS是Thread Local Storage(線程局部存儲)的簡稱,是一項解決多線程內(nèi)部變量使用問題的技術(shù)。用于將某些數(shù)據(jù)和一特定線程關(guān)聯(lián)起來,即,這些數(shù)據(jù)為關(guān)聯(lián)線程所獨有(私有)。在多線程編程中, 同一個變量, 如果要讓多個線程共享訪問, 那么這個變量可以使用關(guān)鍵字volatile進行聲明; 而如果一個變量不想被多個線程共享訪問, 那么就應(yīng)該使用TLS。
 
2. 如何使用TLS編程?

TLS使用非常簡單, 只要對變量聲明時使用__declspec(thread)修飾就可以了。例如:
_declspec(thread) int g_nData = 0;

3. 一個使用TLS的例子
//--------------------------------------------------------------------------------------------------------
#include <windows.h> 
#include 
<stdio.h> 
 
#define THREADCOUNT 4 
DWORD dwTlsIndex; 
 
int iNUM_OF_CALL_COMMON=0;
int iNUM_OF_CALL_THREAD=0;
 
VOID ErrorExit(LPSTR); 
 
VOID CommonFunc(VOID) 

   LPVOID lpvData; 
 
// Retrieve a data pointer for the current thread. 
 iNUM_OF_CALL_COMMON++;
 
   lpvData 
= TlsGetValue(dwTlsIndex); 
   
if ((lpvData == 0&& (GetLastError() != ERROR_SUCCESS)) 
      ErrorExit(
"TlsGetValue error"); 
 
// Use the data stored for the current thread. 
    printf("common: thread %d: lpvData=%lx\n"
      GetCurrentThreadId(), lpvData); 
 
   Sleep(
5000); 
}
 
 
DWORD WINAPI ThreadFunc(VOID) 

   LPVOID lpvData; 
 
// Initialize the TLS index for this thread. 
 iNUM_OF_CALL_THREAD++;
 
   lpvData 
= (LPVOID) LocalAlloc(LPTR, 256); 
   
if (! TlsSetValue(dwTlsIndex, lpvData)) 
      ErrorExit(
"TlsSetValue error"); 
 
   printf(
"thread %d: lpvData=%lx\n", GetCurrentThreadId(), lpvData); 
 
   CommonFunc(); 
 
// Release the dynamic memory before the thread returns. 
    lpvData = TlsGetValue(dwTlsIndex); 
   
if (lpvData != 0
      LocalFree((HLOCAL) lpvData); 
 
   
return 0
}
 
 
int main(VOID) 

   DWORD IDThread; 
   HANDLE hThread[THREADCOUNT]; 
   
int i; 
 
// Allocate a TLS index. 
    if ((dwTlsIndex = TlsAlloc()) == TLS_OUT_OF_INDEXES) 
      ErrorExit(
"TlsAlloc failed"); 
 
// Create multiple threads. 
    for (i = 0; i < THREADCOUNT; i++
   

      hThread[i] 
= CreateThread(NULL, // default security attributes 
         0,                           // use default stack size 
         (LPTHREAD_START_ROUTINE) ThreadFunc, // thread function 
         NULL,                    // no thread function argument 
         0,                       // use default creation flags 
         &IDThread);              // returns thread identifier 
 
   
// Check the return value for success. 
      if (hThread[i] == NULL) 
         ErrorExit(
"CreateThread error\n"); 
   }
 
 
  
// printf("All threads were created.\n");
   for (i = 0; i < THREADCOUNT; i++
      WaitForSingleObject(hThread[i], INFINITE); 
 
   TlsFree(dwTlsIndex);
 
   printf(
"The nums of thread is: %d\n",iNUM_OF_CALL_THREAD);
   printf(
"The nums of call is: %d\n",iNUM_OF_CALL_COMMON);
 
   
return 0
}
 
 
VOID ErrorExit (LPSTR lpszMessage) 
{  
   fprintf(stderr, 
"%s\n", lpszMessage); 
   ExitProcess(
0); 
}
  
//--------------------------------------------------------------------------------------------------------

4. T L S的內(nèi)部數(shù)據(jù)結(jié)構(gòu)
 
1.jpg
圖1 用于管理T L S的內(nèi)部數(shù)據(jù)結(jié)構(gòu)
 
 
每個標志均可設(shè)置為FREE或者INUSE,表示TLS槽( s l o t )是否正在使用。Microsoft保證至少TLS_MINIMUM_AVAILABLE位標志是可供使用的。
 
5. 相關(guān)API
 
Windows TLS的API: TlsAlloc, TlsFree, TlsSetValue, TlsGetValue。
 
● DWORD TlsAlloc(); //(若要使用動態(tài)T L S,首先必須調(diào)用TlsAlloc函數(shù))
 
這個函數(shù)命令系統(tǒng)對進程中的位標志進行掃描,并找出一個FREE標志。然后系統(tǒng)將該標志從FREE改為INUSE,并且TlsAlloc返回位數(shù)組中的標志的索引。DLL(或APP)通常將該索引保存在一個全局變量中,因為它的值是每個進程而不是每個線程使用的值。
 
● BOOL TlsSetValue( //將一個值放入線程的數(shù)組中
 
DWORD dwTlsIndex,
 
PVOID pvTlsValue);
 
● PVOID TlsGetValue(DWORD dwTlsIndex); //要從線程的數(shù)組中檢索一個值
 
● BOOL TlsFree(DWORD dwTlsIndex); //當在所有線程中不再需要保留TLS槽時
 
 
 
參考資料:Jeffrey Richter《《Programming Applications for Microsoft Windows (4th Ed.)》》Chapter 21
 
6. TLS目錄
 
7.JPG
TLS Callback Functions
這是線程建立和退出時的回調(diào)函數(shù), 包括主線程和其他線程.AddressOfCallBacks 是指向函數(shù)指針數(shù)組的指針, 以 0 結(jié)束.
typedef struct _TEB {
NT_TIB Tib;
PVOID EnvironmentPointer;
CLIENT_ID Cid;
PVOID ActiveRpcInfo;
PVOID ThreadLocalStoragePointer; ; 2ch
PPEB Peb; ; 30h
ULONG LastErrorValue; ; 34h
…}


TLS目錄 #define IMAGE_DIRECTORY_ENTRY_TLS 9 (第十個目錄)
 
 
 
Tls隱藏的入口點利用
 
 
就是利用Address of Callbacks字段,寫入要執(zhí)行的代碼的地址就可以了.
 
 
測試對象:test.exe
 
程序類型:delphi編寫
 
 
 
PeEditor檢測Tls信息(文件偏移59400H處)如下:
2.jpg
 
TLS信息
 
------------------------------------------
 
 
 
目錄表: 0045D000
 
TLS數(shù)據(jù): 0045D010
 
索引變量: 004570A0
 
調(diào)用返回地址: 0045E010 (調(diào)用返回地址)
 
------------------------------------------
 
 
 
我們打算讓系統(tǒng)在0045E010處執(zhí)行我們的代碼,就需要在這個地方對應(yīng)的文件偏移處寫入我們的代碼。
 
 
 
觀察節(jié)表信息
 
VA=0045E010,按照文件不需要重定位去計算則RVA=0005E010
 
觀察節(jié)表信息,這個值處于.rdata節(jié)內(nèi)。
 
.rdata節(jié)起始RVA=0005E000,起始Offset為00059400
 
則callback地址對應(yīng)的Offset=(0005E010 - 0005E000)+ 00059400 =00059410
 
注意在這里(00059410H)應(yīng)該寫入一個函數(shù)地址。

打造一個簡單的代碼:

----------------------------------------------------------------
 
.386
 
.model flat,stdcall
 
option casemap
:none
 
 
 
include windows
.inc
 
include user32
.inc
 
 
 
includelib user32
.lib
 
 
 
.code
 
start
:
 
jmp 
@F
 
 
 
db 
'Run thru Tls entry point.',0
 
@@
: 
 
mov eax
,$
 
sub eax,26
 
call 
@delta
 
@delta:
 
pop ebp
 
sub ebp,offset @delta
 
add eax
,ebp
 
invoke MessageBox
,NULL,eax,NULL,0
 
ret
 
end start
 
----------------------------------------------------------------

編譯生成可執(zhí)行文件,這只是一個簡單的彈出對話框的程序。
3.jpg
 
打開16進制工具,載入msgbox.exe,復(fù)制代碼:
4.jpg
 
注意00402000H處存放的是MessageBox的入口地址,我把它固化下來,動態(tài)跟蹤發(fā)現(xiàn)是8A05D577H。(當然在編程時可以動態(tài)搜尋我們需要的API,為簡單起見這里Hard-code一下。)
 
打開16進制工具,載入藝術(shù)字體2.exe,定位到00059410。
5.jpg
 
我們把代碼復(fù)制在偏移00059410處,對應(yīng)的VA=0045E030H,則把0045E030存入偏移00059410。
 
還要注意最后的 MessageBox的入口地址我們使用硬編碼的方式,我們把這個地址寫入在00059480處了。保存修改,然后運行程序。程序首先彈出兩個對話框(一個是TLS模板,一個是主線程創(chuàng)建),結(jié)束程序運行還會彈出一個對話框,不過這個對話框太丑了:
 
6.jpg
 
 
說明:我在看一本介紹病毒知識的書籍時看到作者提及到這么一句話,大概意思是說他們公司某人發(fā)現(xiàn)了這個秘密,一直沒有公布,不過后來由于rgb利用此技術(shù)制造了病毒,也就無所謂秘密可言了。由于Tls入口要比OEP先執(zhí)行,所以在加殼與脫殼中都有利用的價值。

posted on 2008-04-29 14:16 楊粼波 閱讀(543) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国内精品写真在线观看| 欧美国产欧美亚洲国产日韩mv天天看完整 | 国产毛片一区二区| 亚洲欧美日韩国产中文| 亚洲伊人久久综合| 国产亚洲精久久久久久| 久久免费偷拍视频| 蜜臀a∨国产成人精品| 亚洲精品一线二线三线无人区| 亚洲国产va精品久久久不卡综合| 麻豆精品在线播放| 99视频精品全部免费在线| 日韩一级网站| 国产一区二区无遮挡| 欧美大秀在线观看| 欧美日韩伦理在线免费| 欧美在线你懂的| 免费成人性网站| 亚洲综合不卡| 久久成人综合视频| 99国产精品一区| 亚洲欧美日韩另类精品一区二区三区| 狠狠综合久久av一区二区老牛| 欧美激情一区二区三区在线视频| 欧美日韩精品在线观看| 久久久久久久激情视频| 欧美激情综合在线| 久久精品国产清自在天天线| 欧美不卡在线视频| 欧美一级视频免费在线观看| 欧美成人一区二区| 性色av香蕉一区二区| 欧美电影在线观看完整版| 性色av一区二区三区| 欧美人在线观看| 老司机免费视频一区二区三区| 欧美日韩不卡| 欧美激情按摩在线| 国产亚洲欧美日韩在线一区| 亚洲精品女人| 精品69视频一区二区三区| 99视频一区二区三区| 最新国产成人av网站网址麻豆| 欧美亚洲一区二区在线观看| 亚洲一二三区在线| 欧美母乳在线| 亚洲精品一区二区三区婷婷月| 在线电影国产精品| 欧美在线免费视屏| 性欧美xxxx视频在线观看| 欧美日韩亚洲视频一区| 亚洲国产精品一区二区三区| 精品动漫av| 欧美中文字幕在线观看| 欧美一级片在线播放| 国产精品一区视频| 一本久久知道综合久久| 99视频精品| 欧美日韩一区在线观看视频| 亚洲国产欧美一区二区三区同亚洲 | 亚洲国内自拍| 久久久综合精品| 亚洲欧美国产视频| 欧美精品自拍偷拍动漫精品| 亚洲国产精品福利| 在线播放中文字幕一区| 午夜在线精品| 午夜在线观看欧美| 欧美性猛交xxxx乱大交退制版| 久久成人精品| 国产午夜精品理论片a级大结局| 9人人澡人人爽人人精品| aaa亚洲精品一二三区| 噜噜噜躁狠狠躁狠狠精品视频| 欧美中文字幕视频| 国产欧美日韩视频| 亚洲影音一区| 欧美一区二区三区男人的天堂 | 久久精品五月婷婷| 国产精品社区| 香蕉久久夜色精品国产| 日韩视频一区| 欧美日韩午夜精品| 在线视频一区二区| 小黄鸭精品aⅴ导航网站入口 | 欧美专区一区二区三区| 欧美中文字幕视频| 国产亚洲精品一区二555| 午夜精品福利电影| 久久久亚洲欧洲日产国码αv | 久久综合九色欧美综合狠狠| 老**午夜毛片一区二区三区| 一区二区三区在线免费播放| 久久久精品日韩| 欧美国产精品| 一区二区三区四区蜜桃| 国产精品啊v在线| 久久精品人人做人人爽| 欧美成人精品在线| 日韩一区二区福利| 欧美日韩综合视频网址| 午夜精品久久99蜜桃的功能介绍| 亚洲视频精品| 在线看国产一区| 欧美日韩第一页| 亚洲欧美成人网| 久久深夜福利免费观看| 亚洲美女电影在线| 国产精品区一区二区三| 久久亚洲电影| 99视频日韩| 国内精品久久久久久久影视蜜臀| 欧美影视一区| 久久国产欧美精品| 久久久久久久久蜜桃| 久久精品国产99国产精品| 国产亚洲精品久久久久久| 久久综合色播五月| 中文亚洲免费| 欧美黄色大片网站| 亚洲夜晚福利在线观看| 伊人夜夜躁av伊人久久| 欧美日精品一区视频| 一本色道久久综合亚洲精品高清| 女人色偷偷aa久久天堂| 亚洲天堂免费观看| 国产亚洲精品久久久| 蜜臀91精品一区二区三区| 中文国产成人精品| 亚洲国产精品成人综合色在线婷婷| 中文欧美在线视频| 亚洲第一精品久久忘忧草社区| 国产精品国产三级国产普通话99 | 亚洲国产精品福利| 欧美国产精品一区| 欧美在线视频一区二区三区| 最新日韩在线视频| 午夜精品在线观看| 亚洲视频第一页| 亚洲精品国产精品国产自| 国产综合香蕉五月婷在线| 老巨人导航500精品| 亚洲欧美精品suv| 99视频超级精品| 亚洲激情视频在线| 欧美电影在线播放| 久久先锋影音av| 亚洲免费婷婷| 亚洲一区二区精品在线| 亚洲第一精品电影| 在线激情影院一区| 久热这里只精品99re8久| 亚洲特级片在线| 久热re这里精品视频在线6| 亚洲免费人成在线视频观看| 亚洲精选在线| 亚洲人午夜精品免费| 国产亚洲观看| 亚洲福利专区| 亚洲黄色影片| 亚洲黄色天堂| 日韩视频永久免费| 日韩视频在线观看| 亚洲久久一区| 一本在线高清不卡dvd| 亚洲美女一区| 亚洲视频专区在线| 亚洲一区二区三区在线看| 99国产一区二区三精品乱码| 亚洲欧美日韩中文播放| 香蕉久久夜色精品国产| 欧美与欧洲交xxxx免费观看 | 久久久久高清| 午夜视频精品| 亚洲网站啪啪| 夜夜嗨av一区二区三区四季av| 国产女主播视频一区二区| 国产欧美在线播放| 国产一区二区三区自拍| 亚洲第一综合天堂另类专| 很黄很黄激情成人| 亚洲三级视频| 亚洲欧美综合精品久久成人| 久久久久久久性| 亚洲第一页中文字幕| 一区二区三区免费网站| 一区二区av| 欧美成年人网站| 欧美国产成人精品| 久久综合成人精品亚洲另类欧美| 小处雏高清一区二区三区| 免费欧美日韩| 欧美三日本三级少妇三2023| 欧美日韩另类综合| 国产精品日韩| 亚洲国产精品视频一区| 亚洲欧美日韩国产综合| 久久综合精品国产一区二区三区| 亚洲乱码久久| 久久综合给合久久狠狠狠97色69|