大家好,欢迎来到IT知识分享网。
- 题目描述
生活中难免会有需要使用一些付费的程序,但是没有绿色版怎么办?只能自己逆向看看注册程序的代码是什么逻辑了。 注意:得到的 flag 请包上 flag{} 提交
- 程序分析
简单注册器.apk: Java archive data (JAR)
- 模拟器运行效果
- 静态分析
# 关键代码
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) {
int v11 = 0x1F;
int v9 = 2;
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("输入注册码错误");
}
}
});
- 解题思路
根据题目意思,字符串V5先转ASCII码,然后中间位数重新计算赋值,最后倒序
- 解题脚本
v5= 'dd2940c04462b4dd7c450528835cca15'
l1=[]
v11= 0x1F
v9 = 2
flag=''
# 处理字符转换ASCII
for i in range(0,len(v5)):
if(isinstance(v5[i],str)):
l1.append(ord(v5[i]))
else:
l1.append(v5[i])
# 个别值变更
l1[v9] = (l1[v9] + l1[3] - 50);
l1[4] = (l1[v9] + l1[5] - 0x30);
l1[30] = (l1[v11] + l1[9] - 0x30);
l1[14] = (l1[27] + l1[28] - 97);
# 变换顺序
l2=l1[::-1]
# 输出
for m in l2:
flag+=chr(m)
print(flag)
# 解的flag
# flag{59acc538825054c7de4b26440c0999dd}
- 解题结果
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/66481.html