关于破解的一些小的浅薄整理
2.攻击序列号保护:
2.1跟踪输入注册码之后的判断,从而找到注册码。
一般都是在一个编辑框中输入注册码,
软件需要调用一些标准的API 将编辑框中输入的注册码字符串拷贝到自己的缓冲区中。
利用调试器提供的针对API 设断点的功能,就有可能找到判断注册码的地方。
这些常用的API 包括GetWindowTextA(W)、GetDlgItemTextA(W) GetDlg[temInt、Hmemcpy (仅Windows9xMe) 等。
程序判断完注册码之后,一般显示一个对话框,告诉用户注册码是否正确,这也是一个切入点。
显示对话框的常用API 函数包括MessageBoxA(W)MessageBoxExA(W)、DialogBoxParamA(W)、CreateDialoglndirectParamW
DialogBoxIndirectParamW CreateDialogParamA(W) MessageBoxIndirectA(W ShowWindow 等。
2.2跟踪程序启动时对注册码的判断。
因为程序每次启动时都需要将注册码读出来加以判断,
从而决定是否以注册版的模式工作。根据序列号的存放位置的不同,可以使用不同的API 断点。
如果序列号存放在注册表中,可以用RegQueryValueExA(W); 如果序列号存放在INI 文件中,,
可以用GetPri vateProfileStringA( GetProfileStringA(W) GetPrivateProfileIntA( GetProfileIntA(W等函数;如果序列号存放在一般的文件中, 可以用CreateFileA(W)._lopen(等函数。
2.3.数据约束性
在大多数都序列号保护的程序中,那个真正的,正确的注册码会于某个时刻出现在内存中,当然它出现的位置是不定的,但大多数情况下他会在一个范围内
即存放用户输入序列号的内存地址加减90h字节处
2.4利用消息断点
这个就是我想这样做但是操作没做好的这个,有点小烦
许多序列号的软件都有一个按钮,当鼠标左键按下何释放时候,将发送消息WM_LBUTTONDOWN(0201H)和WM_LBUTTONUP(0202H)
因此用这个消息下断很容易找到按钮的事件代码
2.5利用提示信息也就是查找字符串
记住M里查找和这里有些区别,这里是软件作者写出来的那种,M是弹个错误提示可以去看
2.6字符串比较方式
字符串直接比较
函数比较1
函数比较2
串比较
3.去除NAG窗口
一般都是MessageBoxA(W),ShowWindow DialogBoxParamA(W) CreateWindowExA(W)等函数
方法下断点在这里,然后跳过 2查看是否函数主窗口和子窗口是否用同一个函数,可以互换参数内容
!!!尤其记住的是函数参数极其重要
4.时间限制:
设置时间函数SetTimer timeGetTime GetTickCount timeSETEvent等函数
一般软件未注册时间的限制分两步,1.先利用GetSystemTime(GetLocalTime GetFileTime)等获得第一次使用日期
再在以后每次打开后记录时间,记录一个时间差
这种方式查找字符串也好,函数也好 jmp过去或者nop即可
5.菜单yesORno
EnableWindow EnableItemMenu 做的时候记住看他们呢参数然后利用标识符做手脚就可以
6.KeyFile
7.网络验证(软件运行时候client向server发送请求才可以获得数据,可以拦截请求包去破解)
send recv 函数(socket 不想做套接字就得用到 哎)
如果数据包内容固定则是可以模拟一个本地服务器,如果不固定则得利用正确的账号密码来注册发送
OD一下Client去了解send recv 加密等
这个得好好学习 不懂反正是
8.一个实例
这个简单FindWindow或者那几个同步函数这个同步就很清晰了
常用断点设置方法
希望一切好运,自己能和真正的业界大佬做事,向他们学习