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

从破解APP开始学Android——用户登录验证

2014-10-12 16:25 232 查看
最近学习android 的大型商业App 开发,又搞不到 商业源码,网上能找到的都是高仿的界面,但是应用程序里面的程序架构都不怎么样。
笔者就瞄准的 app破解,找个app破解开来学习。
Apk文件破解可见源码 这里讲的很好。

破解以后code 里面很多破解的不是很全面, 有很多//ERROR// 只能自己改了。
笔者的方法是 简单的 改掉,复杂的直接删掉,等将来用到的时候 再调试并加上。

Fiddler http 调试利器 android http 抓包

一下记录了登录修改过程中碰到的一些问题:
HttpClient
1 最开始 自己定义了一 httpClient 但是在 Fiddler抓的包中 一直有 client agent 头,但是真正的app中是没有这个头的。最后还是只能用app中的实现:
private HttpClient createHttpClient()
{
BasicHttpParams localBasicHttpParams = new BasicHttpParams();
ConnManagerParams.setMaxTotalConnections(localBasicHttpParams, 5);
HttpConnectionParams.setConnectionTimeout(localBasicHttpParams, 30000);
HttpConnectionParams.setSoTimeout(localBasicHttpParams, 60000);
HttpProtocolParams.setVersion(localBasicHttpParams, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(localBasicHttpParams, "ISO-8859-1");
HttpProtocolParams.setUseExpectContinue(localBasicHttpParams, true);
SchemeRegistry localSchemeRegistry = new SchemeRegistry();
localSchemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
localSchemeRegistry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
return new DefaultHttpClient(new ThreadSafeClientConnManager(localBasicHttpParams, localSchemeRegistry), localBasicHttpParams);
}


2 关于encode 破解的 函数中 代码是乱的,最后在 网站的开放api sdk 中找到了:
public static String encode(String value) {
String encoded = null;
try {
encoded = URLEncoder.encode(value, "utf-8");
} catch (UnsupportedEncodingException ignore) {
}
StringBuffer buf = new StringBuffer(encoded.length());
char focus;
for (int i = 0; i < encoded.length(); i++) {
focus = encoded.charAt(i);
if (focus == '*') {
buf.append("%2A");
} else if (focus == '+') {
buf.append("%20");
} else if (focus == '%' && (i + 1) < encoded.length()
&& encoded.charAt(i + 1) == '7' && encoded.charAt(i + 2) == 'E') {
buf.append('~');
i += 2;
} else {
buf.append(focus);
}
}
return buf.toString();
}


3 程序签名 破解code 也是乱的, 最后google 了一下, 居然和weibo 的签名函数一样:

http://open.weibo.com/qa/index.php?qa=3850&qa_1=token1-0%E6%98%AF%E6%8A%A5%E9%94%99%EF%BC%8Csignature_method_rejected-get_oauth2_token

public static String generateSignature(String paramString1, String paramString2, String paramString3)
{
String HMAC_SHA1 ="HmacSHA1";
byte[] byteHMAC = null;
try {
Mac mac = Mac.getInstance("HmacSHA1");
StringBuilder localStringBuilder = new StringBuilder(String.valueOf(encode(paramString2))).append("&");
localStringBuilder.append(paramString1);
SecretKeySpec spec;
if (null == paramString3) {
String oauthSignature = encode(paramString2) + "&";
spec = new SecretKeySpec(oauthSignature.getBytes(), HMAC_SHA1);
} else {
spec = new SecretKeySpec(encode(paramString3).getBytes(), "HmacSHA1");
}
mac.init(spec);
byteHMAC = mac.doFinal(paramString1.toString().getBytes());
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException ignore) {
// should never happen
}
return new BASE64Encoder().encode(byteHMAC);
}


最后 成功信息:
oauth_token=164269412_7130f783fdfafe3927d29e1f6625a4&oauth_token_secret=ec94542edde237ee3b9f7e4094c3cb606a2e3d3bd6&is_semi_account=0&user_id=164269412&verify=164269412_164269412_1413102298_3d1adde80e52af26753d7f050e5996ce_03403AndroidClient_kx&wapverify=164269412_164269412_1413102298_bc28dc7d497824ce8f6f392ab7f94899_kx-android



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