使用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)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)