加载中…
个人资料
Hades_Expolit
Hades_Expolit
  • 博客等级:
  • 博客积分:0
  • 博客访问:95,174
  • 关注人气:18
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

爆破的思路与断点设置

(2008-11-22 19:19:20)
标签:

it

分类: 密界寻踪

来源:安全中国

破 顾名思义就是暴力修改程序的代码来达到破解的目的
当然根据共享软件的注册方式我们可以对症下药

比如说没有注册的软件有功能限制、使用次数限制、使用日期限制等
我们就可以分别对待了!我们只需要解除这些限制自然就达到了破解的目的了!

暴力破解的一般流程
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
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 
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 
注意:VB程序仍然可以使用普通API函数,只要函数“最终”CALL了这个函数 
上面的断点对应VB6程序,如果是VB5程序则将msvbvm60改成msvbvm50即可

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

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

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

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

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

访问注册表类常用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相似,只是它只能用于异步读操作,并包含了一个完整的回调
======================================================

  常用断点(OD中)
拦截窗口:
 bp CreateWindow 创建窗口 
 bp CreateWindowEx(A) 创建窗口 
 bp ShowWindow 显示窗口 
 bp UpdateWindow 更新窗口 
 bp GetWindowText(A) 获取窗口文本 
拦截消息框:
 bp MessageBox(A) 创建消息框 
 bp MessageBoxExA 创建消息框 
 bp MessageBoxIndirect(A) 创建定制消息框 
拦截警告声:
 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 获取对话框整数值 
拦截剪贴板:  
 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 定时器超时回调函数
拦截文件: 
 bp CreateFileA 创建或打开文件 (32位) 
 bp OpenFile 打开文件       (32位) 
 bp ReadFile 读文件         (32位) 
 bp WriteFile 写文件         (32位) 
拦截驱动器:  
 bp GetDriveTypeA 获取磁盘驱动器类型 
 bp GetLogicalDrives 获取逻辑驱动器符号 
 bp GetLogicalDriveStringsA 获取当前所有逻辑驱动器的根驱动器路径 

 ★★VB程序专用断点★★
 bp __vbaStrCmp 比较字符串是否相等 
 bp __vbaStrComp 比较字符串是否相等 
 bp __vbaVarTstNe 比较变量是否不相等 
 bp __vbaVarTstEq 比较变量是否相等 
 bp __vbaStrCopy 复制字符串 
 bp __vbaStrMove 移动字符串 
 bp MultiByteToWideChar ANSI字符串转换成Unicode字符串 
 bp WideCharToMultiByte Unicode字符串转换成ANSI字符串

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有