1 打开软件熟悉
发现没有提示 看下介绍信息
2 找到切入
发现是Delphi编写 没有 接触过 搜索下Delphi反汇编 发现有个工具叫DeDeDark 中文的 下载然后分析
发现有点击的事件 是0x457E7C 和 0x457FB8 其中叫chkcode 是0x457C40 有点可疑 打开x96dbg看下 在单击的地方下个断点 然后稍微看下
3 具体分析
名称注册码使用 12345678 987654321
然后 Enter 确定
发现出来一串奇怪字符串 黑头Sun Bird14dseloffc-012-OK123456789 输入注册码
发现出现了图片 好的我们重新回去尝试破解
4 开始破解
1 直接在这个函数的入口下断点
发现自己出现的我们的注册码 我们思考 这个教chkcode 应该是检测通过一些手段返回 成功是否 我们找到会传递我们的注册码的
这个明显可以猜想是比较的 先nop下 证明是的 所以我们需要研究 “黑头Sun Bird14dseloffc-012-OK123456789” 是怎样来的 重新回到开头
我们在这就可以看出 不对劲 它先是分开 这个注册码的 中间的14 和后面的123456789都没有 这不就是说明那个是根据名称得到的吗 我们看验证下 就可以知道 14是名称的长度 后面是名称 先往下看
这先把14转位字符串 如果不确定据把这个改掉(前面数据)
又单独来个 名称 然后拼接 就不难知道注册码的规律
5 加密总结
注册码=黑头+ Sun Bird+(长度+5)+dseloffc-012-OK名称
6 编写程序(获得类名和窗口名称 可以使用spy++开源项目)
#include <Windows.h>
#include <iostream>
#include <atlstr.h>
using namespace std;
int main()
{
srand(time(NULL));
HWND Handle = FindWindowW(L"TForm1", L"快想办法注册呀! Ver: 1.0版");
HWND HandleRegistration = FindWindowExW(Handle, NULL, L"TEdit", NULL);
HWND HandleName = FindWindowExW(Handle, HandleRegistration, L"TEdit", NULL);
HWND HandleCliek = FindWindowExW(Handle, NULL, L"TPanel",NULL);
CString str = L"天晨";
int Name = rand();
CString str2;
str2.Format(L"%d", Name*1000);
CString str3;
str3.Format(L"黑头Sun Bird%ddseloffc-012-OK%s", str2.GetLength()+5, str2.GetBuffer());
SendMessageW(HandleName, WM_SETTEXT, 0, (LPARAM)str2.GetBuffer());
SendMessageW(HandleRegistration, WM_SETTEXT, 0, (LPARAM)str3.GetBuffer());
}
需要自己点 …我有时自己点都没有用 不太明白
7 其他
1 其实可以自己查找字符串 一样的 有个注册成功
|