对[FCG]KeyGen2.0按钮特效的分析[1].txt
发表于:
2006-10-25 15:23
7015
对[FCG]KeyGen2.0按钮特效的分析[1].txt
首先,注意一个比较特别的现象。原始版本在某些Windows上会崩溃,而崩溃后的Runtime Error对话框的OK按钮居然也是特效。说明什么?一定是钩子。
用IDA反汇编正常的KG2,注意到和KG1的不同点,可以发现多了一个WM_SHOWWINDOW。其处理程序如下:
CODE:00408482 loc_408482:
CODE:00408482 push 0
CODE:00408484 call sub_406984
CODE:00408489 jmp loc_4088E0
可以看到,这是个stdcall/pascal类型的过程。至于到底是哪种,无关紧要。这里的参数只有一个,所以不必担心顺序。
CODE:00406984 sub_406984 proc near
CODE:00406984
CODE:00406984 arg_0 = dword ptr 8
CODE:00406984
CODE:00406984 push ebp
CODE:00406985 mov ebp, esp
//这里是典型的pascal/stdcall调用的开头。但是因为只有1个参数,无法肯定是哪个类型。
//值得注意的是,这是个VC的obj。所以不能因为是VC编译的obj就一概使用cdecl。
CODE:00406987 push ebx
CODE:00406988 mov ebx, [ebp+arg_0]
CODE:0040698B xor eax, eax
CODE:0040698D test ebx, ebx
CODE:0040698F jnz short loc_4069CC
CODE:00406991 cmp ds:hhk, 0
CODE:00406998 jnz short loc_4069D2
CODE:0040699A push 1 ; lParam
CODE:0040699C push offset fn ; lpfn
CODE:004069A1 call GetCurrentThreadId_0
CODE:004069A6 push eax ; dwThreadId
CODE:004069A7 call EnumThreadWindows
CODE:004069AC call GetCurrentThreadId_0
CODE:004069B1 push eax ; dwThreadId
CODE:004069B2 push 0 ; hmod
CODE:004069B4 push offset sub_406D4A ; lpfn
CODE:004069B9 push 4 ; idHook
CODE:004069BB call SetWindowsHookExA
CODE:004069C0 mov ds:hhk, eax
CODE:004069C5 mov eax, ds:hhk
CODE:004069CA jmp short loc_4069D2
CODE:004069CC
CODE:004069CC loc_4069CC:
CODE:004069CC push ebx
CODE:004069CD call sub_406A1F
CODE:004069D2
CODE:004069D2 loc_4069D2:
CODE:004069D2 pop ebx
CODE:004069D3 pop ebp
CODE:004069D4 retn 4
CODE:004069D4 sub_406984 endp
这个初始化过程(实际是个函数)的流程还是非常清楚的。但是这个参数到底是什么?从上面来看,如果参数为0,那么就枚举当前线程的窗口。看来应该是某窗口的句柄。通过查看sub_406A1F,发现00406A53处有对GetWindowLong的调用,而且传过去的ebx作为首个参数。这样,可以判断它是个窗口句柄。这里给出该过程的Pascal形式
Var
CurrentHook:HHOOK;
Function Init(Window:HWND):HHOOK;
Begin
Result:=0;
If Window=0 Then
Begin
If CurrentHook=0 Then
Begin
EnumThreadWindows(GetCurrentThreadId,,1);
CurrentHook:=SetWindowsHookEx(WH_CALLWNDPROC,sub_406D4A,0,GetCurrentThreadId);
Result:=CurrentHook;
End;
End
Else
Begin
sub_406A1F(Window);
End;
End;
Const
CurrentHook:HHOOK=0;
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
上传的附件: