SinnerDusk 发表于 2020-2-21 21:05

对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就不放出来了吧

初次写作,有什么错误的地方还请多多指教。

SinnerDusk 发表于 2020-2-21 21:07

排版好像乱了...

pantherTL 发表于 2020-2-24 21:09

学习一下,太强大了。

出前一丁007 发表于 2020-3-1 09:39


学习一下,太强大了。

jamescookers988 发表于 2020-3-1 23:19

多谢楼主分享,与“^”的优先级低于减”-”

`chameleon 发表于 2020-3-2 16:35

一直做web,自己上手ida感觉还是挺难的,用不熟

SinnerDusk 发表于 2020-3-3 17:33

`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
可能有的已经很老了...

wdxdyx 发表于 2020-3-3 18:24

什么都不懂,来学习的,谢谢分享。

jidesheng6 发表于 2020-3-17 20:06

楼主楼主,我还是萌新,看了你的帖子分析的很全面,我想问一下,12h是在哪里看到的呀,我找了半天都没看到,有点笨,嘿嘿

等保测评服务 发表于 2020-3-19 09:27

这还是入门吗,原来学了那么久入门还不到
页: [1]
查看完整版本: 对XCTF上一道入门逆向的分析--萌新入门,大佬还请绕道