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
这个一样,图片无法显示。
我把我的图片放在了,图床上,连接的是gitee仓库,但今天不知道怎么了,我传在图床上面的照片都无法显示了,之前还好好的,我自己的博客也受影响了,图片全都没了 宇宙第一魔王 发表于 2022-3-25 23:28
我把我的图片放在了,图床上,连接的是gitee仓库,但今天不知道怎么了,我传在图床上面的照片都无法显示 ...
关键你标题crack还打错了 yamisxu 发表于 2022-3-26 00:15
关键你标题crack还打错了
哦哦,没注意 没太搞明白怎么弄
页:
[1]