逆向学习crackme160题-013-Acid burn 的 write up

简介: 逆向学习crackme160题-013-Acid burn 的 write up

013-Acid burn 的 write up

1. 程序的执行

打开程序首先出现的是烦人的NAG弹窗:

然后有金典的两种注册方式:

一种是serial/nam形式:

还一种就是serial模式:

以上都是不成功的提示。出现了很多的提示字符串。

2. 查壳

无壳

3. 分析

  1. 首先我们先来破解这个烦人的Nag弹窗,首先将软件拖入OD,然后借助插件插件智能搜索字符串,找到Nag弹框的提示字符串,然后就可以跟踪进入如下图:在这个函数体内的头部下断点,运行到这来停下:
    然后看到堆栈,在栈顶右键——>反汇编窗口中跟随

这样就可以来到调用这个函数call的地方,如下图:

如果要破解的话,我们可以直接修改cmp需要对比的立即数,也可以修改je跳转。还有一种方式就是在函数内部的头处直接retn出来,也就是函数刚执行就retn了。

然后在汇编代码区选中刚才更改的指令,右键——>复制到可执行文件,然后再右键——>保存文件,就可以获得一个没有Nag弹框的可执行程序。

  1. 分析第一种验证方式,serial模式,首先将程序组拖入32位IDA,然后查找字符串,跟踪第一个Try Again!!,如下图:

然后就可以看到很多的字符串,如下图:

我们可以随便跟踪一个就来到了函数体部分,通过分析得出注册码是Hello Dude! 如下图:

3 . 分析第二种验证方式,serial/name模式。这次具有算法,我们在OD中跟踪分析,首先跟踪第二个Try Again!!字符串,然后就来到了函数的主体部分如下图:

然后就是很多的拼接字符串和对比字符串,如下图:

观察堆栈如下图:

可以知道,字符串serial拼接的规则是CW-数字-CRACKED

数字的计算规则是:取用户名的第一个字符,乘以0x29,再乘以2,最后将得到的十六进制数转化为十进制数。

4. 注册机的编写

#include<stdio.h>
#include<string.h>

int main()
{
  static char name[] = { 0 };
  static char str2[] = { 0 };
  int length = 0;
  int key = 0;
  char serial[100] = { 0 };
  char str1[] = "CW-";
  char str3[] = "-CRACKED";
  loop:
  printf("Please input you name: ");
  scanf("%s", name);
  length = strlen(name);
  if (length<4)
  {
    printf("The user name must be four characters greater than or equal to it!\n");
    goto loop;
  }
  key = name[0] * 0x29 * 2;
  printf("key=:%d\ninput key:",key);
  scanf("%s", str2);
  strcat(serial , str1);
  strcat(serial, str2);
  strcat(serial, str3);
  printf("serial=  %s\n",serial);
  system("pause");
  return 0;
}

执行效果演示:

相关文章
|
1天前
|
算法 数据安全/隐私保护
逆向学习crackme160题-011-wocy.1 的 write up
逆向学习crackme160题-011-wocy.1 的 write up
6 1
|
1天前
|
算法 数据安全/隐私保护
逆向学习crackme160题-008-Afkayas.1 的 write up
逆向学习crackme160题-008-Afkayas.1 的 write up
9 1
|
1天前
|
编译器 C++
逆向学习crackme160题-002-abexcm5的write up
逆向学习crackme160题-002-abexcm5的write up
13 1
|
1天前
|
存储
逆向学习crackme160题-015-Brad Soblesky.1 的 write up
逆向学习crackme160题-015-Brad Soblesky.1 的 write up
8 1
|
1天前
|
算法 API 数据安全/隐私保护
逆向学习crackme160题-007-reg 的 write up
逆向学习crackme160题-007-reg 的 write up
8 2
|
1天前
|
存储 API
逆向学习crackme160题-003-Cruehead-CrackMe-3的 write up
逆向学习crackme160题-003-Cruehead-CrackMe-3的 write up
7 1
|
1天前
逆向学习crackme160题-004-Acid Bytes.2 的write up
逆向学习crackme160题-004-Acid Bytes.2 的write up
2 0
|
1天前
|
算法 API
逆向学习crackme160题-014-Splish 的 write up
逆向学习crackme160题-014-Splish 的 write up
8 0
|
1天前
|
算法
逆向学习crackme160题-012-ACG-crcme1 的 write up
逆向学习crackme160题-012-ACG-crcme1 的 write up
8 0
|
1天前
逆向学习crackme160题-005-Andrnalin.1 的 write up
逆向学习crackme160题-005-Andrnalin.1 的 write up
5 0