您的位置:首页 > 移动开发 > Android开发

一个简单CrackMe分析+keyGen编写

2016-10-24 20:53 441 查看
工具:JEB+android studio

用JEB打开发现做了混淆,首先找到入口的地方,找到onCreate函数分析

public void onCreate(Bundle arg3) {
super.onCreate(arg3);
this.setContentView(2130903040);
this.findViewById(2131034113).setOnClickListener(((View$OnClickListener)this));
this.mContext = this.getBaseContext();
PreferenceManager.getDefaultSharedPreferences(this.mContext);
this.b = new b(this.mContext);
this.a = new c(this.mContext);
this.b.a();  // 计算machine_id保存在sharedpreferences中
if(c.a()) {  // 判断是否已经注册
try {
this.a();
}
catch(Exception v0) {
v0.printStackTrace();
}
}
}


设置了一个Listener应该是button按钮的,通过更进分析,知道了注释中几个函数的功能,





一种方法是修改代码的判断逻辑直接绕过,不过既然注册码就是machine_id的MD5值,所以写keyGen应该更简单了

TelephonyManager systemService = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String deviceId = systemService.getDeviceId();
String line1Number = systemService.getLine1Number();
String deviceSoftwareVersion = systemService.getDeviceSoftwareVersion();
String simSerialNumber = systemService.getSimSerialNumber();
String subscriberId = systemService.getSubscriberId();
PackageManager packageManager = getPackageManager();
String signatures=null;
try {
signatures = packageManager.getPackageInfo("com.lohan.crackme1", PackageManager.GET_SIGNATURES).signatures[0].toCharsString();
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}

String str=deviceId+line1Number+deviceSoftwareVersion+simSerialNumber+subscriberId+signatures;

try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update(str.getBytes(),0,str.length());
String s = new BigInteger(1, md5.digest()).toString(16);
Log.v("meg",s);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}


在android6.0以下系统运行正常,以上就会由于权限问题直接停止运行,需要动态权限申请,暂时还不会...

这算是我第一个完整分析的apk的例子了吧,收获还是挺多的,写keyGen时也学习了一些android知识,感觉挺好的

最重要的感悟是:①用好JEB的rename和comment功能能帮助我们更好的分析程序②分析程序是需要足够的耐心,耐力

apk文件:点击下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android