[说明:从黑基找到的,没找到原文,很实用,故张贴于此]
常用断点设置
bpx hmemcpy
bpx Lockmytask
实在找不到断点可以试下面的方法:
bmsg handle wm_gettext
bmsg handle wm_command
拦截窗口:
bpx CreateWindow 创建窗口
bpx CreateWindowEx(A/W) 创建窗口
bpx ShowWindow 显示窗口
bpx UpdateWindow 更新窗口
bpx GetWindowText(A/W) 获取窗口文本
bpx SetWindowText(A/W) 设置窗口文本 (本人所加)
拦截消息框:
bpx MessageBox(A/W) 创建消息框
bpx MessageBoxExA(W) 创建消息框
bpx MessageBoxIndirect(A/W) 创建定制消息框
拦截警告声:
bpx MessageBeep 发出系统警告声
拦截对话框:
bpx DialogBox 创建模态对话框
bpx DialogBoxParam(A/W) 创建模态对话框
bpx DialogBoxIndirect 创建模态对话框
bpx DialogBoxIndirectParam(A/W) 创建模态对话框
bpx CreateDialog 创建非模态对话框
bpx CreateDialogParam(A/W) 创建非模态对话框
bpx CreateDialogIndirect 创建非模态对话框
bpx CreateDialogIndirectParam(A/W) 创建非模态对话框
bpx GetDlgItemText(A/W) 获取对话框文本
bpx GetDlgItemInt 获取对话框整数值
拦截剪贴板:
bpx GetClipboardData 获取剪贴板数据
拦截注册表:
bpx RegOpenKey(A/W) 打开子健
bpx RegOpenKeyExA(W) 打开子健
bpx RegQueryValue(A/W) 查找子健
bpx RegQueryValueEx(A/W) 查找子健
bpx RegSetValue(A/W) 设置子健
bpx RegSetValueEx(A/W) 设置子健
功能限制拦截断点:
bpx EnableMenuItem 禁止或允许菜单项
bpx EnableWindow 禁止或允许窗口
bmsg hMenu wm_command 拦截菜单按键事件,其中hMenu为菜单句柄
bpx K32Thk1632Prolog
拦截时间:
bpx GetLocalTime 获取本地时间
bpx GetSystemTime 获取系统时间
bpx GetFileTime 获取文件时间
bpx GetTickCount 获得自系统成功启动以来所经历的毫秒数
bpx GetCurrentTime 获取当前时间(16位)
bpx SetTimer 创建定时器
bpx TimerProc 定时器超时回调函数
拦截文件:
bpx CreateFileA(W) 创建或打开文件 (32位)
bpx OpenFile 打开文件 (32位)
bpx ReadFile 读文件 (32位)
bpx WriteFile 写文件 (32位)
bpx _lcreat 创建或打开文件 (16位)
bpx _lopen 打开文件 (16位)
bpx _lread 读文件 (16位)
bpx _lwrite 写文件 (16位)
bpx _hread 读文件 (16位)
bpx _hwrite 写文件 (16位)
拦截驱动器:
bpx GetDrivetype(A/W) 获取磁盘驱动器类型
bpx GetLogicalDrives 获取逻辑驱动器符号
bpx GetLogicalDriveStringsA(W) 获取当前所有逻辑驱动器的根驱动器路径
拦截狗:
bpio -h 378(或278、3BC) R 378、278、3BC是并行打印端口
bpio -h 3F8(或2F8、3E8、2E8) R 3F8、2F8、3E8、2E8是串行端口
VB程序专用断点:
bpx msvbvm60!rtcMsgBox
bpx msvbvm60!__vbaStrCmp
bpx msvbvm60!__vbaStrComp
bpx msvbvm60!__vbaStrCompVar
bpx msvbvm60!__vbaStrTextCmp
bpx msvbvm60!__vbaFileOpen
bpx msvbvm60!__vbaInputFile
bpx msvbvm60!__vbaFileSeek
bpx msvbvm60!__vbaWriteFile
bpx msvbvm60!__vbaFileClose
bpx msvbvm60!rtcFileAttributes
bpx msvbvm60!rtcFileDateTime
bpx msvbvm60!rtcFileLen
bpx msvbvm60!rtcFileLength
bpx msvbvm60!__vbaVarInt
bpx msvbvm60!__vbaVarCmpGe
bpx msvbvm60!__vbaVarCmpGt
bpx msvbvm60!__vbaVarCmpLe
bpx msvbvm60!__vbaVarCmpLt
bpx msvbvm60!__vbaVarCmpNe
VB常用的一些函数:
MultiByteToWideChar 将ANSI字符串转换成UNICODE字符
WideCHatToMultiByte 将UNICODE字符转换成ANSI字符
rtcT8ValFromBstr 把字符转换成浮点数
vbaStrCmp 比较字符串(常用断点)
vbaStrComp 字符串比较(常用断点)
vbaStrCopy 复制字符串
StrConv 转换字符串
vbaStrMove 移动字符串
__vbaVarCat 连接字符串
rtcMidCharVar 在字符串中取字符或者字符串!
__vbaLenBstr 取字符串的长度
vbaVarTstNe 变量比较
vbaVarTstEq 变量比较
rtcMsgBox 显示对话框
VarBstrCmp 比较字符串
VarCyCmp 比较字符串
常用断点设置API函数原型
--------------------------------------------------------------------------------
HWND CreateWindow(
LPCTSTR lpClassName, // 指向注册窗口类名的指针
LPCTSTR lpWindowName, // 指向窗口名的指针
DWORD dwStyle, // 窗口样式
int x, // 窗口水平位置
int y, // 窗口垂直位置
int nWidth, // 窗口宽度
int nHeight, // 窗口高度
HWND hWndParent, // 父窗口句柄
HMENU hMenu, // 菜单句柄
HANDLE hInstance, // 应用程序实例句柄
LPVOID lpParam // 指向创建窗口所需的数据
);
返回值:如果成功就返回新窗口的句柄;失败则返回NULL值
--------------------------------------------------------------------------------
HWND CreateWindowEx(
DWORD dwExStyle, // 扩展窗口样式
LPCTSTR lpClassName, // 指向注册窗口类名的指针
LPCTSTR lpWindowName, // 指向窗口名的指针
DWORD dwStyle, // 窗口样式
int x, // 窗口水平位置
int y, // 窗口垂直位置
int nWidth, // 窗口宽度
int nHeight, // 窗口高度
HWND hWndParent, // 父窗口句柄
HMENU hMenu, // 菜单句柄
HINSTANCE hInstance, // 应用程序实例句柄
LPVOID lpParam // 指向创建窗口所需的数据
);
返回值:如果成功就返回新窗口的句柄;失败则返回NULL值
--------------------------------------------------------------------------------
BOOL ShowWindow(
HWND hWnd, // 窗口句柄
int nCmdShow // 窗口显示状态
);
返回值:如果先前的窗口可见就返回非零值;如果先前的窗口隐藏则返回零值
--------------------------------------------------------------------------------
BOOL UpdateWindow(
HWND hWnd // 窗口句柄
);
返回值:如果成功就返回非零值;失败则返回零值
--------------------------------------------------------------------------------
int GetWindowText(
HWND hWnd, // 窗口或文本控件句柄
LPTSTR lpString, // 缓冲区地址
int nMaxCount // 最大字符数
);
返回值:如果成功就返回文本长度;失败则返回零值
--------------------------------------------------------------------------------
BOOL SetWindowText(
HWND hWnd, // handle of window or control 窗口句柄
LPCTSTR lpString // address of string 文本指针
);
返回值:如果成功就返回非0;失败则返回零值
--------------------------------------------------------------------------------
int MessageBox(
HWND hWnd, // 父窗口句柄
LPCTSTR lpText, // 消息框文本地址
LPCTSTR lpCaption, // 消息框标题地址
UINT uType // 消息框样式
);
返回值:如果失败则返回零值;如果成功,返回值为如下之一:
IDABORT Abort 按钮被选择
IDCANCEL Cancel 按钮被选择
IDIGNORE Ignore 按钮被选择
IDNO No 按钮被选择
IDOK OK 按钮被选择
IDRETRY Retry 按钮被选择
IDYES Yes 按钮被选择
--------------------------------------------------------------------------------
int MessageBoxEx(
HWND hWnd, // 父窗口句柄
LPCTSTR lpText, // 消息框文本地址
LPCTSTR lpCaption, // 消息框标题地址
UINT uType, // 消息框样式
WORD wLanguageId // 语言标识
);
返回值:如果失败则返回零值;如果成功,返回值为如下之一:
IDABORT Abort 按钮被选择
IDCANCEL Cancel 按钮被选择
IDIGNORE Ignore 按钮被选择
IDNO No 按钮被选择
IDOK OK 按钮被选择
IDRETRY Retry 按钮被选择
IDYES Yes 按钮被选择
--------------------------------------------------------------------------------
int MessageBoxIndirect(
LPMSGBOXPARAMS lpMsgBoxParams // 消息框参数结构地址
);
返回值:如果失败则返回零值;如果成功,返回值为如下之一:
IDABORT Abort 按钮被选择
IDCANCEL Cancel 按钮被选择
IDIGNORE Ignore 按钮被选择
IDNO No 按钮被选择
IDOK OK 按钮被选择
IDRETRY Retry 按钮被选择
IDYES Yes 按钮被选择
--------------------------------------------------------------------------------
BOOL MessageBeep(
UINT uType // 声音类型
);
声音类型:
0xFFFFFFFF Standard beep using the computer speaker
MB_ICONASTERISK SystemAsterisk
MB_ICONEXCLAMATION SystemExclamation
MB_ICONHAND SystemHand
MB_ICONQUESTION SystemQuestion
MB_OK SystemDefault
返回值:如果成功就返回文本长度;失败则返回零值
--------------------------------------------------------------------------------
int DialogBox(
HINSTANCE hInstance, // 应用程序实例句柄
LPCTSTR lpTemplate, // 对话框模板指针
HWND hWndParent, // 父窗口句柄
DLGPROC lpDialogFunc // 对话框处理函数指针
);
返回值:如果成功就返回nResult参数,用于EndDialog结束对话框;失败则返回-1
--------------------------------------------------------------------------------
int DialogBoxParam(
HINSTANCE hInstance, // 应用程序实例句柄
LPCTSTR lpTemplateName, // 对话框模板指针
HWND hWndParent, // 父窗口句柄
DLGPROC lpDialogFunc, // 对话框处理函数指针
LPARAM dwInitParam // 初始化值
);
返回值:如果成功就返回nResult参数,用于EndDialog结束对话框;失败则返回-1
--------------------------------------------------------------------------------
int DialogBoxIndirect(
HINSTANCE hInstance, // 应用程序实例句柄
LPDLGTEMPLATE lpTemplate, // 对话框模板指针
HWND hWndParent, // 父窗口句柄
DLGPROC lpDialogFunc // 对话框处理函数指针
);
返回值:如果成功就返回nResult参数,用于EndDialog结束对话框;失败则返回-1
--------------------------------------------------------------------------------
int DialogBoxIndirectParam(
HINSTANCE hInstance, // 应用程序实例句柄
LPCDLGTEMPLATE lpTemplateName, // 对话框模板指针
HWND hWndParent, // 父窗口句柄
DLGPROC lpDialogFunc, // 对话框处理函数指针
LPARAM dwInitParam // 初始化值
);
返回值:如果成功就返回nResult参数,用于EndDialog结束对话框;失败则返回-1
--------------------------------------------------------------------------------
int CreateDialog(
HINSTANCE hInstance, // 应用程序实例句柄
LPCTSTR lpTemplate, // 对话框模板指针
HWND hWndParent, // 父窗口句柄
DLGPROC lpDialogFunc // 对话框处理函数指针
);
返回值:如果成功就返回对话框句柄;失败则返回NULL
--------------------------------------------------------------------------------
int CreateDialogParam(
HINSTANCE hInstance, // 应用程序实例句柄
LPCTSTR lpTemplateName, // 对话框模板指针
HWND hWndParent, // 父窗口句柄
DLGPROC lpDialogFunc, // 对话框处理函数指针
LPARAM dwInitParam // 初始化值
);
返回值:如果成功就返回对话框句柄;失败则返回NULL
--------------------------------------------------------------------------------
int CreateDialogIndirect(
HINSTANCE hInstance, // 应用程序实例句柄
LPDLGTEMPLATE lpTemplate, // 对话框模板指针
HWND hWndParent, // 父窗口句柄
DLGPROC lpDialogFunc // 对话框处理函数指针
);
返回值:如果成功就返回对话框句柄;失败则返回NULL
--------------------------------------------------------------------------------
int CreateDialogIndirectParam(
HINSTANCE hInstance, // 应用程序实例句柄
LPCDLGTEMPLATE lpTemplateName, // 对话框模板指针
HWND hWndParent, // 父窗口句柄
DLGPROC lpDialogFunc, // 对话框处理函数指针
LPARAM dwInitParam // 初始化值
);
返回值:如果成功就返回对话框句柄;失败则返回NULL
--------------------------------------------------------------------------------
UINT GetDlgItemText(
HWND hDlg, // 对话框句柄
int nIDDlgItem, // 控件标识
LPTSTR lpString, // 文本缓冲区指针
int nMaxCount // 最大字符数
);
返回值:如果成功就返回文本长度;失败则返回零值
--------------------------------------------------------------------------------
UINT GetDlgItemInt(
HWND hDlg, // 对话框句柄
int nIDDlgItem, // 控件标识
BOOL *lpTranslated, // 接收成功/失败指示的指针
BOOL bSigned // 指定是有符号数还是无符号数
);
返回值:如果成功,lpTranslated被设置为TRUE,返回文本对应的整数值;如果失败,lpTranslated被设置为FALSE,返回值为零
--------------------------------------------------------------------------------
HANDLE GetClipboardData(
UINT uFormat // 剪贴板格式
);
返回值:如果成功就返回剪贴板对象的句柄;失败则返回NULL
--------------------------------------------------------------------------------
LONG RegOpenKey(
HKEY hKey, // 要打开的主键句柄
LPCTSTR lpSubKey, // 要打开的子键名地址
PHKEY phkResult // 存放打开子键句柄的地址
);
返回值:如果成功就返回ERROR_SUCCESS;失败则返回非零错误代码
--------------------------------------------------------------------------------
LONG RegOpenKeyEx(
HKEY hKey, // 要打开的主键句柄
LPCTSTR lpSubKey, // 要打开的子键名地址
DWORD ulOptions, // 保留,必须为0
REGSAM samDesired, // 存取掩码
PHKEY phkResult // 存放打开子键句柄的地址
);
返回值:如果成功就返回ERROR_SUCCESS;失败则返回非零错误代码
--------------------------------------------------------------------------------
LONG RegQueryValue(
HKEY hKey, // 需要查找的主键的句柄
LPCTSTR lpSubKey, // 需要查找的子键名地址
LPTSTR lpValue, // 存放结果的缓冲区地址
PLONG lpcbValue // 存放返回结果字节长度的缓冲区地址
);
返回值:如果成功就返回ERROR_SUCCESS;失败则返回非零错误代码
--------------------------------------------------------------------------------
LONG RegQueryValueEx(
HKEY hKey, // 需要查找的主键的句柄
LPTSTR lpValueName, // 需要查找的子键名地址
LPDWORD lpReserved, // 保留,必须为NULL.
LPDWORD lpType, // 存放子键类型的缓冲区地址
LPBYTE lpData, // 存放返回结果的缓冲区地址
LPDWORD lpcbData // 存放返回结果字节长度的缓冲区地址
);
返回值:如果成功就返回ERROR_SUCCESS;失败则返回非零错误代码
--------------------------------------------------------------------------------
LONG RegSetValue(
HKEY hKey, // 需要设置键值的主键句柄
LPCTSTR lpSubKey, // 需要设置的子键名地址
DWORD dwType, // 键值类型
LPCTSTR lpData, // 所设置的数据地址
DWORD cbData // 所设置的数据字节长度
);
返回值:如果成功就返回ERROR_SUCCESS;失败则返回非零错误代码
--------------------------------------------------------------------------------
LONG RegSetValueEx(
HKEY hKey, // 需要设置键值的主键句柄
LPCTSTR lpValueName, // 需要设置的子键名地址
DWORD Reserved, // 保留,必须为0
DWORD dwType, // 键值类型
CONST BYTE *lpData, // 所设置的数据地址
DWORD cbData // 所设置的数据字节长度
);
返回值:如果成功就返回ERROR_SUCCESS;失败则返回非零错误代码
--------------------------------------------------------------------------------
BOOL EnableMenuItem(
HMENU hMenu, // 菜单句柄
UINT uIDEnableItem, // 菜单项标识
UINT uEnable // 控制标志
);
uEnable的三种有用情况:
MF_DISABLED 禁止
MF_ENABLED 允许
MF_GRAYED 变灰
返回值:返回菜单项以前的状态,如果菜单项不存在就返回0xFFFFFFFF
--------------------------------------------------------------------------------
BOOL EnableWindow(
HWND hWnd, // 窗口句柄
BOOL bEnable // 禁止或允许标志
);
bEnable的两种状态:
TRUE 允许
FALSE 禁止
返回值:如果先前的窗口是禁止状态,则返回非零值;如果先前的窗口是允许状态,则返回零
--------------------------------------------------------------------------------
VOID GetLocalTime(
LPSYSTEMTIME lpSystemTime // 存放系统时间结构的地址
);
返回值:无
--------------------------------------------------------------------------------
VOID GetSystemTime(
LPSYSTEMTIME lpSystemTime // 存放系统时间结构的地址
);
返回值:无
--------------------------------------------------------------------------------
BOOL GetFileTime(
HANDLE hFile, // 文件句柄
LPFILETIME lpCreationTime, // 存放文件创建时间的地址
LPFILETIME lpLastAccessTime, // 存放文件最后一次存取时间的地址
LPFILETIME lpLastWriteTime // 存放文件最后一次写的地址
);
返回值:如果成功就返回非零值;失败则返回零
--------------------------------------------------------------------------------
DWORD GetTickCount(VOID)
返回值:如果成功就返回自WINDOWS启动以来所经历的毫秒数
--------------------------------------------------------------------------------
UINT SetTimer(
HWND hWnd, // 与定时器相关的窗口句柄
UINT nIDEvent, // 定时器标识
UINT uElapse, // 定时间隔,以毫秒为单位
TIMERPROC lpTimerFunc // 定时器超时函数地址
);
返回值:如果成功就返回新定时器的句柄,用于KillTimer结束定时器;失败则返回零
--------------------------------------------------------------------------------
VOID CALLBACK TimerProc(
HWND hwnd, // 与定时器相关的窗口句柄
UINT uMsg, // WM_TIMER 消息
UINT idEvent, // 定时器标识
DWORD dwTime // 由GetTickCount获得的当前系统时间
);
返回值:无
--------------------------------------------------------------------------------
HANDLE CreateFile(
LPCTSTR lpFileName, // 要打开的文件名指针
DWORD dwDesiredAccess, // 存取(读-写)模式
DWORD dwShareMode, // 共享模式
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // SECURITY_ATTRIBUTES 结构指针
DWORD dwCreationDistribution, // 打开方式
DWORD dwFlagsAndAttributes, // 文件属性
HANDLE hTemplateFile // GENERIC_READ方式存取的临时文件句柄
);
返回值:如果成功就返回文件句柄;失败则返回INVALID_HANDLE_VALUE
--------------------------------------------------------------------------------
HFILE OpenFile(
LPCSTR lpFileName, // 要打开的文件名指针
LPOFSTRUCT lpReOpenBuff, // 存放文件信息的缓冲区地址
UINT uStyle // 打开方式
);
返回值:如果成功就返回文件句柄;失败则返回HFILE_ERROR
--------------------------------------------------------------------------------
BOOL ReadFile(
HANDLE hFile, // 要读取的文件句柄
LPVOID lpBuffer, // 存放读出数据的缓冲区地址
DWORD nNumberOfBytesToRead, // 要读的字节数
LPDWORD lpNumberOfBytesRead, // 指向读取字节数的地址
LPOVERLAPPED lpOverlapped // OVERLAPPED 结构的地址
);
返回值:如果成功就返回非零值;失败则返回零
--------------------------------------------------------------------------------
BOOL WriteFile(
HANDLE hFile, // 要写入的文件句柄
LPCVOID lpBuffer, // 存放写入数据的缓冲区地址
DWORD nNumberOfBytesToWrite, // 写入的字节数
LPDWORD lpNumberOfBytesWritten, // 指向写入字节数的地址
LPOVERLAPPED lpOverlapped // OVERLAPPED 结构的地址
);
返回值:如果成功就返回非零值;失败则返回零
--------------------------------------------------------------------------------
HFILE _lcreat(
LPCSTR lpPathName, // 要打开的文件名指针
int iAttribute // 文件属性
);
返回值:如果成功就返回文件句柄;失败则返回HFILE_ERROR
--------------------------------------------------------------------------------
HFILE _lopen(
LPCSTR lpPathName, // 要打开的文件名指针
int iReadWrite // 文件存取模式
);
返回值:如果成功就返回文件句柄;失败则返回HFILE_ERROR
--------------------------------------------------------------------------------
UINT _lread(
HFILE hFile, // 文件句柄
LPVOID lpBuffer, // 存放读出数据的缓冲区地址
UINT uBytes // 读取的字节数
);
返回值:如果成功就返回实际读取的字节数;失败则返回HFILE_ERROR
--------------------------------------------------------------------------------
UINT _lwrite(
HFILE hFile, // 文件句柄
LPCSTR lpBuffer, // 存放写入数据的缓冲区地址
UINT uBytes // 写入的字节数
);
返回值:如果成功就返回实际写入的字节数;失败则返回HFILE_ERROR
--------------------------------------------------------------------------------
UINT _hread(
HFILE hFile, // 文件句柄
LPVOID lpBuffer, // 存放读出数据的缓冲区地址
UINT uBytes // 读取的字节数
);
返回值:如果成功就返回实际读取的字节数;失败则返回HFILE_ERROR
--------------------------------------------------------------------------------
UINT _hwrite(
HFILE hFile, // 文件句柄
LPCSTR lpBuffer, // 存放写入数据的缓冲区地址
UINT uBytes // 写入的字节数
);
返回值:如果成功就返回实际写入的字节数;失败则返回HFILE_ERROR
--------------------------------------------------------------------------------
UINT GetDriveType(
LPCTSTR lpRootPathName // 根路径地址
);
返回值如下所示之一:
0 无法决定
1 根目录不存在
DRIVE_REMOVABLE 可移动驱动器
DRIVE_FIXED 固定驱动器
DRIVE_REMOTE 远程(网络)驱动器
DRIVE_CDROM CD-ROM 驱动器
DRIVE_RAMDISK RAM disk
--------------------------------------------------------------------------------
DWORD GetLogicalDrives(VOID)
返回值:如果失败就返回零值,成功则返回由位掩码表示的当前可用驱动器:
bit 0 drive A
bit 1 drive B
bit 2 drive C
bit 3 drive D
。。。以此类推
--------------------------------------------------------------------------------
DWORD GetLogicalDriveStrings(
DWORD nBufferLength, // 缓冲区大小
LPTSTR lpBuffer // 缓冲区地址,如成功则返回结果为如下形式: c:\\d:\\
);
返回值:如果成功就返回实际的字符数;失败则返回零
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)