吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 16959|回复: 41

[安卓逆向图文] 某APK注册机制分析与多思路分析方法

  [复制链接]
csky6688 发表于 2015-7-25 14:46 | 显示全部楼层 |阅读模式

本帖最后由 csky6688 于 2015-7-25 16:22 编辑

刚刚接触android逆向,请多多包涵
在论坛看到一篇帖子,说软件作者利用异常机制来实现注册,思路比较好。。。
于是简单分析了下,并对so文件里的算法进行了分析。
下面我将以软件注册机制和多思路逆向两部分进行详细讲解
--------------------------------------------------------------
一        软件注册机制分析篇
--------------------------------------------------------------
首先,软件安装后,如图所示,
0.PNG

在右上角提示注册,点击后提示找回注册和注册说明,并提示了注册码(在不同的模拟器中显示不一样)
1.PNG

其中该软件的注册流程如下所示:
2.PNG

首先APK使用者支付成功后,利用短信或者邮件,将支付信息和机器码发送给作者->作者修改服务器的数据库->APK使用者利用找回注册,去服务器查询,查询成功后,提示注册成功,否则提示不成功。
3.PNG

因此利用"不成功"字符串为突破口,进行进一步的分析。
JEB载入apk,在BqimenDateInputActivity中查找到如下的函数
  1. public native String regetkey(String arg1) {
  2.     }

  3.     public native String regetkeyafter(String arg1) {
  4.     }

  5.     static void s(BqimenDateInputActivity arg4) {
  6.         String v0_2;
  7.         try {
  8.             v0_2 = "";
  9.             HttpResponse v1 = new DefaultHttpClient().execute(new HttpGet(arg4.regetkey("QM" + arg4.
  10.                     getIMEI())));
  11.             if(v1.getStatusLine().getStatusCode() == 200) {
  12.                 v0_2 = EntityUtils.toString(v1.getEntity(), "UTF-8");
  13.             }
  14.         }
  15.         catch(IOException v0) {
  16.             arg4.aa.MyDialog(((Context)arg4), "不成功,连接超时,请开通网络重试!(错误代码:-403)", "提示");
  17.             v0.printStackTrace();
  18.             return;
  19.         }
  20.         catch(ClientProtocolException v0_1) {
  21.             arg4.aa.MyDialog(((Context)arg4), "不成功,请开通网络重试或联系开发者!(错误代码:-327)", "提示");
  22.             v0_1.printStackTrace();
  23.             return;
  24.         }

  25.         v0_2 = arg4.regetkeyafter(v0_2);
  26.         try {
  27.             if(Integer.parseInt(v0_2) != 6) {
  28.                 return;
  29.             }

  30.             arg4.al = true;
  31.             arg4.ag.setVisibility(8);
  32.             arg4.writeFileData("config1my", arg4.writekey("QM" + arg4.getIMEI()));
  33.             arg4.aa.ExecuteSQL(arg4.aa.MyDB, "insert into config values (\'qm\',\'" + arg4.getIMEI()
  34.                      + arg4.getIMSI() + "\',\'1\',1)");
  35.             arg4.aa.ShowMessage(((Context)arg4), "成功", "");
  36.             arg4.m();
  37.         }
  38.         catch(Exception v0_3) {
  39.             arg4.aa.ShowMessage(((Context)arg4), "不成功", "");
  40. }
复制代码
可以看到,首先利用HttpGet连接服务器,查询信息,然后利用动态库so里面的regetkeyafter()方法,对查询的结果进行处理,最后将regetkeyafter方法返回的字符串转换成整数,并判断值是否6。在字符串转换成整数过程中,如果转换失败,则抛出异常,软件的作者也是在异常中,提示注册不成功的。
上面对static void s(BqimenDateInputActivity arg4)整体流程分析后,我们再回过头来仔细看看该函数的细节。
该函数中首先调用getIMEI()方法获得一个字符串(实际上获得的机器码,稍后我会讲解如何验证),并与QM拼接获得新的字符串“QMXXXX”,传递给动态库so文件里的regetkey()方法,得到服务器的地址和查询参数(如何知道的?稍后会慢慢道来)。
下面我们可以先输出这几个关键函数的返回值,做个初步的判断。
因此,我们首先获得getIMEI()方法的返回值、regetkey()方法的返回值、服务器的查询结果v0_2regetkeyafter()方法的返回值。
打开apktool反编译后的文件BqimenDateInputActivity.smali,找到S函数
  1. .method static synthetic s(Lcom/forace/Bqimen/BqimenActivity/BqimenDateInputActivity;)V
复制代码


修改如下几处代码:
4.PNG
5.PNG
6.PNG
然后打包成apk,签名运行后,点击注册->找回注册,并在cmd中输入adb logcat -s SN:V
得到结果为
7.PNG
对比之前的注册界面,可以验证我们的想法是正确的。即getIMEI()方法获得机器码、regetkey()方法的返回服务器的查询地址和参数、变量v0_2保存服务器查询的结果,regetkeyafter()对服务器的查询结果进行处理,
此处返回了字符a,因此调用Integer.parseInt会产生异常,跳到如下的代码执行:
  1. catch(Exception v0_3) {
  2.             arg4.aa.ShowMessage(((Context)arg4), "不成功", "");
  3.         }
复制代码
分析完软件注册的整体框架后,下面我们对动态库so文件里的regetkey()方法和regetkeyafter()方法进行分析。
regetkey()方法根据机器码产生相应服务器地址和查询参数,载入IDA,找到该函数:
8.PNG
该函数的实现算法为:计算输入的注册码长度,并提取注册码中的每个字符,然后对每个字符进行查表的方式,获得一个新的字符,并添加到字符串"http://www.****.com/userc/checkID.asp?key=''"中的Key参数中。
9.PNG
10.PNG
11.PNG
关于该算法的详细注释,我会打包到附件中,另外也可以通过动态调试的方式,获得该函数的算法。
下面对另一个函数regetkeyafter()进行分析,其实该函数的实现是比较简单的,具体为:将查询结果与”true“进行比较,如果成功,则将返回值赋值为字符6,否则赋值为字符a。如下:
12.PNG
上面便是整个软件的注册机制的实现和算法讲解。
在了解了注册机制后,对与该软件的逆向应该是很简单的了,下面简单的介绍两种分析方法。
--------------------------------------------------------------
二        软件多种思路逆向篇
--------------------------------------------------------------
此处我会提供两种新的逆向分析思路
1、第一种逆向分析思路
通过前面的分析,发现其实只需要使regetkeyafter()的返回值为字符6即可实现逆向。而最简单的方法就是修改src(即字符a)处的原始字符为6即可,如下地址
13.PNG
14.PNG
利用WinHex将61改为36即可。然后打包,签名,注册->找回注册即可,注册成功。
2、第二种逆向分析思路
既然软件需要访问服务器获得查询结果(true或者false),那同样在获得了完整的访问网址及参数后,可以自己搭建服务器,实现离线验证,此方法复杂,在此不在细讲,只提供一个思路。
另外此种方法适用于复杂的认证过程中,通过抓包获得地址,然后搭建伪服务器验证即可。
到此,本文的讲解就结束了。

附件为: pic.rar (3.43 MB, 下载次数: 25)






评分

参与人数 51威望 +1 HB +64 THX +38 收起 理由
longge188 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
24567 + 2
magicwk + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
Jawon + 1
Soul1999 + 1
李卓吾 + 1
四脚吞金兽 + 1 + 1 有点思路但是看不懂代码
sjtkxy + 1 + 1
行行行行行行 + 1
af521 + 1
一路走来不容易 + 2
消逝的过去 + 1
l278785481 + 1
zxjzzh + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
jaunic + 1
一蓑烟雨 + 1 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
h112233h456 + 1
hnymsh + 1
mengzhisuoliu1 + 1
lies + 1
快乐学习321 + 1 [快捷评语]--吃水不忘打井人,给个评分懂感恩!
蟠桃居士 + 1 [快捷评语] - 吃水不忘打井人,给个评分懂感恩!
yesong190 + 1 [快捷评语] - 分享精神,是最值得尊敬的!
xinluan + 1 评分=感恩!简单却充满爱!感谢您的作品!
wxbwxb + 1 吃水不忘打井人,给个评分懂感恩!
329504300 + 1 + 1 附件形式上传教程,为后来学习者保证了资源稳定性,额外+10HB,感谢!
Aniz + 1 ★★★★★ 热心人,佛祖保佑你事事顺利 ,财源滚滚!!!
我要学 + 1 + 1 评分=感恩!简单却充满爱!感谢您的作品!
西瓜先森° + 2 + 1 附件形式上传教程,为后来学习者保证了资源稳定性,额外+10HB,感谢!
huaye + 1 + 1 评分=感恩!简单却充满爱!感谢您的作品!
zijie_2015 + 1 还在研究当中,不过教程很好!
Aydos + 2 + 1 评分=感恩!简单却充满爱!感谢您的作品!
Desire + 6 + 1 评分=感恩!简单却充满爱!感谢您的作品!
chihiro + 1 + 1 评分=感恩!简单却充满爱!感谢您的作品!
冷瞳 + 1 + 1 评分=感恩!简单却充满爱!感谢您的作品!
wo3561758 + 1 + 1 评分=感恩!简单却充满爱!感谢您的作品!
Flowerinjury + 1 评分=感恩!简单却充满爱!感谢您的作品!
YYYYYe + 1 + 1 ★★★★★ 热心人,佛祖保佑你事事顺利 ,财源滚滚!!!
zjsyjbb + 1 + 1 评分=感恩!简单却充满爱!感谢您的作品!
herowuking + 1 + 1 EJB 工具能否分享下
kangda666 + 1 + 1 评分=感恩!简单却充满爱!感谢您的作品!
DaoGod + 1 + 1 评分=感恩!简单却充满爱!感谢您的作品!
小小的屋 + 1 + 1 评分=感恩!简单却充满爱!感谢您的作品!
雪里红 + 2 + 1 评分=感恩!简单却充满爱!感谢您的作品!
赵师傅 + 3 + 1 评分=感恩!简单却充满爱!感谢您的作品!
我爱张海强 + 2 + 1 评分=感恩!简单却充满爱!感谢您的作品!
逍遥枷锁 + 4 + 1 评分=感恩!简单却充满爱!感谢您的作品!
lovejingqing + 1 + 1 非常精彩,赞一个,么么哒~!
黑刀 + 1 + 1 学习了!
Shark恒 + 1 评分=感恩!简单却充满爱!感谢您的作品!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
冷瞳 发表于 2015-7-25 14:51 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
John 发表于 2015-7-25 14:54 | 显示全部楼层

思路牛逼
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
胡一飞 发表于 2015-7-25 15:20 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Shark恒 发表于 2015-7-25 15:49 | 显示全部楼层

非常精彩,赞一个,么么哒~!

评分

参与人数 1HB +1 THX +1 收起 理由
黄景月 + 1 + 1 连恒大的都来了

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
gujin162 发表于 2015-7-25 16:14 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
lovejingqing 发表于 2015-7-25 17:24 | 显示全部楼层

思路牛逼,非常精彩,赞一个,么么哒~!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
暖阳 发表于 2015-7-25 18:13 | 显示全部楼层

我是来学习思路的
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
逍遥枷锁 发表于 2015-7-25 18:42 | 显示全部楼层

好图文,不错,图文比较给力,辛苦了。
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
赵师傅 发表于 2015-7-25 19:49 | 显示全部楼层

感谢分享 膜拜搞安卓的
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表