首页
社区
课程
招聘
[原创]安卓协议逆向之frida hook百例二
2022-11-14 14:18 24240

[原创]安卓协议逆向之frida hook百例二

2022-11-14 14:18
24240

安卓协议逆向之frida hook百例二

各位大佬好 我是一位往Android安全方向走的小菜鸟一枚 目前也是很努力在学 这个系列也会一直更新 记录自己的学习过程 大佬多担待担待 有出错的地方也帮忙指出

frida配置

1
2
3
1. pycharm(python,JavaScript)
2.安卓模拟器(觉得哪个好用就用哪个)
3.frida配置(frida是配置在python的)

分析工具

1
2
3
4
5
1.jadx-gui (反编译工具)
2.ApkScan-PKID(查壳工具)
3.反射大师(脱壳工具)
4.fiddler(抓包工具)
(这期就差不多这么多工具 后面用到其他工具会贴出来)

目标app

1
2
LS4tLi0tLi4uLi0tLS0tIC0uLS4tLS4uLi4tLS0tLSAtLS0uLi0uLi0uLS0uLS0=
(题目:base对莫尔斯的升华)

分析过程

刨析内容

此处为fd抓的password login提交

 

 

提交的data

1
Encrypt 就一个那好吧

这时可以想一下 我们是password登陆的 那他必然会提交username和password

encrypt分析

该说不说 是骡子是马直接丢jadx

加壳是吧小伙子 那咋办嘛 反射他!
(这里提一嘴,使用反射大师先用xp激活----然后打开反射大师勾选要射的apk----进入软件----当前ACTIVITY----长按写出DEX----修复Magic----确定就行了----然后复制下文件路径自己找 )

接下来 搜一波Encrypt先

其实你搜Encrypt有很多结果 我找hook点也找了10多分钟 接下来看图吧 把大概分析出来的hook点跟大家说

 

 

 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
###    md5的hook方法
Java.perform(function (){
    Java.use('com.dodonew.online.util.Utils').md5.implementation=function (data){
 
        console.log(data);
        var res = this.md5(data)
        console.log(res)
       return res;///劫持完代码看一下怎么个事就给你反回去
             }
    );
 }

1
2
3
4
5
6
7
8
9
10
11
12
####    encodeDesMap的hook方法
Java.perform(function (){
          var RequestUtil=Java.use('com.dodonew.online.http.RequestUtil');
         RequestUtil.encodeDesMap.overload('java.lang.String','java.lang.String','java.lang.String').implementation=function (data,data2,data3){
        console.log('\ndata=',data,'\ndata2=',data2,'\ndata3=',data3);
       var ees =this.encodeDesMap(data,data2,data3)
        console.log(ees)
       return this.encodeDesMap(data,data2,data3);///劫持完代码看一下怎么个事就给你反回去
      return ees
     }
         }
    );
OK 此时 看到这里的各位下面的东西我嚼碎了给各位呈现 记得给评分 点赞 评论哦

 

 

上面这张图是我搜来的 可以看一下 我们继续往下讲

好了现在明文 key iv 加密方式都知道了 我们尝试一下看看是不是我们要的结果

这是我们哪里错了 我们再回去看看

 

OK 成功 至此分析过程已经完毕

结束语

例子很难找 这个帖子的例子是一个比较经典的例子 也有其他人做过 但是之前这个apk还没加壳 这次加了个壳 我在昨天做完后 今天就写帖了
感谢各位的阅读 学逆向很累 但是喜欢的事还是得坚持下去 后面还是输出更好的例子给大家学习 我个人也在很努力的学习 跟大家一共共进步

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞7
打赏
分享
最新回复 (8)
雪    币: 7803
活跃值: (21241)
能力值: ( LV12,RANK:550 )
在线值:
发帖
回帖
粉丝
随风而行aa 10 2022-11-14 20:42
2
0
支持一下
雪    币: 58
活跃值: (269)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gwljt 2022-11-16 15:09
3
0

加上 app 的版本号会更好些哦

最后于 2022-11-16 15:09 被gwljt编辑 ,原因:
雪    币: 172
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
zz123123 2022-11-20 16:17
4
0
加油加油!
雪    币: 58
活跃值: (269)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gwljt 2022-11-23 14:38
5
0

模拟登录代码:

from pyDes import CBC, PAD_PKCS5
import time
import base64
import hashlib
import requests

from pyDes import des

"""
加密模式:DES/CBC/pkcs5padding
需pip先安装依赖包
> pip install pyDes
"""

'''
验证:
input
{"equtype":"ANDROID","loginImei":"Android354360070284377","sign":"A8AADB717E1F56B325B3687390C6D069","timeStamp":"1669179310106","userPwd":"edcrfv","username":"13812314569"}


output:
NIszaqFPos1vd0pFqKlB42Np5itPxaNH//FDsRnlBfgL4lcVxjXii3Rz/9qjO8lywAYy6K8YcoQQaOeqZllR9aQXPwOWajsJhvKph1pq0iyaNSw3afbO9E7kophIxKQfL0XlEWx8lfdK6fYvf7zMIP6Lz3UAAgvqw/FmjRRwynKcs8cOxBoHTiP8z0cXK6S8/SiRnPFjHrYy2YyGyxlQziNAC2XVutFoMpbzwE5prao=

'''


def get_md5(s):
    m = hashlib.md5(s.encode())
    return m.hexdigest()

# com.autohome.ahkit.utils.SecurityUtil.iv
iv = '32028092'

import json
# c3d26dca86259782
key = '65102933'
key = get_md5(key)
# 这里需要转换成byte的hex值
# fromhex函数,用来将hexstr导入bytes对象,相当于用hexstr来创建bytes对象。
key = bytes.fromhex(key)


def fill_timeStamp():
    config = {'equtype': 'ANDROID',
    'loginImei': 'Android354360070284377',
    'userPwd': 'edcrfv',
    'timeStamp':str(int(time.time()* 1000)),
    # 'timeStamp':'1669179310106', # 验证是否正确
    'username': '13812314569'}
    return config



def fill_sign(config):
    s = 'equtype={equtype}&loginImei={loginImei}&timeStamp={timeStamp}&userPwd={userPwd}&username={username}&key=sdlkjsdljf0j2fsjk'
    s = s.format(**config)

    sign = get_md5(s).upper()
    config['sign'] = sign

    return config

def get_json_str():
    config = fill_sign(fill_timeStamp())
    # json后 , separators=(',', ':')=> 删除 ,与:之间是有空格的
    # json后 , sort_keys=True=> 按字典的key排序
    return json.dumps(config, sort_keys=True, separators=(',', ':'))

def des_encrypt(s, key=key, iv=iv):
    """
    DES 加密
    :param s: 原始字符串
    :param key: 加密密钥24位
    :return: 加密后字符串, base64
    """
    key8 = key[:8]
    k = des(key8, CBC, iv, pad=None)
    en = k.encrypt(s.encode(), padmode=PAD_PKCS5)
    return base64.b64encode(en).decode()

# print(des_encrypt(get_json_str()))


header = { 
    "Host": "api.dodovip.com",
    "cache-control": "public, max-age=0" , 
    "content-type": "application/json; charset=utf-8",
    "user-agent": "Dalvik/2.1.0 (Linux; U; Android 10; SM-N9600 Build/QP1A.190711.020"
}

def login():
    url = "http://api.dodovip.com/api/user/login"

    data = {
        'Encrypt': des_encrypt(get_json_str())
    }
    res = requests.post(url,headers=header,json=data)
    print(res.text)

login()

雪    币: 172
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
liukuo362573 2022-11-24 13:49
6
0

想知道加密解密用的软件叫啥名字。

最后于 2022-11-24 15:15 被liukuo362573编辑 ,原因:
雪    币: 58
活跃值: (269)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gwljt 2022-11-27 12:52
7
0
liukuo362573 想知道加密解密用的软件叫啥名字。
WT-JS_DEBUG
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_cwmkvryi 2022-11-30 16:02
8
0
请问一下作者遇到app监测root 无法用反射大师获取到dex 该怎么办
游客
登录 | 注册 方可回帖
返回