拖进IDA,先得到了两个字符串text和key,但刚开始没有注意字节序的问题,正解应为
text = ‘killshadow’,key = ‘ADSFKNDCLS’
再接着是对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;
}
菜鸟首次做这种类型习题,进去之后看到了这样的几个文件夹
查了一下各个文件的意思 https://www.jianshu.com/p/945633724df2
是Android应用程序的配置文件,是一个用来描述Android应用“整体资讯”的设定文件,简单来说,相当于Android应用向Android系统“自我介绍”的配置文件。
用来存放需要打包到 Android 应用程序的静态资源文件,例如图片资源文件、JSON 配置文件、渠道配置文件、二进制数据文件、HTML5离线资源文件等。
这里存放应用程序依赖的native库文件,一般是用C/C++编写。
res是resource的缩写,这个目录存放资源文件,存在这个文件夹下的所有文件都会映射到Android工程的.R文件中,生成对应的ID,访问的时候直接使用资源ID即R.id.filename.
传统的Java程序,首先先把Java文件编译成class文件,字节码都保存在了class文件中,Java虚拟机可以通过解释执行这些class文件。
用来记录资源文件和资源ID之间的映射关系,用来根据资源ID寻找资源。
smali是将Android字节码用可阅读的字符串形式表现出来的一种语言,可以称之为Android字节码的反汇编语言。使用baksmali或apktool可以将Android应用程序包(apk或jar)反编译为smali代码
看完这些内容之后,还是一脸懵逼,一个个找找了会没找到,看题解后知道flag是在这个文件下,至于为什么,现在还是不是很理解。
虽然是第一次遇到这个类型的题目,不过给的提示相当明显,密码是字符串转换成一个4*4的迷宫进行破解
首次接触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;
}