分析

源码分析-Jadx

  • 拖入jadx,发现是有加固的,看目录应该是腾讯御安全加固。

  • 使用MT管理器验证后就是腾讯御安全加固,这里要考虑如何脱壳。

安装

  • 可以正常安装,而且第一步要先登录,这里就先进行脱壳,再考虑接下来的事。

脱壳

加固基本原理

脱壳

这里不用hook等方式手动脱,能工具的还是优先工具。这里使用脱壳神器BlackDexhttps://github.com/CodingGay/BlackDex

  • 这里直接用BlackDex显示脱壳成功,但是显示有多个dex文件。

  • 这里要先做的是删除多余没用的dex并替换原有apk下的dex。同时比较原有dex文件,把脱壳后的和原大小相同的也删掉。

  • 对dex进行修复 ,修复后产生的bak备份文件删除就行。

  • 去原有dex下的加固代理文件中找到真实的入口名,并修改amf.xml文件中的入口为真实的入口名。下图一是加固代理入口中的真实入口,图二是要替换掉的amf.xml入口。

  • 接下来对剩余的脱壳后的dex进行重命名。然后将dex添加到apk项目中。注意保存的时候一定不要自动签名!

  • 删除加固残留。删除根目录,lib,assets加固特征码文件。so文件中带shell的删除掉,assert中带0O1和00OO这种的。

  • 此时,再用MT管理器查看显示未加固,但是有校验未通过。直接用NP管理器去除签名校验。

  • 安装,发现可以正常安装并使用,到此去除腾讯御安全加固就可以了。

  • 之前的内容对加固的app进行简单的分析和脱壳。这里继续分析此app,进行关闭广告、跳过强制更新。
    ## 应用分析

  • 登录

    • 登录的时候可以使用密码和验证码登录,这里就抓包分析使用密码登录的逻辑。登录的逻辑在com.dalongtech.cloud.app.quicklogin 代码中。
    • 通过抓包的分析,登录请求中对手机号没有做任何处理,对密码进行了简单的编码。响应也是没经过任何处理的。

去除广告页

  • 登录后遇到的第一个问题是广告界面。
    • com.dalongtech.cloud.app.appstarter.``AppStarterActivity 界面是广告activity。
    • 在上面activity找了半天,没找到广告计时器定义在哪。只能通过amf.xml文件看看是否可以跳过这个广告activity。这里将下面图中的intent过滤器复制到广告后的下一个activity:HomePageActivityNew

  • 进行了上面的更改后可以不加载广告界面直接进入主界面。

饶过强制更新

  • 遇到的第二个问题:强制更新,无法取消弹窗。而且无法点击以后再说

  • 根据当前activity提示,发现更新弹窗的逻辑代码在com.dalongtech.cloud.wiget.dialog.``UpdateAppDialog
  • 经过分析对弹窗activity的分析,发现了一个可以控制按钮状态的函数。其中`this.f12837i对应的是(Button) a(R.id.update_dialog_cancelBtn)` ,即取消更新的button。如果没猜错的话,z应该是False,这里使用frida验证一下我们的猜想。

  • frida hook函数

    function carhook3(){
           let UpdateAppDialog = Java.use("com.dalongtech.cloud.wiget.dialog.UpdateAppDialog");
           UpdateAppDialog["c"].overload('boolean').implementation = function (z) {
           console.log('c is called' + ', ' + 'z: ' + z);
           let ret = this.c(z);
           console.log('c ret value is ' + ret);
           return ret;
       };
       };
  • z的返回结果,可以看出是这里让取消不能点击。现在有两个方法。一个是hook函数的时候修改z的值为true。另一个是在smali代码中对z取反,为了让修改的持久,这里选择直接修复smali代码。

  • 针对使用hook修改c函数的入参的方式,经过尝试也是可行的

  • 查找c函数的调用,发现只有一处,`this.f12120c.c(!"1".equals(data.getIs_force()));` 在smali中将取反操作去掉就可以了。我们可以将0x1变为0x0或者直接删除这一句。

    xor-int/lit8 v0, v0, 0x1
       指令将v0寄存器的值与1进行按位异或操作,相当于对v0寄存器的最低位(最后一位)进行取反操作。
  • 修改后可以看出,以后点击可以点击了,而且点击后可以暂时不更新。

点击收藏 | 4 关注 | 1 打赏
  • 动动手指,沙发就是你的了!
登录 后跟帖