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(打开光盘文件)等。 破解:修改检查结果,通过修改跳转语句