首页
论坛
课程
招聘
[原创]160Crackme之Acid burn和自动注册程序
2022-3-11 21:55 7605

[原创]160Crackme之Acid burn和自动注册程序

2022-3-11 21:55
7605

1 实现打开软件熟悉下
图片描述
先分析第一个 注册码和名称
图片描述
发现不正确会提示
图片描述
2 x96Dbg附加
将MessageBox -A -W -ExA -ExW 全都下断点 注意下到返回的地方
图片描述
在MessageBoxA 断下了 然后我们F7

 

我们到了这个地方
图片描述
先观察下 发现并没有检测
3 然后 ctrl+F9 跳到上一级
图片描述
明显是判断的

 

#1 简单方法直接nop

1
0042FAFE    | E8 F93EFDFF               | call acid burn.4039FC

图片描述
图片描述

 

#2 分析下名称和注册码
图片描述
edx 是我写的 猜测eax=CW-4018-CRACKED 是注册码 在之前改调edx的内容改为 eax
发现也成功的 然后我们改变名称 发现 注册码不一样了
4 观察发现 注册码是在上面得出 在这一级的头部下断点
图片描述
F8往下跟
看传参和返回
图片描述
这里出现的4018注册码
进来函数发现是得到eax的
图片描述
确定eax=431750然后高亮[431750]
图片描述
重新来一遍 在42F9B5下断点 在内存查看431750 记得刷新 可以使用CE 和内存断点'
这边使用的是内存断点

 

#define [431750] 值
图片描述

1
=41  // ov dword ptr ds:[0x00431750], 0x29

图片描述
这里开始
movzx一般用于将较小值拷贝到较大值中
eax=0x31 =='1'
imul 有符号乘法,将被乘数与乘数均作为有符号数

1
2
3
4
5
6
7
=*第一个字符  =2009  本例中 第一个字符是'1'=0x31=49
 
mov eax, 50dword ptr ds:[0x00431750]
add dword ptr ds:[0x00431750], eax
 
这二句应该都看得懂 就是 值=+值 就是值*2 
完整得出答案

检验
图片描述
第一个字符是'2'==50
(4150)2=4100

 

图片描述

 

成功

 

算法 注册码=CW-(string_name[0]41)2-CRACKED

 

5 我们最后做个一键填写名称和注册码的机器 下面源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <Windows.h>
#include <iostream>
#include <atlstr.h>
using namespace std;
int main()
{
    srand(time(NULL));
    HWND Handle = FindWindowW(L"TNS", L"Name Serial");
    HWND HandleRegistration = FindWindowExW(Handle, NULL, L"TEdit", NULL);
    HWND HandleName = FindWindowExW(Handle, HandleRegistration, L"TEdit", NULL);
    HWND HandleCliek = FindWindowExW(Handle, NULL, L"TBitBtn",L"&Check it Baby !");
    CString str = L"天晨";
    int Name = rand();
    CString str2;
    str2.Format(L"%d", Name);
    CString str3;
    str3.Format(L"CW-%d-CRACKED", (str2[0] * 41) * 2);
    //int i = ::SetWindowTextA(HandleName,(LPSTR)str.c_str());
    SendMessageW(Handle, WM_SETTEXT, 0, (LPARAM)str.GetBuffer());
    SendMessageW(HandleName, WM_SETTEXT, 0, (LPARAM)str2.GetBuffer());
    SendMessageW(HandleRegistration, WM_SETTEXT, 0, (LPARAM)str3.GetBuffer());
    SendMessageW(HandleCliek, WM_LBUTTONDOWN, 0, NULL);
    Sleep(10);
    SendMessageW(HandleCliek, WM_LBUTTONUP, 0, NULL);
    int erro=GetLastError();
    system("pause");
}

运行即
图片描述
7 第二个简单提下
仿造上面即可 serial=Hello Dude!


【看雪培训】《Adroid高级研修班》2022年夏季班招生中!

收藏
点赞1
打赏
分享
最新回复 (2)
雪    币: 720
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
benbird27 活跃值 2022-3-18 13:15
2
0

一直疑惑8528,5904,4018是怎么随机变化的。跟帖学习中。

最后于 2022-3-18 13:17 被benbird27编辑 ,原因:
雪    币: 9217
活跃值: 活跃值 (34262)
能力值: (RANK:105 )
在线值:
发帖
回帖
粉丝
Editor 活跃值 2022-3-23 11:09
3
0
将实例上传到论坛 一份?
游客
登录 | 注册 方可回帖
返回