文档库 最新最全的文档下载
当前位置:文档库 › 断点

断点

windowsEX

一种相思(光龙)(125701159) 22:26:24
OD常用断点

常用断点(OD中)

拦截窗口:
bp CreateWindow 创建窗口
bp CreateWindowEx(A) 创建窗口
bp ShowWindow 显示窗口
bp UpdateWindow 更新窗口
bp GetWindowText(A) 获取窗口文本

拦截消息框:
bp MessageBox(A) 创建消息框
bp MessageBoxExA 创建消息框
bp MessageBoxIndirect(A) 创建定制消息框
bp IsDialogMessageW

拦截警告声:
bp MessageBeep 发出系统警告声(如果没有声卡就直接驱动系统喇叭发声)

拦截对话框:
bp DialogBox 创建模态对话框
bp DialogBoxParam(A) 创建模态对话框
bp DialogBoxIndirect 创建模态对话框
bp DialogBoxIndirectParam(A) 创建模态对话框
bp CreateDialog 创建非模态对话框
bp CreateDialogParam(A) 创建非模态对话框
bp CreateDialogIndirect 创建非模态对话框
bp CreateDialogIndirectParam(A) 创建非模态对话框
bp GetDlgItemText(A) 获取对话框文本 作用是得指定输入框输入字符串
bp GetDlgItemInt 获取对话框整数值

拦截剪贴板: 网管网bitsCN_com
bp GetClipboardData 获取剪贴板数据

拦截注册表:
bp RegOpenKey(A) 打开子健
bp RegOpenKeyEx 打开子健
bp RegQueryValue(A) 查找子健
bp RegQueryValueEx 查找子健
bp RegSetValue(A) 设置子健
bp RegSetValueEx(A) 设置子健

功能限制拦截断点:
bp EnableMenuItem 禁止或允许菜单项
bp EnableWindow 禁止或允许窗口

拦截时间:
bp GetLocalTime 获取本地时间
bp GetSystemTime 获取系统时间
bp GetFileTime 获取文件时间
bp GetTickCount 获得自系统成功启动以来所经历的毫秒数
bp GetCurrentTime 获取当前时间(16位)
bp SetTimer 创建定时器
bp TimerProc 定时器超时回调函数
GetDlgItemInt 得指定输入框整数值
GetDlgItemText 得指定输入框输入字符串
GetDlgItemTextA 得指定输入框输入字符串

ShowWindow函数:显示或隐藏指定句柄的窗口
将1个隐藏的窗口显示出来,有意思,相当于VB自身内部控件的visible属性。而且超越于此,它还能指定显示时是否最大化,最小化等,声明如下:
Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
调用如:
Const SW_HIDE = 0 参数nCmdShow之一,隐藏窗口
Const SW_SHOW = 5 显示窗口
i = ShowWindow(form1.hwnd, SW_HIDE)
参数:
hwnd: Long,窗口句柄,要向这个窗口应用由nCmdShow指定的命令
nCmdShow: Long,为窗口指定显示或隐藏的一个命令。请用下述任何一个常数
SW_HIDE 隐藏窗口,活动状态给令一个窗口
SW_MINIMIZE 最小化窗口,活动状态给令一个窗口
SW_RESTORE 用原来的大小和位置显示一个窗口,同时令其进入活动状态
SW_SHOW=5 用当前的大小和位置显示一个窗口,同时令其进入活动状态
SW_SHOW

MAXIMIZED=3 最大化窗口,并将其激活
SW_SHOWMINIMIZED=2 最小化窗口,并将其激活
SW_SHOWDEFAULT=10 按窗口本来的方式显示,并激活。
SW_SHOWMINNOACTIVE 最小化一个窗口,同时不改变活动窗口
SW_SHOWNA 用当前的大小和位置显示一个窗口,不改变活动窗口
SW_SHOWNOACTIVATE 用最近的大小和位置显示一个窗口,同时不改变活动窗口
SW_SHOWNORMAL 与SW_RESTORE相同
注:各常数的值请查阅API浏览器中的constants(常数列表)。
======
关闭指定句柄的窗口:SendMessageA的WM_CLOSE消息
SendMessageA的声明在前面有,消息WM_CLOSE的值为&H10,后两个参数为空,用0&。函数返回值若为0表示程序处理了此消息。调用如下:
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Const WM_CLOSE = &H10
Private Sub Command1_Click()
SendMessage Form1.hwnd, WM_CLOSE, 0&, 0&
End Sub
还有一个强制从内存中清除窗口的函数:DestroyWindow函数
其功能是直接清除掉内存中的1个窗口,返回非0表示成功,返回0表示失败。声明:
Public Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long)
很简单,参数只是指定1个窗口句柄。调用如:DestroyWindow Form1.hwnd。
=====
寻找窗口列表中第一个符合条件的父窗口: FindWindowA函数
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
函数返回找到的窗口的句柄。比如要查找标题为"未命名-记事本"的窗口句柄:
hWndTmp = FindWindowA(vbNullString,"未命名-记事本") 二个参数均为字符串,如果某个为空,则用vbNullString或0&补上。
参数:
lpClassName:某窗口类名,或设为零或vbNullString,表示接收任何类
lpWindowName:某窗口标题,或设为零或vbNullString,表示接收任何窗口标题 。
该函数常用来查找ThunderRTMain窗口类的隐藏窗口的句柄。例如:
Dim hw&, cnt&
Dim rttitle As String * 256
hw& = FindWindowA("ThunderRT5Main", vbNullString)
cnt = GetWindowText(hw&, rttitle, 255)
MsgBox Left$(rttitle, cnt), 0, "RTMain title"
=====
根据1个窗口句柄返回另1个相关窗口句柄 :GetWindow函数
传入一个源窗口句柄,返回另1个与之有关的窗口句柄,如源窗口的下1个兄弟窗口,第1个子窗口等。声明:
Declare Function GetWindow Lib "user32"(ByVal hwnd As Long, ByVal wCmd As Long) As Long
调用如:
Const GW_HWNDNEXT = 2
hWndlxn = GetWindow(hWndTmp, GW_HWNDNEXT)
参数:hwnd:源窗口句柄。
wCmd参数:指定结果窗口与源窗口的关系,它们建立在下述常数基础上:
GW_CHILD 寻找源窗口的第一个子窗口
GW_HWNDFIRST 为一个源子窗口寻找第一个兄弟(同级)窗口,或寻找第一个顶级窗口

GW_HWNDLAST 为一个源子窗口寻找最后一个兄弟(同级)窗口,或寻找最后一个顶级窗口
GW_HWNDNEXT 为源窗口寻找下一个兄弟窗口
GW_HWNDPREV 为源窗口寻找前一个兄弟窗口
GW_OWNER 寻找窗口的所有者
注解
兄弟或同级是指在整个分级结构中位于同一级别的窗口。如某个窗口有五个子窗口,那五个窗口就是兄弟窗口。尽管GetWindow可用于枚举窗口,但倘若要在枚举过程中重新定位、创建和清除窗口,那么EnumWindows和EnumChildWindows更为可靠。
=====
GetWindowLongA函数:获得指定窗口某方面的结构信息(返回长整数)。
问题:什么叫"窗口的结构数据信息"?就是1个窗口的诸方面情况吧,象人有姓名性别年龄等一样,窗口有"扩展样式(包含标题栏,如在Form1中表现为BorderStyle属性,有标题栏缩小、无标题栏等的组合值)","样式(包含滚动条、系统菜单、边框等可设置)","父窗口","子窗口","窗口函数"等诸多方面,见下面nIndex参数值。这些方面的内容(每1方面只能有1个当前值)就构成了窗口的结构信息。
该函数从附加窗口内存中返回1个长整数值。
声明:
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
此函数用来获取指定窗口的某方面"结构数据"信息。 函数返回值由参数nIndex来决定要返回哪个方面的当前值。若出错则返回0。
调用如:Const GWL_STYLE = -16
Private Sub Command1_Click()
X = GetWindowLongA(Form1.hwnd, GWL_STYLE)
Print X
End Sub
参数:
hwnd: Long,欲获取信息的窗口的句柄
nIndex: Long,欲取回此窗口哪方面的信息,可以是下述任何一个常数:
GWL_EXSTYLE 扩展窗口样式
(可能包含有:WS_EX_TOOLWINDOW=&H80标题栏缩小可变大小,相当于BorderStyle=5; WS_EX_TRANSPARENT=&H20&隐藏绘图区,但显示其上的子控件。有意思。等,别的我也不太清楚,好象要去查MSDN才可查到)
GWL_STYLE 窗口样式
(可能值有:WS_VSCROLL=?垂直滚动条,WS_HSCROLL=?水平滚动条,
WS_MAXIMIZEBOX=?标题栏右边最大化纽,WS_MINIMIZEBOX=?最小化纽等等)
GWL_WNDPROC 该窗口的窗口函数的地址
GWL_HINSTANCE 拥有窗口的实例的句柄
GWL_HWNDPARENT 该窗口之父的句柄。不要用SetWindowWord来改变这个值
GWL_ID 对话框中一个子窗口的标识符
GWL_USERDATA 含义由应用程序规定
DWL_DLGPROC 这个窗口的对话框函数地址
DWL_MSGRESULT 在对话框函数中处理的一条消息返回的值
DWL_USER 含义由应用程序规定
-----
SetWindowLongA函数:为窗口设置窗口结构信息
常用此函数来动态地设置窗口的风格(如样式,滚动条等等)。即不在属性窗口中设置。而在API中设置。
声明:
Public Declare Function Se

tWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
调用如:
Public Const WS_EX_TOOLWINDOW = &H80
lStyle = WS_EX_TOOLWINDOW
lRet = SetWindowLongA(Me.hwnd, GWL_EXSTYLE, GetWindowLongA(Me.hwnd, GWL_EXSTYLE) Or lStyle) 注:这里有1个Or"或"操作。为何要用OR呢?这是因为一个窗口的GWL_EXSTYLE包含了多项设置值的和(如同时可能有滚动条,标题栏等值的组合,如为262400),用or就可只改动其部分值,而保留其他方面原设置不变。
参数:
hwnd Long,欲设置信息的窗口的句柄
nIndex Long,请参考GetWindowLong函数的nIndex参数的说明
dwNewLong Long,由nIndex指定的窗口信息的新值

增加亮度
增加对比度
二值化
去杂点
去干扰线
取特征点或与字库对照
经过以上几步后
得到结果


Plugin Memory.ReadString()请问这个插件怎么用?
Plugin Memory.ReadString()请问这个插件怎么用?

Private Sub main1_Timer()

Dim name(30) As Byte

ck = FindWindow(vbNullString, "QQ华夏")
GetWindowThreadProcessId ck, pid
ccpid = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
ReadProcessMemory ccpid, ByVal 4498084, name(0), 30, 0&
CloseHandle ccpid
server1.Caption = StrConv(name, vbUnicode)

多开思路用上面取得的HWND加上TIME数组~~~~~~~~~就可以了~~~~~~
下面是当时间用在珠仙答题的VB代码~~~~~~~~
EnumWindows AddressOf EnumWindowsProc, 0& '取得所有窗口中诛仙hwnd
Dim js1
js1 = 0
For js1 = 0 To List1.ListCount - 1 'list1.listcount为所有窗口诛仙hwnd的个数
GameFormHwnd = List1.List(js1) ‘List1.List(js1)取得当前的LIST中HWND,当JS1=0为LIST中第一个HWND值
If GameFormHwnd <> 0 Then
Dim p As Long
GetWindowThreadProcessId GameFormHwnd, hProcId
ProcessID = OpenProcess(PROCESS_ALL_ACCESS Or PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, hProcId)
CloseHandle ProcessID
GetWindowThreadProcessId GameFormHwnd, hProcId
hhPId(js1) = hProcId
Else
ProcessID = 0
End If
Next js1

'下面是ENUMWINDOWSPROC代码~
Public Function EnumWindowsProc(ByVal hWnd As Long, ByVal lParam As Long) As Boolean
On Error Resume Next
Dim s As String
s = String(80, 0)
Call GetWindowText(hWnd, s, 80)
s = Left(s, InStr(s, Chr(0)) - 1)
If Len(s) > 0 And UCase(s) = "ELEMENT CLIENT" Then
Form1.List1.AddItem hWnd
Dim Str As String, ProcID As Long, hPId As Long, BuffEnum(36) As Byte, BuffL As Long
Dim mName As String, mec1 As Long, mec2 As Long
GetWindowThreadProcessId hWnd, hPId
ProcID = OpenProcess(PROCESS_ALL_ACCESS Or PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, hPId)
Dim mAdr(4) As Long, i As Long
ReadProcessMemory ProcID, ByVal FirstAdr, base, 4, 0
Re

adProcessMemory ProcID, ByVal base + &H28, eax, 4, 0
ReadProcessMemory ProcID, ByVal eax + &H3A4, base, 4, 0
ReadProcessMemory ProcID, ByVal base, ByVal BuffEnum(0), 36, BuffL
Str = Left$(BuffEnum, 36)
Form1.List3.AddItem Str
CloseHandle ProcID
Erase BuffEnum
End If
EnumWindowsProc = True
End Function

'下面是时间数组
Private Sub Timer1_Timer(Index As Integer)
ProcessID = OpenProcess(PROCESS_ALL_ACCESS Or PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, hhPId(Index))
ReadProcessMemory ProcessID, ByVal &H909B94, xx(Index), 4, 0
CloseHandle ProcessID
If hhPId(Index) = 0 Then
Timer1(Index).Enabled = False
End If
.........
End Sub

相关文档