对XCTF上一道入门逆向的分析--萌新入门,大佬还请绕道
刚来到吾爱破解,对逆向和破解也就是刚入门,技术太菜了,写这篇文章就仅仅时记录一下。有什么错误还请赐教。
另外就是在吾爱中感觉这么菜的文章都不太敢写出去,但是害怕被评为白飘党和不活跃!!!
所以没办法迎着头皮写出来了,还望大佬们不要嘲笑。{:1_893:}{:1_893:}{:1_893:}
文件应该附上去了。接下来,开始吧。
该文件是64位的把文件拖进64位的IDA
直接F5大法,可以看出来程序很简单
整体这个程序就是一个接受用户的输入
然后把用户的输入加密
并且最后我们会发现我们输入就是最后需要的Flag
那我们就接着分析这个加密函数
可以看出来这个加密函数一定是一股“清流”
不出意外的话,在吾爱中就没有比这个更简单的了 ({:301_971:}一个菜鸡应收的惩罚)
这个key的值为12h转换为十进制也就是18
并且flag的长度也为18
并且for循环把18个分成了三个三个一组
在数组中数组下标能够被3整除的:
(在这里能我们定义够被3整除的为a、除3余1为b、除3余2为c)
a:
enflag=key(18)^(flag+6)
则
flag=enflag^key(18)-6
b:
enflag=(flag-6)^key(18)
则
flag=enflag^key(18)+6
c:
enflag=flag^6^key(18)
则
flag=enflag^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=(enflag^18)+6;
enflag=(enflag^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就不放出来了吧
初次写作,有什么错误的地方还请多多指教。
排版好像乱了... 学习一下,太强大了。
学习一下,太强大了。 多谢楼主分享,与“^”的优先级低于减”-” 一直做web,自己上手ida感觉还是挺难的,用不熟 `chameleon 发表于 2020-3-2 16:35
一直做web,自己上手ida感觉还是挺难的,用不熟
可以去一些博客看一下IDA的使用方法我用的也不是很熟练,这个是我以前看过的:
_https://blog.csdn.net/wang010366/article/details/52505345
_https://www.pediy.com/kssd/pediy12/ida.html
可能有的已经很老了... 什么都不懂,来学习的,谢谢分享。 楼主楼主,我还是萌新,看了你的帖子分析的很全面,我想问一下,12h是在哪里看到的呀,我找了半天都没看到,有点笨,嘿嘿 这还是入门吗,原来学了那么久入门还不到
页:
[1]