160个CrackMe之001Acid burn破解思路

 

0x01:

    查壳无壳

0x02:

    运行程序进行观察 发现有两个部分 我们先对Serial进行分析

160个CrackMe之001Acid burn破解思路_第1张图片

 

0x03:

    160个CrackMe之001Acid burn破解思路_第2张图片

    160个CrackMe之001Acid burn破解思路_第3张图片

 

 

可以看到提示的错误信息为Failed!以及Try Again!!

于是看可以直接载入OD进行动态调试

右键反汇编窗口黑色空白部分 选择中文搜索引擎à智能搜索à接着右键findà输入Tryà可以发现离Failed比较近的是就是我们要找的

 

160个CrackMe之001Acid burn破解思路_第4张图片

 

双击进入定位到关键代码 接着鼠标向上翻找到断首F2下个断点

160个CrackMe之001Acid burn破解思路_第5张图片

 

 

点击下图红框内的进行程序的重新载入

160个CrackMe之001Acid burn破解思路_第6张图片

 

 

F9运行程序 发现程序断在刚才在断首下的断点

接着F8单步向下跟踪

发现有可以字符串与我们输入的111111111111111111在进行比对

160个CrackMe之001Acid burn破解思路_第7张图片

 

退出OD 运行程序 输入可以字符串 发现就是真的Serial 成功!

160个CrackMe之001Acid burn破解思路_第8张图片

 

 

 

0x04:

    160个CrackMe之001Acid burn破解思路_第9张图片

    还是用最简单的方法 找字符串定位关键代码

    160个CrackMe之001Acid burn破解思路_第10张图片

    依然是双击进入找段首下断点

    160个CrackMe之001Acid burn破解思路_第11张图片

    重新载入发现断在段首处

    160个CrackMe之001Acid burn破解思路_第12张图片

     

    160个CrackMe之001Acid burn破解思路_第13张图片

 

 

输入之后发现验证成功

但是问题是发现Name不可以小于3位    而且Serial是动态生成的

160个CrackMe之001Acid burn破解思路_第14张图片

 

载入IDA

160个CrackMe之001Acid burn破解思路_第15张图片

 

双击进入 F5查看伪代码

int __usercall sub_42F998@(int a1@, int a2@, int a3@)
{
int v3; // ebx@1
int v4; // eax@1
int v5; // eax@1
int v6; // ecx@1
int v7; // esi@1
int v8; // eax@1
int v9; // ecx@1
int v10; // eax@1
int v11; // ecx@1
int v12; // esi@1
int v13; // eax@1
int v14; // ecx@1
int v15; // ecx@1
int v16; // eax@2
int v17; // eax@3
int v18; // ecx@3
int v19; // ecx@3
int v20; // ST10_4@3
int v21; // ecx@3
int v22; // ecx@3
int v23; // eax@3
int v24; // ecx@3
int v25; // ecx@3
char v26; // zf@3
int v27; // eax@4
int v28; // eax@5
int v29; // ecx@6
int v30; // ecx@6
unsigned int v32; // [sp-14h] [bp-2Ch]@1
_UNKNOWN *v33; // [sp-10h] [bp-28h]@1
int *v34; // [sp-Ch] [bp-24h]@1
int v35; // [sp-8h] [bp-20h]@1
int v36; // [sp-4h] [bp-1Ch]@1
int v37; // [sp+0h] [bp-18h]@1
int v38; // [sp+4h] [bp-14h]@1
int v39; // [sp+8h] [bp-10h]@1
int v40; // [sp+Ch] [bp-Ch]@1
int v41; // [sp+10h] [bp-8h]@1
int v42; // [sp+14h] [bp-4h]@1
int savedregs; // [sp+18h] [bp+0h]@1
 
v42 = 0;
v41 = 0;
v40 = 0;
v39 = 0;
v38 = 0;
v37 = 0;
v36 = a2;
v35 = a3;
v3 = a1;
v34 = &savedregs;
v33 = &loc_42FB67;
v32 = __readfsdword(0);
__writefsdword(0, (unsigned int)&v32);
dword_431750 = 41;
v4 = *(_DWORD *)(a1 + 476);
sub_41AA58(0, &v39);
dword_43176C = sub_403AB0();
v5 = *(_DWORD *)(v3 + 476);
sub_41AA58(v6, &v39);
v7 = 7 * *(_BYTE *)v39;
v8 = *(_DWORD *)(v3 + 476);
sub_41AA58(v9, &v38);
dword_431754 = 16 * *(_BYTE *)(v38 + 1) + v7;
v10 = *(_DWORD *)(v3 + 476);
sub_41AA58(v11, &v39);
v12 = 11 * *(_BYTE *)(v39 + 3);
v13 = *(_DWORD *)(v3 + 476);
sub_41AA58(v14, &v38);
dword_431758 = 14 * *(_BYTE *)(v38 + 2) + v12;
if ( sub_406930() >= 4 )
{
v17 = *(_DWORD *)(v3 + 476);
sub_41AA58(v15, &v39);
dword_431750 *= *(_BYTE *)v39;
dword_431750 *= 2;
sub_403708(v18, dword_42FBAC);
sub_403708(v19, "CRACKED");
v20 = v42;
sub_406718(v21, &v37);
sub_4039AC(v22, 5, v41, &dword_42FBC8, v37, &dword_42FBC8, v20);
v23 = *(_DWORD *)(v3 + 480);
sub_41AA58(v24, &v39);
sub_4039FC(v25, v39);
if ( v26 )
{
v27 = *off_430A48;
sub_42A170(dword_42FBCC, "Good job dude =)", 0);
}
else
{
v28 = *off_430A48;
sub_42A170(dword_42FB74, "Sorry , The serial is incorect !", 0);
}
}
else
{
v16 = *off_430A48;
sub_42A170(dword_42FB74, "Sorry , The serial is incorect !", 0);
}
__writefsdword(0, v32);
sub_403670(&loc_42FB6E, v35, v36);
sub_403694(v29, 2);
return sub_403694(v30, 3);
}


编写注册机就参考

https://blog.csdn.net/qq_37936147/article/details/69222715

你可能感兴趣的:(我的逆向之路)