能力值:
(RANK:260 )
|
-
-
2 楼
OD是调试器,你要查看程序的运行过程,需要想办法让程序在调试器里中断下来。
你直接F9运行,调试器对程序就失去了控制了。
你要先搞搞清楚调试器的用法和原理,再来调试程序。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
请问版主,我应该在哪个地方下断?
才能让外挂在游戏启动时让程序断下来
好让我确定代码段的位置呢?
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
用OD调试UltraISO时程序断下后堆栈出现
0012F248 010B1638 ASCII "ControlOfs0040000000000C88"
这里的ControlOfs0040000000000C88是什么意思
|
能力值:
(RANK:260 )
|
-
-
5 楼
要根据你的程序的特点来分析。
比如你说你的程序是当游戏运行时才执行判断语句,虽然我不知道你所说的判断语句是对什么进行判断,但这样的程序行为,必定会对“游戏是否运行”这一事件进行判断,如何判断呢,最容易想到的就是检查系统中有没有游戏的进程,所以它必须要去列举系统中的进程,而枚举进程最常规的方法也就那几个系统函数,比如EnumProcesses,或者CreateToolhelp32Snapshot。
所以,这几个API是一种可能的突破点。
至于究竟是不是调用了这几个API,那只有试验过了才知道。也必须通过试验来最终将程序的执行控制于调试器中。
调试一个程序有很多方法,没有哪一种是通用的,只有自己不断总结与探索,才会有所提高。
这个ControlOfs0040000000000C88只是程序中出现的一个字符串而已,跟其它常量一样,表示什么意思是程序的作者说了算的,其它人不分析程序的话,是不容易“望文知意”的。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
我试过了,这几种API断点好像不行
不过我通过查找字符串看到一些信息不知道是不是在这里
0040329E . /74 1B je short scking.004032BB
004032A0 . |85F6 test esi,esi
004032A2 . |74 17 je short scking.004032BB
004032A4 . |68 78CB5B00 push scking.005BCB78 ; /brood war
004032A9 . |E8 12EBFFFF call scking.00401DC0 ; \scking.00401DC0
004032AE . |59 pop ecx
004032AF . |85C0 test eax,eax
004032B1 . |74 08 je short scking.004032BB
004032B3 . |6A 00 push 0 ; /ExitCode = 0
004032B5 . |50 push eax ; |hProcess
004032B6 . |E8 7D791B00 call <jmp.&kernel32.TerminateProcess> ; \TerminateProcess
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
还有这一段好像是远程调用信息??
具体是调用些什么呢??
00585B98 /$ 53 push ebx
00585B99 |. 68 0C5C5800 push scking.00585C0C ; /ole32.dll
00585B9E |. E8 274F0300 call <jmp.&kernel32.GetModuleHandleA> ; \GetModuleHandleA
00585BA3 |. 8BD8 mov ebx,eax
00585BA5 |. 85DB test ebx,ebx
00585BA7 |. 74 60 je short scking.00585C09
00585BA9 |. 68 185C5800 push scking.00585C18 ; /cocreateinstanceex
00585BAE |. 53 push ebx ; |hModule
00585BAF |. E8 284F0300 call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
00585BB4 |. A3 78985C00 mov dword ptr ds:[5C9878],eax
00585BB9 |. 68 2C5C5800 push scking.00585C2C ; /coinitializeex
00585BBE |. 53 push ebx ; |hModule
00585BBF |. E8 184F0300 call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
00585BC4 |. A3 7C985C00 mov dword ptr ds:[5C987C],eax
00585BC9 |. 68 3C5C5800 push scking.00585C3C ; /coaddrefserverprocess
00585BCE |. 53 push ebx ; |hModule
00585BCF |. E8 084F0300 call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
00585BD4 |. A3 80985C00 mov dword ptr ds:[5C9880],eax
00585BD9 |. 68 545C5800 push scking.00585C54 ; /coreleaseserverprocess
00585BDE |. 53 push ebx ; |hModule
00585BDF |. E8 F84E0300 call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
00585BE4 |. A3 84985C00 mov dword ptr ds:[5C9884],eax
00585BE9 |. 68 6C5C5800 push scking.00585C6C ; /coresumeclassobjects
00585BEE |. 53 push ebx ; |hModule
00585BEF |. E8 E84E0300 call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
00585BF4 |. A3 88985C00 mov dword ptr ds:[5C9888],eax
00585BF9 |. 68 845C5800 push scking.00585C84 ; /cosuspendclassobjects
00585BFE |. 53 push ebx ; |hModule
00585BFF |. E8 D84E0300 call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
00585C04 |. A3 8C985C00 mov dword ptr ds:[5C988C],eax
00585C09 |> 5B pop ebx
00585C0A \. C3 retn
|
能力值:
(RANK:260 )
|
-
-
8 楼
这个看着挺像的,你试试在
004032B1 . |74 08 je short scking.004032BB
这里下断点,然后在运行游戏与不运行游戏两种情况下看它条指令的执行结果分别如何。
[QUOTE=中原霸刀;611332]还有这一段好像是远程调用信息??
具体是调用些什么呢??
00585B98 /$ 53 push ebx
00585B99 |. 68 0C5C5800 push scking.00585C0C ; /ole32.dll
00585B9E |. E8 274F0300 call <jmp.&kernel32.GetModuleHandleA> ; \GetModuleHandleA
00585BA3 |. 8BD8 mov ebx,eax
00585BA5 |. 85DB test ebx,ebx
00585BA7 |. 74 60 je short scking.00585C09
00585BA9 |. 68 185C5800 push scking.00585C18 ; /cocreateinstanceex
00585BAE |. 53 push ebx ; |hModule
00585BAF |. E8 284F0300 call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
00585BB4 |. A3 78985C00 mov dword ptr ds:[5C9878],eax
00585BB9 |. 68 2C5C5800 push scking.00585C2C ; /coinitializeex
00585BBE |. 53 push ebx ; |hModule
00585BBF |. E8 184F0300 call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
00585BC4 |. A3 7C985C00 mov dword ptr ds:[5C987C],eax
00585BC9 |. 68 3C5C5800 push scking.00585C3C ; /coaddrefserverprocess
00585BCE |. 53 push ebx ; |hModule
00585BCF |. E8 084F0300 call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
00585BD4 |. A3 80985C00 mov dword ptr ds:[5C9880],eax
00585BD9 |. 68 545C5800 push scking.00585C54 ; /coreleaseserverprocess
00585BDE |. 53 push ebx ; |hModule
00585BDF |. E8 F84E0300 call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
00585BE4 |. A3 84985C00 mov dword ptr ds:[5C9884],eax
00585BE9 |. 68 6C5C5800 push scking.00585C6C ; /coresumeclassobjects
00585BEE |. 53 push ebx ; |hModule
00585BEF |. E8 E84E0300 call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
00585BF4 |. A3 88985C00 mov dword ptr ds:[5C9888],eax
00585BF9 |. 68 845C5800 push scking.00585C84 ; /cosuspendclassobjects
00585BFE |. 53 push ebx ; |hModule
00585BFF |. E8 D84E0300 call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
00585C04 |. A3 8C985C00 mov dword ptr ds:[5C988C],eax
00585C09 |> 5B pop ebx
00585C0A \. C3 retn[/QUOTE]
从这几行代码,我也不知道它要调用什么组件。它填充的那些函数指针(应该是一张虚表),对其下访问断点,看看程序在什么时候使用这个组件对象,没准会有所发现。
|
|
|