避免写shellcode, 还是依赖的硬编码
// 远程代码注入.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <windows.h>
//自己定义个结构体,方面后面参数使用
/************************************************************************/
/* 远程线程实现CreateFile ...
主要是通过teb+peb实现模块隐藏
// HideDll.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
#include <Windows.h>
#include <stdlib.h>
DWORD g_isHide = 0;
typedef struct _UNICODE_STRING
{
USHORT Length;
USHORT Maximu...
可放大, 直接观看, 谢谢ONDragon
接着上篇的文章, 进程间通信,主要依赖的是fileMapping
三个代码部分
1: Game.exe
#include "stdafx.h"
void Attack()
{
printf("**********攻击**********\n");
return;
}
void Relax()
{
printf("**********打坐**********\n");
return;
}
void Blood()
{
printf("**********回血**********\n"...
直接使用远程线程调用 LoadLibrary即可
#include "stdafx.h"
#include <windows.h>
BOOL DllInject(DWORD dwProcessID,LPCTSTR lpDllName)
{
HANDLE hProcess = 0;
//1 打开指定进程
hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcessID);
if(hProcess == NULL){
OutputDebugString("OpenProce...
#include "stdafx.h"
typedef IMAGE_SECTION_HEADER (*PIMAGE_SECTION_HEADERS)[1];
// 计算对齐后的大小
unsigned long GetAlignedSize(unsigned long Origin, unsigned long Alignment)
{
return (Origin + Alignment - 1) / Alignment * Alignment;
}
// 计算加载pe并对齐需要占用多少内存
...
//1、以挂起的方式创建进程,观察创建后的结果
STARTUPINFO ie_si = {0};
PROCESS_INFORMATION ie_pi;
ie_si.cb = sizeof(ie_si);
TCHAR szBuffer[256] = "C:\\notepad.exe";
CreateProcess(
NULL,
szBuffer, ...
思考:
每个线程在执行的时候,都会独自占用一个CPU,当系统中的线程数量 > CPU的数量时,就会存在多个线程共用一个CPU
的情况。但CPU每次只能运行一个线程,Windows每隔20毫秒会进行线程的切换,那比如线程A执行到地址:0x2345678
eax:1 ecx:2 edx:3 ebx:4...还有eflag标志寄存器中的值等等。。。
此时,线程执行时间到了,被切换到了线程B。。。。当线程B的时间片也到了,再切换会线程A时,系统是如何知道该
从哪个地址开始执行呢?被切换前用到的各种寄存器的值该如何恢复呢?
CONTEXT:
该结...
代码来源0day书籍, 需要自行修改测试地址
测试代码
#include <windows.h>
#include <iostream.h>
char shellcode[]=
"\xFC\x68\x6A\x0A\x38\x1E\x68\x63\x89\xD1\x4F\x68\x32\x74\x91\x0C"
"\x8B\xF4\x8D\x7E\xF4\x33\xDB\xB7\x04\x2B\xE3\x66\xBB\x33\x32\x53"
"\x68\x75\x73\x65\x72\x54\x33\xD2\x64...
代码来源于 0day书籍
#include "stdafx.h"
char popup_general[]=
"\xFC\x68\x6A\x0A\x38\x1E\x68\x63\x89\xD1\x4F\x68\x32\x74\x91\x0C"
"\x8B\xF4\x8D\x7E\xF4\x33\xDB\xB7\x04\x2B\xE3\x66\xBB\x33\x32\x53"
"\x68\x75\x73\x65\x72\x54\x33\xD2\x64\x8B\x5A\x30\x8B\x4B\x0C\x8B"
"\x49\x1C\x8B\x09\x8B...
参考 0day书籍中的代码
0x01 内存查找 jmp esp
#include "stdafx.h"
#include<stdlib.h>
#include <windows.h>
#include <stdio.h>
#define DLL_NAME "user32.dll"
int main()
{
BYTE* ptr;
int position,address;
HINSTANCE handle;
BOOL done_flag = FALSE;
handl...
关键是定位虚表的位置
#include "stdafx.h"
#include <windows.h>
class Base{
public:
virtual void Print(){
printf("gyarmy.com\n");
}
};
void hookPrint(){
printf("hook_gyarmy\n");
}
int main(int argc, char* argv[])
{
Base *pb = new Base();
//关键定位虚表的位置
...
// shellCode1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<windows.h>
void ShellCode()
{
typedef DWORD (WINAPI *PGETPROCADDRESS) (HMODULE hModule,LPCSTR lpProcName);
typedef int (WINAPI * PMESSAGEBOX) (HWND hWnd,LPCTSTR lpText,L...
函数指针用
__cdecl: C/C++默认方式,参数从右向左入栈,主调函数负责栈平衡。
__stdcall: windows API默认方式,参数从右向左入栈,被调函数负责栈平衡。
__fastcall: 快速调用方式。所谓快速,这种方式选择将参数优先从寄存器传入(ECX和EDX),剩下的参数再从右向左从栈传入。因为栈是位于内存的区域,而寄存器位于CPU内,故存取方式快于内存,故其名曰“__fastcall”
1、fork入门
计算机程序设计中的分叉函数。返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程标记;否则,出错返回-1。
fork函数将运行着的程序分成2个(几乎)完全一样的进程,每个进程都启动一个从代码的同一位置开始执行的线程。这两个进程中的线程继续执行,就像是两个用户同时启动了
该应用程序的两个副本。
需要注意的是:(1)当调用fork()函数时,在该位置进程一分为二,一个是父进程,一个是子进程。(2)若调用成功返回的是两个值,父进程返回的值为子进程标志,子进程返回的值为0,不成功返回为-1。
为什...