Friday, March 24, 2017

如何找到99%的电影资源

一、初级:
你已经有兴趣看电影了,区别于那些完全不看电影的人。你可以在各大视频网站在线观看,效果差、片源少、更新慢。
二、中级:
如果你不是特别热爱电影,只是闲暇之余看看热门的新片、美剧,也不特别要求画质与速度的话,下面这几个网站能满足你了:

电影FM :http://dianying.fm/ranking/imdb250
电影天堂:http://www.xiaopian.com/
迅雷好: http://xunleihao.com/
飘花电影:http://www.piaohua.com/
6V电影 :http://www.6vdy.com/
圣城家园:http://www.cnscg.org/
Mp4吧:http://www.mp4ba.com/
搬运工:http://banyungong.net/
嘎嘎影视:http://www.gagays.com/
小浣熊:http://www.xiaohx.com/
乐搜:http://www.lesou.org/
电影小二网:http://movie002.com/
我爱P2P: http://www.byhh.org/

三、高级(再往下看的话,请先准备好至少几十TB的硬盘,以及高性能的播放设备,否则后果很严重):
如果你有右列任一需求:1、爱看经典老电影,2、爱看高清画质的电影,3、想尽快拿到新片资源。
恭喜,你已经被称为影迷了,那么最好学会用这些网站:
1.电影蜜蜂:http://www.dybee.net/ ,目前已停止更新,但积累的资源相当丰富。注意网站右边的标签,某些标签的资源很丰富哦。
2.ED2000:http://www.ed2000.com/
网站提供的都是电驴链接,电影资源很强大,游戏/音乐/软件都有
3.SimpleCD:http://www.simplecd.me/
有电驴/种子/网盘等资源链接,很有名气的一个站。
4.BT天堂:http://www.bttiantang.com/
片子很多,优点是对于热门电影来说,它提供了各大压制组、各版本的资源供选择,BDRip/720p/1080p等等,另外可以通过IMDB编号来搜索影片。
5.BT之家:http://bbs.1lou.com/
综合性很强,在电影方面主要是中字熟肉,方便手机/iPad等移动设备观看。
6.顶好精品论坛(需注册):http://www.bmdru.com/forum.php
重点推荐,影片分类很牛逼,比如著名导演的合集/TOP 250合集/三大电影节合集/CC标准收藏合集。
7.大米论坛(需注册):http://www.iminisd.com/forum.php
国产片/港产片资源很强大
8.KICKASS:http://kickass.to/
俗称“踢屁股”,也是个综合性种子站,新片老片应有尽有。
9.RARBG:http://www.rarbg.com/torrents.php
和KICKASS差不多,但是新片的发布速度貌似更快些,而且网页排版很好看。
10.Torrentz:http://torrentz.eu/
综合型种子搜索引擎,很多资源帝都爱用,被称为“万金油BT站”。
11.SeeHD:http://www.seehd.org/
以高清资源为主,720p/1080p/Remux/蓝光原盘,适合收藏党。
12.BTSPREAD:http://www.btspread.com/
个人主要用来转换BT文件和磁力链接,也有种子搜索引擎,可搜番号。
13.http://www.demonoid.ph/ ,这个站有一个特色,自压制的电影都带有花絮,前提是蓝光原盘有花絮的话。这是目前唯一一个压制电影时,附带压制花絮的站点。压制小组名是:Grym ,可以在该网站搜索此压制组的作品。
14.飞鸟论坛:http://bbs.hdbird.com/
15.蓝影网:http://www.lanyingwang.com/(最新的资源,会第一时间更新。除了最新资源的高清片源,还有同类型资源盘点等。纯净无广告、无需注册。除了资源,还有高清科普知识、影讯等内容。)
16.星空家园,http://bbs.xskwhd.com/forum.php ,搬运PT里的高清电影、电视剧、综艺资源,较丰富。
17.高清论坛,http://www.bt49.com/ ,资源丰富,更新速度快
18.下载搜:http://www.somag.net/ ,非常不错磁力下载站点,干净的站点,没有图片、截图等。
四、灭绝师太:
什么?你说你逼格特别的高?那也不要紧啊,下面还有一些适合淘冷门电影的网站。倘若碰到一些豆瓣评分人数不足的,甚至是没有条目的电影,这些网站可能会有奇效。好用的BT种子搜索引擎:
Bitsnoop:http://bitsnoop.com/
资源容量高达28PB,磁力站,可以配合上面的BTSPREAD转成种子。
BT Kitty:http://btkitty.org/
号称共24.03PB大小的资源,来源于全球超过300个BT种子。
海盗湾:http://thepiratebay.ee/
自称是目前世界上最大的BT种子服务器。
BTDigg:https://btdigg.org/
磁力站,搜索关键字的能力较强,个人最爱用的网站。
ulozto:http://www.ulozto.net/
据说搜捷克电影很好用,我没试过。
rutracker:http://rutracker.org/forum/index.php(俄罗斯BT站)
BT搜搜:http://www.btsoso.me/
Btbook:http://t.cn/8sgPF9Q
RunBT:http://t.cn/Rvn5wDB
DiggBt:http://t.cn/RPhEeST
BtDigg:http://t.cn/zWKSDdH
手撕包菜:http://t.cn/zHcP7Ue
BT樱桃:http://t.cn/8sh3oB3

五、风清扬(无即是有):
如果上述网站依旧找不到你要的电影,那就得自己动手去其他地方找了,下面介绍一些电影挖掘技术:
谷歌:懒人一般不会用,但除了网站之外,谷歌引擎是最靠谱的找片方法。搜索片名+download/torrent/magnet/ed2k等后缀,能找到不少冷门电影。
豆瓣条目:在豆瓣电影搜索片名之后,该影片的简介页面,就叫豆瓣条目。很多人忽视了这块地方:冷门电影的话,在条目的讨论区偶尔会有热心网友给出资源下载;短片的话,在条目的短评区会有热心网友给出在线观看地址。
豆瓣小组:这个社区可以说是高手在民间,比如像是:第三世界电影资源,这种小组,里面会有很多珍贵片源,玩豆瓣的朋友可以慢慢发掘。
百度贴吧:贴吧精品区里有不少好东西,比如“北野武吧”就有不少粉丝上传的纪录片资源,“百度网盘吧”“360云盘吧”这种,偶尔会有人扔出一些容量几个T的资源合集。
关于资源搜索的技巧,这个才是重中之重好吗:
有些片子不一定搜一个片名就能搜出来,国内的网站主要搜索中文名,外网主要搜索外文名。而几乎所有的片名,都可以在对应的豆瓣条目简介里面找到,当然IMDB条目也有。国内的网站当然比较简单,比如《血色将至》这部片,你可以搜“血色将至”、“血色黑金”、“There Will Be Blood”
重点说下国外的网站,很多非英语片,除了中文译名之外,都会有两个片名,举个例子:《精疲力尽》这部片,你可以搜英文名“Breathless”、法文名“à bout de souffle”。《七武士》这部片,你可以搜中文名“七武士”,日文名“七人の侍”,英文名“Seven Samurai”,最好用的方法是搜索日语发音“Shichinin no samurai”,最后一种方法是在外网搜索日语片的首选。
有些名字相同的片子,可以在后面加上年份,方便区分,比如希区柯克的《惊魂记》,可以搜“psycho 1960”。想高清的可片名+720p/1080p/bluray等后缀。
搜电影原声,可搜索片名+soundtrack/OST
在谷歌上搜索某个导演的合集,可以加上collection这个后缀,比如搜伍迪艾伦的,“Woody Allen collection”。
搜冷门片,可以用刚刚提到的方法,搜索片名+download/torrent/magnet/ed2k
最后说一下的是关于字幕的问题:
Sub HD 字幕站:http://subhd.com/
伪射手网:http://sub.makedie.me/
寻找英文/小语种的字幕:http://t.cn/8sjjac7
关于字幕的一些小科普:http://t.cn/Rh3uKxR
补充特色网站:
KiSHD,http://www.kishd.org/,韩影、韩剧、韩国综艺等,资源丰富。还有自己的韩语字幕组。
立体中国,http://bbs.cnliti.com/ ,主打3D资源
纪录片之家,http://www.jlpzj.net/ ,最丰富的纪录片资源站点
同志亦凡人,http://www.qafone.co/ ,gay片网站
印度电影论坛:http://www.indmi.com/ ,印度电影资源丰富,还有印度相关知识
结束:现在盗版资源面临的形势并不乐观,某些网站说不准哪天就被封杀了。院线方面又有引进名额限制和档期保护。因此为了方便你们自身的观影,掌握一些淘片技巧还是很有必要的。毕竟漫漫光影路,总不能一直做伸手党。最后还是那句话:没有牛逼的资源帝,只有勤劳的搬运工。授人以鱼,不如授人以渔。

Thursday, August 18, 2016

装修后怎样消除甲醛和气味

装修后不要马上入住,应开窗通风。高温、高湿、负压会加快甲醛散发力度。300克红茶泡入两脸盆
装修后怎样消除甲醛和气味
 1.装修后不要马上入住,应开窗通风。高温、高湿、负压会加快甲醛散发力度。300克红茶泡入两脸盆热水中,放在居室内,并开窗透气,48小时内室内甲醛含量将下降90%以上,刺激性气味基本消除。

2.在房屋里放几盆冷水,里面放入一些盐,在房屋里放置一段时间,可以减少甲醛的刺激性气味。准备400克煤灰,用脸盆分装后放入需除甲醛的室内,一周内可使甲醛含量下降到安全范围内。以上方法同样适用于装修完没有异味的家庭,因为有些有害物是无色无味的,多一分清洁,就多一分安全。

3.购买800克颗粒状活性炭去除甲醛。将活性炭分成8份,放入盘碟中,每屋放2至3碟,分别放在房间各个污染源相对集中的角落即可,72小时可基本除尽室内异味。

4.入住后,家中最好养一些绿色植物。给大家介绍几种对甲醛有良好去除作用的植物,效果最好的是吊兰,吊兰品种繁多,基本都可以。其次,芦荟也是对付甲醛的有力武器之一。虎尾兰吸甲醛也不错,万年青和雏菊则可以清除三氯乙烯。

甲醛是装修的重大污染源,清除甲醛流行法则还有如下几条:

【植物吸收法】:

植物有极强的吸收甲醛的能力,如仙人掌、吊兰、芦苇、常春藤、铁树、菊花等。

专家点评:许多植物确实具有净化空气的作用。但这并不意味着植物能完全清除空气中的甲醛,植物对甲醛的吸收在整个净化空气的过程中只能起到一个辅助的作用。如果空气中的甲醛含量太高,甚至可能造成植物本身的死亡。一般来说,大叶面和香草类的植物吸收甲醛的效果较好,如吊兰、虎尾兰等。

【民间流传土方法】

把茶叶渣、柚子皮、洋葱片、菠萝块等放在刚装修完的房间内或者用白醋熏蒸整个房间。

专家点评:使用茶叶渣、柚子皮、洋葱片、菠萝块等土方法实际上只能起到一个遮盖的作用,如遮盖厕所的异味等。但这些东西并不会吸收空气中的甲醛。除了这些东西外,有的人还喜欢用香水、空气清新剂,这种做法不可取,因为香水和空气清新剂中的化学原料可能会与空气中的物质发生反应,从而造成二次污染。

【活性炭吸附法】

固体活性炭具有孔隙多的特点,对甲醛等有害物质具有很强的吸附和分解作用,活性炭的颗粒越小吸附效果越好。

专家点评:活性炭对甲醛的吸附作用很明显,但是根据空间的大小不同,放置活性炭的量也有所不同。另外,活性炭吸附到一定程度后需要进行更换。活性炭的效果虽然不错,但是和其他方法一样,并不能完全清除空气中的甲醛。

【光触媒分解法】

光触媒中的催化剂在光的刺激下,与空气中的氧气与水分生成负离子和氢氧自由基,能氧化并分解各种有机污染物和无机污染物,并最终降解为二氧化碳、水和相应的酸的等无害物质,从而达到分解污染物、净化空气的作用。

专家点评:实验证明,光触媒在吸收甲醛方面确实有效。光触媒作为一种新型的材料,从理论上来说不会造成二次污染,但是,由于各个厂家生产光触媒的工艺不同,所以不能说光触媒一定不会造成二次污染。另外,光触媒的使用操作比较复杂,一般要由专门的服务公司提供使用。

Friday, December 11, 2015

Manual Inject

Manual DLL injection is a technique for stealth DLL injection. It works by copying the DLL image into target process's address space. The injector then copy the loader code into target process's address space, and then executed. The loader code perform relocations and resolve DLL imports for the DLL image. Finally, the loader code find for the DLL entry point, and then call it if found.

Since the DLL image is directly copied into target process's address space, the injected DLL will not appear in the module list of PEB, thus making detection more difficult.

Usage: ManualInject [DLL name] [PID]

How it works

1) Open the DLL file (CreateFile)
2) Read the DLL into memory (ReadFile)
3) Validate the DLL image.
4) Open the target process (OpenProcess)
5) Allocate memory for the DLL and loader code in the target process (VirtualAllocEx)
6) Copy the DLL image into target process's address space (WriteProcessMemory)
7) Copy the loader code into target process's address space (WriteProcessMemory)
8) Create a remote thread to execute the loader code in target process's address space (CreateRemoteThread)
9) Wait for the loader code to complete (WaitForSingleObject). The loader code perform relocations and resolve DLL imports for the image, and then call the entry point if found.
10) Free the loader code (VirtualFreeEx)

#include <stdio.h>
#include <Windows.h>
typedef HMODULE (WINAPI *pLoadLibraryA)(LPCSTR);
typedef FARPROC (WINAPI *pGetProcAddress)(HMODULE,LPCSTR);
typedef BOOL (WINAPI *PDLL_MAIN)(HMODULE,DWORD,PVOID);
typedef struct _MANUAL_INJECT
{
    PVOID ImageBase;
    PIMAGE_NT_HEADERS NtHeaders;
    PIMAGE_BASE_RELOCATION BaseRelocation;
    PIMAGE_IMPORT_DESCRIPTOR ImportDirectory;
    pLoadLibraryA fnLoadLibraryA;
    pGetProcAddress fnGetProcAddress;
}MANUAL_INJECT,*PMANUAL_INJECT;
DWORD WINAPI LoadDll(PVOID p)
{
    PMANUAL_INJECT ManualInject;
    HMODULE hModule;
    DWORD i,Function,count,delta;
    PDWORD ptr;
    PWORD list;
    PIMAGE_BASE_RELOCATION pIBR;
    PIMAGE_IMPORT_DESCRIPTOR pIID;
    PIMAGE_IMPORT_BY_NAME pIBN;
    PIMAGE_THUNK_DATA FirstThunk,OrigFirstThunk;
    PDLL_MAIN EntryPoint;
    ManualInject=(PMANUAL_INJECT)p;
    pIBR=ManualInject->BaseRelocation;
    delta=(DWORD)((LPBYTE)ManualInject->ImageBase-ManualInject->NtHeaders->OptionalHeader.ImageBase); // Calculate the delta
    // Relocate the image
    while(pIBR->VirtualAddress)
    {
        if(pIBR->SizeOfBlock>=sizeof(IMAGE_BASE_RELOCATION))
        {
            count=(pIBR->SizeOfBlock-sizeof(IMAGE_BASE_RELOCATION))/sizeof(WORD);
            list=(PWORD)(pIBR+1);
            for(i=0;i<count;i++)
            {
                if(list[i])
                {
                    ptr=(PDWORD)((LPBYTE)ManualInject->ImageBase+(pIBR->VirtualAddress+(list[i] & 0xFFF)));
                    *ptr+=delta;
                }
            }
        }
        pIBR=(PIMAGE_BASE_RELOCATION)((LPBYTE)pIBR+pIBR->SizeOfBlock);
    }
    pIID=ManualInject->ImportDirectory;
    // Resolve DLL imports
    while(pIID->Characteristics)
    {
        OrigFirstThunk=(PIMAGE_THUNK_DATA)((LPBYTE)ManualInject->ImageBase+pIID->OriginalFirstThunk);
        FirstThunk=(PIMAGE_THUNK_DATA)((LPBYTE)ManualInject->ImageBase+pIID->FirstThunk);
        hModule=ManualInject->fnLoadLibraryA((LPCSTR)ManualInject->ImageBase+pIID->Name);
        if(!hModule)
        {
            return FALSE;
        }
        while(OrigFirstThunk->u1.AddressOfData)
        {
            if(OrigFirstThunk->u1.Ordinal & IMAGE_ORDINAL_FLAG)
            {
                // Import by ordinal
                 
                Function=(DWORD)ManualInject->fnGetProcAddress(hModule,(LPCSTR)(OrigFirstThunk->u1.Ordinal & 0xFFFF));
                if(!Function)
                {
                    return FALSE;
                }
                FirstThunk->u1.Function=Function;
            }
            else
            {
                // Import by name
                pIBN=(PIMAGE_IMPORT_BY_NAME)((LPBYTE)ManualInject->ImageBase+OrigFirstThunk->u1.AddressOfData);
                Function=(DWORD)ManualInject->fnGetProcAddress(hModule,(LPCSTR)pIBN->Name);
                if(!Function)
                {
                    return FALSE;
                }
                FirstThunk->u1.Function=Function;
            }
            OrigFirstThunk++;
            FirstThunk++;
        }
        pIID++;
    }
    if(ManualInject->NtHeaders->OptionalHeader.AddressOfEntryPoint)
    {
        EntryPoint=(PDLL_MAIN)((LPBYTE)ManualInject->ImageBase+ManualInject->NtHeaders->OptionalHeader.AddressOfEntryPoint);
        return EntryPoint((HMODULE)ManualInject->ImageBase,DLL_PROCESS_ATTACH,NULL); // Call the entry point
    }
    return TRUE;
}
DWORD WINAPI LoadDllEnd()
{
    return 0;
}
int wmain(int argc,wchar_t* argv[])
{
    PIMAGE_DOS_HEADER pIDH;
    PIMAGE_NT_HEADERS pINH;
    PIMAGE_SECTION_HEADER pISH;
     
    HANDLE hProcess,hThread,hFile,hToken;
    PVOID buffer,image,mem;
    DWORD i,FileSize,ProcessId,ExitCode,read;
    TOKEN_PRIVILEGES tp;
    MANUAL_INJECT ManualInject;
    if(argc<3)
    {
        printf("\nUsage: ManualInject [DLL name] [PID]\n");
        return -1;
    }
    if(OpenProcessToken((HANDLE)-1,TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken))
    {
        tp.PrivilegeCount=1;
        tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
        tp.Privileges[0].Luid.LowPart=20;
        tp.Privileges[0].Luid.HighPart=0;
        AdjustTokenPrivileges(hToken,FALSE,&tp,0,NULL,NULL);
        CloseHandle(hToken);
    }
    printf("\nOpening the DLL.\n");
    hFile=CreateFile(argv[1],GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL); // Open the DLL
    if(hFile==INVALID_HANDLE_VALUE)
    {
        printf("\nError: Unable to open the DLL (%d)\n",GetLastError());
        return -1;
    }
    FileSize=GetFileSize(hFile,NULL);
    buffer=VirtualAlloc(NULL,FileSize,MEM_COMMIT|MEM_RESERVE,PAGE_READWRITE);
    if(!buffer)
    {
        printf("\nError: Unable to allocate memory for DLL data (%d)\n",GetLastError());
         
        CloseHandle(hFile);
        return -1;
    }
    // Read the DLL
    if(!ReadFile(hFile,buffer,FileSize,&read,NULL))
    {
        printf("\nError: Unable to read the DLL (%d)\n",GetLastError());
        VirtualFree(buffer,0,MEM_RELEASE);
        CloseHandle(hFile);
        return -1;
    }
    CloseHandle(hFile);
    pIDH=(PIMAGE_DOS_HEADER)buffer;
    if(pIDH->e_magic!=IMAGE_DOS_SIGNATURE)
    {
        printf("\nError: Invalid executable image.\n");
         
        VirtualFree(buffer,0,MEM_RELEASE);
        return -1;
    }
    pINH=(PIMAGE_NT_HEADERS)((LPBYTE)buffer+pIDH->e_lfanew);
    if(pINH->Signature!=IMAGE_NT_SIGNATURE)
    {
        printf("\nError: Invalid PE header.\n");
         
        VirtualFree(buffer,0,MEM_RELEASE);
        return -1;
    }
    if(!(pINH->FileHeader.Characteristics & IMAGE_FILE_DLL))
    {
        printf("\nError: The image is not DLL.\n");
         
        VirtualFree(buffer,0,MEM_RELEASE);
        return -1;
    }
    ProcessId=wcstoul(argv[2],NULL,0);
    printf("\nOpening target process.\n");
    hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,ProcessId);
    if(!hProcess)
    {
        printf("\nError: Unable to open target process (%d)\n",GetLastError());
         
        VirtualFree(buffer,0,MEM_RELEASE);
        CloseHandle(hProcess);
        return -1;
    }
    printf("\nAllocating memory for the DLL.\n");
    image=VirtualAllocEx(hProcess,NULL,pINH->OptionalHeader.SizeOfImage,MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE); // Allocate memory for the DLL
    if(!image)
    {
        printf("\nError: Unable to allocate memory for the DLL (%d)\n",GetLastError());
         
        VirtualFree(buffer,0,MEM_RELEASE);
        CloseHandle(hProcess);
        return -1;
    }
    // Copy the header to target process
    printf("\nCopying headers into target process.\n");
    if(!WriteProcessMemory(hProcess,image,buffer,pINH->OptionalHeader.SizeOfHeaders,NULL))
    {
        printf("\nError: Unable to copy headers to target process (%d)\n",GetLastError());
         
        VirtualFreeEx(hProcess,image,0,MEM_RELEASE);
        CloseHandle(hProcess);
        VirtualFree(buffer,0,MEM_RELEASE);
        return -1;
    }
    pISH=(PIMAGE_SECTION_HEADER)(pINH+1);
    // Copy the DLL to target process
    printf("\nCopying sections to target process.\n");
    for(i=0;i<pINH->FileHeader.NumberOfSections;i++)
    {
        WriteProcessMemory(hProcess,(PVOID)((LPBYTE)image+pISH[i].VirtualAddress),(PVOID)((LPBYTE)buffer+pISH[i].PointerToRawData),pISH[i].SizeOfRawData,NULL);
    }
    printf("\nAllocating memory for the loader code.\n");
    mem=VirtualAllocEx(hProcess,NULL,4096,MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE); // Allocate memory for the loader code
    if(!mem)
    {
        printf("\nError: Unable to allocate memory for the loader code (%d)\n",GetLastError());
        VirtualFreeEx(hProcess,image,0,MEM_RELEASE);
        CloseHandle(hProcess);
        VirtualFree(buffer,0,MEM_RELEASE);
        return -1;
    }
    printf("\nLoader code allocated at %#x\n",mem);
    memset(&ManualInject,0,sizeof(MANUAL_INJECT));
    ManualInject.ImageBase=image;
    ManualInject.NtHeaders=(PIMAGE_NT_HEADERS)((LPBYTE)image+pIDH->e_lfanew);
    ManualInject.BaseRelocation=(PIMAGE_BASE_RELOCATION)((LPBYTE)image+pINH->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress);
    ManualInject.ImportDirectory=(PIMAGE_IMPORT_DESCRIPTOR)((LPBYTE)image+pINH->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);
    ManualInject.fnLoadLibraryA=LoadLibraryA;
    ManualInject.fnGetProcAddress=GetProcAddress;
    printf("\nWriting loader code to target process.\n");
    WriteProcessMemory(hProcess,mem,&ManualInject,sizeof(MANUAL_INJECT),NULL); // Write the loader information to target process
    WriteProcessMemory(hProcess,(PVOID)((PMANUAL_INJECT)mem+1),LoadDll,(DWORD)LoadDllEnd-(DWORD)LoadDll,NULL); // Write the loader code to target process
    printf("\nExecuting loader code.\n");
    hThread=CreateRemoteThread(hProcess,NULL,0,(LPTHREAD_START_ROUTINE)((PMANUAL_INJECT)mem+1),mem,0,NULL); // Create a remote thread to execute the loader code
    if(!hThread)
    {
        printf("\nError: Unable to execute loader code (%d)\n",GetLastError());
        VirtualFreeEx(hProcess,mem,0,MEM_RELEASE);
        VirtualFreeEx(hProcess,image,0,MEM_RELEASE);
        CloseHandle(hProcess);
        VirtualFree(buffer,0,MEM_RELEASE);
        return -1;
    }
    WaitForSingleObject(hThread,INFINITE);
    GetExitCodeThread(hThread,&ExitCode);
    if(!ExitCode)
    {
        VirtualFreeEx(hProcess,mem,0,MEM_RELEASE);
        VirtualFreeEx(hProcess,image,0,MEM_RELEASE);
        CloseHandle(hThread);
        CloseHandle(hProcess);
        VirtualFree(buffer,0,MEM_RELEASE);
        return -1;
    }
    CloseHandle(hThread);
    VirtualFreeEx(hProcess,mem,0,MEM_RELEASE);
    CloseHandle(hProcess);
    printf("\nDLL injected at %#x\n",image);
     
    if(pINH->OptionalHeader.AddressOfEntryPoint)
    {
        printf("\nDLL entry point: %#x\n",(PVOID)((LPBYTE)image+pINH->OptionalHeader.AddressOfEntryPoint));
    }
    VirtualFree(buffer,0,MEM_RELEASE);
    return 0;
}