QQ本地会员补丁汇编源码
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;QQ本地会员 源代码 [通过msimg32.dll劫持启动] shuax 2011.05.21
;msimg32.Asm
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.586
.model flat, stdcall
option casemap :none
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;头文件
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
include windows.inc
include kernel32.inc
includelib kernel32.lib
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;全局变量
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.data
;初始化的变量
szCopyright db 'QQLocalVIP by shuax',0
szMsimg32 db '\msimg32.dll',0
szKernelUtil db 'KernelUtil.dll',0
szvSetDdrawflag db 'vSetDdrawflag',0
szDllInitialize db 'DllInitialize',0
szGradientFill db 'GradientFill',0
szAlphaBlend db 'AlphaBlend',0
szTransparentBlt db 'TransparentBlt',0
szGetSelfUin db '?GetSelfUin@Contact@Util@@YAKXZ',0
szIsFlagValid db '?IsFlagValid@Contact@Util@@YAHKK@Z',0
;声明函数指针
p_GetSelfUin typedef proto C ;使用__cdecl
p_IsFlagValid typedef protoC:DWORD,:DWORD ;使用__cdecl
g_GetSelfUin typedef ptr p_GetSelfUin
g_IsFlagValid typedef ptr p_IsFlagValid
GetSelfUin g_GetSelfUin0;判断是否是自己
IsFlagValid g_IsFlagValid0
.data?
;未初始化的变量
szSysDLL BYTE MAX_PATHDUP(?)
g_msimg32 dd ?
g_kernelutil dd ?
g_vSetDdrawflag dd ?
g_DllInitialize dd ?
g_GradientFill dd ?
g_AlphaBlend dd ?
g_TransparentBlt dd ?
g_bak BYTE 10 DUP(?)
g_jmp BYTE 5 DUP(?)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;代码
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.code
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;导出函数
vSetDdrawflag proc
jmp g_vSetDdrawflag
vSetDdrawflag endp
DllInitialize proc
jmp g_DllInitialize
DllInitialize endp
GradientFill proc
jmp g_GradientFill
GradientFill endp
AlphaBlend proc
jmp g_AlphaBlend
AlphaBlend endp
TransparentBlt proc
jmp g_TransparentBlt
TransparentBlt endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;本地会员
MyIsFlagValid proc C QQUIN:DWORD, Flag:DWORD
.IF Flag==4;是否是判断会员
.IF GetSelfUin!=0
invoke GetSelfUin
.IF QQUIN==eax ;判断是否是自己,如果是则返回TRUE
mov eax, TRUE
jmp original
.ENDIF
.ENDIF
.ENDIF
.IF IsFlagValid!=0
invoke IsFlagValid,QQUIN,Flag;调用原始函数
.ENDIF
;返回
original:
mov esp,ebp ;使用__cdecl
pop ebp
retn
MyIsFlagValid endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;5字节inline hook
HookCode proc TargetProc:DWORD, NewProc:DWORD
;参数检查
.IF TargetProc == 0
ret
.endif
;使得g_bak区块可执行
mov ecx,offset g_bak
mov IsFlagValid,ecx
invoke VirtualProtect,IsFlagValid,10,PAGE_EXECUTE_READWRITE,0
;读取前5个字节
invoke ReadProcessMemory,-1,TargetProc, IsFlagValid, 5, NULL;
.IF eax!=0
;如果已经被hook过,则修正JMP偏移
mov ecx,dword ptr
.IF cl==0E9h
mov ecx,dword ptr
add ecx,TargetProc
sub ecx,offset g_bak
mov dword ptr ,ecx
.endif
;写入还原
mov ecx,offset g_bak
add ecx,5
mov byte ptr ,0E9h
inc ecx
mov eax,TargetProc
sub eax,ecx
inc eax
mov dword ptr ,eax
;写入跳转
mov eax,offset g_jmp
mov byte ptr ,0E9h
inc eax
mov ecx,NewProc
sub ecx,TargetProc
sub ecx,5
mov dword ptr ,ecx
invoke WriteProcessMemory,-1,TargetProc, addr g_jmp, 5, NULL
.endif
ret
HookCode endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;DllMain
DllEntry proc hModule:HINSTANCE, dwReason:DWORD, lpReserved:DWORD
.IF dwReason == DLL_PROCESS_ATTACH
;获得系统msimg32.dll地址
invoke GetSystemDirectory,addr szSysDLL, MAX_PATH
invoke lstrcat,addr szSysDLL, addr szMsimg32
invoke LoadLibrary,addr szSysDLL
.IF eax!=0
;获得各个函数地址
mov g_msimg32,eax
invoke GetProcAddress,g_msimg32,addr szvSetDdrawflag
mov g_vSetDdrawflag, eax
invoke GetProcAddress,g_msimg32,addr szDllInitialize
mov g_DllInitialize, eax
invoke GetProcAddress,g_msimg32,addr szGradientFill
mov g_GradientFill, eax
invoke GetProcAddress,g_msimg32,addr szAlphaBlend
mov g_AlphaBlend, eax
invoke GetProcAddress,g_msimg32,addr szTransparentBlt
mov g_TransparentBlt, eax
;写入本地会员hook
invoke GetModuleHandle,addr szKernelUtil
.IF eax!=0
mov g_kernelutil,eax
invoke GetProcAddress,g_kernelutil,addr szGetSelfUin
mov GetSelfUin, eax
invoke GetProcAddress,g_kernelutil,addr szIsFlagValid
invoke HookCode,eax,MyIsFlagValid
;打印版权信息
invoke OutputDebugString,addr szCopyright
.ENDIF
.ENDIF
.ENDIF
mov eax, TRUE
ret
DllEntry Endp
End DllEntry
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QQ本地会员 源代码 [采用msimg32.dll劫持] shuax 2011.05.21;msimg32.Def;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;LIBRARY "msimg32.DLL"EXPORTS vSetDdrawflag DllInitialize GradientFill AlphaBlend TransparentBlt 虽然看不懂 但也不知道有什么用 11年耍下的源码..还有用? 836955823 发表于 2013-8-24 20:01 static/image/common/back.gif
11年耍下的源码..还有用?
必须有用,修改下就好
神奇的:Opera/9.80 (Windows NT 6.2; WOW64; U; OperaDot; zh-cn) Presto/2.10.229 Version/11.64(zh-cn)
┈─━ 你的幸福是我的快乐!(+^_^*)
——┃俺为尾巴代言← 耍X很了不起的 知道怎么改有用也很了不起 围观,不明觉厉 有易语言的吗
页:
[1]