32位软件逆向技术
常用函数调用约定
一个函数的汇编过程
条件转移指令
条件设置指令
64位软件逆向技术
与32位不同,64位软件每八字节存储一个数据。
数据结构
控制语句
循环语句
数学运算符
虚函数(c++)
版本保护技术
序列号保护方式
用户通过输入序列号获得软件的使用权限,解除时间限制,功能限制。
将用户名作为自变量通过函数计算出序列号
序列号=F(用户名)
通过注册码验证用户名的正确性
用户名=F-1(序列号)
通过对等函数检测注册码
F1(用户名)=F2(序列号)
同时将用户名和注册码作为自变量(即二元函数)
特定值=F3(用户名,序列号)
找到序列号的方法
利用工具定位判断序列号的代码段
跟踪注册码之后的判断找到注册码,通过常用API找到注册码,常用API(GetWindowTextA(W)、GetDlgItemTextA(W)、GetDlgItemInt、hmemcpy)
跟踪程序启动时对注册码的判断过程
关闭警告窗口
软件计时方式
Windows中计时器有setTimer()函数,高精度多媒体计时器timeSetEvent()函数,GetTickCount()函数,timeGetTime()函数。
菜单功能限制
相关函数:EnableMenuItem()函数,EnableWindow()函数。
KeyFile保护
利用文件来进行密码保护。
网络验证
每次运行程序必须从网络上获取数据。
相关函数:send()函数,recv()函数,Socket函数,WSASend()函数,WSARecv()函数。
破解网络验证:如果网络验证的数据包固定,可以抓取数据包,写本地服务端模拟服务器。如果内容不固定,必须分析其结构找出相应的算法。
常用断点集合
设置断点的技巧