Android逆向分析案例——某酒店APP的登陆请求分析

本文通过分析某酒店APP的登录请求,展示了Android逆向分析的过程,包括反编译APK,查找关键代码,理解加解密原理,并最终成功将密文转换为明文。主要涉及Wireshark抓包、Sublime Text搜索、JD-GUI查看代码、Hook技术验证及加密算法的解析。
摘要由CSDN通过智能技术生成

为了练练手,增长逆向分析的知识,本次博客打算分析一下某酒店APP的登陆请求。

这次的逆向分析还是以网络请求为例,通过分析其登陆请求数据的加解密原理,将请求数据从密文转换成明文,顺便把返回的结果也转成明文。

好了,既然明确了需求,那么准备开始分析了,分析的步骤还是很简单:反编译-->找关键代码-->分析请求代码加解密原理-->验证密文到明文准确性


第一步,反编译:

这一步中,一般来说我们可以结合smali文件和jd-gui查看器来分析,所以APKTool和dex2jar都可以用上。

因为APKTool和dex2jar的反编译都有在前面的博客里介绍过,所以在此就不详细说明了,不明的可以回去看。


第二步,找关键代码:

找关键代码的方法有很多,我主要用到两种方法,一是,利用wireshark抓包的关键字符串,结合sublime text工具在smali文件夹中使用“find in folder”功能找到关键字符串所在位置,然后再顺藤摸瓜;二是直接通过jd-gui查看其代码,并找到登陆界面的点击事件,并定位到其关键代码。

首先讲第一种方法:

先抓包(打开wireshark监控,然后按下登陆按钮进行登陆),并查看其TCP流,找出其关键字符串


可以看到图中红色方框中的关键词"APPSIGN","sign","data"等,其中data的数据是我们想要知道的,但现在是密文。

接下来,我们利用找到的关键词,利用sublime text工具的find in folder功能在smali文件夹中查找该关键词出现的地方。


通过关键词可以找到了一个HttpUtils的类,再看看其smali里的表达式,可以看到com/loopj/android/http包,该包实际上就是第三方框架AsyncHttpClient的东西。

到这,我们基本上就可以定位到关键代码位置了。

那么,第二种方法又是怎样的呢?

实际上第二种方法并不建议,这种方法就是直接找,因为fragment,Activity这些类是无法被混淆的,所以我们可以直接在jd-gui上浏览一下目录,找到其关键的地方,比如我们现在找登陆界面,那么可以根据登陆的英文login去找,如下图


可以看到在com.htinns.UI.fragment.My包下可以找到了LoginFragment,没错,这就是登陆页面,在文件数量很大的情况不建议用这种方法,费时。

在LoginFragment的代码中可以看到有多个HttpUtils类的静态方法被调用,基本上已经确定HttpUtils确实是登陆请求的一个工具类了。


第三步,分析加解密原理,实际上这跟第二步是紧密联系的,因为要一边顺藤摸瓜,一边推断其加解密的原理,一步步地接近真相~

根据上面找到的关键代码,我们可以在HttpUtils中找到一个静态方法a(Context, RequestInfo),该方法中的参数RequestInfo实例是包含了账号密码的,就是该实例的字段c,所以我们可以根据RequestInfo.c这个内容去顺藤摸瓜,找到其加密的位置。


可以看到,图中红色方框中的分别是加密的key和调用加密函数的入口a函数,那么我们继续顺着这个a函数找:

  public static k a(Context paramContext, JSONObject paramJSONObject, String paramString)
  {
    k localk = new k();
    if (paramJSONObject == null);
    try
    {
      paramJSONOb
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值