【破解作者】 Night
【作者主页】 www.freecracker.com
【使用工具】 OD
【破解平台】 Win7
【软件名称】 Acid_burn.zip
------------------------------------------------------------------------------------------------------------
0042F998 /. 55 push ebp
0042F999 |. 8BEC mov ebp,esp
0042F99B |. 33C9 xor ecx,ecx
0042F99D |. 51 push ecx
0042F99E |. 51 push ecx
0042F99F |. 51 push ecx
0042F9A0 |. 51 push ecx
0042F9A1 |. 51 push ecx
0042F9A2 |. 51 push ecx
0042F9A3 |. 53 push ebx
0042F9A4 |. 56 push esi
0042F9A5 |. 8BD8 mov ebx,eax
0042F9A7 |. 33C0 xor eax,eax
0042F9A9 |. 55 push ebp
0042F9AA |. 68 67FB4200 push path_gay.0042FB67
0042F9AF |. 64:FF30 push dword ptr fs:[eax]
0042F9B2 |. 64:8920 mov dword ptr fs:[eax],esp
0042F9B5 |. C705 50174300>mov dword ptr ds:[0x431750],0x29
0042F9BF |. 8D55 F0 lea edx,[local.4]
0042F9C2 |. 8B83 DC010000 mov eax,dword ptr ds:[ebx+0x1DC]
0042F9C8 |. E8 8BB0FEFF call path_gay.0041AA58
0042F9CD |. 8B45 F0 mov eax,[local.4] ; 获取用户名
0042F9D0 |. E8 DB40FDFF call path_gay.00403AB0 ; 判断用户名不能为空
0042F9D5 |. A3 6C174300 mov dword ptr ds:[0x43176C],eax
0042F9DA |. 8D55 F0 lea edx,[local.4]
0042F9DD |. 8B83 DC010000 mov eax,dword ptr ds:[ebx+0x1DC]
0042F9E3 |. E8 70B0FEFF call path_gay.0041AA58
0042F9E8 |. 8B45 F0 mov eax,[local.4] ; 获取用户名
0042F9EB |. 0FB600 movzx eax,byte ptr ds:[eax] ; 用户名的第一位放入到eax中
0042F9EE |. 8BF0 mov esi,eax ; 用户名的第一位 放入到esi 中
0042F9F0 |. C1E6 03 shl esi,0x3 ; esi = esi << 3
0042F9F3 |. 2BF0 sub esi,eax ; esi = esi - eax
0042F9F5 |. 8D55 EC lea edx,[local.5]
0042F9F8 |. 8B83 DC010000 mov eax,dword ptr ds:[ebx+0x1DC]
0042F9FE |. E8 55B0FEFF call path_gay.0041AA58 ; 返回用户名长度
0042FA03 |. 8B45 EC mov eax,[local.5]
0042FA06 |. 0FB640 01 movzx eax,byte ptr ds:[eax+0x1] ; 用户名的第二位保存到eax中
0042FA0A |. C1E0 04 shl eax,0x4 ; eax = eax << 4
0042FA0D |. 03F0 add esi,eax ; esi = esi + eax
0042FA0F |. 8935 54174300 mov dword ptr ds:[0x431754],esi ; ds:[0x431754] = 8B2
0042FA15 |. 8D55 F0 lea edx,[local.4]
0042FA18 |. 8B83 DC010000 mov eax,dword ptr ds:[ebx+0x1DC]
0042FA1E |. E8 35B0FEFF call path_gay.0041AA58 ; 返回用户名长度
0042FA23 |. 8B45 F0 mov eax,[local.4]
0042FA26 |. 0FB640 03 movzx eax,byte ptr ds:[eax+0x3] ; 用户名第四位保存到eax中
0042FA2A |. 6BF0 0B imul esi,eax,0xB ; esi = eax * 0xB
0042FA2D |. 8D55 EC lea edx,[local.5]
0042FA30 |. 8B83 DC010000 mov eax,dword ptr ds:[ebx+0x1DC]
0042FA36 |. E8 1DB0FEFF call path_gay.0041AA58
0042FA3B |. 8B45 EC mov eax,[local.5]
0042FA3E |. 0FB640 02 movzx eax,byte ptr ds:[eax+0x2] ; 用户名第三位保存到 eax 中
0042FA42 |. 6BC0 0E imul eax,eax,0xE ; eax = eax * 0xE
0042FA45 |. 03F0 add esi,eax ; esi = esi + eax
0042FA47 |. 8935 58174300 mov dword ptr ds:[0x431758],esi ; ds:[0x431758] = 0A1A
0042FA4D |. A1 6C174300 mov eax,dword ptr ds:[0x43176C]
0042FA52 |. E8 D96EFDFF call path_gay.00406930
0042FA57 |. 83F8 04 cmp eax,0x4
0042FA5A |. 7D 1D jge Xpath_gay.0042FA79 ; 用户名必须大于等于四位
0042FA5C |. 6A 00 push 0x0
0042FA5E |. B9 74FB4200 mov ecx,path_gay.0042FB74 ; ASCII 54,"ry Again!"
0042FA63 |. BA 80FB4200 mov edx,path_gay.0042FB80 ; ASCII 53,"orry , The serial is incorect !"
0042FA68 |. A1 480A4300 mov eax,dword ptr ds:[0x430A48]
0042FA6D |. 8B00 mov eax,dword ptr ds:[eax]
0042FA6F |. E8 FCA6FFFF call path_gay.0042A170
0042FA74 |. E9 BE000000 jmp path_gay.0042FB37
0042FA79 |> 8D55 F0 lea edx,[local.4]
0042FA7C |. 8B83 DC010000 mov eax,dword ptr ds:[ebx+0x1DC]
0042FA82 |. E8 D1AFFEFF call path_gay.0041AA58
0042FA87 |. 8B45 F0 mov eax,[local.4]
0042FA8A |. 0FB600 movzx eax,byte ptr ds:[eax] ; 取用户名第一位 保存到 eax 中
0042FA8D |. F72D 50174300 imul dword ptr ds:[0x431750] ; eax = eax * ds:[0x431750]
0042FA93 |. A3 50174300 mov dword ptr ds:[0x431750],eax ; ds:[0x431750] = 0xC7E
0042FA98 |. A1 50174300 mov eax,dword ptr ds:[0x431750]
0042FA9D |. 0105 50174300 add dword ptr ds:[0x431750],eax ; ds:[0x431750] = ds:[0X431750]*2
0042FAA3 |. 8D45 FC lea eax,[local.1]
0042FAA6 |. BA ACFB4200 mov edx,path_gay.0042FBAC
0042FAAB |. E8 583CFDFF call path_gay.00403708
0042FAB0 |. 8D45 F8 lea eax,[local.2]
0042FAB3 |. BA B8FB4200 mov edx,path_gay.0042FBB8
0042FAB8 |. E8 4B3CFDFF call path_gay.00403708
0042FABD |. FF75 FC push [local.1]
0042FAC0 |. 68 C8FB4200 push path_gay.0042FBC8 ; UNICODE "-"
0042FAC5 |. 8D55 E8 lea edx,[local.6]
0042FAC8 |. A1 50174300 mov eax,dword ptr ds:[0x431750]
0042FACD |. E8 466CFDFF call path_gay.00406718 ; 这个函数
0042FAD2 |. FF75 E8 push [local.6]
0042FAD5 |. 68 C8FB4200 push path_gay.0042FBC8 ; UNICODE "-"
0042FADA |. FF75 F8 push [local.2]
0042FADD |. 8D45 F4 lea eax,[local.3]
0042FAE0 |. BA 05000000 mov edx,0x5
0042FAE5 |. E8 C23EFDFF call path_gay.004039AC ; 拼接生成真的Key值
0042FAEA |. 8D55 F0 lea edx,[local.4]
0042FAED |. 8B83 E0010000 mov eax,dword ptr ds:[ebx+0x1E0]
0042FAF3 |. E8 60AFFEFF call path_gay.0041AA58 ; 获取Key值
0042FAF8 |. 8B55 F0 mov edx,[local.4] ; 假的Key值
0042FAFB |. 8B45 F4 mov eax,[local.3] ; 真的Key值
0042FAFE |. E8 F93EFDFF call path_gay.004039FC ; 比较
Key值中间部分计算函数 如下
00406DC2 |$ B9 0A000000 mov ecx,0xA ; ecx = 0xA
00406DC7 |> 8D75 C4 lea esi,[local.15]
00406DCA |> 31D2 /xor edx,edx ; edx 清零
00406DCC |. F7F1 |div ecx ; eax / ecx eax中存放商 edx 中存放余数
00406DCE |. 80C2 30 |add dl,0x30 ; dl = dl + 0x30
00406DD1 |. 80FA 3A |cmp dl,0x3A ; 判断dl 是否 小于 0x3A
00406DD4 |. 72 03 |jb Xpath_gay.00406DD9
00406DD6 |. 80C2 07 |add dl,0x7 ; 如果不小于0x3A 的话 dl = dl + 0x7
00406DD9 |> 4E |dec esi
00406DDA |. 8816 |mov byte ptr ds:[esi],dl ; 保存结果
00406DDC |. 09C0 |or eax,eax
00406DDE |.^ 75 EA \jnz Xpath_gay.00406DCA
00406DE0 |. 8D4D C4 lea ecx,[local.15]
00406DE3 |. 29F1 sub ecx,esi
00406DE5 |. 8B55 E0 mov edx,[local.8]
00406DE8 |. 83FA 10 cmp edx,0x10
00406DEB |. 72 01 jb Xpath_gay.00406DEE
00406DED |. C3 retn 注册机代码如下 :
/***
* Acid burn.exe 程序注册机
* 完成时间: 2014年9月10日 23:43
* 完成人 : Night
*/
#include "stdafx.h"
#include "string.h"
int _tmain(int argc, _TCHAR* argv[])
{
//存放用户名
char userName[100] = {0};
//内存00431750地址处的值
unsigned int value_431750 = 0x29;
//临时存放值
unsigned int value = 0;
//控制数组下标
unsigned int k = 0;
//程序中初始化的值
unsigned int x = 0xA;
//存放商
unsigned int quotient = 0;
//存放余数
unsigned int mod = 0;
//存放结果
unsigned int result[10] = {0};
//把存放的结果转化成字符再倒置
char encode[10] = {0};
//CrackMe程序初始化注册码的前缀
char before [30] = "CW-";
//CrackMe程序初始化注册码的后缀
char after [9] = "-CRACKED";
printf("请输入用户名:");
gets_s(userName);
value = userName[0] * value_431750;
value = value * 2;
do
{
mod = 0;
quotient = value / x ;
mod = value % x ;
mod = mod + 0x30;
if(mod > 0x3A)
{
mod = mod + 0x7;
}
result[k++] = mod ;
value = quotient;
} while (value);
for (int i = 0; i < k; i++)
{
encode[k-i-1] = result[i];
}
strcat_s(before,encode);
strcat_s(before,after);
puts(before);
printf("\n");
return 0;
}
PS: VS2012 编译,如果注册机有问题或者有更简洁的算法 请大神们多多指教。谢谢
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
上传的附件: