吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 5236|回复: 27

[经验资料] 常见断点设置

  [复制链接]
yAxI丶9y 发表于 2014-11-18 12:54 | 显示全部楼层 |阅读模式

本帖最后由 雅熙; 于 2014-11-18 15:26 编辑



暴力逆向的一般流程
1、有壳者自然得先脱壳
2、试注册看看有何提示,让我们抓抓小尾巴
3、若有提示,用OD动态调试器或者是W32静态调试器查找错误提示
4、来到错误提示处分析代码找关键CALL、关键跳!
5、修改代码
6、复制保存!


如果没有提示,我们可以使用很多断点来完成这些操作
现今软件的保护方式有
1、序列号保护方式(注册码=f(机器码/序列号))
2、警告(NAG)窗口
3、时间限制/次数限制。。
4、菜单功能限制
5、Key File保护
6、CD-Check
7、只运行一个实例


一些软件通过把注册码保存在.ini文件、注册表、.dat文件等等方式进行注册验证


常见断点设置


字符串
bp GetDlgItemTextA(W) ****
bp GetDlgItemInt
bp GetWindowTextA(W) ****
bp GetWindowWord
bmsg XXXX wm_gettext


对话框
bp MessageBeep
bp MessageBoxA(W) ****
bp MessageBoxExA(W)
bp DialogBoxParamA(W)
bp GreateWindowExA(W)
bp ShowWindow
bp UpdateWindow
bmsg XXXX wm_command


对于VB的程序用bp MessageBoxA是无法断下来的,bp rtcMsgBox


注册表相关
bp RegCreateKeyA(W)
bp RegDeleteKeyA(W)
bp RegQueryValueA(W)
bp RegCloseKey
bp RegOpenKeyA(W) ****


时间相关
bp GetLocalTime
bp GetFileTime
bp GetSystemtime


CD-ROM或磁盘相关
bp GetFileAttributesA(W)
bp GetFileSize
bp GetDriveType
bp GetLastError
bp ReadFile
bpio -h (CD-ROM端口地址) R


软件狗
bpio -h 278R
bpio -h 378R


INI初始化文件相关
bp GetPrivateProfileStringA  ****
bp GetPrivateProfileInt
bp WritePrivateProfileString
bp WritePrivateProfileInt


文件访问相关
bp ReadFile
bp WriteFile
bp CreateFileA  ****
bp SetFilePointer
bp GetSystemDirectory


另外还有一类软件通过网络验证、重启验证来判断程序是否注册
当然前者一般应用于FZ程序上较多,一般是改网络验证为本地验证达到欺骗远程网络主机的目的达到通过验证!
后者也是很常见的,他一般把用户输入的注册码直接或者是通过加密运算后得到的数值保存到文件、注册表中,然后提示用户重启验证是否注册,当然当你重新打开程序的时候他会从文件或者是注册表中读取用户输入的注册码,再通过程序注册算法来进行比照,正确者当然就成为正版,错误的自然就88了,另外以重启验证的软件一般是把注册码保存在注册表或文件中!


下面来说说解决这类软件的一般方法!


重启验证类软件大致的验证过程。
1、运行软件输入注册信息,点注册后。一般软件会提示你重新运行软件,以便验证注册信息的正确性(如FlashGet);
也有的只在你输入正确的注册信息时才有这个提示,不然会告诉你输入的注册信息有问题(此软件就属这类)


2、要逆向这种软件,首先是判断一下她把注册信息存在哪里(因为她重启验证时要用)。大致有两种存放方式,第一种是放在注册表里;第二种是放在文件里。(我们可以在输入注册信息,点击确定前,利用监视类软件来查看一下,如FileMon和RegShot等)


3、知道她的注册信息的存放地点后,就可以选则相应的API断点,来调试了

实在找不到断点可以试下面的方法:


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是串行端口



访问注册表类常用API
bp RegOpenKeyA  打开一个现有的注册表项  ****
bp RegOpenKeyExA  打开一个现有的注册表项 ****
bp RegCreateKeyA 在指定的项下创建或打开一个项
bp RegCreateKeyExA 在指定项下创建新项的更复杂的方式
bp RegDeleteKeyA 删除现有项下方一个指定的子项
bp RegDeleteValueA 删除指定项下方的一个值
bp RegQueryValueA 获取一个项的设置值
bp RegQueryValueExA 获取一个项的设置值
bp RegSetValueA 设置指定项或子项的值  
bp RegSetValueExA 设置指定项的值
bp RegCloseKey 关闭系统注册表中的一个项(或键)


访问文件类常用API
bp CreateFileA 打开和创建文件、管道、邮槽、通信服务、设备以及控制台  ****
bp OpenFile 这个函数能执行大量不同的文件操作
bp ReadFile 从文件中读出数据  
bp ReadFileEx 与ReadFile相似,只是它只能用于异步读操作,并包含了一个完整的回调



注意:VB程序仍然可以使用普通API函数,只要函数"最终"CALL了这个函数

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

bpx msvbvm60!__vbaVarTextCmpEq

bpx msvbvm60!__vbaVarTextCmpGe

bpx msvbvm60!__vbaVarTextCmpGt

bpx msvbvm60!__vbaVarTextCmpLe

bpx msvbvm60!__vbaVarTextCmpLt

bpx msvbvm60!__vbaVarTextCmpNe

bpx msvbvm60!__vbaVarTextTstEq

bpx msvbvm60!__vbaVarTextTstGe

bpx msvbvm60!__vbaVarTextTstGt

bpx msvbvm60!__vbaVarTextTstLe

bpx msvbvm60!__vbaVarTextTstLt

bpx msvbvm60!__vbaVarTextTstNe

bpx msvbvm60!__vbaVarTstEq

bpx msvbvm60!__vbaVarTstGe

bpx msvbvm60!__vbaVarTstGt

bpx msvbvm60!__vbaVarTstLe

bpx msvbvm60!__vbaVarTstLt

bpx msvbvm60!__vbaVarTstNe


上面的断点对应VB6程序,如果是VB5程序则将msvbvm60改成msvbvm50即可

VB常用的一些函数:
MultiByteToWideChar 将ANSI字符串转换成UNICODE字符
WideCHatToMultiByte  将UNICODE字符转换成ANSI字
       rtcT8ValFromBstr   把字符转换成浮点数  
       vbaStrCmp       比较字符串(常用断点)
       vbaStrComp      字符串比较(常用断点)
       vbaStrCopy      复制字符串
       StrConv        转换字符串
       vbaStrMove      移动字符串
       __vbaVarCat           连接字符串
       rtcMidCharVar         在字符串中取字符或者字符串!
       __vbaLenBstr           取字符串的长度
       vbaVarTstNe      变量比较
       vbaVarTstEq      变量比较
       rtcMsgBox       显示对话框
       VarBstrCmp      比较字符串
       VarCyCmp       比较字符串
--------------------------------------------------------------------------------

VB3、VB4、VB5程序逆向法宝(将以下内容覆盖Softice中winice.dat文件的对应项):

AF3="^S 30:0 L FFFFFFFF 8B,CA,F3,A6,74,01,9F,92,8D,5E,08;"
AF4="^S 30:0 L FFFFFFFF 56,57,8B,7C,24,10,8B,74,24,0C,8B,4C,24,14,33,C0,F3,66,A7;"
AF5="^S 30:0 L FFFFFFFF FF,75,E0,E8,85,EF,FF,FF,DC,1D,28,10,40,00,DF,E0,9E,75,03;"

跟踪时按ALT+F3、ALT+F4、ALT+F5键(分别对应VB3、VB4、VB5程序),搜寻成功后你将得到一个地址30:????????,然后设置断点"bpx 30:????????",这样可以有效的拦截很多程序的注册码(逆向VB程序记得将VB的DLL库导入Softice)!^_^

  ★注意:上面所列函数末尾有带"A"的,有带"W"的,有不带后缀的;一般说来,如果函数同时可以有后缀也可以没有后缀(形如:MessageBox(A/W)), 则不带后缀的表示16位的函数(MessageBox),带后缀的(MessageBoxA、MessageBoxW)表示32位的函数;通常优先使用带后缀(A或W)的断点,带A后缀的一般用于WIN9X系统, 而带W后缀的一般用于NT系统;如果函数没有任何后缀,则表示这是个通用的跨平台的API函数。


断点设置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:\\
);


返回值:如果成功就返回实际的字符数;失败则返回零






几种常用的定位关键代码的方法


一、查找字符串


二、万能断点法


三、F12暂停法


四、下相对应的API断点




标志位逆向


此类典型的汇编代码:
CALL    XXXXXXXX
test    al,al
je/jnz  xxxxxxxx


或者
CALL    XXXXXXXX
test    ax,ax
je/jnz  xxxxxxxx   




mov ax,1
retn


xor eax,eax
inc ax

retn


ESP定律与内存断点
(大致内容: Unnamed QQ Screenshot20141118150554.jpg Unnamed QQ Screenshot20141118150608.jpg
下载地址:
http://115.com/lb/5lbclpathzcw
















评分

参与人数 21HB +19 THX +15 收起 理由
24567 + 1
琉璃天空 + 1
sjtkxy + 1 + 1
白白桃 + 1
Soul1999 + 1
一路走来不容易 + 1
zxjzzh + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
消逝的过去 + 1
dDack + 1 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
吾爱笑 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
wenrou999 + 1 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
ghostxu + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
无影无踪 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
jaunic + 1
hnymsh + 1
lies + 1
hardchao + 1 + 1 [快捷评语] - 评分=感恩!简单却充满爱!感谢您的作品!
viejoh + 1 + 1 分享精神,是最值得尊敬的!
kipflash + 1 + 1 分享精神,是最值得尊敬的!
vip + 3 + 1 积极评分从我做起,感谢!
轮回 + 5 积极评分从我做起,感谢!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Crack_TTds 发表于 2014-11-18 13:02 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
vip 发表于 2014-11-18 13:11 | 显示全部楼层

不错,收藏了、
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
爆笑祖国 发表于 2014-11-18 13:22 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
kasher 发表于 2014-11-18 14:11 | 显示全部楼层

学习了 感谢楼主的经验
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
哈哈哈 发表于 2014-11-18 14:20 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
帮助别人 发表于 2014-11-18 14:21 | 显示全部楼层

楼主继续,咋中途断了啊
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| yAxI丶9y 发表于 2014-11-18 15:26 | 显示全部楼层

帮助别人 发表于 2014-11-18 14:21
楼主继续,咋中途断了啊

正在持续更新
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
帮助别人 发表于 2014-11-18 15:42 | 显示全部楼层


努力努力发全,谢谢,谢谢!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
liu39 发表于 2014-11-19 12:41 | 显示全部楼层

总结的真的很好,常见的差不多都全了
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表