OD-常见断点设置

暴力逆向的一般流程

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!r

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青月

打赏会让我更加有动力分享!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值