生活中难免会有需要使用一些付费的程序,但是没有绿色版怎么办?只能自己逆向看看注册程序的代码是什么逻辑了。 注意:得到的 flag 请包上 flag{} 提交
apk文件啊,这次知道了,是安卓的程序,用APKIDE打开
啊这
换个名字先
成功打开,发现一个名字带flag的文件
根据名字在com下的example下找到了一个名为flag的文件夹
打开文件夹,寻找main函数里带flag的
找到两串可疑字符,但是并不能读懂代码
换了个工具:JEB
能看出来是Java语言了,找flag可以使用程序自带的工具,在编辑里的查找
还有点很重要,tab键可以将这些看不太懂的东西彻底变成Java语言
先对main函数用tab键,然后再查找,很容易找到
可以看出,这道题的重点就在这串代码里了
public void onClick(View arg13) {
int v11 = 0x1F;
int v9 = 2;
int v2 = 1;
String v6 = this.val$editview.getText().toString();
if(v6.length() != 0x20 || v6.charAt(v11) != 97 || v6.charAt(1) != 98 || v6.charAt(0) + v6.charAt(v9) - 0x30 != 56) {
v2 = 0;
}
if(v2 == 1) {
char[] v5 = "dd2940c04462b4dd7c450528835cca15".toCharArray();
v5[v9] = ((char)(v5[v9] + v5[3] - 50));
v5[4] = ((char)(v5[v9] + v5[5] - 0x30));
v5[30] = ((char)(v5[v11] + v5[9] - 0x30));
v5[14] = ((char)(v5[27] + v5[28] - 97));
int v4;
for(v4 = 0; v4 < 16; ++v4) {
char v0 = v5[0x1F - v4];
v5[0x1F - v4] = v5[v4];
v5[v4] = v0;
}
this.val$textview.setText("flag{" + String.valueOf(v5) + "}");
}
else {
this.val$textview.setText("输入注册码错误");
}
}
this.val$textview.setText("flag{" + String.valueOf(v5) + "}");
}
else {
this.val$textview.setText("输入注册码错误");
}
}
});
}
惊喜的发现不需要逆运算,直接转成自己擅长的语言运行一下就好了
我还是比较习惯python,就是类型转换比较麻烦,题目本身不难
v5 = list("dd2940c04462b4dd7c450528835cca15")
v5[2] = chr(ord(v5[2]) + ord(v5[3]) - 50)
v5[4] = chr(ord(v5[2]) + ord(v5[5]) - 0x30)
v5[30] = chr(ord(v5[0x1f]) + ord(v5[9]) - 0x30)
v5[14] = chr(ord(v5[27]) + ord(v5[28]) - 97)
for v4 in range(16):
v0 = v5[0x1f - v4]
v5[0x1f - v4] = v5[v4]
v5[v4] = v0
print(''.join(v5))
运行得到:59acc538825054c7de4b26440c0999dd



