簡介 逆向Android apk其實是一個分析Android apk的一個過程,必須瞭解Android程式開發的流程、結構、語句分支、解密原理等等。 功能 破解一個註冊驗證程式(自寫一個簡單的註冊驗證程式,然後分析它,再破解它)。 步驟 1、編寫一個簡單的註冊驗證apk,關鍵代碼如下:
private boolean checkSN(String userName, String sn) { //確認驗證 try { if ((userName == null) || (userName.length() == 0)) return false; if ((sn == null) || (sn.length() != 16)) return false; MessageDigest digest = MessageDigest.getInstance("MD5"); digest.reset(); digest.update(userName.getBytes()); byte[] bytes = digest.digest(); //採用MD5對使用者名稱進行Hash String hexstr = toHexString(bytes, ""); //將計算結果轉化成字串 StringBuilder sb = new StringBuilder(); for (int i = 0; i < hexstr.length(); i += 2) { sb.append(hexstr.charAt(i)); } String userSN = sb.toString(); //計算出的SN //Log.d("crackme", hexstr); //Log.d("crackme", userSN); if (!userSN.equalsIgnoreCase(sn)) //比較註冊碼是否正確 return false; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return false; } return true; } private static String toHexString(byte[] bytes, String separator) { //轉為十六進位 StringBuilder hexString = new StringBuilder(); for (byte b : bytes) { String hex = Integer.toHexString(0xFF & b); if(hex.length() == 1){ hexString.append('0'); } hexString.append(hex).append(separator); } return hexString.toString(); }
這個方法的主要功能是計算使用者名稱與註冊碼是否匹配。