002-abexcm5(Crack练习)
本帖最后由 supercat1 于 2022-11-2 15:36 编辑打开abexcm5.exe可执行文件
随便输入一串数字查看一下运行效果,可以看到返回一个窗口显示注册码错误
查一下文件信息看到是使用汇编写的,无壳
用Ollydbg打开abexcm5.exe,搜索字符串可以找到刚才消息框中弹出的字符串,点进去看一下代码
分析代码段可以看到这里调用了GetDigitemTextA、GetVolumeInformation、lstrcat、MessageBoxA等函数,004010FF处还有一处相等跳转转到MessageA显示注册码正确,所以这里就很轻松找到了关键代码。可以将je改成jmp进行强行跳转,实现任意注册码进入。
下面我们分析验证码算法实现用C语言写一个简易注册机
在关键代码入口点0040106C按F2打上断点,运行程序,程序停在断点处后输入任意数字提交。
按F8单步运行
运行完GetDigitemTextA可以在栈帧窗口看到我输入的数字123456存储在00402324
接着单步运行到下个函数GetVolumeInformation
栈帧窗口中出现了GetVolumeInformation中参数,百度看一下这个函数的信息
BOOL GetVolumeInformationA(
LPCTSTR lpRootPathName, //卷所在的根目录,如:"C:\", 如果为NULL,表示当前目录
LPTSTR lpVolumeNameBuffer, // 输出参数,存放卷名缓冲区
DWORD nVolumeNameSize, // 卷名缓冲区长度
LPDWORD lpVolumeSerialNumber, // 卷序列号
LPDWORD lpMaximumComponentLength, // 最大文件文件名组件长度,随文件系而变化
LPDWORD lpFileSystemFlags, // 文件系统的一些属性,通常为一些宏的组合
LPTSTR lpFileSystemNameBuffer, // 说明何种文件系统,例如NTFS,FAT等
DWORD nFileSystemNameSize // 文件系统缓冲区长度
);
接着运行到下个函数lstrcatA可以看到函数在0040225C(存放的是卷名Windows)后追加了4562-ABEX
再接着运行到下一段,经过观察可以发现是一个do..while..循环
循环2次,每次循环分别在下面4个地址的值加1
循环过后查看一下内存窗口可以看到前4位分别加了2
再接着运行到下一个函数lstrcatA,和前面一样,将L2C-5781加在了00402000的位置
再接着运行到下一个函数lstrcatA,还是一样的,将00402225C加在00402000后
此时00402000的数据是这样的
L2C-5781Ykpfows4562-ABEX
然后就可以看到用户输入的数据在与L2C-5781Ykpfows4562-ABEX做比较,如果相等就跳转到正确窗口,反之就跳到错误窗口。因此可以判断L2C-5781Ykpfows4562-ABEX就是我本机的注册码。
输入L2C-5781Ykpfows4562-ABEX就可以看到显示注册码正确!
然后我按照分析出来的算法用C写一个注册机,代码如下:
#include <stdio.h>
#include<Windows.h>
int main() {
char szVolumeNameBuf = { 0 };
DWORD dwVolumeSerialNum;
DWORD dwMaxComponentLength;
DWORD dwSysFlags;
char szFileSystemBuf = { 0 };
DWORD dwFileSystemBuf = MAX_PATH;
char serial = { 0 };
int i = 2;
BOOL bGet = GetVolumeInformationA("C:\\",
szVolumeNameBuf,
MAX_PATH,
&dwVolumeSerialNum,
&dwMaxComponentLength,
&dwSysFlags,
szFileSystemBuf,
MAX_PATH);
lstrcatA(szVolumeNameBuf,"4562-ABEX");
do
{
szVolumeNameBuf++;
szVolumeNameBuf++;
szVolumeNameBuf++;
szVolumeNameBuf++;
} while (--i);
lstrcatA(serial, "L2C-5781");
lstrcatA(serial, szVolumeNameBuf);
printf("注册码:");
printf(serial);
return 0;
}
运行效果:
参考资料:
(https://blog.csdn.net/pjf_1806339272/article/details/107368909)
markdown格式需要点击MD那个按钮,把内容输入进去点确定才行。 Hmily 发表于 2022-11-2 15:28
markdown格式需要点击MD那个按钮,把内容输入进去点确定才行。
好的好的,我是在别的地方写的笔记,想粘贴到52来,第一次发帖 supercat1 发表于 2022-11-2 15:29
好的好的,我是在别的地方写的笔记,想粘贴到52来,第一次发帖
现在挺好的,那个代码可以用代码框处理一下,会更好看。 很实用,谢谢分享
感谢分享
页:
[1]