Fix*_*int 9 android facebook contacts
我正在尝试构建一个联系人管理应用程序.在我的手机上,我有来自Facebook和HTC Facebook等几个账户的联系人.出于某种原因,我无法从以下RawContacts
表中检索这些联系人ContactsContract
:
managedQuery(ContactsContract.RawContacts.CONTENT_URI, new String[] {
ContactsContract.RawContacts._ID,
ContactsContract.RawContacts.CONTACT_ID,
ContactsContract.RawContacts.ACCOUNT_NAME,
ContactsContract.RawContacts.ACCOUNT_TYPE,
}, ContactsContract.RawContacts.ACCOUNT_TYPE + " = 'com.facebook.auth.login'", null, null)
Run Code Online (Sandbox Code Playgroud)
此查询不返回任何结果.如果我重新使用帐户类型com.htc.socialnetwork.facebook
,我仍然没有结果.我的手机上有很多Facebook联系人; 如何检索它们?
是的,Facebook联系人是安全的,但可以通过一些偷偷摸摸的SQLite注入被劫持.不 - 我不打算在这个页面上发帖,但有没有理由你不只是使用Facebook身份验证并获得联系方式?Facebook联系人无论如何都没有任何有用的东西,它更安全,更有可能全部工作
绝对没有办法以标准的方式做到这一点.因此,我们必须使用SQLi注入(作为roger评论),以便能够破解联系人数据库并获取Facebook头像.以下代码适用于Android 2.2或更高版本上使用Motoblur的大多数Motorolas:
public static Bitmap loadFacebookAvatar(Context context, long personId) {
String[] rawProjection = {ContactsContract.RawContacts._ID};
String contactIdAssertion = ContactsContract.RawContacts.CONTACT_ID + " = " + personId;
String rawWhere = new StringBuilder()
.append(contactIdAssertion).append(") UNION ALL SELECT ")
.append(ContactsContract.RawContacts._ID).append(" FROM view_raw_contacts WHERE (")
.append(contactIdAssertion).toString();
Cursor query = context.getContentResolver().query(ContactsContract.RawContacts.CONTENT_URI,
rawProjection,
rawWhere, null, null);
if (query != null && query.moveToFirst()) {
do {
long id = query.getLong(query.getColumnIndex(ContactsContract.RawContacts._ID));
String[] projection = {ContactsContract.CommonDataKinds.Photo.PHOTO};
Uri uri = ContactsContract.Data.CONTENT_URI;
String mimeTypeAssertion = ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE + "'";
String photoAssertion = ContactsContract.CommonDataKinds.Photo.PHOTO + " IS NOT NULL";
String rawContactIdAssertion = ContactsContract.CommonDataKinds.Photo.RAW_CONTACT_ID + " = " + id;
String where = new StringBuilder().append(mimeTypeAssertion).append(" AND ")
.append(photoAssertion).append(" AND ").append(rawContactIdAssertion)
.append(") UNION ALL SELECT ").append(ContactsContract.CommonDataKinds.Photo.PHOTO)
.append(" FROM view_data WHERE (").append(photoAssertion).append(" AND ")
.append(rawContactIdAssertion).toString();
Cursor photoQuery = context.getContentResolver().query(uri, projection, where, null, null);
if (photoQuery != null && photoQuery.moveToFirst()) {
do {
byte[] photoData = photoQuery.getBlob(photoQuery.getColumnIndex(ContactsContract.CommonDataKinds.Photo.PHOTO));
if (photoData != null) {
return BitmapFactory.decodeByteArray(photoData, 0, photoData.length, null);
}
} while (photoQuery.moveToNext());
}
} while (query.moveToNext());
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
对于其他手机,您必须获取联系人数据库并对其进行分析,以确定如何应用SQL注入,这需要有根电话.
归档时间: |
|
查看次数: |
3021 次 |
最近记录: |