某浇油app系列2-安全分析

声明


以下只是搬运下我公众号的东西。很早就发过了。原帖地址:

某浇油app系列2-安全分析

前言

废话不多说,继续浇油app系列分析,也是某短视频app上的

图片发不出来

分析

下面这个是注册包,这注册登录界面咋看着像上一篇的app呀

登录包:

注册完了进入主页面,界面确实感觉跟系列1很像

返回没有加密,请求看着感觉挺简单的,就url里的几个加密参数了

1.开始分析url的加密参数

分析发现,请求头里我去掉任何一个参数,都会提示是签名验证失败

这种搞多了你就知道,就是用的整个请求头的hashmap作为原始字符加密,然后带上加密参数一起请求的,某宝就是这样的,你懂的,不展开说了

ok,开始代码分析

发现有数字壳,一顿操作后,一搜索其中一个关键词,我擦,这么简单?

准备用frida 跟下:

有对抗,刺激,终于不是那种很简单的了,突然有点兴趣,顺便说一句,我这个frida已经是魔改过的版本了,还能检测到,还是有点东西

(有关这个反调试对抗的,可以私信我,给你推荐一个大佬,是这方面的专家)

现在去做反调试分析已经来不及了,换用xposed,这里我选用lsposed

1.搭建xsposed环境

怎么配置lsposed到手机上我就不说了,网上资源太多了,之前也有大概的提过

打开as后,新建一个项目,选择empty activity之后,开始如下配置:

1.1. 配置xml

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.geek.myhook">    <uses-permission android:name="android.permission.INTERNET" />    <application        android:allowBackup="true"        android:icon="@mipmap/ic_launcher"        android:label="@string/app_name"        android:roundIcon="@mipmap/ic_launcher_round"        android:supportsRtl="true"        android:theme="@style/Theme.Myhook">        <activity android:name=".MainActivity" android:enabled="true">            <intent-filter>                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <meta-data            android:name="xposedmodule"            android:value="true" />        <meta-data            android:name="xposedminversion"            android:value="88+" />        <meta-data            android:name="xposeddescription"            android:value="hook工具组--:geekbyte" />    </application>
</manifest>

1.2. 在gradle依赖里添加如下

compileOnly 'de.robv.android.xposed:api:82'compile 'com.alibaba:fastjson:2.0.15.android'

添加完,点右上角的sync now,等待一会儿

1.3. 邮件app项目,创建一个assets

1.4. assets文件夹,添加文件xposed_init

这个文件名固定为【xposed_init】,表示是xposed的入口文件,内容写上你的自己的类名(这个类名就是自己编写的hook类,必须保证类名一致)

也可以编写完hook类后再执行此步,我习惯先执行这一步,免得后面开发完忘记这一步

2.编写hook逻辑

在java文件夹,右键,创建 【Java class】,名字随意,但要跟xposed_init的一致,不然无法进入hook逻辑

创建完就如上,后面写上implements IX  tab键补充选如下

然后放到标红的地方,alt+enter键,选择补齐方法:

然后就会自动出现如下

再写个if逻辑,只对目标app执行hook操作:

里面的就是你的逻辑代码了

因为这个app是有壳的,所以要先用下面的代码,找到实际的classloader

Class<?> ActivityThread = XposedHelpers.findClass("android.app.ActivityThread", lpparam.classLoader);            XposedBridge.hookAllMethods(ActivityThread, "performLaunchActivity", new XC_MethodHook() {                @Override                protected void afterHookedMethod(MethodHookParam param) throws Throwable {                    super.afterHookedMethod(param);                    Object mInitialApplication = (Application) XposedHelpers.getObjectField(param.thisObject, "mInitialApplication");                    ClassLoader realClassloader = (ClassLoader) XposedHelpers.callMethod(mInitialApplication, "getClassLoader");                                          // 实际的逻辑
                }            });

才能进行hook逻辑

好的,环境整好了

3.在搭建环境的同时

unpack完看就是这些,卧槽,这个混淆有点东西啊

4.开始分析

还是刚才搜到的这里 ,

根据调试,发现并没有走这个逻辑。有点某宝的意思啊,直接能搜到,静态看代码逻辑感觉也很像,一hook发现并没有走到这里

还是看下抓包工具的结果

翻了几页,发现那几个加密参数就没变过,但也不敢托大,我又搜了下url的,因为这几个参数是跟url拼接的,搜【user_search】

最后跟逻辑跟到这里:

5.写hook代码

先找到这个两个类:

hook那两个类:

安装到手机上,打开lsposed,点下这个

然后杀死目标app,再启动目标app,

as里的日志,选到你安装的手机,然后我习惯这么配置:

app往下拉,翻个页,日志就打印出来了,下面这个url就是我们的目标url

但是他还没拼接好,说明那几个加密参数还在后面的逻辑,继续看:

跳了好几层get,然后到这里

再借助lsposed,发现,实际的拼接在这里,

hook的日志显示,就是这个checkrequest方法做了url拼接,所以逻辑就是这里了

刺激

再看这个方法的参数:

我感觉这个caller的对象嫌疑很大,光标放上去,看到他就调用了两次自己的方法,直接对这两个方法hook下:

对比下,这个不太好看

放到文本编辑器里,对比,

其他都有了,就最后4个没有,那这加密还在后面的逻辑

打下调用栈看看:

Log.e(TAG, "Stack:", new Throwable("Stack dump"));

也没发现啥有用的

这就尴尬了,继续看逻辑,光标点中【url】,看跟url有关的操作,发现了如下这个:

感觉有点可疑,追进去:

卧槽,进到了native,hook验证下,果然是了:

把它拿出来看看,果然是,传的第二个参数是没有加密的url,返回就是有加密的url了

终于遇到个加密在native层的浇油app了,

6.native层分析

ok,进入native层分析了,根据app展示的

打开ida小姐姐,拖进libutil.so,很快就找到这个方法,静态注册的,挺好

这个是ts:

这个是ckey,dno

这里是h:

先按下键盘的反斜杠【\】,看着好点了:

再把参数改下,光标选中a1,按键盘【y】,改为【JNIEnv*】

选择ok之后,直接就看到ts的生成了,虽然猜到了是时间戳,但是有这个就100%确定了:

ckey也基本肉眼可见:

后面的几个也差不多,就省略了。

刺激!!!

我觉得挺简单的,为什么这么说,因为每次我打开,生成的加密参数都是固定的,也就是我如果为了拿数据的话,完全可以写死。

具体的算法还原细节,这里就不展开了,感兴趣的可以去看看白龙,龙哥的文章的算法还原部分。

验证

这都不用怀疑,肯定是可以的

结语

好啦,今天的系列完成,我截图的相册里还有好几张,换句话,后面还有好几个浇油app案例

geekbyte

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值