AppCracking.apk的生成

1.AppCracking.apk界面生成:
在界面设置里点击生成界面
在这里插入图片描述
页面形式
在这里插入图片描述
2.在AppCracking.java里编译代码:
加入注册按钮相应代码29-41行,在此之前加入22-24行代码进行定义。
在这里插入图片描述
加入注册比较代码:
在这里插入图片描述
在此代码中用到toHexString()方法,功能是将字节数组转化为16进制字符串,代码如下:
在这里插入图片描述
在之后在目录中的values 下的string文件中加入所用到的flag:
在这里插入图片描述
3.然后编译运行,显示
在这里插入图片描述
然后在目录中找到目标AppCracking.apk文件
在这里插入图片描述
至此准备工作完成。 接下来用apktool进行分析。

  final Button btn =(Button)findViewById(R.id.btnRegister);
  final EditText user = (EditText)findViewById(R.id.etUserName);
  final EditText code = (EditText)findViewById(R.id.etRegisterCode);




 btn.setOnClickListener(new View.OnClickListener() {
   public void onClick(View v) {
    if(!checkRegisterCode(user.getText().toString().trim(), code.getText().toString().trim()))
    {
   Toast.makeText(AppCracking.this, R.string.fail, Toast.LENGTH_SHORT).show();
    }
    else{
   Toast.makeText(AppCracking.this, R.string.succeed, Toast.LENGTH_SHORT).show();
    
    btn.setEnabled(false);
    setTitle(R.string.registered);
    }
    }
   });





  private boolean checkRegisterCode(String userName, String rs){
  try{
  if(userName==null||userName.length()==0||rs==null||rs.length()!=16)
   return false;
  MessageDigest digest=MessageDigest.getInstance("MD5");       //创建报文摘要实例,实现指定的摘要算法
  digest.reset();                                                                                //重置摘要
  digest.update(userName.getBytes());                                           //将String类型的字符串转化为byte类型并存入一个byte数组中
  byte[] bytes=digest.digest();                                                         //对用户名进行哈希
  String hexstr = toHexString(bytes,"");                                           //将散列值转换成十六进制的字符串
  StringBuilder sb=new StringBuilder();                                          //取字符串前半部分所有奇数位与后半部分所有偶数位重新组合生成注册码
  for(int i=0;i<hexstr.length()/2;i+=2){
   sb.append(hexstr.charAt(i));
  }
  for(int i=(hexstr.length()/2+1);i<hexstr.length();i+=2){
   sb.append(hexstr.charAt(i));
  }
  String userRegisterCode=sb.toString();
  if(!userRegisterCode.equalsIgnoreCase(rs))
   return false;
   }catch(NoSuchAlgorithmException e){
    e.printStackTrace();
    return false;   
   }
  return true;
 }
      


    private String toHexString(byte[] bytes, String string) {
  StringBuilder hexString=new StringBuilder();//对字符数组遍历
  for(byte b:bytes){   /*将字节转换为16进制的字符串,不可直接对字节进行转换,字节8位,int 32位,采用补码,直接转换出错*/
   String hex=Integer.toHexString(0xFF&b);
   if(hex.length()==1){
    hexString.append('0');
   }
   hexString.append(hex).append(string);
  }
  return hexString.toString();
 }
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值