针对灰产外挂的分析与研究
分析外挂样本一般的步骤
对外挂样本进行简单的信息分析。
分析还原外挂样本具体功能实现方式。
分析外挂样本的反检测功能。
1. 对外挂样本进行简单的信息分析
查看文件属性,灰产及外挂的标配语言 “易语言”
通过Exeinfo Pe查壳工具进行对外挂样本查壳,看看发现是没加壳的应用程序。(心里突然咯噔了下,收费的外挂竟然都不做点保护,不对自己的程序负责,就直接把程序在市场上裸奔了)
2.分析还原外挂样本具体功能实现方式
2.1 网络验证功能
外挂一启动(注意:虚拟机环境)的界面就是收费的登陆账号验证,专业点的说也就是网络验证。
外挂的网络验证选择方案: 外挂作者一般采用的方案,直接套用现场的的网络验证。很少很少自己又开发外挂又自己写网络验证。
接下来我们需要通过逆向分析,分析下这个网络验证是采用什么验证的,是个什么样的实现思路和方法。
接着就开始需要借助反汇编工具ollydbg了(这里要感谢下这个伟大的ollydbg工具开发者的赏饭吃,让打工人有个好用的吃饭工具),ollydb一般有两种方式进行动态反汇编调试:1.用ollydbg打开要进行调试的样本。2.通过启动样本,接着进行用ollydbg工具进行附加调试分析。
附加完直接上字符串分析大法,在ollydbg字符串界面中很明显这里有几个很明显的信息 :5yyz.com的链接地址和核盾的敏感信息。
一顿分析过后核盾的后台登陆界面就出来了,到这里就够了,就不在进行对这服务器干啥了,不过随手一查下,这服务器直接放在阿里云的
既然是逆向了,那么也不能简单的停留在这么肤浅的字符串信息上了,接下来就往下看下这个网络验证的大概实现功能并顺手把这个网络验证简单的用代码给还原下。
通过下断点(INT3 函数断点)然后堆栈回溯的方法进行分析(具体的每个详细步骤就不罗列了),最终确认到登陆验证的入口函数是以下的函数。
接着结合下静态分析强大的IDA工具(这里也要感谢下IDA开发工具的,让我们破解软件还原代码成为了可能)。直接将外挂样本拖进IDA工具里面,还是一样直接先上字符串查看大法,接着查看字符串的x86汇编代码调用。
再通过IDA中强大的F5功能,将汇编代码转换为伪代码。
结合以上ollydbg工具的动态调试和IDA静态分析的伪代码结构,我们可以梳理出,该样本的主要通过调用InternetOpenA、HttpSendRequestA等API函数直接和https进行服务端通讯校验的,接下来将样本的网络验证简单的还原下大概的功能实现。
/*
功能:还原登陆验证向服务端请教的实现
参数:就是直接服务器的url就可以
*/bool loginSendHttpData(CString url)
{if(url.IsEmpty()){return false;}HINTERNET hInternet,hConnect,hRequest; hInternet = (HINSTANCE)InternetOpenA(NULL, INTERNET_OPEN_TYPE_PRECONFIG, NULL,NULL,NULL); if(!hInternet) {InternetCloseHandle(hInternet);hInternet = NULL;return false;}hConnect = (HINSTANCE)InternetConnectA(hInternet, url, INTERNET_DEFAULT_HTTPS_PORT, NULL, NULL, INTERNET_SERVICE_HTTP,0,0);if(!hConnect) { if(hConnect) InternetCloseHandle(hConnect);if(hInternet) InternetCloseHandle(hInternet); } hRequest = (HINSTANCE)HttpOpenRequestA(hConnect,"POST",url, "HTTP/1.1" ,NULL,NULL, INTERNET_FLAG_RELOAD|INTERNET_FLAG_NO_CACHE_WRITE,0); bool ret= HttpSendRequestA(hRequest,0,0,0,0);if(!hRequest) {if(hRequest) InternetCloseHandle(hRequest); if(hConnect) InternetCloseHandle(hConnect); if(hInternet) InternetCloseHandle(hInternet); } return true;
}
2.2 外挂具体实现功能的前部分
先上来一个热乎的外挂登陆后的具体功能实现界面
以下是ollydbg通过下函数的断点也就是int3断点方式调试,接着分析触发断点下的堆栈数据,通过堆栈数据可以定位到下面的关键函数位置。
下面的函数call的主要功能流程:
就是通过WinExec启动notepad的程序。
启动程序后通过查找notepad程序的窗口类名Notepad获取进程id。
通过远程线程方式将真正的外挂模块QT模块注入到notepad程序里面
强制关闭掉外挂的主程序。
下图是ollydbg定位到外挂功能关键函数的主入口函数。
下图是通过ollydgb动态调试后选中的函数。它主要功能是通过查找窗口,实现远程线程注入模块的函数。
结合强大的静态分析工具IDA,分析定位到外挂它是通过调用底层系统WinExec函数去启动notepad进程,为后续的外挂模块找了一个可以安全注入的宿主程序(将外挂的主要模块放在记事本进程隐藏起来)。
通过PostQuitMessage消息机制强制关闭自身的外挂程序(这个是为了防止外挂程序被游戏反外挂检测到的操作)
外挂功能一顿操作后终于将最重要的外挂模块通过远程线程方式注入到notepad进程中,这个QT模块也将开启所谓的隐身蹲守模式,独自蹲守着那个一直期待的游戏客户端的启动并将游戏客户端的重要内存数据进行修改。
以上就会外挂前部分的功能实现,我们接下来来还原下这外挂的具体实现
启动外挂的总流程
//点击开启功能总流程
void startNotepad()
{//启动notepad程序WinExec("\\system32\\notepad.exe",SW_SHOW);//通过窗口类名获取进程信息HWND hWnd = FindWindowA(NULL, "Notepad");DWORD dwPid = 0;GetWindowThreadProcessId(hWnd, &dwPid);//远程线程注入dllInJectNotepad(dwPid, "QT.dll");//强制关闭外挂程序PostQuitMessage(WM_QUIT);
}
注入QT模块到记事本程序的实现
bool InJectNotepad(DWORD processId, CString DllName)
{if (DllName.IsEmpty())return false;HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processId); if (hProcess == INVALID_HANDLE_VALUE)return false;LPVOID pszDllName = VirtualAllocEx(hProcess, NULL, 4096, MEM_COMMIT, PAGE_EXECUTE_READWRITE); if (NULL == pszDllName)return false;bool bRet = WriteProcessMemory(hProcess, pszDllName, DllName, MAX_PATH, NULL);if(false == bRet)return false;HANDLE m_hInjecthread = CreateRemoteThread(hProcess, NULL,0, (LPTHREAD_START_ROUTINE)LoadLibraryA, pszDllName, NULL, NULL); if (NULL == m_hInjecthread)return false;DWORD dw = WaitForSingleObject(m_hInjecthread, -1);DWORD dwExitCode;GetExitCodeThread(m_hInjecthread, &dwExitCode);HMODULE m_hMod = (HMODULE)dwExitCode;BOOL bReturn = VirtualFreeEx(hProcess, pszDllName, 4096, MEM_DECOMMIT);if (NULL == bReturn)return false;CloseHandle(hProcess);hProcess = NULL;return true;}
2.3 外挂具体实现功能的后部分
接下来我们再看下这个外挂中最重要的QT模块都干了什么事情。
遍历当前环境下的所有启动的进程。
将对游戏客户端进行远程线程注入修改游戏客户端内存数据以此实现外挂的功能。
下图就是QT模块的通过IDA工具简单的截图。
我们在把变量当前环境下的进程信息代码也还原下,远程线程注入代码的就不实现了,可以参考下前面的远程线程注入dll方式
//QT.dll 功能
//遍历游戏进程名称获取的进程的pid
DWORD GetProcessId(CString pszProcessName)
{HANDLE hProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);if (INVALID_HANDLE_VALUE == hProcess){return 0;}DWORD dwProcessId = 0;PROCESSENTRY32 process32 = { 0 };process32.dwSize = sizeof(PROCESSENTRY32);BOOL bRetProcess = FALSE;bRetProcess = Process32First(hProcess, &process32);do{if (_tcscmp(pszProcessName, process32.szExeFile) == 0){dwProcessId = process32.th32ProcessID;break;}bRetProcess = Process32Next(hProcess, &process32);} while (bRetProcess);CloseHandle(hProcess);return dwProcessId;
}
3.分析外挂样本的反检测功能
外挂做了敏感字的规避,也就是外挂样本的窗口标题外挂窗口中没有过多的敏感文字展示。
外挂样本通过注入到notepad的宿主进程中在进行操作外挂,也就是没有直接在外挂样本中操作这个功能,也是一个反外挂检测的一个方式。
大佬们留个关注再走呗,后续精彩文章不断
针对灰产外挂的分析与研究相关推荐
- 第十四期 | ETC车主收到的诈骗短信原来是黑灰产在搞鬼?
目录 互联网+时代,车企的安全挑战 黑灰产的两种攻击方式:撞库攻击&密码爆破攻击 1.撞库攻击: 2.密码爆破攻击 黑灰产变现方式 1.贩卖数据 2.直接变现 3.电信诈骗 防控建议 1.终端 ...
- 蒲公英内测分发平台解读2022年黑灰产APP诈骗
什么是黑灰产APP?很多朋友可能不知道,但是没准你的手机里已经主动或者被动了下载或使用着这类APP.国内活跃的专业技术黑灰产业平台多达数万个,许多个人.宝妈.学生党都在不知不觉中参与了黑灰产. 比较& ...
- 【黑灰产犯罪研究】Web应用攻击
1.概念 Web应用攻击是指扫描探测器.WebShell上传与通信.跨站点请求伪造 (CSRF). SOL注入攻击.跨站脚本攻击(XSS攻击).钓鱼网站等所有网络上 存在的攻击合集,简称Web攻击. ...
- 安全学习概览——恶意软件分析、web渗透、漏洞利用和挖掘、内网渗透、IoT安全分析、区块链、黑灰产对抗...
1 基础知识 1.1 网络 熟悉常见网络协议: https://www.ietf.org/standards/rfcs/ 1.2 操作系统 1.3 编程 2 恶意软件分析 2.1 分类 2.1.1 木 ...
- 【黑灰产犯罪研究】涉物联网犯罪
1.概念 随着物联网发展和人工智能的应用技术的不断提高,犯罪分子攻破系统 并窃取数据的渠道更多样化.其中, IoT 设备和应用会存有大量的个人数据. 运营数据和企业数据,必须特别关注安全连接.设备强化 ...
- 极验:验证码在黑灰产对抗中的角色和实践
导读:随着互联网技术的发展,网络上的黑灰产对抗也日益激烈.在黑灰产攻防双方你追我赶的动态博弈中,验证码扮演着提高攻击门槛.处置恶意流量.辅助风险判别等重要角色.今天将和大家分享验证码的诞生与发展过程. ...
- 超千人围观,普及 “反诈” 常见场景及应对手段,还有黑灰产攻防手段
10 月 26 日,由软件绿色联盟举办的 "反诈" 主题直播活动已圆满落幕.本次直播我们特邀了两位 360 的资深技术专家,对<电信网络诈骗趋势解读与应对>.<黑 ...
- 知物由学 | “群控软件”助长黑灰产套利的零和游戏,硬核技术打击隐秘的不公
导读:群控系统一般由多个部分组成,例如在手机端运行的服务.在手机端用于模拟输入的输入法.在 PC 端用来对所有设备操作与监控的中控台.在服务器中运行的连接所有设备的服务端等.本文主要介绍对群控软件技术 ...
- 《2015互联网安全年报》,移动端成重灾区,黑灰产日益成熟
日前,阿里聚安全正式对外发布<2015互联网安全年报 >(以下简称年报),该报告全面披露了2015年的互联网安全状况. 有别于传统的安全报告,阿里聚安全通过大量数据,从病毒.漏洞.物联网. ...
- 顶象业务安全情报——企业一眼“看透”黑灰产
不可否认,随着互联网的发展,黑灰产们也变得越来越"聪明".它们不仅熟悉业务流程以及防护逻辑,并且能够熟练运用自动化.智能化的新兴技术实施攻击或诈骗行为,且极难识别.对购物.金融.社 ...
最新文章
- 测试三相无刷电机驱动器 XXD2212 电调
- 2020春季学期信号与系统课堂参与信息处理
- Contest Leaderboard(分组、聚合、连接)
- 动态改变_【学校动态】在坚守与改变中追求卓越——礼县二中召开2019—2020学年度秋季学期第二次全体教职工大会...
- amixer 如何切通道_三峡工程如何突破技术难题?
- IDEA最全使用教程
- Differential Privacy差分隐私
- MySQL之四种SQL性能分析工具
- 如何接入银联“快速接入”产品API
- C/C++ 模拟键盘操作(一)
- U-boot中怎么添加配置菜单选项
- Linux汇编----变址寻址与间接寻址
- 单元测试 0%-40%+经验
- 数字资产普及,如何规避加密风险?
- css实现精灵图片加载图片失败
- commvault备份mysql_Commvault数据库备份恢复功能介绍.pptx
- google earth 开发(一)
- 重温 w3cshool css3
- vue实现swiper两端小中间大的效果 圆形
- 基础篇:6.11)通用公差规则
热门文章
- 读《费曼学习法》有感
- 马化腾:不太相信弯道超车 更欣赏仰望星空和脚踏实地
- 飞马D200S无人机与机载激光雷达在大比例尺DEM建设中的应用
- Android网络通讯之Retrofit
- 已取消到该网页的导航 桌面右下角
- 完美池宇峰畅谈创业点滴 男怕入错行
- linux中tmp文件在哪,学习LINUX入门,/tmp文件夹
- RestTemplate总结
- webstorm绝对路径引入echarts_Webstorm+Webpack+echarts构建个性化定制的数据可视化图表两个echarts详细教程(柱状图,南丁格尔图)...
- Java下载Excel时文件名称乱码