Bugku-REVERSE-First_Mobile(xman)

Bugku-REVERSE-First_Mobile(xman),第1张

概述  使用jeb3打开反编译代码packagecom.example.xman.easymobile;importandroid.os.Bundle;importandroid.support.v7.app.AppCompatActivity;importandroid.view.View$OnClickListener;importandroid.view.View;importandroid.widget.Button;importandroid.wi

 

 

使用jeb3打开反编译代码

package com.example.xman.easymobile;import androID.os.Bundle;import androID.support.v7.app.AppCompatActivity;import androID.vIEw.VIEw$OnClickListener;import androID.vIEw.VIEw;import androID.Widget.button;import androID.Widget.EditText;import androID.Widget.Toast;public class MainActivity extends AppCompatActivity {    private button button;    private EditText editText;    public MainActivity() {        super();    }    protected voID onCreate(Bundle arg4) {        super.onCreate(arg4);        this.setContentVIEw(0x7F04001A);        this.findVIEwByID(0x7F0B0056).setonClickListener(new VIEw$OnClickListener(this.findVIEwByID(0x7F0B0055)) {            public voID onClick(VIEw arg4) {                new encode();                if(encode.check(this.val$editText.getText().toString())) {                    Toast.makeText(MainActivity.this.getApplicationContext(), "correct", 1).show();                }                else {                    Toast.makeText(MainActivity.this.getApplicationContext(), "Failed", 1).show();                }            }        });    }}

分析,程序将editText中的内容进行一次encode.check检查,通过就显示correct

那核心代码应该在encode函数中,

package com.example.xman.easymobile;public class encode {    private static byte[] b;    static {        encode.b = new byte[]{23, 22, 26, 26, 25, 25, 25, 26, 27, 28, 30, 30, 29, 30, 0x20, 0x20};    }    public encode() {        super();    }    public static boolean check(String arg7) {        int v6 = 16;        byte[] v1 = arg7.getBytes();        byte[] v3 = new byte[v6];        int v0;        for(v0 = 0; v0 < v6; ++v0) {            v3[v0] = ((byte)((v1[v0] + encode.b[v0]) % 61));        }        for(v0 = 0; v0 < v6; ++v0) {            v3[v0] = ((byte)(v3[v0] * 2 - v0));        }        return new String(v3).equals(arg7);    }}

这个函数逻辑很简单,就是对输入的长度为16的字符串的每个字符进行运算,若运算结果字符没有变,就通过。

解方程太复杂了,编写一个简单的python脚本进行爆破

byte = [23, 22, 26, 26, 25, 25, 25, 26, 27, 28, 30, 30, 29, 30, 0x20, 0x20]for i in range(16):    for v1 in range(200):        if ((v1+byte[i])%61)*2-i == v1 :            print chr(v1),

得到结果如下

 

得到flag XMAN{LOHILMNMLKHILKHI}

 

总结

以上是内存溢出为你收集整理的Bugku-REVERSE-First_Mobile(xman)全部内容,希望文章能够帮你解决Bugku-REVERSE-First_Mobile(xman)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1049486.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存