怎样查找API:
方法一:
1、命令栏输入“? MessageBoxA“(区分大小写),查看提示的hex地址
2、反汇编窗口-右键–Goto-Expression–输入地址,显示API实现代码
3、命令栏输入”bp MessageBoxA“,设置断点
方法二:
1、反汇编窗口-右键-Search for—Name(label)in current module Ctrl+N 获取API列表
2、按M键,光标自动定位到第一个函数名称以M开始的API上
3、找到API,右键-Follow import in Disassembler 转到反汇报窗口,显示API实现代码
4、找到API,右键-Toggle breakpoint on import,设置断点
1.序列号保护
定位判断序列号的代码段
1)获取字符串(序列号)
GetWindowTextA、GetWindowWord、GetDlgItemTextA、GetDlgItemInt等。
2)对话框
MessageBoxA、MessageBoxExA、DialogBoxParamA、DialogBoxIndirectParamA、CreateDialogIndirectParamA、CreateDialogParamA、CreateWindowEx、GetProfileStringA、ShowWindow、UpdateWindow、MessageBeep等。
3)比较序列号
test、cmp–>跳转je/jne(是否相等)、jz/jnz(是否等于0)等。
破解:定位后,修改跳转条件,即不论输入什么都返回序列号正确。
2.警告窗口(提醒用户购买正版)
去除警告窗口的弹出
1)显示窗口
MessageBoxA、MessageBoxExA、DialogBoxParamA、ShowWindow、CreateWindowExA等
(DialogBoxParamA一般和EndDialog配对使用)
破解:找到创建窗口的代码和关闭窗口的代码后,跳过(jmp+地址)。
3.时间限制
1)计时器
SetTimer(KillTimer取消)、timeSetEvent(精度高)、GetTickCount(两次获得系统运行时间后相减来计时)等。
2)取得系统时间
GetSystemTime、GetLocalTime、GetFileTime等。
破解:跳过SetTimer函数(jmp),或者让WM_TIMER消息不发挥作用(用空指令替代)
4.菜单功能限制
一些功能在试用版不能使用,购买正式版才能使用,需要恢复被限制的功能
1)将菜单或窗口变为不可用
EnableMenuItem、EnableWindow等。
破解:修改相应函数的参数
5.KeyFile保护
KeyFile是注册文件,包含注册用户的用户名、注册码等信息,放在购买的软件的指定目录以供验证。
1)有关文件的操作
FindFirstFileA、CreateFileA、GetFileSize、GetFileAttributesA、SetFilePointer、ReadFile、WriteFile、GetSystemDirectory等
破解:用FileMon等工具找出KeyFile文件名–>伪造一个同名的文件,放入有规律的数字(如12345…),分析处理KeyFile文件中数据的算法。这样根据用户名,就可以推出对应的KeyFile文件内容。
6.网络验证
拦截服务器返回的数据包,分析处理数据包的算法(发送的、接收的)。
1)传送数据
send、recv(TCP的两端)
破解:方法一,写个服务器,模拟服务器接收和发送数据
方法二,去除send和recv功能
7.CD-Check光盘检测
在程序启动时,检查光盘中是否有特定的文件,来判断是否正版
1)光盘相关的函数
GetDriveType(磁盘驱动类型,检查文件是否在光驱)、GetLogicalDrives(逻辑驱动符号)、GetLogicalDriveStrings(根驱动路径)、GetFileAttributesA(判断文件属性)、CreateFileA(打开光盘文件)等。
破解:修改检查结果,通过修改跳转语句