win7上也能用的定位kernel32基址的方法
2010-10-21 13:12
看雪上看到的,挺不錯,轉至
通過在ininitializationordermodulelist中查詢kernel32.dll模組名稱的長度來定位它的基位址,因為"kernel32.dll"的最後乙個字元為"/0"結束符。所以倘若模組最後乙個位元組為"/0"即可定位kernel32.dll的位址;
具體**實現方法:
;find kernel32.dll
find_kernel32:
push esi
xor ecx, ecx
mov esi, [fs:ecx+0x30]
mov esi, [esi + 0x0c]
mov esi, [esi + 0x1c]
next_module:
mov eax, [esi + 0x8]
mov edi,[esi+0x20]
mov esi ,[esi]
cmp [edi+12*2],cx
jne next_module
pop esi
ret通過我的測試,這種利用該方法編寫的shellcode可以在32位平台windows 5.0-7.0的所有版本上適用,下面是經我測試在win 7下實現執行calc.exe的shellcode,shellcode本身寫的很粗糙只為驗證該方法的可用性!
#include
#include
#include
int main()
;printf("size of shellcode: %d/n", strlen(shellcode));
system("pause");
((void (*)())shellcode)();
return 0;}
搜尋PEB結構獲取Kernel32 dll基址
teb偏移0x30處,即fs 0x30 位址處儲存著乙個指標,指向peb,peb結構的偏移0xc處儲存著另外乙個指標ldr,該指標執行peb ldr data 該結構的後三個成員是指向ldr module鍊錶結構中相應三條雙向煉表頭的指標,分別是按照載入順序 在記憶體中位址順序和初始化順序排列的模組...
3 2 抽象基類(abc模組)
實現乙個抽象基類,不適用abc模組 1 class base 2def get self,key 3raise notimplemented45 defset self,key,value 6raise notimplemented78 9class test base 10def get self...
C 簡繁體轉換方法 kernel32 dll
洪曉平原創,感謝作者 1.using system.runtime.interopservices 2.import kernel32.dll dllimport kernel32.dll entrypoint lcmapstringa public static extern int lcmaps...