CPU起飞了 最近有朋友在群里反馈,自己服务器的CPU一直处于高占用状态,但用top、ps等命令却一直找不到是哪个进程在占用,怀疑中了挖矿病毒,急的团团转。 ? ?...但神奇的是,这个进程像是隐身了一般,找不到存在的任何痕迹。 进程如何隐藏 现在说回到本文的正题:Linux操作系统上,进程要隐藏起来,有哪些招数?...进程也不例外, Linux系统中有一个特殊的目录:/proc/,这个目录下的内容,不是硬盘上的文件系统,而是操作系统内核暴露出的内核中进程、线程相关的数据接口,也就是procfs,里面记录了系统上正在运行的进程和线程信息...可以从GitHub上下载它们的源码,加入对应的过滤逻辑,在遍历进程的时候,剔除挖矿进程,实现隐藏的目的。...揪出挖矿进程 通过上面的进程隐藏原理看得住来,都是想尽办法隐藏/proc目录下的内容,类似于“障眼法”,所以包含ps、top、ls等等在内的命令,都没办法看到挖矿进程的存在。
文章目录 一、报错信息 二、解决方案 一、报错信息 ---- 使用 OD 调试工具 , 附加进程时 , 出现如下情况 : OD 工具附加进程 , 找不到要附加的游戏进程 , 但是 CE 工具可以搜索到该进程...; 二、解决方案 ---- 关闭 Android Studio 开发工具后 , 可以附加进程 ; 在使用 OD 工具时 , 不要打开开发工具 ; 怀疑有调试功能的开发工具 , 与 OD 工具之间有冲突
3. 再输入 netstat -aon|findstr “1080” -ano相比-an可以看到详细的PID信息
我有一个强大的功能,这个功能就是在 Linux 下使用 GDI 转换 EMF 格式图片为 png 图片,但是有一些有趣的图片会让转换的进程炸掉。...因此我就想让转换服务放在独立的进程,通过进程间调用,也就是命令行调用传入参数的方式,让另一个进程转换图片。...而此时就会遇到一个问题,如何让这个进程也被构建,然后输出到输出路径 在 .NET Core 里面,如果想要让输出文件夹包含两个不同的进程入口文件,最简单的方法是让一个项目引用另一个项目。...error MSB3030: 无法复制文件“C:\lindexi\bin\Release\netcoreapp3.1\lindexi.runtimeconfig.json”,原因是找不到该文件 而如果后续你觉得这个原本是输出为可执行文件的进程不想继续作为输出为...,进程执行失败
NULL, pData->Str, szModuleFileName, MB_OK); return 0; } void InjectCode(DWORD dwPid) { //打开进程并获取进程句柄...; //在目标进程中申请空间 LPVOID lpData = VirtualAllocEx(hProcess, NULL, sizeof(Data),...dwWriteNum = 0; WriteProcessMemory(hProcess,lpData, &Data,sizeof(Data), &dwWriteNum); //在目标进程空间中申请用于保存代码的长度...WaitForSingleObject(hThread,INFINITE); CloseHandle(hThread); CloseHandle(hProcess); } int GetProcessID...:GetWindowThreadProcessId(Pid,&Retn); return Retn; } int main() { int ppid; ppid = ::GetProcessID
这些方法我不准备一一列举,本文想说明的一个问题是,为什么明明通过ps找到了进程,但是通过killall却说找不到呢?如果你没有遇到过这样的问题?那你更要注意了!...至此我们可以猜测,killall命令会去读取进程在proc文件系统中的stat文件里的名字。那么如果这么名字和你要杀死的进程对不上不就找不到了吗? 至此,想必你已经明白前面问题的原因了。...虽然进程名还是hello,但是killall已经找不到它了,不过: $ killall bianchengzhuji 还是可以的。 为什么会出现这种情况呢?...=auto hello 然后你就会惊喜的发现找不到hello进程。...这种情况下直接改变了程序的命令名,因此ps之类的找不到。 这个时候看命令名是什么呢?
FALSE; }; EnumWindows(EnumWindowsCallback, (LPARAM)&data); return data.handle; } DWORD GetProcessID...const char *ProcessName) { PROCESSENTRY32 pe32; pe32.dwSize = sizeof(PROCESSENTRY32); //获取进程快照...,轮流显示每个进程的信息 BOOL bMore = ::Process32First(hProcessSnap, &pe32); while (bMore) {...// qDebug("进程名称:%ls", pe32.szExeFile); //这里得到的应该是宽字符,用%ls,不然无法正常打印 // qDebug("进程ID:%u", pe32....:%ls", pe32.szExeFile); qDebug("进程ID:%u", pe32.th32ProcessID); qDebug("pcPriClassBase
借助AIDL实现IPC通信 一、代码实操—与远端进程的Service绑定 上面的代码都是在当前进程内跟Service通信,现在我们来实现一下,不同进程内Service如何绑定。...,这里并是不只能写remote进程名,你想要进程名都可以 <service android:name=".service.MyRemoteService" android:process...: package xxxx;//aidl所在的包名 //interface之前不能有修饰符 interface IProcessInfo { //你想要的通信用的方法都可以在这里添加 int getProcessId...); } 4、实现我们的aidl类 public class IProcessInfoImpl extends IProcessInfo.Stub { @Override public int getProcessId...这样我们就完成了跟不同进程的Service通信的过程。
在内核开发中,经常需要进行进程和句柄之间的互相转换。进程通常由一个唯一的进程标识符(PID)来标识,而句柄是指对内核对象的引用。...对于进程PID和句柄的互相转换,可以使用函数如OpenProcess和GetProcessId。OpenProcess函数接受一个PID作为参数,并返回一个句柄。...GetProcessId函数接受一个句柄作为参数,并返回该进程的PID。...进程PID与进程HANDLE之间的互相转换: 进程PID转化为HANDLE句柄,可通过ZwOpenProcess这个内核函数,传入PID传出进程HANDLE句柄,如果需要将HANDLE句柄转化为PID则可通过...将句柄HANDLE转化为进程PID的方法是通过调用ZwQueryInformationProcess内核函数,传入进程句柄和信息类别作为参数,函数返回有关指定进程的信息,包括进程PID。
一、GetProcessTimes函数简介(微软MSDN) 微软提供了一个非常有用的API函数GetProcessTimes用来获取进程创建时间、销毁时间、用户态时间、内核态时间,msdn连接为:GetProcessTimes...test_GetProcessTimes() { HANDLE processHandle = GetCurrentProcess(); DWORD currentProcessId = GetProcessId...std::cout << "r: " << r << std::endl; } ::CloseHandle(hProcess); } return r; } 三、进一步扩展:获取每个进程一段时间内的...CPU使用率 由于GetProcessTimes 函数可以获取某个进程的在内核模式下执行的时间量和用户模式下执行的时间量(以100纳秒为单位)。...去获取每个进程的在内核模式下执行的时间量和用户模式下执行的时间量,除以sysTotalTime即为该进程的CPU使用率。
2.如果此值为 TRUE,则此进程创建的进程将继承句柄。否则,进程不会继承这个句柄。...FALSE; } /*CloseHandle(hProcess); CloseHandle(hRemoteThread);*/ return TRUE; } int GetProcessID...break; } } } return iRet; } int main() { int rProcessId = GetProcessID...APC注入的一般几个步骤: •首先通过OpenProcess函数打开目标进程,获取目标进程的句柄。...•只要目标进程中的任何一个线程被唤醒,就会执行APC来完成DLL注入操作 每一个线程都有自己的APC队列,使用QueueUserAPC函数把一个APC函数压入APC队列中。
在内核开发中,经常需要进行进程和句柄之间的互相转换。进程通常由一个唯一的进程标识符(PID)来标识,而句柄是指对内核对象的引用。...对于进程PID和句柄的互相转换,可以使用函数如OpenProcess和GetProcessId。OpenProcess函数接受一个PID作为参数,并返回一个句柄。...GetProcessId函数接受一个句柄作为参数,并返回该进程的PID。...4.1.1 进程PID与进程HANDLE转换进程PID转化为HANDLE句柄,可通过ZwOpenProcess这个内核函数,传入PID传出进程HANDLE句柄,如果需要将HANDLE句柄转化为PID则可通过...将句柄HANDLE转化为进程PID的方法是通过调用ZwQueryInformationProcess内核函数,传入进程句柄和信息类别作为参数,函数返回有关指定进程的信息,包括进程PID。
在内核开发中,经常需要进行进程和句柄之间的互相转换。进程通常由一个唯一的进程标识符(PID)来标识,而句柄是指对内核对象的引用。...对于进程PID和句柄的互相转换,可以使用函数如OpenProcess和GetProcessId。OpenProcess函数接受一个PID作为参数,并返回一个句柄。...GetProcessId函数接受一个句柄作为参数,并返回该进程的PID。...4.1.1 进程PID与进程HANDLE转换 进程PID转化为HANDLE句柄,可通过ZwOpenProcess这个内核函数,传入PID传出进程HANDLE句柄,如果需要将HANDLE句柄转化为PID则可通过...将句柄HANDLE转化为进程PID的方法是通过调用ZwQueryInformationProcess内核函数,传入进程句柄和信息类别作为参数,函数返回有关指定进程的信息,包括进程PID。
问题 如何在 Bash 脚本中等待该脚本启动的多个子进程完成,并且当这其中任意一个子进程以非零退出码结束时,让该脚本也返回一个非零的退出码? 简单的脚本: #!.../bin/bash for i in `seq 0 9`; do calculations $i & done wait 上述脚本将会等待所有 10 个被创建的子进程结束,但它总会给出退出状态 0...我应该如何修改这个脚本,使其能检测到被创建子进程的退出状态,并且当任何子进程以非零代码结束时,让脚本返回退出码 1?.../usr/bin/env bash # 这是一个特殊的 sleep 函数,它将睡眠的秒数作为"错误代码" # 或"返回代码"返回,以便我们可以清楚地看到,实际上 # 我们在每个进程完成时确实获取了它的返回代码...# 存储上一个子进程启动的 pid echo " pid = ${pids[$i]}" done for pid in $pids; do wait $pid rc=$?
处理枚举 该机制将枚举计算机上所有打开的手柄,并标记任何游戏进程手柄。...这样做是为了捕获作弊者,迫使其句柄具有通常无法获得的特定级别的访问权限,因为反作弊寄存器会回调,以防止进程获得游戏进程的内存修改权限。...如果某个进程在游戏进程的打开句柄中被捕获,则会将相关信息(例如访问级别和进程名称)发送到游戏服务器: report_buffer = (__int8 *)malloc(0x2800); report_buffer...= -1 ) { // DUMP OWNING PROCESS NAME target_process_id = GetProcessId...report_buffer, buffer_index, false); free(report_buffer); 流程枚举 shellcode实现的第一个例程是一个包罗万象的功能,用于记录和转储有关所有正在运行的进程的信息
LyShark__h #define LyShark__h #pragma comment(lib,"LyShark.lib"); extern "C"__declspec(dllexport) int GetProcessID...LPVOID lpvoid) { return true; } //************************************************************* // 打开进程...,取进程PID extern "C"__declspec(dllexport) int GetProcessID(char *Name) { HWND Pid=::FindWindow(NULL,Name
Shellcode转储 Shellcode还将扫描游戏进程和Windows进程lsass.exe,以查找可疑的内存分配。...shellcode将IsBadReadPtr在保留和释放的内存上发送垃圾邮件,该内存应该始终返回true,因为在这些部分中通常不会有任何可用的内存。...::send(&local_mem_info, sizeof(report), 0); } } } } } 处理枚举 该机制将枚举计算机上所有打开的手柄,并标记任何游戏进程手柄...如果某个进程在游戏进程的打开句柄中被捕获,则会将相关信息(例如访问级别和进程名称)发送到游戏服务器: report_buffer = (__int8 *)malloc(0x2800); report_buffer...= -1 ) { // DUMP OWNING PROCESS NAME target_process_id = GetProcessId
也就是说如果要想调试进程,就必须要调用DbgkpSuspendProcess将调试进程挂起 首先用调试模式创建进程,然后使用调试循环 如果是异常事件则调用ExceptionHandler ExceptionHandler...InitDebuggeeInfo(DWORD dwPID, HANDLE hProcess) { dwDebuggeePID = dwPID; hDebuggeeProcess = hProcess; } DWORD GetProcessId...InitDebuggeeInfo(DWORD dwPID, HANDLE hProcess) { dwDebuggeePID = dwPID; hDebuggeeProcess = hProcess; } DWORD GetProcessId...InitDebuggeeInfo(DWORD dwPID, HANDLE hProcess) { dwDebuggeePID = dwPID; hDebuggeeProcess = hProcess; } DWORD GetProcessId...显示反汇编代码、寄存器等 /* 硬件断点需要设置在被调试进程的的线程上下文中。 因此当被调试程序触发调试器设置的INT 3断点时,此时设置硬件断点较为合理。
领取专属 10元无门槛券
手把手带您无忧上云