关于破解的一些小的浅薄整理

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或者那几个同步函数这个同步就很清晰了

常用断点设置方法

 希望一切好运,自己能和真正的业界大佬做事,向他们学习



posted @ 2018-03-31 19:53  _Flame  阅读(257)  评论(0编辑  收藏  举报