[00025]-[2015-09-20]-[00]-[代码注入技术 --- 0 基础知识]

[创建线程]

    HANDLE CreateThread(
            LPSECURITY_ATTRIBUTES lpThreadAttributes;    // NULL
            DWORD dwStackSize,                // 0
            LPTHREAD_START_ROUTINE lpStartAddress,        // ....
            LPVOID lpParameter,                // ....
            DWORD dwCreationFlags,                // 0
            LPDWORD lpThreadId                // NULL
            );

    HANDLE CreateRemoteThread(
            HANDLE hProcess,                // ....
            LPSECURITY_ATTRIBUTES lpThreadAttributes;    // NULL
            DWORD dwStackSize,                // 0
            LPTHREAD_START_ROUTINE lpStartAddress,        // ....
            LPVOID lpParameter,                // ....
            DWORD dwCreationFlags,                // 0
            LPDWORD lpThreadId                // NULL
                );

    // 从某种意义上说
    CreateThread(...)
    {
        CreateRemoteThread(GetCurrentProcess(), ...);
    }

[事件同步处理]

    WaitForSingleObject(
            HANDLE hHandle,
            DWORD dwTimeOut    // INFINITE
            );

    WaitForMultipleObject(
            DWORD nCount,
            CONST HANDLE * lpHandle,
            BOOL fWaitAll,
            DWORD dwTimeOut
            );

    CRTICAL_SECTION m_cs;
    InitializeCriticalSection(&m_cs);
    DeleteCriticalSection(&m_cs);
    EnterCriticalSection(&m_cs);
    LeaveCriticalSection(&m_cs);

[DLL 的动态加载和卸载]

    HANDLE LoadLibrary( LPCTSTR lpFileName );
    FARPROC GetProcAddress(
                HMODULE hModule,
                LPCTSTR lpProcName
                );
    BOOL FreeLibrary( HMODULE hModule );

[(远程)目标进程内存空间的操作:分配内存空间和向内存空间写入数据]

    LPVOID VirtualAllocEx(
            HANDLE hProcess,            // 目标进程
            LPVOID lpAddress,            // 开始地址 NULL
            SIZE_T dwSize,                // 分配大小
            DWORD flAllocationType,            // 申请内存的状态类型 MEM_COMMIT
            DWORD flProtect                // 申请内存的内存属性 PAGE_READWRITE
            );

    WriteProcessMemory(
            HANDLE hProcess,            // 目标进程句柄
            LPVOID lpBaseAddress,            // 写入内存的起始地址
            LPVOID lpBuffer,            // 内容缓冲区(源地址)
            DWORD nSize                // 写入内容的长度
            );
时间: 2024-10-24 03:42:53

[00025]-[2015-09-20]-[00]-[代码注入技术 --- 0 基础知识]的相关文章

MYSQL注入天书之基础知识

第一部分/page-1 Basic Challenges Background-1 基础知识 此处介绍一些mysql注入的一些基础知识. (1)注入的分类---仁者见仁,智者见智. 下面这个是阿德玛表哥的一段话,个人认为分类已经是够全面了.理解不了跳过,当你完全看完整个学习过程后再回头看这段.能完全理解下面的这些每个分类,对每个分类有属于你的认知和了解的时候,你就算是小有成就了,当然仅仅是sql注入上. 基于从服务器接收到的响应? ▲基于错误的SQL注入 ▲联合查询的类型 ▲堆查询注射 ▲SQL

shell编程技术之-基础知识

一.脚本结构 linux下shell的脚本,是将一系列命令序列写在一个文本文件,而这个文本文件时可执行的.相对命令行来说,开发效率提高.因此他的构架有2部分构成#!和命令序列.其中#!指明此脚本是用哪个解析器来解析. 例如: 二.基础知识 2.1 变量 shell本允许用户设置和使用自己的变量,变量可以是数字或者字符串,用户无需指定其类型,也无需在使用前定义. 例如: 1 #!/bin/bash 2 3 #2.2 4 a="hello word" 5 b=5 6 echo "

我关注的一周技术动态 2015.09.20

分布式系统实践 1. Google编程学院:分布式系统设计简介 http://article.yeeyan.org/view/150661/107052 要点: 这是google code university(可惜已经不维护了)介绍的分布式系统设计的基本原则, 这是中文翻译版. 文章中指出, 分布式编程和单机编程最大的区别在于对故障的处理. 分布式系统中增加了3种故障类型, 分别是成功, 失败和不确定. 不确定是最难处理的情况, 正确的处理了这3种情况, 也就意味着你对分布式系统编程的理解程度

[00027]-[2015-09-20]-[02]-[代码注入技术 --- 2 直接代码写入]

DWORD m_dwPid; void CPureCode_InJectDlg::OnBtnInject() { // TODO: Add your control notification handler code here UpdateData(TRUE); if(m_dwPid == 0) { MessageBox("PID is UnValid !"); return ; } HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, F

[00026]-[2015-09-20]-[01]-[代码注入技术 --- 1 DLL的注入和卸载]

定义全局变量 DWORD m_dwPid; CString m_dllPath; [打开按钮响应函数] void OnBtnOpen() { CFileDialog dlg(TRUE,//TRUE是创建打开文件对话框,FALSE则创建的是保存文件对话框 ".dll",//默认的打开文件的类型 NULL,//默认打开的文件名 OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,//打开只读文件 "文本文件(*.dll)|*.dll|所有文件 (*.*)

我关注的一周技术动态 2015.09.27

分布式系统实践 1. 走向分布式 http://dcaoyuan.github.io/papers/pdfs/Scalability.pdf 要点: 这是台湾的一个作者写的为期30天的分布式系统设计学习小册子, 刚开始涵盖了分布式系统设计的基本理论, 包括partiton, replication和CAP理论, 后面以kafka和zookeeper为例, 将上述理论加以实例化介绍, 内容非常精简, 适合初学者阅读和学习. 2. 如何编写一个分布式数据库 http://mp.weixin.qq.c

我关注的一周技术动态 2015.09.13

服务化和资源管理技术 1. 「Allen 谈 Docker 系列」之 Docker 镜像内有啥,存哪? http://mp.weixin.qq.com/s?__biz=MzA5NTUxNzE4MQ==&mid=220597399&idx=1&sn=3196ab17d396df2379db61bc1f4e8652&scene=1&srcid=r3aAMluxx25ucjdz8AEA&key=dffc561732c226518710e3db4f30f5904c4

iOS开发技术之应用代码注入防护

1.介绍在应用开发过程中,我们需要考虑到应用安全的问题.而应用安全的问题涉及到很多方面的内容,随着iOS系统的不断更新,我们需要在防护的手段上发生一些改变.如下所示:[1]防止静态分析:代码混淆.逻辑混淆[2]防止重签名:应用ID 检测.代码的HASH检测 2.代码的注入方式代码的注入的方式大致分为两类:[1]越狱注入:通过修改DYLD_INSERT_LIBRARIES环境变量的值,来插入动态库并执行[2]非越狱注入:直接将自定义的Framework库或者dylib/tbd库打包进入App并重新

[转载]Dll注入技术之注册表注入

转自:黑客反病毒论坛 DLL注入技术之REG注入    DLL注入技术指的是将一个DLL文件强行加载到EXE文件中,并成为EXE文件中的一部分,这样做的目的在于方便我们通过这个DLL读写EXE文件内存数据,(例如 HOOK EXE文件中的API),或以被注入EXE的身份去执行一些操作等等.     REG注入原理是利用在Windows 系统中,当REG以下键值中存在有DLL文件路径时,会跟随EXE文件的启动加载这个DLL文件路径中的DLL文件.当如果遇到有多个DLL文件时,需要用逗号或者空格隔开