论坛: 编程破解 标题: [转帖]Armadillo转单进程方法原理小析 复制本贴地址    
作者: 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号