美文网首页
Android开发练习(一)编写自己的第一个Android应用

Android开发练习(一)编写自己的第一个Android应用

作者: h080294 | 来源:发表于2017-10-20 19:50 被阅读127次

    之前初步的了解了Android逆向,这次动手自己模仿着写个crackme。这是我第一次写Android app,堪称从0开始,所以记录下过程。(实际上是和Android程序破解演示实例的demo一致的)

    总体思路:

    用户输入用户名和注册码,点击注册后进行本地校验,然后弹出Toast提示。
    页面布局也基本一致。。。

    实践:

    MainActivity中添加checkSn()方法,用于校验;

        public boolean checkSN(String userName, String sn) {
            if (userName == null || userName.length() == 0)
                return false;
            if (sn == null || sn.length() == 0)
                return false;
            MessageDigest digest = null;
            try {
                digest = MessageDigest.getInstance("MD5");
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
            digest.reset();
            digest.update(userName.getBytes());
            byte[] bytes = digest.digest();
            String hexstr = toHexString(bytes,"");
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < hexstr.length(); i += 4){
                sb.append(hexstr.charAt(i));
            }
            String userSn = sb.toString();
            if (!userSn.equalsIgnoreCase(sn))
                return false;
            return true;
        }
    

    主要功能是校验用户名和注册码是否匹配。过程是使用MD5算法计算用户输入用户名的Hash,将计算结果转为Hex进制字符串,然后取字符串每隔3位数的字符组成新的字符串,新的字符串就是最终与注册名匹配的注册码。如果相同就return True,不相同返回False。

    然后在onCreate中注册按钮的监听事件,如果checkSN为True,就弹成功的Toast,反之则弹错误的Toast。

       protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            setTitle(R.string.unregister);
            edit_sn = (EditText)findViewById(R.id.edit_sn);
            edit_userName = (EditText)findViewById(R.id.edit_userName);
            btn_register = (Button)findViewById(R.id.button_register);
            btn_register.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (!checkSN(edit_userName.getText().toString().trim(),
                            edit_sn.getText().toString().trim())) {
                        Toast.makeText(MainActivity.this,
                                R.string.unsuccessed, Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(MainActivity.this,
                                R.string.successed, Toast.LENGTH_SHORT).show();
                        btn_register.setEnabled(false);
                        setTitle(R.string.registered);
                    }
                }
            });
        }
    

    然后根据自己的算法,再写个脚本验证下。。。(完全多此一举🤣)

    #!usr/bin/python
    # -*- coding:utf-8 -*-
    import os
    import hashlib
    import binascii
    
    def check_sn(username):
        print "用户名是: ", username
        mystr = md5(username)
        tem_str = ""
        for index in range(0,len(mystr),4):
            tem_str = tem_str + mystr[index]
        print "注册码是 : ", tem_str
    
    def md5(str):
        m = hashlib.md5()
        m.update(str)
        return m.hexdigest()
    
    if __name__ == '__main__':
        username = raw_input("请输入用户名: ")
        check_sn(username)
    

    验证:

    附件apk:
    链接: https://pan.baidu.com/s/1qXXlCOO 密码: 6j5q

    相关文章

      网友评论

          本文标题:Android开发练习(一)编写自己的第一个Android应用

          本文链接:https://www.haomeiwen.com/subject/qzgvuxtx.html