首页
社区
课程
招聘
[旧帖] [原创]自删自启的小程序 0.00雪花
发表于: 2016-1-4 14:23 1790

[旧帖] [原创]自删自启的小程序 0.00雪花

2016-1-4 14:23
1790
在15PB学习文件操作时候想到了这一办法,前辈们已经有更好更高逼格的方法了,这只适合像我这样的新手使用

分享两个自己写的函数.一个复制自己并启动.一个删除自己的附件(只是纯粹的文件操作)

什么时候可以用到这两个函数呢?
1.发现自己的程序被调试时,重启自己
2.想要改变自己当前运行的目录时
3.启动后伪装成另一个程序

为了安全,反调试,或不被查杀,要隐蔽的调用如
1.PostMessage()发送一个自定义消息调用
2.用函数指针调用
3.通过触发异常然后在异常处理里调用
4.在系统回调函数里

在启动时候就调用 灭尸()函数,如果是被保护说明可能在被调试(延迟了),诈尸()可以需要时会触发

第一个函数,复制自己并启动:
int 诈尸()//函数名不知道怎么取,我觉得爱国的时候到了
{
        WCHAR lpPath[MAX_PATH + 1] = { 0 };
        DWORD dwLen = MAX_PATH;
        /*获取进程完整的镜像(程序路径)信息*/
        QueryFullProcessImageName(GetCurrentProcess(), 0, lpPath, &dwLen);
        std::wstring sPath = lpPath;
        //你的应用程序名.exe = sPath.substr(sPath.rfind(L"\\") + 1, sPath.length());
        if (sPath.substr(sPath.rfind(L"\\") + 1, sPath.length()) == L"应用程序.exe")
        {
                sPath = sPath.substr(0, sPath.rfind(L"\\")) + L"\\应用程序 - 副本.exe";
        }
        else
        {
                sPath = sPath.substr(0, sPath.rfind(L"\\")) + L"\\应用程序.exe";
        }
        /*复制文件*/
        CopyFile(lpPath, sPath.c_str(), false);
        /*启动复制出来的文件*/
        STARTUPINFO sui;//启动的时候创建的各种信息(外观等)
        ZeroMemory(&sui, sizeof(STARTUPINFO));//用0填充结构体
        sui.cb = sizeof(STARTUPINFO);
        sui.dwFlags = STARTF_USESTDHANDLES;//标准的输入输出和错误信息
        sui.wShowWindow = SW_SHOW;//可视
        sui.hStdError = GetStdHandle;//错误
        PROCESS_INFORMATION pi;//启动新程序后填充的结构体
        /*启动进程*/
        CreateProcess(sPath.c_str(), NULL, NULL, NULL, TRUE, 0, NULL, NULL, &sui, &pi);
        /*关闭自己 AfxGetMainWnd() MFC函数,获取MFC程序中的主框架类指针*/
        PostMessage(AfxGetMainWnd()->m_hWnd, WM_CLOSE, 0, 0);
        return 0;
}

第二个函数,删除自己的附件
int 灭尸()//这个函数名也不知道怎么取,我觉得爱国的时候又到了
{
        WCHAR lpPath[MAX_PATH + 1] = { 0 };
        DWORD dwLen = MAX_PATH;
        /*获取进程完整的镜像(程序路径)信息*/
        QueryFullProcessImageName(GetCurrentProcess(), 0, lpPath, &dwLen);
        std::wstring sPath = lpPath;
        //你的应用程序名.exe = sPath.substr(sPath.rfind(L"\\") + 1, sPath.length());
        if (sPath.substr(sPath.rfind(L"\\") + 1, sPath.length()) == L"应用程序.exe")
        {
                sPath = sPath.substr(0, sPath.rfind(L"\\")) + L"\\应用程序 - 副本.exe";
        }
        else
        {
                sPath = sPath.substr(0, sPath.rfind(L"\\")) + L"\\应用程序.exe";
        }
        DWORD dwError;
        /*删除文件*/
        DeleteFile(sPath.c_str());
        dwError = GetLastError();
        if (ERROR_FILE_NOT_FOUND == dwError)
        {
                //MessageBox(NULL, _T("系统找不到指定的文件"), NULL, MB_OK);
        }
        else if (ERROR_ACCESS_DENIED == dwError)
        {
                //拒绝访问.可能被调试
                MessageBox(NULL, _T("拒绝访问"), NULL, MB_OK);
        }
        return 1;
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
新浪乐居招聘各技术小鲜肉和大咖,欢迎推荐和自荐!
岗位信息如下:
1.php研发工程师
2.前端工程师 (PC端&移动端)
3.Android研发工程师
4.IOS工程师
5.测试工程师
6.产品经理
7.运维工程师
注:具体职位信息可以加qq私聊。

薪资:根据面试结果而定。
我们是: 纽交所上市公司、行业领先、六险一金、十天年假、各类补助、每日水果、医务室、年度员工体检  。
公司网址:  http://www.leju.com/
工作地点:北京市东城区广渠门首东国际大厦A座9-15层(十号线双井站附近,七号线广渠门外站)
联系方式:有意者将简历发送至job@leju.com(注明应聘职位-来自XX网站)
联系方式:qq:2846932485   电话 :010-58952342

祝工作愉快!
2016-1-4 17:25
0
游客
登录 | 注册 方可回帖
返回
//