【破解日期】 2006年5月16日
【破解作者】 Ryosuke
【作者邮箱】 没有
【作者主页】 没有
【使用工具】 OD
【破解平台】 Windows 95/98/ME/2000/XP
【软件名称】 运行多个MSN的外挂器 V1.0
【下载地址】 http://www.skycn.com/soft/26790.html
【软件简介】 MSN多开外挂1.0 本软件绿色软件,无需安装 使用方法: 直接点击运行。然后 每次点击 再运行一个MSN,就可以多开一个msn了 【软件大小】 95 KB
【加壳方式】 无壳
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
【破解内容】
MSN不能象QQ那样能同时开几个,正好在网上看见了一款这样的软件,想分析一下如何破解MSN的单进程。
先破解注册码,点击注册,随便输入。分析之来到下面
00402C60 . 6A FF push -1
00402C62 . 68 B8354200 push 004235B8 ; SE 处理程序安装
00402C67 . 64:A1 0000000>mov eax, fs:[0]
00402C6D . 50 push eax
00402C6E . 64:8925 00000>mov fs:[0], esp
00402C75 . 83EC 08 sub esp, 8
00402C78 . 56 push esi
00402C79 . 8BF1 mov esi, ecx
00402C7B . 6A 01 push 1
00402C7D . E8 C6720100 call 00419F48
00402C82 . A1 CCF54200 mov eax, [42F5CC]
00402C87 . 894424 04 mov [esp+4], eax
00402C8B . 8D8E 1C010000 lea ecx, [esi+11C]
00402C91 . C74424 14 000>mov dword ptr [esp+14], 0
00402C99 . 51 push ecx
00402C9A . 8D4C24 08 lea ecx, [esp+8]
00402C9E . E8 64870100 call 0041B407
00402CA3 . 51 push ecx
00402CA4 . 8D5424 08 lea edx, [esp+8]
00402CA8 . 8BCC mov ecx, esp
00402CAA . 896424 0C mov [esp+C], esp
00402CAE . 52 push edx
00402CAF . E8 D3830100 call 0041B087
00402CB4 . E8 77FEFFFF call 00402B30 ;关键CALL
00402CB9 . 83C4 04 add esp, 4
00402CBC . 85C0 test eax, eax
00402CBE . 74 1C je short 00402CDC
00402CC0 . 6A 00 push 0
00402CC2 . 68 5CF24200 push 0042F25C ; ngnsss
00402CC7 . 68 78F24200 push 0042F278 ; 注册成功
00402CCC . 8BCE mov ecx, esi
00402CCE . E8 196B0100 call 004197EC
00402CD3 . 8BCE mov ecx, esi
00402CD5 . E8 509A0100 call 0041C72A
00402CDA . EB 75 jmp short 00402D51
00402CDC > 6A 08 push 8
00402CDE . 68 64F24200 push 0042F264 ; 1163659294813585
00402CE3 . 6A 08 push 8
00402CE5 . 8D4C24 10 lea ecx, [esp+10]
00402CE9 . E8 FB890100 call 0041B6E9
00402CEE . 50 push eax
00402CEF . E8 FC800000 call 0040ADF0
00402CF4 . 83C4 0C add esp, 0C
00402CF7 . 85C0 test eax, eax
00402CF9 . 75 12 jnz short 00402D0D
00402CFB . 50 push eax
00402CFC . 68 5CF24200 push 0042F25C ; ngnsss
00402D01 . 68 38F24200 push 0042F238 ; 这是个盗版的注册号,请注册正式版本
00402D06 . 8BCE mov ecx, esi
00402D08 . E8 DF6A0100 call 004197EC
00402D0D > 6A 08 push 8
00402D0F . 68 24F24200 push 0042F224 ; 0386848021608060
00402D14 . 6A 08 push 8
00402D16 . 8D4C24 10 lea ecx, [esp+10]
00402D1A . E8 CA890100 call 0041B6E9
00402D1F . 50 push eax
00402D20 . E8 CB800000 call 0040ADF0
00402D25 . 83C4 0C add esp, 0C
00402D28 . 85C0 test eax, eax
00402D2A . 75 12 jnz short 00402D3E
00402D2C . 50 push eax
00402D2D . 68 5CF24200 push 0042F25C ; ngnsss
00402D32 . 68 38F24200 push 0042F238 ; 这是个盗版的注册号,请注册正式版本
00402D37 . 8BCE mov ecx, esi
00402D39 . E8 AE6A0100 call 004197EC
00402D3E > 6A 00 push 0
00402D40 . 68 5CF24200 push 0042F25C ; ngnsss
00402D45 . 68 18F24200 push 0042F218 ; 注册号无效
00402D4A . 8BCE mov ecx, esi
00402D4C . E8 9B6A0100 call 004197EC
00402D51 > 8D4C24 04 lea ecx, [esp+4]
00402D55 . C74424 14 FFF>mov dword ptr [esp+14], -1
00402D5D . E8 B0850100 call 0041B312
00402D62 . 8B4C24 0C mov ecx, [esp+C]
00402D66 . 5E pop esi
00402D67 . 64:890D 00000>mov fs:[0], ecx
00402D6E . 83C4 14 add esp, 14
00402D71 . C3 retn
跟进关键CALL
00402B30 /$ 6A FF push -1
00402B32 |. 68 98354200 push 00423598 ; SE 处理程序安装
00402B37 |. 64:A1 0000000>mov eax, fs:[0]
00402B3D |. 50 push eax
00402B3E |. 64:8925 00000>mov fs:[0], esp
00402B45 |. 83EC 18 sub esp, 18
00402B48 |. 53 push ebx
00402B49 |. 8B4C24 2C mov ecx, [esp+2C] ;输入的注册码
00402B4D |. 33C0 xor eax, eax
00402B4F |. 894424 05 mov [esp+5], eax
00402B53 |. 33DB xor ebx, ebx
00402B55 |. 66:894424 09 mov [esp+9], ax
00402B5A |. 895C24 24 mov [esp+24], ebx
00402B5E |. 884424 0B mov [esp+B], al
00402B62 |. 8B41 F8 mov eax, [ecx-8] ;注册码长度
00402B65 |. 83F8 10 cmp eax, 10 ;必须为0x10,16个字符大小
00402B68 |. 885C24 04 mov [esp+4], bl
00402B6C |. 0F8C C0000000 jl 00402C32
00402B72 |. 56 push esi
00402B73 |. 68 04010000 push 104
00402B78 |. 8D4C24 34 lea ecx, [esp+34]
00402B7C |. E8 688B0100 call 0041B6E9 ;分配内存
00402B81 |. 8B10 mov edx, [eax] ;注册码1-4位
00402B83 |. 33F6 xor esi, esi
00402B85 |. 895424 10 mov [esp+10], edx ;保存1-4位
00402B89 |. 8B48 04 mov ecx, [eax+4]
00402B8C |. 894C24 14 mov [esp+14], ecx ;保存5-8位
00402B90 |. 8B50 08 mov edx, [eax+8]
00402B93 |. 895424 18 mov [esp+18], edx ;保存9-12位
00402B97 |. 8B40 0C mov eax, [eax+C]
00402B9A |. 894424 1C mov [esp+1C], eax ;保存13-16位
00402B9E |> 8A4C34 10 /mov cl, [esp+esi+10]
00402BA2 |. 51 |push ecx
00402BA3 |. E8 68FFFFFF |call 00402B10 ;将注册码对应的字符转成对应的值
00402BA8 |. 83C4 04 |add esp, 4
00402BAB |. 884434 10 |mov [esp+esi+10], al ;保存值
00402BAF |. 46 |inc esi
00402BB0 |. 83FE 10 |cmp esi, 10
00402BB3 |.^ 7C E9 \jl short 00402B9E
00402BB5 |. 33C0 xor eax, eax
00402BB7 |. 8D4C24 10 lea ecx, [esp+10]
00402BBB |. 5E pop esi
00402BBC |> 8A51 01 /mov dl, [ecx+1]
00402BBF |. 8A19 |mov bl, [ecx]
00402BC1 |. C0E2 04 |shl dl, 4
00402BC4 |. 02D3 |add dl, bl
00402BC6 |. 83C1 02 |add ecx, 2
00402BC9 |. 885404 04 |mov [esp+eax+4], dl
00402BCD |. 40 |inc eax
00402BCE |. 83F8 08 |cmp eax, 8
00402BD1 |.^ 7C E9 \jl short 00402BBC //这一段将保存值转成两个DWORD,8个BYTE
//从低到高用a,b,c,d,e,f,g,h表示
00402BD3 |. 8A4424 07 mov al, [esp+7] //取d
00402BD7 |. 8A5C24 04 mov bl, [esp+4] //取a
00402BDB |. 8A4C24 0B mov cl, [esp+B] //取h
00402BDF |. 8A5424 05 mov dl, [esp+5] //取b
00402BE3 |. 32C3 xor al, bl
00402BE5 |. 8A5C24 06 mov bl, [esp+6] //取c
00402BE9 |. 32CA xor cl, dl
00402BEB |. 8A5424 09 mov dl, [esp+9] //取f
00402BEF |. 32D3 xor dl, bl
00402BF1 |. 8A5C24 08 mov bl, [esp+8] //取e
00402BF5 |. 325C24 0A xor bl, [esp+A] //取g
00402BF9 |. 3C 38 cmp al, 38 //a^d=0x38
00402BFB |. 75 35 jnz short 00402C32
00402BFD |. 80F9 78 cmp cl, 78 //b^h=0x78
00402C00 |. 75 30 jnz short 00402C32
00402C02 |. 80FA 4E cmp dl, 4E //c^f=0x4e
00402C05 |. 75 2B jnz short 00402C32
00402C07 |. 80FB 1A cmp bl, 1A //g^e=0x1a
00402C0A |. 75 26 jnz short 00402C32
00402C0C |. 8D4C24 2C lea ecx, [esp+2C]
00402C10 |. C74424 24 FFF>mov dword ptr [esp+24], -1
00402C18 |. E8 F5860100 call 0041B312
00402C1D |. B8 01000000 mov eax, 1 //注册码正确,设置返回1
00402C22 |. 5B pop ebx
00402C23 |. 8B4C24 18 mov ecx, [esp+18]
00402C27 |. 64:890D 00000>mov fs:[0], ecx
00402C2E |. 83C4 24 add esp, 24
00402C31 |. C3 retn
00402C32 |> 8D4C24 2C lea ecx, [esp+2C]
00402C36 |. C74424 24 FFF>mov dword ptr [esp+24], -1
00402C3E |. E8 CF860100 call 0041B312
00402C43 |. 8B4C24 1C mov ecx, [esp+1C]
00402C47 |. 33C0 xor eax, eax //错误,设置返回0
00402C49 |. 5B pop ebx
00402C4A |. 64:890D 00000>mov fs:[0], ecx
00402C51 |. 83C4 24 add esp, 24
00402C54 \. C3 retn 从后面可以看出,他有两个无效注册码1163659294813585,0386848021608060,注册部分简单。注册机代码如下,生成所有注册码。
///////////////////////////////////////////////////////////////////////////////////////////
注册机代码
生成所有的注册码:
// KeyGenMSN.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <STDIO.H>
#include <windows.h>
#define REVERSE(a) (BYTE)(a>>4|a<<4)
int main(int argc, char* argv[])
{
BYTE a,b,c,d,e,f,g,h;
char serial[17];
for(a=0;a<=0xff;a++)
for(b=0;b<=0xff;b++)
for(c=0;c<=0xff;c++)
for(e=0;e<=0xff;e++)
{
d=a^0x38;
h=b^0x78;
f=c^0x4e;
g=e^0x1a;
sprintf(serial,"%02X%02X%02X%02X%02X%02X%02X%02X",
REVERSE(a),REVERSE(b),REVERSE(c),REVERSE(d),
REVERSE(e),REVERSE(f),REVERSE(g),REVERSE(h));
if(strcmp(serial,"1163659294813585")&&strcmp(serial,"0386848021608060"))
{
printf("%s\n",serial);
}
}
system("pause");
return 0;
}
算法很简单,就不多说了。
///////////////////////////////////////////////////////////////////////////////////////////
【功能分析】
这个程序注册部分不是我所感兴趣的地方,真正感兴趣的地方是多个msn开启是如何实现的。因为是一个Loader,很显然想到CreateProcess,ReadProcessMemory等API,在它们上面下断点。找到:
00401B10 /$ 6A FF push -1
00401B12 |. 68 E8334200 push 004233E8 ; SE 处理程序安装
00401B17 |. 64:A1 0000000>mov eax, fs:[0]
00401B1D |. 50 push eax
00401B1E |. 64:8925 00000>mov fs:[0], esp
00401B25 |. 83EC 5C sub esp, 5C
00401B28 |. 33C0 xor eax, eax
00401B2A |. 53 push ebx
00401B2B |. 894424 0C mov [esp+C], eax
00401B2F |. 56 push esi
00401B30 |. 894424 14 mov [esp+14], eax
00401B34 |. 57 push edi
00401B35 |. 894424 1C mov [esp+1C], eax
00401B39 |. B9 11000000 mov ecx, 11
00401B3E |. 8D7C24 24 lea edi, [esp+24]
00401B42 |. 8D5424 10 lea edx, [esp+10]
00401B46 |. F3:AB rep stos dword ptr es:[edi]
00401B48 |. 8B4C24 78 mov ecx, [esp+78]
00401B4C |. 83CB FF or ebx, FFFFFFFF
00401B4F |. 51 push ecx
00401B50 |. 68 0CF14200 push 0042F10C ; "
00401B55 |. 52 push edx
00401B56 |. 894424 2C mov [esp+2C], eax
00401B5A |. C74424 30 440>mov dword ptr [esp+30], 44
00401B62 |. E8 709A0100 call 0041B5D7
00401B67 |. 68 08F14200 push 0042F108 ; "
00401B6C |. 50 push eax
00401B6D |. 8D4424 14 lea eax, [esp+14]
00401B71 |. C74424 78 000>mov dword ptr [esp+78], 0
00401B79 |. 50 push eax
00401B7A |. E8 E4990100 call 0041B563
00401B7F |. 8B7424 7C mov esi, [esp+7C]
00401B83 |. 8D4C24 78 lea ecx, [esp+78]
00401B87 |. 56 push esi
00401B88 |. 50 push eax
00401B89 |. 51 push ecx
00401B8A |. C64424 7C 01 mov byte ptr [esp+7C], 1
00401B8F |. E8 69990100 call 0041B4FD
00401B94 |. 8D4C24 0C lea ecx, [esp+C]
00401B98 |. C64424 70 04 mov byte ptr [esp+70], 4
00401B9D |. E8 70970100 call 0041B312
00401BA2 |. 8D4C24 10 lea ecx, [esp+10]
00401BA6 |. C64424 70 03 mov byte ptr [esp+70], 3
00401BAB |. E8 62970100 call 0041B312
00401BB0 |. 8B16 mov edx, [esi]
00401BB2 |. 8D4C24 14 lea ecx, [esp+14]
00401BB6 |. 51 push ecx
00401BB7 |. 8D4C24 7C lea ecx, [esp+7C]
00401BBB |. 8B42 F8 mov eax, [edx-8]
00401BBE |. 8D5424 28 lea edx, [esp+28]
00401BC2 |. 52 push edx
00401BC3 |. 6A 00 push 0
00401BC5 |. 6A 00 push 0
00401BC7 |. 6A 00 push 0
00401BC9 |. 6A 00 push 0
00401BCB |. 6A 00 push 0
00401BCD |. 6A 00 push 0
00401BCF |. 50 push eax
00401BD0 |. E8 149B0100 call 0041B6E9
00401BD5 |. 50 push eax ; |CommandLine
00401BD6 |. 6A 00 push 0 ; |ModuleFileName = NULL
00401BD8 |. FF15 DC514200 call [<&KERNEL32.CreateProcessA>] ; \CreateProcessA //启动一个MSN
00401BDE |. 85C0 test eax, eax
00401BE0 |. 74 04 je short 00401BE6
00401BE2 |. 8B5C24 14 mov ebx, [esp+14]
00401BE6 |> 6A FF push -1
00401BE8 |. 8D4C24 7C lea ecx, [esp+7C]
00401BEC |. E8 479B0100 call 0041B738
00401BF1 |. 8D4C24 78 lea ecx, [esp+78]
00401BF5 |. C74424 70 FFF>mov dword ptr [esp+70], -1
00401BFD |. E8 10970100 call 0041B312
00401C02 |. 8B4C24 68 mov ecx, [esp+68]
00401C06 |. 5F pop edi
00401C07 |. 8BC3 mov eax, ebx
00401C09 |. 5E pop esi
00401C0A |. 5B pop ebx
00401C0B |. 64:890D 00000>mov fs:[0], ecx
00401C12 |. 83C4 68 add esp, 68
00401C15 \. C2 0800 retn 8
这段是启动MSN,Ctrl+F9返回,没过多久来到了关键地方。
00401C20 /$ B8 28100000 mov eax, 1028
00401C25 |. E8 E6900000 call 0040AD10
00401C2A |. 53 push ebx
00401C2B |. 55 push ebp
00401C2C |. 56 push esi
00401C2D |. 8BF1 mov esi, ecx
00401C2F |. 33DB xor ebx, ebx
00401C31 |. B2 0F mov dl, 0F
00401C33 |. B1 85 mov cl, 85
00401C35 |. B0 B5 mov al, 0B5
00401C37 |. 57 push edi
00401C38 |. C64424 10 14 mov byte ptr [esp+10], 14
00401C3D |. C64424 11 40 mov byte ptr [esp+11], 40
00401C42 |. 885C24 12 mov [esp+12], bl
00401C46 |. C64424 13 3D mov byte ptr [esp+13], 3D
00401C4B |. C64424 14 B7 mov byte ptr [esp+14], 0B7
00401C50 |. 885C24 15 mov [esp+15], bl
00401C54 |. 885C24 16 mov [esp+16], bl
00401C58 |. 885C24 17 mov [esp+17], bl
00401C5C |. 885424 18 mov [esp+18], dl
00401C60 |. 884C24 19 mov [esp+19], cl
00401C64 |. 884424 1A mov [esp+1A], al
00401C68 |. C64424 1B 01 mov byte ptr [esp+1B], 1
00401C6D |. 885C24 1C mov [esp+1C], bl
00401C71 |. 885C24 1D mov [esp+1D], bl
//上面14个字节是要在msn进程中找的
//14 40 00 3D B7 00 00 00 0F 85 B5 01 00 00 00 00
00401C75 |. C64424 20 14 mov byte ptr [esp+20], 14
00401C7A |. C64424 21 40 mov byte ptr [esp+21], 40
00401C7F |. 885C24 22 mov [esp+22], bl
00401C83 |. C64424 23 3D mov byte ptr [esp+23], 3D
00401C88 |. C64424 24 B6 mov byte ptr [esp+24], 0B6
00401C8D |. 885C24 25 mov [esp+25], bl
00401C91 |. 885C24 26 mov [esp+26], bl
00401C95 |. 885C24 27 mov [esp+27], bl
00401C99 |. 885424 28 mov [esp+28], dl
00401C9D |. 884C24 29 mov [esp+29], cl
00401CA1 |. 884424 2A mov [esp+2A], al
00401CA5 |. C64424 2B 01 mov byte ptr [esp+2B], 1
00401CAA |. 885C24 2C mov [esp+2C], bl
00401CAE |. 885C24 2D mov [esp+2D], bl
//这14个自己是要用WriteProcessMemory替换的
//14 40 00 3D B6 00 00 00 0F 85 B5 01 00 00 00 00
00401CB2 |. BF 00104000 mov edi, 00401000 ; 入口地址
00401CB7 |. 33ED xor ebp, ebp
00401CB9 |> 8B96 C0000000 /mov edx, [esi+C0]
00401CBF |. 8D4424 30 |lea eax, [esp+30]
00401CC3 |. 50 |push eax ; /pBytesRead
00401CC4 |. 8D4C24 3C |lea ecx, [esp+3C] ; |
00401CC8 |. 68 00100000 |push 1000 ; |BytesToRead = 1000 (4096.)
00401CCD |. 51 |push ecx ; |Buffer
00401CCE |. 57 |push edi ; |pBaseAddress
00401CCF |. 52 |push edx ; |hProcess
00401CD0 |. 895C24 44 |mov [esp+44], ebx ; |
00401CD4 |. 895C24 48 |mov [esp+48], ebx ; |
00401CD8 |. FF15 D4514200 |call [<&KERNEL32.ReadProcessMemory>] ; \ReadProcessMemory
00401CDE |. 85C0 |test eax, eax
00401CE0 |. 74 39 |je short 00401D1B
00401CE2 |. 8D4424 10 |lea eax, [esp+10]
00401CE6 |. 6A 0E |push 0E
00401CE8 |. 50 |push eax
00401CE9 |. 8D4C24 40 |lea ecx, [esp+40]
00401CED |. 68 00100000 |push 1000
00401CF2 |. 51 |push ecx
00401CF3 |. 8BCE |mov ecx, esi
00401CF5 |. E8 A6000000 |call 00401DA0 ;14字节的内存匹配
00401CFA |. 83F8 FF |cmp eax, -1
00401CFD |. 75 35 |jnz short 00401D34 ;找到跳到WriteProcessMemory地方
00401CFF |. 81C7 00100000 |add edi, 1000
00401D05 |. 45 |inc ebp
00401D06 |. 81FD F3030000 |cmp ebp, 3F3
00401D0C |.^ 7C AB \jl short 00401CB9
00401D0E |. 5F pop edi
00401D0F |. 5E pop esi
00401D10 |. 5D pop ebp
00401D11 |. 33C0 xor eax, eax
00401D13 |. 5B pop ebx
00401D14 |. 81C4 28100000 add esp, 1028
00401D1A |. C3 retn
00401D1B |> 53 push ebx ; /Arg3
00401D1C |. 53 push ebx ; |Arg2
00401D1D |. 68 20F14200 push 0042F120 ; |read failed
00401D22 |. E8 E0D10100 call 0041EF07 ; \MSN多开?0041EF07
00401D27 |. 5F pop edi
00401D28 |. 5E pop esi
00401D29 |. 5D pop ebp
00401D2A |. 33C0 xor eax, eax
00401D2C |. 5B pop ebx
00401D2D |. 81C4 28100000 add esp, 1028
00401D33 |. C3 retn
00401D34 |> 8D5424 34 lea edx, [esp+34]
00401D38 |. 8D4C24 20 lea ecx, [esp+20]
00401D3C |. 52 push edx ; /pBytesWritten
00401D3D |. 8B96 C0000000 mov edx, [esi+C0] ; |
00401D43 |. 6A 0E push 0E ; |BytesToWrite = E (14.)
00401D45 |. 03C7 add eax, edi ; |
00401D47 |. 51 push ecx ; |Buffer
00401D48 |. 50 push eax ; |Address
00401D49 |. 52 push edx ; |hProcess
00401D4A |. FF15 D8514200 call [<&KERNEL32.WriteProcessMemory>] ; \WriteProcessMemory
//调换msn进程中的指定14个字节
00401D50 |. 85C0 test eax, eax
00401D52 |. 75 19 jnz short 00401D6D
00401D54 |. 53 push ebx ; /Arg3
00401D55 |. 53 push ebx ; |Arg2
00401D56 |. 68 10F14200 push 0042F110 ; |write failed
00401D5B |. E8 A7D10100 call 0041EF07 ; \MSN多开?0041EF07
00401D60 |. 5F pop edi
00401D61 |. 5E pop esi
00401D62 |. 5D pop ebp
00401D63 |. 33C0 xor eax, eax
00401D65 |. 5B pop ebx
00401D66 |. 81C4 28100000 add esp, 1028
00401D6C |. C3 retn
呵呵,明白了吧。其实就是修改了一个BYTE,0xB7=>0xB6
通过WriteProcessMemory的Address,我们来看看MSN这个地方到底是什么。
用OD打开MSN,来到
00546E50 |> 68 FC434100 push 004143FC ; /EventName = "MSNMSGR"
00546E55 |. |53 push ebx ; |InitiallySignaled
00546E56 |. |6A 01 push 1 ; |ManualReset = TRUE
00546E58 |. |53 push ebx ; |pSecurity
00546E59 |. |FF15 50134000 call [<&KERNEL32.CreateEventA>] ; \CreateEventA
00546E5F |. |3BC3 cmp eax, ebx
00546E61 |. |8B7D F0 mov edi, [ebp-10]
00546E64 |. |8947 28 mov [edi+28], eax
00546E67 |. |0F84 CD010000 je 0054703A
00546E6D |. FF15 74144000 call [<&KERNEL32.GetLastError>] ; [GetLastError
00546E73 |. 3D B7000000 cmp eax, 0B7 ;//看见没0xB7,这个是要修改的,修改成0xB6
00546E78 |. 0F85 B5010000 jnz 00547033
00546E7E |. 6A FF push -1 ; /Timeout = INFINITE
00546E80 |. FF77 28 push dword ptr [edi+28] ; |hObject
00546E83 |. FF15 44144000 call [<&KERNEL32.WaitForSingleObject>>; \WaitForSingleObject
00546E89 |. 83F8 FF cmp eax, -1
00546E8C |. 0F84 A8010000 je 0054703A
00546E92 |. 53 push ebx ; /Title
00546E93 |. 68 A8414100 push 004141A8 ; |Class = "MSNMSGRBlObj"
00546E98 |. FF15 2C164000 call [<&USER32.FindWindowA>] ; \FindWindowA
00546E9E |. 8BF8 mov edi, eax
00546EA0 |. 3BFB cmp edi, ebx
00546EA2 |. 74 5A je short 00546EFE
MSN中产生了一个MSNMSGR的EVENT,启动时检查这个EVENT是否存在了,有了就退出,呵呵,简单吧。
我直接在MSN中改了这个字节,保存,就不用启动这个Loader了。
--------------------------------------------------------------------------------
【破解总结】
谢谢你能看到这里。
--------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!