从破解APP开始学Android——用户登录验证
来源:互联网 发布:淘宝网大童连衣裙 编辑:程序博客网 时间:2024/04/27 23:51
最近学习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
0 0
- 从破解APP开始学Android——用户登录验证
- app验证用户登录
- JSF开发——从用户登录程序开始(1)
- 寒假学习心得--从0开始学破解
- 学android: android-studio从main开始
- 从心开始学Android:Activity
- 从心开始学Android:ListView
- MVC(JSP+JavaBean+Servlet),用户登录验证开始
- android loginDemo +WebService用户登录验证
- android loginDemo +WebService用户登录验证 续篇
- Struts从0开始1:普通的登录验证实例
- 努力学英语——从背单词开始
- 决定要每日学英语—从今天开始。
- 从用户登录学习js验证+js控制表单提交 .
- Activemq配置——Jaas方式配置用户登录验证
- Activemq配置——Jaas方式配置用户登录验证
- Activemq配置——Jaas方式配置用户登录验证
- 美化你的APP——从Toolbar开始
- Mac OS使用技巧之十一:隐藏launchpad中图标的方法
- 小米4的相机在几个国产主流机(2014年10月间)不是最好的【视频评测】推荐
- string strtok的用法
- Ubuntu Linux: Uninstall / Remove Any Installed Software
- leetcode study.
- 从破解APP开始学Android——用户登录验证
- 利用WiresShark过滤某个协议(以EAP协议为例子)
- The 2014 ACM-ICPC Asia Mudanjiang Regional Contest - K Known Notation
- vim gdb ddd xxgdb精彩的程序调试
- 解包赋值
- UVA674(DP)
- “The AnimationClip 'Take001' used by the Animation component 'Yu' must be marked as Legacy.”
- Git系列之从远程库克隆
- javascript 基本语法