一、基本信息
1.1运行情况
1.2 32位程序,无壳
二、OD打开分析
2.1根据搜索字符串到底关键函数
判断输入长度
2.2主要算法
password1:ebx = ebx - (eax - 0x19) #遍历输入
password2:ebx = ebx*(ebx*eax=ebx) //ebx=password1
password3:ecx = ecx*(ecx-1) //ecx=0x40E0F8
2.3字符串拼接
三、破解方法
脚本
#include<string.h>
#include<stdio.h>
int main()
{
char name[256] = {0};
scanf("%s",name);
int len = strlen(name);
int password1 = 0;
int password2 = 1;
int password3 = 0;
int ecx = 0x40E0F8;
for(int i=0;i<len;i++){
password1 -= (name[i] - 0x19);
}
password2 = password1 * password1 * password1;
password3 = ecx * (ecx-1);
printf("Bon-%X-%X-%X\n",password1,password2,password3);
return 0;
}
name = input()
len = len(name)
password1 = 0
password2 = 0
password3 = 0
ecx = 0x40E0F8
for i in range(len):
password1 -=(ord(name[i])-0x19)
password1 &=0xffffffff
password2 = password1 * password1 * password1
password2 &=0xffffffff
password3 = ecx * (ecx - 1)
password3 &=0xffffffff
print("Bon-"+str(hex(password1))+"-"+str(hex(password2))+"-"+str(hex(password3)))
四、总结
字符串的拼接,最后一个字符串与地址有关,与输入无关
五、最重要的
**欢迎大佬批评交流**