进入快盘 | 申领稿费  |  新人报到  |  意见建议 | 购买卡币    

卡巴斯基技术论坛's Archiver

西布伦 发表于 2008-8-5 10:49

爆破的一般思路与断点的设置

<P>爆破的一般思路与断点的设置 </P>
<P>--------------------------------------------------------------------------------<BR>爆破 顾名思义就是暴力修改程序的代码来达到破解的目的 <BR>当然根据共享软件的注册方式我们可以对症下药 </P>
<P>比如说没有注册的软件有功能限制、使用次数限制、使用日期限制等 <BR>我们就可以分别对待了!我们只需要解除这些限制自然就达到了破解的目的了! </P>
<P>暴力破解的一般流程 <BR>1、有壳者自然得先脱壳 <BR>2、试注册看看有何提示,让我们抓抓小尾巴 <BR>3、若有提示,用OD动态调试器或者是W32静态调试器查找错误提示 <BR>4、来到错误提示处分析代码找关键CALL、关键跳! <BR>5、修改代码 <BR>6、复制保存! </P>
<P>如果没有提示,我们可以使用很多断点来完成这些操作 <BR>现今软件的保护方式有 <BR>1、序列号保护方式(注册码=f(机器码/序列号)) <BR>2、警告(NAG)窗口 <BR>3、时间限制/次数限制。。 <BR>4、菜单功能限制 <BR>5、Key File保护 <BR>6、CD-Check <BR>7、只运行一个实例 </P>
<P>一些软件通过把注册码保存在.ini文件、注册表、.dat文件等等方式进行注册验证 </P>
<P>常见断点设置(后面带"*" 的为常用的) </P>
<P>字符串 <BR>bp GetDlgItemTextA(W) **** <BR>bp GetDlgItemInt <BR>bp GetWindowTextA(W) **** <BR>bp GetWindowWord <BR>bmsg XXXX wm_gettext </P>
<P>对话框 <BR>bp MessageBeep <BR>bp MessageBoxA(W) **** <BR>bp MessageBoxExA(W) <BR>bp DialogBoxParamA(W) <BR>bp GreateWindowExA(W) <BR>bp ShowWindow <BR>bp UpdateWindow <BR>bmsg XXXX wm_command </P>
<P>对于VB的程序用bp MessageBoxA是无法断下来的,bp rtcMsgBox </P>
<P>注册表相关 <BR>bp RegCreateKeyA(W) <BR>bp RegDeleteKeyA(W) <BR>bp RegQueryValueA(W) <BR>bp RegCloseKey <BR>bp RegOpenKeyA(W) **** </P>
<P>时间相关 <BR>bp GetLocalTime <BR>bp GetFileTime <BR>bp GetSystemtime </P>
<P>CD-ROM或磁盘相关 <BR>bp GetFileAttributesA(W) <BR>bp GetFileSize <BR>bp GetDriveType <BR>bp GetLastError <BR>bp ReadFile <BR>bpio -h (CD-ROM端口地址) R </P>
<P>软件狗 <BR>bpio -h 278R <BR>bpio -h 378R </P>
<P>INI初始化文件相关 <BR>bp GetPrivateProfileStringA&nbsp; **** <BR>bp GetPrivateProfileInt <BR>bp WritePrivateProfileString <BR>bp WritePrivateProfileInt </P>
<P>文件访问相关 <BR>bp ReadFile <BR>bp WriteFile <BR>bp CreateFileA&nbsp; **** <BR>bp SetFilePointer <BR>bp GetSystemDirectory <BR>VB程序专用断点: <BR>bpx msvbvm60!rtcMsgBox&nbsp; <BR>bpx msvbvm60!__vbaStrCmp&nbsp; <BR>bpx msvbvm60!__vbaStrComp&nbsp; <BR>bpx msvbvm60!__vbaStrCompVar&nbsp; <BR>bpx msvbvm60!__vbaStrTextCmp&nbsp; <BR>bpx msvbvm60!__vbaFileOpen&nbsp; <BR>bpx msvbvm60!__vbaInputFile&nbsp; <BR>bpx msvbvm60!__vbaFileSeek&nbsp; <BR>bpx msvbvm60!__vbaWriteFile&nbsp; <BR>bpx msvbvm60!__vbaFileClose&nbsp; <BR>bpx msvbvm60!rtcFileAttributes&nbsp; <BR>bpx msvbvm60!rtcFileDateTime&nbsp; <BR>bpx msvbvm60!rtcFileLen&nbsp; <BR>bpx msvbvm60!rtcFileLength&nbsp; <BR>bpx msvbvm60!__vbaVarInt&nbsp; <BR>bpx msvbvm60!__vbaVarCmpGe&nbsp; <BR>bpx msvbvm60!__vbaVarCmpGt&nbsp; <BR>bpx msvbvm60!__vbaVarCmpLe&nbsp; <BR>bpx msvbvm60!__vbaVarCmpLt&nbsp; <BR>bpx msvbvm60!__vbaVarCmpNe&nbsp; <BR>bpx msvbvm60!__vbaVarTextCmpEq&nbsp; <BR>bpx msvbvm60!__vbaVarTextCmpGe&nbsp; <BR>bpx msvbvm60!__vbaVarTextCmpGt&nbsp; <BR>bpx msvbvm60!__vbaVarTextCmpLe&nbsp; <BR>bpx msvbvm60!__vbaVarTextCmpLt&nbsp; <BR>bpx msvbvm60!__vbaVarTextCmpNe&nbsp; <BR>bpx msvbvm60!__vbaVarTextTstEq&nbsp; <BR>bpx msvbvm60!__vbaVarTextTstGe&nbsp; <BR>bpx msvbvm60!__vbaVarTextTstGt&nbsp; <BR>bpx msvbvm60!__vbaVarTextTstLe&nbsp; <BR>bpx msvbvm60!__vbaVarTextTstLt&nbsp; <BR>bpx msvbvm60!__vbaVarTextTstNe&nbsp; <BR>bpx msvbvm60!__vbaVarTstEq&nbsp; <BR>bpx msvbvm60!__vbaVarTstGe&nbsp; <BR>bpx msvbvm60!__vbaVarTstGt&nbsp; <BR>bpx msvbvm60!__vbaVarTstLe&nbsp; <BR>bpx msvbvm60!__vbaVarTstLt&nbsp; <BR>bpx msvbvm60!__vbaVarTstNe&nbsp; <BR>注意:VB程序仍然可以使用普通API函数,只要函数“最终”CALL了这个函数&nbsp; <BR>上面的断点对应VB6程序,如果是VB5程序则将msvbvm60改成msvbvm50即可<BR>&nbsp;<BR>另外还有一类软件通过网络验证、重启验证来判断程序是否注册 <BR>当然前者一般应用于外挂程序上较多,一般是改网络验证为本地验证达到欺骗远程网络主机的目的达到通过验证! <BR>后者也是很常见的,他一般把用户输入的注册码直接或者是通过加密运算后得到的数值保存到文件、注册表中,然后提示用户重启验证是否注册,当然当你重新打开程序的时候他会从文件或者是注册表中读取用户输入的注册码,再通过程序注册算法来进行比照,正确者当然就成为正版,错误的自然就88了,另外以重启验证的软件一般是把注册码保存在注册表或文件中! </P>
<P>下面来说说解决这类软件的一般方法! </P>
<P>重启验证类软件大致的验证过程。 <BR>1、运行软件输入注册信息,点注册后。一般软件会提示你重新运行软件,以便验证注册信息的正确性(如FlashGet); <BR>也有的只在你输入正确的注册信息时才有这个提示,不然会告诉你输入的注册信息有问题(此软件就属这类) </P>
<P>2、要破解这种软件,首先是判断一下她把注册信息存在哪里(因为她重启验证时要用)。大致有两种存放方式,第一种是放在注册表里;第二种是放在文件里。(我们可以在输入注册信息,点击确定前,利用监视类软件来查看一下,如FileMon和RegShot等) </P>
<P>3、知道她的注册信息的存放地点后,就可以选则相应的API断点,来调试了 </P>
<P>访问注册表类常用API <BR>bp RegOpenKeyA&nbsp; 打开一个现有的注册表项&nbsp; **** <BR>bp RegOpenKeyExA&nbsp; 打开一个现有的注册表项 **** <BR>bp RegCreateKeyA 在指定的项下创建或打开一个项&nbsp; <BR>bp RegCreateKeyExA 在指定项下创建新项的更复杂的方式&nbsp; <BR>bp RegDeleteKeyA 删除现有项下方一个指定的子项&nbsp; <BR>bp RegDeleteValueA 删除指定项下方的一个值&nbsp; <BR>bp RegQueryValueA 获取一个项的设置值&nbsp; <BR>bp RegQueryValueExA 获取一个项的设置值&nbsp; <BR>bp RegSetValueA 设置指定项或子项的值&nbsp;&nbsp; <BR>bp RegSetValueExA 设置指定项的值&nbsp; <BR>bp RegCloseKey 关闭系统注册表中的一个项(或键)&nbsp; </P>
<P>访问文件类常用API <BR>bp CreateFileA 打开和创建文件、管道、邮槽、通信服务、设备以及控制台&nbsp; **** <BR>bp OpenFile 这个函数能执行大量不同的文件操作&nbsp; <BR>bp ReadFile 从文件中读出数据&nbsp;&nbsp; <BR>bp ReadFileEx 与ReadFile相似,只是它只能用于异步读操作,并包含了一个完整的回调 <BR>====================================================== </P>
<P>&nbsp; 常用断点(OD中) <BR>拦截窗口: <BR>&nbsp;bp CreateWindow 创建窗口&nbsp; <BR>&nbsp;bp CreateWindowEx(A) 创建窗口&nbsp; <BR>&nbsp;bp ShowWindow 显示窗口&nbsp; <BR>&nbsp;bp UpdateWindow 更新窗口&nbsp; <BR>&nbsp;bp GetWindowText(A) 获取窗口文本&nbsp; <BR>拦截消息框: <BR>&nbsp;bp MessageBox(A) 创建消息框&nbsp; <BR>&nbsp;bp MessageBoxExA 创建消息框&nbsp; <BR>&nbsp;bp MessageBoxIndirect(A) 创建定制消息框&nbsp; <BR>拦截警告声: <BR>&nbsp;bp MessageBeep 发出系统警告声(如果没有声卡就直接驱动系统喇叭发声)&nbsp; <BR>拦截对话框: <BR>&nbsp;bp DialogBox 创建模态对话框&nbsp; <BR>&nbsp;bp DialogBoxParam(A) 创建模态对话框&nbsp; <BR>&nbsp;bp DialogBoxIndirect 创建模态对话框&nbsp; <BR>&nbsp;bp DialogBoxIndirectParam(A) 创建模态对话框&nbsp; <BR>&nbsp;bp CreateDialog 创建非模态对话框&nbsp; <BR>&nbsp;bp CreateDialogParam(A) 创建非模态对话框&nbsp; <BR>&nbsp;bp CreateDialogIndirect 创建非模态对话框&nbsp; <BR>&nbsp;bp CreateDialogIndirectParam(A) 创建非模态对话框&nbsp; <BR>&nbsp;bp GetDlgItemText(A) 获取对话框文本&nbsp; <BR>&nbsp;bp GetDlgItemInt 获取对话框整数值&nbsp; <BR>拦截剪贴板:&nbsp;&nbsp; <BR>&nbsp;bp GetClipboardData 获取剪贴板数据&nbsp; <BR>拦截注册表: <BR>&nbsp;bp RegOpenKey(A) 打开子健&nbsp; <BR>&nbsp;bp RegOpenKeyEx 打开子健 <BR>&nbsp;bp RegQueryValue(A) 查找子健 <BR>&nbsp;bp RegQueryValueEx 查找子健 <BR>&nbsp;bp RegSetValue(A) 设置子健&nbsp; <BR>&nbsp;bp RegSetValueEx(A) 设置子健 <BR>功能限制拦截断点: <BR>&nbsp;bp EnableMenuItem 禁止或允许菜单项&nbsp; <BR>&nbsp;bp EnableWindow 禁止或允许窗口&nbsp; <BR>拦截时间: <BR>&nbsp;bp GetLocalTime 获取本地时间&nbsp; <BR>&nbsp;bp GetSystemTime 获取系统时间&nbsp; <BR>&nbsp;bp GetFileTime 获取文件时间&nbsp; <BR>&nbsp;bp GetTickCount 获得自系统成功启动以来所经历的毫秒数&nbsp; <BR>&nbsp;bp GetCurrentTime 获取当前时间(16位)&nbsp; <BR>&nbsp;bp SetTimer 创建定时器&nbsp; <BR>&nbsp;bp TimerProc 定时器超时回调函数 <BR>拦截文件:&nbsp; <BR>&nbsp;bp CreateFileA 创建或打开文件 (32位)&nbsp; <BR>&nbsp;bp OpenFile 打开文件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (32位)&nbsp; <BR>&nbsp;bp ReadFile 读文件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (32位)&nbsp; <BR>&nbsp;bp WriteFile 写文件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (32位)&nbsp; <BR>拦截驱动器:&nbsp;&nbsp; <BR>&nbsp;bp GetDriveTypeA 获取磁盘驱动器类型&nbsp; <BR>&nbsp;bp GetLogicalDrives 获取逻辑驱动器符号&nbsp; <BR>&nbsp;bp GetLogicalDriveStringsA 获取当前所有逻辑驱动器的根驱动器路径&nbsp; </P>
<P>&nbsp;★★VB程序专用断点★★ <BR>&nbsp;bp __vbaStrCmp 比较字符串是否相等&nbsp; <BR>&nbsp;bp __vbaStrComp 比较字符串是否相等&nbsp; <BR>&nbsp;bp __vbaVarTstNe 比较变量是否不相等&nbsp; <BR>&nbsp;bp __vbaVarTstEq 比较变量是否相等&nbsp; <BR>&nbsp;bp __vbaStrCopy 复制字符串&nbsp; <BR>&nbsp;bp __vbaStrMove 移动字符串&nbsp; <BR>&nbsp;bp MultiByteToWideChar ANSI字符串转换成Unicode字符串&nbsp; <BR>&nbsp;bp WideCharToMultiByte Unicode字符串转换成ANSI字符串 </P>
<P>&nbsp;</P>

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.