一周学习总结1_BUUCTF_re

SimpleRev

拖进IDA,先得到了两个字符串text和key,但刚开始没有注意字节序的问题,正解应为
text = ‘killshadow’,key = ‘ADSFKNDCLS’
一周学习总结1_BUUCTF_re_第1张图片
再接着是对key的一段操作,看到+32后直接反应是大写改为小写在这里插入图片描述
此时text = ‘killshadow’,key = ‘adsfkndcls’
之后的这段代码得到的就是flag了,刚开始尝试用python编译,但对字符的处理不太到位,无奈换回C++

#include 
using namespace std;
int main()
{
     
        char text[10]={
     'k','i','l','l','s','h','a','d','a','w'};
        char key[10]={
     'a','d','s','f','k','n','d','c','l','s'};
        int v3=0;
        int v5=10;
        char flag[10];
        for(int i=0;i<10;i++)
        {
     
                for(char j='A';j<='Z';j++)
				{
     
                        char temp;
                        temp=(j-39-key[i]+97)%26+97;
                        if(temp==text[i])
                        flag[i]=j;
                }
        }[添加链接描述](https://www.jianshu.com/p/945633724df2)
        cout<<flag;
        return 0;
}

findit

菜鸟首次做这种类型习题,进去之后看到了这样的几个文件夹
在这里插入图片描述
查了一下各个文件的意思 https://www.jianshu.com/p/945633724df2

AndroidManifest.xml

是Android应用程序的配置文件,是一个用来描述Android应用“整体资讯”的设定文件,简单来说,相当于Android应用向Android系统“自我介绍”的配置文件。

Assets

用来存放需要打包到 Android 应用程序的静态资源文件,例如图片资源文件、JSON 配置文件、渠道配置文件、二进制数据文件、HTML5离线资源文件等。

lib

这里存放应用程序依赖的native库文件,一般是用C/C++编写。

res

res是resource的缩写,这个目录存放资源文件,存在这个文件夹下的所有文件都会映射到Android工程的.R文件中,生成对应的ID,访问的时候直接使用资源ID即R.id.filename.

class.dex

传统的Java程序,首先先把Java文件编译成class文件,字节码都保存在了class文件中,Java虚拟机可以通过解释执行这些class文件。

resources.arsc

用来记录资源文件和资源ID之间的映射关系,用来根据资源ID寻找资源。

smali

smali是将Android字节码用可阅读的字符串形式表现出来的一种语言,可以称之为Android字节码的反汇编语言。使用baksmali或apktool可以将Android应用程序包(apk或jar)反编译为smali代码

看完这些内容之后,还是一脸懵逼,一个个找找了会没找到,看题解后知道flag是在这个文件下,至于为什么,现在还是不是很理解。
一周学习总结1_BUUCTF_re_第2张图片

不一样的flag

虽然是第一次遇到这个类型的题目,不过给的提示相当明显,密码是字符串转换成一个4*4的迷宫进行破解
在这里插入图片描述在这里插入图片描述

java逆向解密

首次接触class文件,百度之后用jd-gui成功打开,虽然没学过java但和C++长得很像,可以看到关键字符串key和for循环
在这里插入图片描述
在这里插入图片描述
反向解密

#include
using namespace std;
int main()
{
     
	char k[99];
	int key[] = {
      180, 136, 137, 147, 191, 137, 147, 191, 148, 136, 133, 191, 134, 140, 129, 135, 191, 65 };
	for (int i = 0; i < 18; i++)
    {
     
      int result = key[i] - '@' ^ 0x20;
      k[i]=char(result);
    }
    cout<<k;
    return 0;
}

你可能感兴趣的:(一周学习总结1_BUUCTF_re)