[BUUCTF]-RE(逆向)-简单注册器

[BUUCTF]-RE(逆向)-简单注册器题目描述生活中难免会有需要使用一些付费的程序,但是没有绿色版怎么办?只能自己逆向看看注册程序的代码是什么逻辑了。 注意:得到的 flag 请包上

大家好,欢迎来到IT知识分享网。

  • 题目描述

生活中难免会有需要使用一些付费的程序,但是没有绿色版怎么办?只能自己逆向看看注册程序的代码是什么逻辑了。 注意:得到的 flag 请包上 flag{} 提交

  • 程序分析
简单注册器.apk: Java archive data (JAR)
  • 模拟器运行效果

[BUUCTF]-RE(逆向)-简单注册器

  • 静态分析

[BUUCTF]-RE(逆向)-简单注册器

# 关键代码
 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}
  • 解题结果

[BUUCTF]-RE(逆向)-简单注册器

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/66481.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信