ডিবাগ বা প্রকাশের শংসাপত্র ব্যবহার করে অ্যাপ্লিকেশনটি তৈরি হচ্ছে কিনা তা যাচাই করার বিভিন্ন উপায় রয়েছে তবে নীচের উপায়টি আমার কাছে সেরা বলে মনে হচ্ছে।
আপনার অ্যাপ্লিকেশনটিতে স্বাক্ষর করে অ্যান্ড্রয়েড ডকুমেন্টেশনের তথ্য অনুসারে , ডিবাগ কীতে নিম্নলিখিত বিষয় বিশিষ্ট নাম ধারণ করে: " সিএন = অ্যান্ড্রয়েড ডিবাগ, ও = অ্যান্ড্রয়েড, সি = ইউএস "। আমাদের কোডটিতে হার্ডবডিং ডিবাগ কী স্বাক্ষর ছাড়াই প্যাকেজটি ডিবাগ কী দিয়ে স্বাক্ষরিত হয়েছে কিনা তা পরীক্ষার জন্য আমরা এই তথ্যটি ব্যবহার করতে পারি।
প্রদত্ত:
import android.content.pm.Signature;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
আপনি এইভাবে একটি ডিজেব্যাগেবল পদ্ধতি প্রয়োগ করতে পারেন:
private static final X500Principal DEBUG_DN = new X500Principal("CN=Android Debug,O=Android,C=US");
private boolean isDebuggable(Context ctx)
{
boolean debuggable = false;
try
{
PackageInfo pinfo = ctx.getPackageManager().getPackageInfo(ctx.getPackageName(),PackageManager.GET_SIGNATURES);
Signature signatures[] = pinfo.signatures;
CertificateFactory cf = CertificateFactory.getInstance("X.509");
for ( int i = 0; i < signatures.length;i++)
{
ByteArrayInputStream stream = new ByteArrayInputStream(signatures[i].toByteArray());
X509Certificate cert = (X509Certificate) cf.generateCertificate(stream);
debuggable = cert.getSubjectX500Principal().equals(DEBUG_DN);
if (debuggable)
break;
}
}
catch (NameNotFoundException e)
{
//debuggable variable will remain false
}
catch (CertificateException e)
{
//debuggable variable will remain false
}
return debuggable;
}