-
-
[旧帖] [讨论][讨论][原创]菜鸟某款G的猜想和分析 0.00雪花
-
发表于: 2009-6-8 18:35 1043
-
[ATTACH][/ATTACH]
G是DNG龙眼6.07,G做的比较BT,可以无敌和改变技能伤害,不过每个账号只有30分钟的试用时间,这个挂在账号试用期过了以后,下次开挂登录DNF的时候他会弹出个对话框,提示 充值已过期····
我就是想找到他的对话框弹出来的内存位置,不过水平太菜,没找到,现在把我的一些猜想和简单分析发出来,希望大家看一下,能给我点提示,错误很多,大家不要见笑···
外挂的使用方法是先开挂,然后再开DNF,然后挂就自动注入DNF,修改内存····
随便输入一个会员码,选择一个职业,点击启动龙眼
在02201596处下断,来到
02201530 >/$ E8 2B1A0000 call 02202F60
02201535 |. E8 560D0000 call 02202290
0220153A |. 33C0 xor eax, eax
0220153C |. 8D6424 00 lea esp, dword ptr [esp]
02201540 |> 8A88 207A2002 /mov cl, byte ptr [eax+2207A20]
02201546 |. 8888 08902002 |mov byte ptr [eax+2209008], cl
0220154C |. 40 |inc eax
0220154D |. 84C9 |test cl, cl
0220154F |.^ 75 EF \jnz short 02201540
02201551 |. 56 push esi
02201552 |. 57 push edi
02201553 |. C605 00902002>mov byte ptr [2209000], 1
0220155A |. E8 71FFFFFF call 022014D0
0220155F |. 8B7424 0C mov esi, dword ptr [esp+C]
02201563 |. A1 08922002 mov eax, dword ptr [2209208]
02201568 |. B9 0C000000 mov ecx, 0C
0220156D |. BF 18922002 mov edi, 02209218
02201572 |. F3:A5 rep movs dword ptr es:[edi], dword ptr [esi]
02201574 |. 33F6 xor esi, esi
02201576 |. 85C0 test eax, eax
02201578 EB 0D jmp short 02201587
0220157A |. 50 push eax ; /hHook => NULL
0220157B |. FF15 0C522002 call dword ptr [<&USER32.UnhookWindowsHookEx>] ; \UnhookWindowsHookEx
02201581 |. 8935 08922002 mov dword ptr [2209208], esi
02201587 |> A1 6C652002 mov eax, dword ptr [220656C]
0220158C |. 6A 00 push 0 ; /ThreadID = 0
0220158E |. 50 push eax ; |hModule => 02200000 (xyloader)
0220158F |. 68 F0132002 push 022013F0 ; |Hookproc = xyloader.022013F0
02201594 |. 6A 03 push 3 ; |HookType = WH_GETMESSAGE
02201596 |. FF15 04522002 call dword ptr [<&USER32.SetWindowsHookExA>] ; \SetWindowsHookExA
0220159C |. A3 08922002 mov dword ptr [2209208], eax ; 此时下钩子是什么意思?
022015A1 |. 85C0 test eax, eax
022015A3 |. B8 02000000 mov eax, 2
022015A8 |. 74 02 je short 022015AC
022015AA |. 8BC6 mov eax, esi
022015AC |> 5F pop edi
022015AD |. 5E pop esi
022015AE \. C3 retn
022015AF CC int3
022015B0 /$ 8BC1 mov eax, ecx
022015B2 |. 33C9 xor ecx, ecx
022015B4 |. C700 68522002 mov dword ptr [eax], 02205268
022015BA |. 8948 04 mov dword ptr [eax+4], ecx
022015BD |. 8948 08 mov dword ptr [eax+8], ecx
022015C0 \. C3 retn
这里我没看出什么东西来,继续···
在022013F0 下断,来到··
022013F0 . 56 push esi
022013F1 . 8B35 64502002 mov esi, dword ptr [<&KERNEL32.GetModuleHandleA>] ; kernel32.GetModuleHandleA
022013F7 . 57 push edi ; 监视DNF是否运行,然后在DNF中注入xyloader.dll
022013F8 . 68 58522002 push 02205258 ; /pModule = "DNFchina.exe"
022013FD . FFD6 call esi ; \GetModuleHandleA
022013FF . 68 44522002 push 02205244 ; /pModule = "DNFchinaTest.exe"
02201404 . 8BF8 mov edi, eax ; |
02201406 . FFD6 call esi ; \GetModuleHandleA
02201408 . 85FF test edi, edi
0220140A . 5F pop edi
0220140B . 5E pop esi
0220140C 75 04 jnz short 02201412
0220140E . 85C0 test eax, eax ; 看dnf是否已经运行
02201410 74 50 je short 02201462 ; 没有就跳转
02201412 > A0 00902002 mov al, byte ptr [2209000] ; 已经运行,al=1
02201417 . 84C0 test al, al ; 测试al是否为0
02201419 . 74 12 je short 0220142D ; 是就跳转
0220141B . 68 08902002 push 02209008
02201420 . E8 0B1B0000 call 02202F30
02201425 . 83C4 04 add esp, 4
02201428 . E8 630E0000 call 02202290
0220142D > A0 80652002 mov al, byte ptr [2206580]
02201432 . 84C0 test al, al
02201434 75 2C jnz short 02201462
02201436 . 68 34522002 push 02205234 ; /FileName = "xyloader.dll"
0220143B . FF15 70502002 call dword ptr [<&KERNEL32.LoadLibraryA>] ; \LoadLibraryA
02201441 . FF15 68502002 call dword ptr [<&KERNEL32.GetCurrentProcessId>] ; [GetCurrentProcessId
02201447 . A3 10922002 mov dword ptr [2209210], eax ; 1149210
0220144C . C705 90952002>mov dword ptr [2209590], 1
02201456 E8 750B0000 call 02201FD0 ; 远程改变分配DNF内存
0220145B . C605 80652002>mov byte ptr [2206580], 1
02201462 > 8B4424 0C mov eax, dword ptr [esp+C]
02201466 . 8B4C24 08 mov ecx, dword ptr [esp+8]
0220146A . 8B5424 04 mov edx, dword ptr [esp+4]
0220146E . 50 push eax ; /lParam
0220146F . A1 08922002 mov eax, dword ptr [2209208] ; |
02201474 . 51 push ecx ; |wParam
02201475 . 52 push edx ; |HookCode
02201476 . 50 push eax ; |hHook => 01F50343
02201477 . FF15 08522002 call dword ptr [<&USER32.CallNextHookEx>] ; \CallNextHookEx
0220147D C2 0C00 retn 0C
02201480 >/$ 8B4C24 04 mov ecx, dword ptr [esp+4]
02201484 |. 33C0 xor eax, eax
02201486 |. 81F9 E9030000 cmp ecx, 3E9
0220148C |. 0F95C0 setne al
0220148F |. 48 dec eax
02201490 |. 25 A0132002 and eax, 22013A0
02201495 \. C3 retn
到了这里我就跟不动了···因为到这里一旦发现DNF运行,他就注入DNF了,然后怎么跟我就不懂了,我也尝试自己去看代码找那个对话框弹出的地方来···
找到几个地方··
02201F09 . 84C9 test cl, cl
02201F0B .^ 75 F6 jnz short 02201F03
02201F0D . 8B4424 70 mov eax, dword ptr [esp+70]
02201F11 . 8B7424 6C mov esi, dword ptr [esp+6C]
02201F15 . 8B4C24 68 mov ecx, dword ptr [esp+68]
02201F19 . 8B5424 60 mov edx, dword ptr [esp+60]
02201F1D . 50 push eax
02201F1E . 8B4424 5C mov eax, dword ptr [esp+5C]
02201F22 . 56 push esi
02201F23 . 51 push ecx
02201F24 . 8B4C24 60 mov ecx, dword ptr [esp+60]
02201F28 . 57 push edi
02201F29 . 52 push edx
02201F2A . 8B5424 64 mov edx, dword ptr [esp+64]
02201F2E . 53 push ebx
02201F2F . 50 push eax
02201F30 . 8B4424 64 mov eax, dword ptr [esp+64]
02201F34 . 51 push ecx
02201F35 . 8B4C24 64 mov ecx, dword ptr [esp+64]
02201F39 . 52 push edx
02201F3A . 55 push ebp
02201F3B . 50 push eax
02201F3C . 51 push ecx
02201F3D . E8 0EFBFFFF call 02201A50 ; 内存没加载这块地址,我感觉这个CALL似乎比较重要···
02201F42 . 8BF8 mov edi, eax
02201F44 . 8A4424 13 mov al, byte ptr [esp+13]
02201F48 . 84C0 test al, al
02201F4A 74 5A je short 02201FA6
02201F4C 68 207A2002 push 02207A20
02201F51 . 8D4C24 18 lea ecx, dword ptr [esp+18]
02201F55 . FF15 A0512002 call dword ptr [<&MSVCP71.std::basic_string<char,std::char>; MSVCP71.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string<char,std::char_traits<char>,std::allocator<char> >
02201F5B . 68 34522002 push 02205234 ; ASCII "xyloader.dll"
02201F60 . 8D4C24 18 lea ecx, dword ptr [esp+18]
02201F64 . C74424 40 000>mov dword ptr [esp+40], 0
02201F6C . FF15 9C512002 call dword ptr [<&MSVCP71.std::basic_string<char,std::char>; MSVCP71.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::operator+=
02201F72 . 837C24 2C 10 cmp dword ptr [esp+2C], 10
02201F77 . 8B4424 18 mov eax, dword ptr [esp+18]
02201F7B . 73 04 jnb short 02201F81
02201F7D . 8D4424 18 lea eax, dword ptr [esp+18]
02201F81 > 8B16 mov edx, dword ptr [esi]
02201F83 . 50 push eax
02201F84 . 52 push edx
02201F85 . E8 56FBFFFF call 02201AE0 ;创建远程线程,可能这里实现的DNF注入
反正是没跟出来,不过我感觉应该离对话框弹出不远了,各位有看懂的给我点提示吧,我都看了好几天了·····愁死了····
G是DNG龙眼6.07,G做的比较BT,可以无敌和改变技能伤害,不过每个账号只有30分钟的试用时间,这个挂在账号试用期过了以后,下次开挂登录DNF的时候他会弹出个对话框,提示 充值已过期····
我就是想找到他的对话框弹出来的内存位置,不过水平太菜,没找到,现在把我的一些猜想和简单分析发出来,希望大家看一下,能给我点提示,错误很多,大家不要见笑···
外挂的使用方法是先开挂,然后再开DNF,然后挂就自动注入DNF,修改内存····
随便输入一个会员码,选择一个职业,点击启动龙眼
在02201596处下断,来到
02201530 >/$ E8 2B1A0000 call 02202F60
02201535 |. E8 560D0000 call 02202290
0220153A |. 33C0 xor eax, eax
0220153C |. 8D6424 00 lea esp, dword ptr [esp]
02201540 |> 8A88 207A2002 /mov cl, byte ptr [eax+2207A20]
02201546 |. 8888 08902002 |mov byte ptr [eax+2209008], cl
0220154C |. 40 |inc eax
0220154D |. 84C9 |test cl, cl
0220154F |.^ 75 EF \jnz short 02201540
02201551 |. 56 push esi
02201552 |. 57 push edi
02201553 |. C605 00902002>mov byte ptr [2209000], 1
0220155A |. E8 71FFFFFF call 022014D0
0220155F |. 8B7424 0C mov esi, dword ptr [esp+C]
02201563 |. A1 08922002 mov eax, dword ptr [2209208]
02201568 |. B9 0C000000 mov ecx, 0C
0220156D |. BF 18922002 mov edi, 02209218
02201572 |. F3:A5 rep movs dword ptr es:[edi], dword ptr [esi]
02201574 |. 33F6 xor esi, esi
02201576 |. 85C0 test eax, eax
02201578 EB 0D jmp short 02201587
0220157A |. 50 push eax ; /hHook => NULL
0220157B |. FF15 0C522002 call dword ptr [<&USER32.UnhookWindowsHookEx>] ; \UnhookWindowsHookEx
02201581 |. 8935 08922002 mov dword ptr [2209208], esi
02201587 |> A1 6C652002 mov eax, dword ptr [220656C]
0220158C |. 6A 00 push 0 ; /ThreadID = 0
0220158E |. 50 push eax ; |hModule => 02200000 (xyloader)
0220158F |. 68 F0132002 push 022013F0 ; |Hookproc = xyloader.022013F0
02201594 |. 6A 03 push 3 ; |HookType = WH_GETMESSAGE
02201596 |. FF15 04522002 call dword ptr [<&USER32.SetWindowsHookExA>] ; \SetWindowsHookExA
0220159C |. A3 08922002 mov dword ptr [2209208], eax ; 此时下钩子是什么意思?
022015A1 |. 85C0 test eax, eax
022015A3 |. B8 02000000 mov eax, 2
022015A8 |. 74 02 je short 022015AC
022015AA |. 8BC6 mov eax, esi
022015AC |> 5F pop edi
022015AD |. 5E pop esi
022015AE \. C3 retn
022015AF CC int3
022015B0 /$ 8BC1 mov eax, ecx
022015B2 |. 33C9 xor ecx, ecx
022015B4 |. C700 68522002 mov dword ptr [eax], 02205268
022015BA |. 8948 04 mov dword ptr [eax+4], ecx
022015BD |. 8948 08 mov dword ptr [eax+8], ecx
022015C0 \. C3 retn
这里我没看出什么东西来,继续···
在022013F0 下断,来到··
022013F0 . 56 push esi
022013F1 . 8B35 64502002 mov esi, dword ptr [<&KERNEL32.GetModuleHandleA>] ; kernel32.GetModuleHandleA
022013F7 . 57 push edi ; 监视DNF是否运行,然后在DNF中注入xyloader.dll
022013F8 . 68 58522002 push 02205258 ; /pModule = "DNFchina.exe"
022013FD . FFD6 call esi ; \GetModuleHandleA
022013FF . 68 44522002 push 02205244 ; /pModule = "DNFchinaTest.exe"
02201404 . 8BF8 mov edi, eax ; |
02201406 . FFD6 call esi ; \GetModuleHandleA
02201408 . 85FF test edi, edi
0220140A . 5F pop edi
0220140B . 5E pop esi
0220140C 75 04 jnz short 02201412
0220140E . 85C0 test eax, eax ; 看dnf是否已经运行
02201410 74 50 je short 02201462 ; 没有就跳转
02201412 > A0 00902002 mov al, byte ptr [2209000] ; 已经运行,al=1
02201417 . 84C0 test al, al ; 测试al是否为0
02201419 . 74 12 je short 0220142D ; 是就跳转
0220141B . 68 08902002 push 02209008
02201420 . E8 0B1B0000 call 02202F30
02201425 . 83C4 04 add esp, 4
02201428 . E8 630E0000 call 02202290
0220142D > A0 80652002 mov al, byte ptr [2206580]
02201432 . 84C0 test al, al
02201434 75 2C jnz short 02201462
02201436 . 68 34522002 push 02205234 ; /FileName = "xyloader.dll"
0220143B . FF15 70502002 call dword ptr [<&KERNEL32.LoadLibraryA>] ; \LoadLibraryA
02201441 . FF15 68502002 call dword ptr [<&KERNEL32.GetCurrentProcessId>] ; [GetCurrentProcessId
02201447 . A3 10922002 mov dword ptr [2209210], eax ; 1149210
0220144C . C705 90952002>mov dword ptr [2209590], 1
02201456 E8 750B0000 call 02201FD0 ; 远程改变分配DNF内存
0220145B . C605 80652002>mov byte ptr [2206580], 1
02201462 > 8B4424 0C mov eax, dword ptr [esp+C]
02201466 . 8B4C24 08 mov ecx, dword ptr [esp+8]
0220146A . 8B5424 04 mov edx, dword ptr [esp+4]
0220146E . 50 push eax ; /lParam
0220146F . A1 08922002 mov eax, dword ptr [2209208] ; |
02201474 . 51 push ecx ; |wParam
02201475 . 52 push edx ; |HookCode
02201476 . 50 push eax ; |hHook => 01F50343
02201477 . FF15 08522002 call dword ptr [<&USER32.CallNextHookEx>] ; \CallNextHookEx
0220147D C2 0C00 retn 0C
02201480 >/$ 8B4C24 04 mov ecx, dword ptr [esp+4]
02201484 |. 33C0 xor eax, eax
02201486 |. 81F9 E9030000 cmp ecx, 3E9
0220148C |. 0F95C0 setne al
0220148F |. 48 dec eax
02201490 |. 25 A0132002 and eax, 22013A0
02201495 \. C3 retn
到了这里我就跟不动了···因为到这里一旦发现DNF运行,他就注入DNF了,然后怎么跟我就不懂了,我也尝试自己去看代码找那个对话框弹出的地方来···
找到几个地方··
02201F09 . 84C9 test cl, cl
02201F0B .^ 75 F6 jnz short 02201F03
02201F0D . 8B4424 70 mov eax, dword ptr [esp+70]
02201F11 . 8B7424 6C mov esi, dword ptr [esp+6C]
02201F15 . 8B4C24 68 mov ecx, dword ptr [esp+68]
02201F19 . 8B5424 60 mov edx, dword ptr [esp+60]
02201F1D . 50 push eax
02201F1E . 8B4424 5C mov eax, dword ptr [esp+5C]
02201F22 . 56 push esi
02201F23 . 51 push ecx
02201F24 . 8B4C24 60 mov ecx, dword ptr [esp+60]
02201F28 . 57 push edi
02201F29 . 52 push edx
02201F2A . 8B5424 64 mov edx, dword ptr [esp+64]
02201F2E . 53 push ebx
02201F2F . 50 push eax
02201F30 . 8B4424 64 mov eax, dword ptr [esp+64]
02201F34 . 51 push ecx
02201F35 . 8B4C24 64 mov ecx, dword ptr [esp+64]
02201F39 . 52 push edx
02201F3A . 55 push ebp
02201F3B . 50 push eax
02201F3C . 51 push ecx
02201F3D . E8 0EFBFFFF call 02201A50 ; 内存没加载这块地址,我感觉这个CALL似乎比较重要···
02201F42 . 8BF8 mov edi, eax
02201F44 . 8A4424 13 mov al, byte ptr [esp+13]
02201F48 . 84C0 test al, al
02201F4A 74 5A je short 02201FA6
02201F4C 68 207A2002 push 02207A20
02201F51 . 8D4C24 18 lea ecx, dword ptr [esp+18]
02201F55 . FF15 A0512002 call dword ptr [<&MSVCP71.std::basic_string<char,std::char>; MSVCP71.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string<char,std::char_traits<char>,std::allocator<char> >
02201F5B . 68 34522002 push 02205234 ; ASCII "xyloader.dll"
02201F60 . 8D4C24 18 lea ecx, dword ptr [esp+18]
02201F64 . C74424 40 000>mov dword ptr [esp+40], 0
02201F6C . FF15 9C512002 call dword ptr [<&MSVCP71.std::basic_string<char,std::char>; MSVCP71.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::operator+=
02201F72 . 837C24 2C 10 cmp dword ptr [esp+2C], 10
02201F77 . 8B4424 18 mov eax, dword ptr [esp+18]
02201F7B . 73 04 jnb short 02201F81
02201F7D . 8D4424 18 lea eax, dword ptr [esp+18]
02201F81 > 8B16 mov edx, dword ptr [esi]
02201F83 . 50 push eax
02201F84 . 52 push edx
02201F85 . E8 56FBFFFF call 02201AE0 ;创建远程线程,可能这里实现的DNF注入
反正是没跟出来,不过我感觉应该离对话框弹出不远了,各位有看懂的给我点提示吧,我都看了好几天了·····愁死了····
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
他的文章
- [求助]考研的困惑 2424
- [讨论]返回地址被覆盖 929
- [求助]去掉windows内存保护 1789
- [讨论][讨论][原创]菜鸟某款G的猜想和分析 1044
- [原创]菜鸟某款G的猜想和分析 1385
看原图
赞赏
雪币:
留言: