吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 24015|回复: 181
收起左侧

[Android 原创] 【举一反三】无限白嫖某加速器新手教程

    [复制链接]
正己 发表于 2021-3-30 15:48
本帖最后由 正己 于 2021-4-1 14:51 编辑

ps:没有成品,软件我已经删了

前言:


前段时间,我哥让我分析一款加速器,我一看,好家伙,又是开局送三天的货色,这不白嫖一波?思路参考芽衣大佬,代码是偷鸭鸭大佬的,你们要感谢的话,就感谢两位大佬提供的白嫖方法吧

过程:


一、抓包分析

首先我在模拟器抓包看了一下数据,从包里不难看出软件在启动的时候会发送一段post请求,其中的imsi,imei,androidid等一般都是来判断是否是新用户的依据。
QQ截图20210329151638.png

二、apk分析

接着打开安装包,搜索imsi关键词,根据包名筛选原则,点击第一个进入,很明显这里就是我们要找的地方,imsi,imei,androidId,versionName等跟我们刚才抓包的信息一致,接着转java看一下
QQ图片20210330150427.jpg QQ图片20210330150430.jpg
代码如下(我这里只截取了部分代码):

JSONObject jSONObject = new JSONObject();
            try {
                jSONObject.put("imsi", str);
                jSONObject.put("imei", str2);
                jSONObject.put("androidId", o(context));
                jSONObject.put("versionName", str5);
                jSONObject.put("versionCode", i2);
                jSONObject.put("model", str7);
                jSONObject.put("versionApi", i3);
                jSONObject.put("versionRelease", str9);
                jSONObject.put("username", string);
                jSONObject.put("password", string2);
                jSONObject.put("phoneName", str4);
                jSONObject.put("jerryali", d());
                jSONObject.put("channel", f2);
                jSONObject.put("language", language);
                jSONObject.put("pkgname", u);
                jSONObject.put("installedgoogleplay", g(context));
                return jSONObject;

很明显这里会返回一个json对象,我们可以打印一下log,对这些数据再进行甄别,看看真正的关键数据的哪一个,这里我们选择用mt的log注入(用其他注入也可以,自行选择),不会mt注入的可以参考我以前写的帖子,点击这里跳转。注入关键如下:
QQ图片20210330150433.jpg
根据我们打印出来的数据和抓包的数据进行对比,imsi和imei可以为未知,而androidId才是我们真正需要改的数据,并且它是一串随机的十六位字符串,那么这里就可以借用小白鸭大佬的代码(省去我们再造轮子的功夫),具体代码如下:

import android.content.Context;
import android.content.SharedPreferences;

import java.util.Date;

import static android.content.Context.MODE_PRIVATE;

public class Utils {
    public static SharedPreferences sp;

    public static String getRandom(Context context) {

        sp = context.getSharedPreferences("Config", MODE_PRIVATE);
        String id;
        int a = 16;
        String KeyString = "123456789abcdef";
        int len = KeyString.length();
        StringBuffer sb = new StringBuffer();
        for(int i=0;i<a;i++){
            sb.append(KeyString.charAt((int) Math.round(Math.random()*(len-1))));
        }
        id =sp.getString("id",KeyString);
        if(needupdate()){

            id = sb.toString();

            sp.edit().putString("id",id).commit();
        }
        return id;
    }

    public static boolean needupdate(){

        Date date = new Date(System.currentTimeMillis());

        //以十二小时为界限,可自行更改。

        if(sp.contains("temp")&&date.getTime()-sp.getLong("temp",date.getTime())<43200000)return false;

        sp.edit().putLong("temp", date.getTime()).commit();

        return true;

    }

}

转smali代码:

.class public LlittleWhiteDuck/Utils;
.super Ljava/lang/Object;
.source "Utils.java"

# static fields
.field public static sp:Landroid/content/SharedPreferences;

# direct methods
.method public constructor <init>()V
    .registers 1

    .line 10
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    return-void
.end method

.method public static getRandom(Landroid/content/Context;)Ljava/lang/String;
    .registers 8

    const-string v0, "Config"

    const/4 v1, 0x0

    .line 15
    invoke-virtual {p0, v0, v1}, Landroid/content/Context;->getSharedPreferences(Ljava/lang/String;I)Landroid/content/SharedPreferences;

    move-result-object p0

    sput-object p0, LlittleWhiteDuck/Utils;->sp:Landroid/content/SharedPreferences;

    .line 20
    new-instance p0, Ljava/lang/StringBuffer;

    invoke-direct {p0}, Ljava/lang/StringBuffer;-><init>()V

    :goto_e
    const/16 v0, 0x10

    const-string v2, "123456789abcdef"

    if-ge v1, v0, :cond_2f

    .line 22
    invoke-static {}, Ljava/lang/Math;->random()D

    move-result-wide v3

    const/16 v0, 0xe

    int-to-double v5, v0

    invoke-static {v5, v6}, Ljava/lang/Double;->isNaN(D)Z

    mul-double v3, v3, v5

    invoke-static {v3, v4}, Ljava/lang/Math;->round(D)J

    move-result-wide v3

    long-to-int v0, v3

    invoke-virtual {v2, v0}, Ljava/lang/String;->charAt(I)C

    move-result v0

    invoke-virtual {p0, v0}, Ljava/lang/StringBuffer;->append(C)Ljava/lang/StringBuffer;

    add-int/lit8 v1, v1, 0x1

    goto :goto_e

    .line 24
    :cond_2f
    sget-object v0, LlittleWhiteDuck/Utils;->sp:Landroid/content/SharedPreferences;

    const-string v1, "id"

    invoke-interface {v0, v1, v2}, Landroid/content/SharedPreferences;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;

    move-result-object v0

    .line 25
    invoke-static {}, LlittleWhiteDuck/Utils;->needupdate()Z

    move-result v2

    if-eqz v2, :cond_4e

    .line 27
    invoke-virtual {p0}, Ljava/lang/StringBuffer;->toString()Ljava/lang/String;

    move-result-object v0

    .line 29
    sget-object p0, LlittleWhiteDuck/Utils;->sp:Landroid/content/SharedPreferences;

    invoke-interface {p0}, Landroid/content/SharedPreferences;->edit()Landroid/content/SharedPreferences$Editor;

    move-result-object p0

    invoke-interface {p0, v1, v0}, Landroid/content/SharedPreferences$Editor;->putString(Ljava/lang/String;Ljava/lang/String;)Landroid/content/SharedPreferences$Editor;

    move-result-object p0

    invoke-interface {p0}, Landroid/content/SharedPreferences$Editor;->commit()Z

    :cond_4e
    return-object v0
.end method

.method public static needupdate()Z
    .registers 7

    .line 36
    new-instance v0, Ljava/util/Date;

    invoke-static {}, Ljava/lang/System;->currentTimeMillis()J

    move-result-wide v1

    invoke-direct {v0, v1, v2}, Ljava/util/Date;-><init>(J)V

    .line 38
    sget-object v1, LlittleWhiteDuck/Utils;->sp:Landroid/content/SharedPreferences;

    const-string v2, "temp"

    invoke-interface {v1, v2}, Landroid/content/SharedPreferences;->contains(Ljava/lang/String;)Z

    move-result v1

    if-eqz v1, :cond_2b

    invoke-virtual {v0}, Ljava/util/Date;->getTime()J

    move-result-wide v3

    sget-object v1, LlittleWhiteDuck/Utils;->sp:Landroid/content/SharedPreferences;

    invoke-virtual {v0}, Ljava/util/Date;->getTime()J

    move-result-wide v5

    invoke-interface {v1, v2, v5, v6}, Landroid/content/SharedPreferences;->getLong(Ljava/lang/String;J)J

    move-result-wide v5

    sub-long/2addr v3, v5

    const-wide/32 v5, 0x2932e00

    cmp-long v1, v3, v5

    if-gez v1, :cond_2b

    const/4 v0, 0x0

    return v0

    .line 40
    :cond_2b
    sget-object v1, LlittleWhiteDuck/Utils;->sp:Landroid/content/SharedPreferences;

    invoke-interface {v1}, Landroid/content/SharedPreferences;->edit()Landroid/content/SharedPreferences$Editor;

    move-result-object v1

    invoke-virtual {v0}, Ljava/util/Date;->getTime()J

    move-result-wide v3

    invoke-interface {v1, v2, v3, v4}, Landroid/content/SharedPreferences$Editor;->putLong(Ljava/lang/String;J)Landroid/content/SharedPreferences$Editor;

    move-result-object v0

    invoke-interface {v0}, Landroid/content/SharedPreferences$Editor;->commit()Z

    const/4 v0, 0x1

    return v0
.end method

这里讲一下如何把这段smali插入apk中,让小白听得明白些,首先dex++打开dex,在浏览界面长按任何一个路径,点击添加,包名填littleWhiteDuck,类名填Utils,然后确定,最后把上面的smali代码复制粘贴即可。

最后,我们需要再分析一下在哪里插入调用代码,根据上面的信息,我们把目标锁定在Lcc/dingnet/和谐/a/a;这个类中,已知代码中会调用Lcc/dingnet/和谐/a/a;类中的o方法获得androidId并put进json对象中,所以我们只需要将

invoke-static {p0}, Lcc/dingnet/和谐/a/a;->o(Landroid/content/Context;)Ljava/lang/String;

替换成

invoke-static {p0}, LlittleWhiteDuck/Utils;->getRandom(Landroid/content/Context;)Ljava/lang/String;

QQ图片20210330151450.jpg

最后:

我们来测试一下效果,最好是在打了log的情况下来对比会比较明显。结果很成功!
QQ图片20210330150436.jpg QQ图片20210330150438.jpg

免费评分

参与人数 64吾爱币 +50 热心值 +58 收起 理由
jolin7714 + 1 + 1 谢谢@Thanks!
PMcf + 1 + 1 热心回复!
十一七 + 1 + 1 正己大佬tttqqqqllllll!!!
Seasvan + 1 + 1 谢谢@Thanks!
寒蝉鸣泣之时 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
wggg + 1 + 1 鼓励转贴优秀软件安全工具和文档!
浅笑如昔丶 + 1 + 1 挺好的学习到了
Tony2009 + 1 意思有
wenshui + 1 + 1 我很赞同!
心烦Skr + 1 + 1 我很赞同!
未来路 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
jyys1860 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
zh94700 + 1 我很赞同!
星云零落 + 1 + 1 我很赞同!
hupan106575 + 1 + 1 我很赞同!
剑舞迷眼 + 1 + 1 谢谢@Thanks!
pdcba + 1 + 1 用心讨论,共获提升!
那样的纯粹 + 1 + 1 谢谢@Thanks!
p07470z + 1 + 1 谢谢@Thanks!
ql521 + 1 + 1 好东西
zjun777 + 1 + 1 谢谢@Thanks!
北冥鱼 + 1 我很赞同!
ldx129 + 1 谢谢@Thanks!
fCd9H#TjlaMBPSa + 1 + 1 谢谢@Thanks!
5n0w + 1 + 1 我很赞同!
WhalenFall + 1 谢谢@Thanks!
冰蚌 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
黑丝小白 + 1 + 1 我很赞同!
老何i + 1 还是没搞懂,可能我太麻瓜了
易请惜 + 1 + 1 谢谢@Thanks!
pringzl + 1 + 1 我很赞同!
SakuraOuKa + 1 + 1 我很赞同!
反正不是我 + 1 热心回复!
小新xin + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
江边之鸟 + 1 + 1 我很赞同!
hdksf1982 + 1 + 1 谢谢@Thanks!
古尘5786 + 1 鼓励转贴优秀软件安全工具和文档!
liujunb + 1 + 1 谢谢@Thanks!
siidney + 1 + 1 我很赞同!
keepon + 1 我很赞同!
cain256 + 1 + 1 我很赞同!
JimOvO + 1 热心回复!
sherlockouo + 1 热心回复!
安云 + 1 我很赞同!
俏皮de同桌 + 1 + 1 用心讨论,共获提升!
u009009 + 1 用心讨论,共获提升!
24K叶生 + 1 用心讨论,共获提升!
混曌大魔王 + 1 + 1 我很赞同!太厉害了吧
Swift_ + 1 + 1 用心讨论,共获提升!
daxia2002 + 1 + 1 不错,白嫖成功
上大人孔乙己 + 1 用心讨论,共获提升!
zyp96 + 1 + 1 我很赞同!
maonanbei + 1 我很赞同!
灵魂歌手 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
天青色丨 + 1 我很赞同!
woshicp + 1 我很赞同!
唐小样儿 + 1 + 1 我很赞同!
偶尔.c + 1 + 1 我很赞同!
lyl610abc + 1 + 1 我很赞同!
奈空林 + 1 + 1 我很赞同!
JoJo112233 + 1 + 1 我很赞同!
0基础程序员 + 1 + 1 我很赞同!
shaoshen + 1 我很赞同!
littleWhiteDuck + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

xczero 发表于 2021-3-30 16:06
黑科技,但是已经花钱买了几年的了
indian806 发表于 2021-3-30 16:05
caogengok 发表于 2021-4-3 11:20
谢谢  楼主 我搞好了  哈哈 以后能免费一直用

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
等待黎明 + 1 + 1 大佬,可以分享一下吗

查看全部评分

偶尔.c 发表于 2021-3-30 16:22

这不整个原包?
aakk007 发表于 2021-3-30 16:10
直接上正品?
lyl610abc 发表于 2021-3-30 17:21
不怎么玩安卓的臭弟弟前来凑个热闹
 楼主| 正己 发表于 2021-3-30 15:49
沙发沙发
wuai6757620 发表于 2021-3-30 16:03
有点像云帆。。。
zlf2020999 发表于 2021-3-30 16:06
认真学习,谢谢分享!!
littleWhiteDuck 发表于 2021-3-30 16:07
学习一下

免费评分

参与人数 1吾爱币 +2 热心值 +1 收起 理由
正己 + 2 + 1 还是鸭鸭大佬牛逼

查看全部评分

吾爱泼姐 发表于 2021-3-30 16:10
本来想学习的,看着这一堆数据我就腿软了。
大佬最开始是怎么学的呢?
忘掉过去 发表于 2021-3-30 16:11
什么名字??
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 16:21

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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