宇宙第一魔王 发表于 2022-3-25 12:31

CrackMe160学习记录2 Afkayas

本帖最后由 宇宙第一魔王 于 2022-4-6 02:25 编辑

# 2 Afkayas

## 1.前期信息探查:

### 1.EXEinfo:

32位,无壳,VB编写的程序


### 2.运行一下:



随便输入一点东西:



主要关注一下出错后弹出的信息。

## 2.动态调试:

### 1.定位关键跳转

首先还是直接查找所有参考文本字串



直接跟过去康康:



注意这个红色箭头,它告诉我们它是从哪里跳转过来的,跟着它往上看:



这里就是校验跳转了,接下来就是往上看它的校验算法是怎么一回事。

### 2.分析校验算法:

上一篇聊过VC代码的一个特点是函数之间有nop,所以直接往上划,找到构建栈帧的地方,然后略过那些初始化的函数,定位第一个对我们分析有用的函数调用:

栈帧构建处:



第一个操作:返回输入字符串长度



这里聊一聊我个人定位这个函数的方式:

在构建栈帧处下断点,结合动调一步一步F8,这里我输入的用户名为“hahaha”



从构建栈帧处往下看会出现一堆__vbaObjSet函数,它的作用是将对象变量指向内存中的对象,这里我选择忽略。



一直调试到这里时,发现__vbaLenBstr函数将我输入的name作为参数调用,这个函数的作用是返回字符串串长




其实我的思路主要就是观察call调用的函数有啥作用,然后根据自己的输入,再配合栈窗口的变化来定位的。下面继续跟进指令,__vbaLenBstr函数讲返回值存在了eax中:



分析一下__vbaLenBstr函数这一坨的操作:(402415~402427)



- 40241B处,eax存着返回的串长将其存入edi中
- 40241D处,将name的值存入ecx

- 402420处,看到着个我觉得有点奇怪,imul指令是两个指令数的相乘,但是为啥这里有三个参数,这里我选择动调看结果就知道了

当做完这个指令后edi的值为8EDE2也就是6*0x17CFB。
- 402427处,这里是判断OF寄存器的也就是判断是否溢出。所以我们输入的用户名不能过长

下一part是取出字符串的第一个值然后加上edi的值,然后把这个值转成十进制,存起来:



__rtcAnsiValueBstr之前遇到过就是获取该字符的ASCII码的十六进制值并保存在 eax中(eax 直接存储着这个码),然后放入edx中,与edi的值相加。这里同样也验证了一次是否有溢出,然后将操作过后的值压栈保存



0x8EDE2+0x68=8EE4A

然后下面的函数__vbaStrI4:将十六进制转换成十进制


十六进制数8EE4A转换十进制后为:585290,然后将它作为参数调用__vbaStrMove进行字符串拷贝

最后一个部分在402523处:



这个函数好理解,就是把“AKA-”与ECX寄存器的值(就是之前得出的585290)相连接,最后进行strcmp比较:


这个图就是比较函数内部,查看压栈的两个参数一个是经过算法运算后的序列号,一个是我们自己输入的序列号。这里没有必要管strcmp是怎么比较的直接Ctrl+F9。在之后的代码就是作比较然后根据strcmp的值确定跳转输出序列号成功与否。

## 3.注册机编写:

### 1.确认整个算法逻辑:

- 接受用户名字符串;
- 获取用户名的长度;
- 长度乘以0x17CFB,如果溢出的话跳转至处理溢出的函数
- 相乘的结果加上用户名字符串的第一个字符的ASCII码值
- 将结果转换成十进制
- 将“AKA-”与计算的结果连接便是最后的序列号了

### 2.注册机:

```c
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
int main()
{
      char str1 = "";
      int len,seriali;

      puts("Please Input Your Name:");
      scanf("%s", str1);
      len = strlen(str1);
      len = 0x17CFB * len;
      seriali = len + str1;

      printf("AKA-%d",seriali);

      return 0;
}
```

搞一下:




Hmily 发表于 2022-3-25 21:10

这个一样,图片无法显示。

宇宙第一魔王 发表于 2022-3-25 23:28

Hmily 发表于 2022-3-25 21:10
这个一样,图片无法显示。

我把我的图片放在了,图床上,连接的是gitee仓库,但今天不知道怎么了,我传在图床上面的照片都无法显示了,之前还好好的,我自己的博客也受影响了,图片全都没了

yamisxu 发表于 2022-3-26 00:15

宇宙第一魔王 发表于 2022-3-25 23:28
我把我的图片放在了,图床上,连接的是gitee仓库,但今天不知道怎么了,我传在图床上面的照片都无法显示 ...

关键你标题crack还打错了

宇宙第一魔王 发表于 2022-3-26 00:20

yamisxu 发表于 2022-3-26 00:15
关键你标题crack还打错了

哦哦,没注意

xcc0521 发表于 2022-4-2 08:48

没太搞明白怎么弄
页: [1]
查看完整版本: CrackMe160学习记录2 Afkayas