|
![]() | 作者: yongmin [yongmin]
![]() |
登录 |
作者:Cyg07 转贴自:一蓑烟雨 对高手们提供的Armadillo转单进程方法小菜我一直不是很理解,直到看下了线程同步方面的资料才明白脱壳时用到的OpenMutex、CreateMutex是利用互斥对象实现单进程。补习了下相关的基础知识: HANDLE CreateMutex( LPSECURITY_ATTRIBUTES lpMutexAttributes, // 安全属性指针 BOOL bInitialOwner, // 初始拥有者 LPCTSTR lpName // 互斥对象名 ); 参数bInitialOwner主要用来控制互斥对象的初始状态。一般多将其设置为FALSE,以表明互斥对象在创建时并没有为任何线程所占有。如果在创建互斥对象时指定了对象名,那么可以在本进程其他地方或是在其他进程通过OpenMutex()函数得到此互斥对象的句柄。OpenMutex()函数原型为: HANDLE OpenMutex( DWORD dwDesiredAccess, // 访问标志 BOOL bInheritHandle, // 继承标志 LPCTSTR lpName // 互斥对象名 ); patch code: pushad // JMP Here! pushfd // 保护现场 push ecx xor eax,eax push eax push eax call kernel32.CreateMutexA /* eax = CreateMutex( NULL, FALSE, ECX); */ popfd popad // 恢复现场 jmp kernel32.OpenMutexA // 飞回 OpenMutexA 补丁代码的作用就是在OpenMutexA函数加载前建立好互斥对象,让Armadillo无法建立多进程。 没什么技术含量(路过的兄弟莫见笑),只是希望自己能多理解脱壳的一些原理而已。 本文部分内容均为摘自 《Visual C++线程同步技术剖析 [我是愤怒 著]》。 |
地主 发表时间: 08-04-21 10:54 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号