刚来到吾爱破解,对逆向和破解也就是刚入门,技术太菜了,写这篇文章就仅仅时记录一下。
有什么错误还请赐教。
另外就是在吾爱中感觉这么菜的文章都不太敢写出去,但是害怕被评为白飘党和不活跃!!!
所以没办法迎着头皮写出来了,还望大佬们不要嘲笑。
文件应该附上去了。接下来,开始吧。
该文件是64位的把文件拖进64位的IDA
直接F5大法,可以看出来程序很简单
整体这个程序就是一个接受用户的输入
然后把用户的输入加密
并且最后我们会发现我们输入就是最后需要的Flag
那我们就接着分析这个加密函数
可以看出来这个加密函数一定是一股“清流”
不出意外的话,在吾爱中就没有比这个更简单的了 (一个菜鸡应收的惩罚)
这个key的值为12h转换为十进制也就是18
并且flag的长度也为18
并且for循环把18个分成了三个三个一组
在数组中数组下标能够被3整除的:
(在这里能我们定义够被3整除的为a、除3余1为b、除3余2为c)
a:
enflag=key(18)^(flag[a]+6)
则
flag[a]=enflag[a]^key(18)-6
b:
enflag=(flag-6)^key(18)
则
flag=enflag[a]^key(18)+6
c:
enflag[c]=flag[c]^6^key(18)
则
flag[c]=enflag[c]^key(18)^6
最后出来的C语言解密代码应该是这样的:
#include<stdio.h>
void main()
{
char i;
char enflag[]="izwhroz\"\"w\"v.K\".Ni";
for(i=0;i<18;i+=3)
{
enflag=(enflag^18)-6;
enflag[i+1]=(enflag[i+1]^18)+6;
enflag[i+2]=(enflag[i+2]^18)^6;
}
puts(enflag);
}
还有我们的Python代码:
enflag='izwhroz""w"v.K".Ni'
flag=''
for i in range(0,18):
if i%3==0:
flag+=chr((ord(enflag)^18)-6)
elif i%3==1:
flag+=chr((ord(enflag)^18)+6)
elif i%3==2:
flag+=chr((ord(enflag)^18)^6)
print(flag)
好了完成了
但是在这里我们要特别注意的是
”^“的运算优先级是低于“-”
这个是我血的教训,看了很久自己的代码才发现了这个问题.....
耽误了不少时间
写下来也算是给自己一个提醒吧
flag就不放出来了吧
初次写作,有什么错误的地方还请多多指教。
|