首页
社区
课程
招聘
[原创]简单分析三星词典机型限制以及解除
发表于: 2014-9-18 10:35 25006

[原创]简单分析三星词典机型限制以及解除

2014-9-18 10:35
25006

前置知识我就不说了,我也是个菜鸟,只能看懂if-nez if-eqz而已.
软件提取自三星SM-G3858

首先提取需要的文件
第一次提取的文件共有
/system/app/DioDict3B 词典数据库
/system/app/DioDict3_for_Android_Phone_Samsung_Chn.apk 词典主程序

但是装到Nexus5中提示"不支持这个型号"


现在我们来分析代码,首先反编译源程序

由于源程序是运行在三星SM-G3858上的,
同时验证了一下文件安装在同类型三星机器是可以使用的,所以理论上该APK验证的是build.prop中的信息
通过查询G3858 build.prop文件可以知道ro.product.model=SM-G3858
现在我们通过Search And Replace搜索这个关键词

得到的结果为
正在处理文件: D:\data_transfer\G3858\systemXXXX\DioDict3_for_Android_Phone_Samsung_Chn\smali\com\diotek\diodict3\dependency\SamsungChn.smali
行号 541 -     const-string v7, "SM-G3858"
行号 649 -     const-string v7, "SM-G3858"
找到 2  处。
搜索了 1597 个文件,找到 2 处在 1 个文件中

这样的话我们来分析smali\com\diotek\diodict3\dependency\SamsungChn.smali这个文件
一共有两段代码有意思
第一段

.method public checkDeviceVendor()Z
    .locals 2

    .prologue
    .line 37
    sget-object v0, Landroid/os/Build;->MANUFACTURER:Ljava/lang/String;   //获取build.prop中的 MANUFACTURER的字符串存到寄存器v0

    const-string v1, "Samsung"  //将字符串 Samsung存到 v1中

    invoke-virtual {v0, v1}, Ljava/lang/String;->equalsIgnoreCase(Ljava/lang/String;)Z    //比较v0与v1

    move-result v0   //移动结果给v0

    if-nez v0, :cond_0   //不等跳转cond_0 等于就继续

    sget-object v0, Landroid/os/Build;->BRAND:Ljava/lang/String;  //获取build.prop中的BRAND字符串存到寄存器v0

    const-string v1, "Samsung"  //将字符串 Samsung存到寄存器v1中

    invoke-virtual {v0, v1}, Ljava/lang/String;->equalsIgnoreCase(Ljava/lang/String;)Z  //比较v0与v1

    move-result v0  //将结果移动到v0中

    if-eqz v0, :cond_1  //如果相等 跳转cond_1

    .line 38
    :cond_0
    const/4 v0, 0x1

    .line 39
    :goto_0
    return v0

    :cond_1
    const/4 v0, 0x0

    goto :goto_0
.end method
# virtual methods
.method public checkDeviceVendor()Z
    .locals 2

    .prologue
    .line 37
    sget-object v0, Landroid/os/Build;->MANUFACTURER:Ljava/lang/String; //获取MANUFACTURER字符串给v0

    const-string v1, "Samsung1"   //这里我把字符串改为 Samsung1

    invoke-virtual {v0, v1}, Ljava/lang/String;->equalsIgnoreCase(Ljava/lang/String;)Z //比较 v0 v1

    move-result v0 //结果移动到v0

    if-eqz v0, :cond_0 // 等于跳转v0 [实际上怎么可能有工厂名为Samsung1的呢? 不可能,那这里永久为真了]

    sget-object v0, Landroid/os/Build;->BRAND:Ljava/lang/String;  //获取BRAND存入寄存器v0

    const-string v1, "Samsung1"  //将Samsung1存入寄存器v1

    invoke-virtual {v0, v1}, Ljava/lang/String;->equalsIgnoreCase(Ljava/lang/String;)Z   //比较v0 v1

    move-result v0  //结果移动到v0

    if-nez v0, :cond_1  //如果不等则跳到cond_1 [实际上也不可能有品牌为Samsung1呢? 不可能有? 那就永久跳转到cond_1了 ]

    .line 38
    :cond_0
    const/4 v0, 0x1

    .line 39
    :goto_0
    return v0

    :cond_1
    const/4 v0, 0x0

    goto :goto_0
.end method
.method public checkModelName()Z
    .locals 11

    .prologue
    const/4 v10, 0x4

    const/4 v9, 0x3

    const/4 v8, 0x2

    const/4 v4, 0x1

    const/4 v5, 0x0

    .line 44
    sget-object v0, Landroid/os/Build;->MODEL:Ljava/lang/String;

    .line 51
    .local v0, "buildModel":Ljava/lang/String;
    const/16 v6, 0x17

    new-array v3, v6, [Ljava/lang/String;

    const-string v6, "SCH-I959"

    aput-object v6, v3, v5

    const-string v6, "GT-N7102i"

    aput-object v6, v3, v4

    const-string v6, "GT-I9268"

    aput-object v6, v3, v8

    const-string v6, "GT-I9500"

    aput-object v6, v3, v9

    const-string v6, "GT-I9502"

    aput-object v6, v3, v10

    const/4 v6, 0x5

    const-string v7, "GT-I9508"

    aput-object v7, v3, v6

    const/4 v6, 0x6

    const-string v7, "GT-I9508C"

    aput-object v7, v3, v6

    const/4 v6, 0x7

    const-string v7, "SCH-I869"

    aput-object v7, v3, v6

    const/16 v6, 0x8

    const-string v7, "SCH-W789"

    aput-object v7, v3, v6

    const/16 v6, 0x9

    const-string v7, "GT-S6818"

    aput-object v7, v3, v6

    const/16 v6, 0xa

    const-string v7, "GT-S6818V"

    aput-object v7, v3, v6

    const/16 v6, 0xb

    const-string v7, "GT-I8558"

    aput-object v7, v3, v6

    const/16 v6, 0xc

    const-string v7, "SM-G3819D"

    aput-object v7, v3, v6

    const/16 v6, 0xd

    const-string v7, "GT-I9128I"

    aput-object v7, v3, v6

    const/16 v6, 0xe

    const-string v7, "GT-S6812C"

    aput-object v7, v3, v6

    const/16 v6, 0xf

    const-string v7, "GT-I9158"

    aput-object v7, v3, v6

    const/16 v6, 0x10

    const-string v7, "SM-C101"

    aput-object v7, v3, v6

    const/16 v6, 0x11

    const-string v7, "GT-N7108D"

    aput-object v7, v3, v6

    const/16 v6, 0x12

    const-string v7, "GT-I9508C"

    aput-object v7, v3, v6

    const/16 v6, 0x13

    const-string v7, "SM-G3509"

    aput-object v7, v3, v6

    const/16 v6, 0x14

    const-string v7, "GT-I9128E"

    aput-object v7, v3, v6

    const/16 v6, 0x15

    const-string v7, "SM-G3508"

    aput-object v7, v3, v6

    const/16 v6, 0x16

    const-string v7, "SCH-I699I"

    aput-object v7, v3, v6

    .line 90
    .local v3, "modelNamesToDownloadTTS":[Ljava/lang/String;
    const/4 v1, 0x0

    .local v1, "i":I
    :goto_0
    array-length v6, v3

    if-ge v1, v6, :cond_0

    .line 91
    aget-object v6, v3, v1

    invoke-virtual {v6, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v6

    if-eqz v6, :cond_1

    .line 92
    iput-boolean v5, p0, Lcom/diotek/diodict3/dependency/SamsungChn;->mUseSamSungTTS:Z

    .line 97
    :cond_0
    const/16 v6, 0x45

    new-array v2, v6, [Ljava/lang/String;

    const-string v6, "SCH-I959"

    aput-object v6, v2, v5

    const-string v6, "GT-N7102i"

    aput-object v6, v2, v4

    const-string v6, "GT-I9268"

    aput-object v6, v2, v8

    const-string v6, "GT-I9500"

    aput-object v6, v2, v9

    const-string v6, "GT-I9502"

    aput-object v6, v2, v10

    const/4 v6, 0x5

    const-string v7, "GT-I9508"

    aput-object v7, v2, v6

    const/4 v6, 0x6

    const-string v7, "GT-I9508C"

    aput-object v7, v2, v6

    const/4 v6, 0x7

    const-string v7, "SCH-I869"

    aput-object v7, v2, v6

    const/16 v6, 0x8

    const-string v7, "SCH-W789"

    aput-object v7, v2, v6

    const/16 v6, 0x9

    const-string v7, "GT-S6818"

    aput-object v7, v2, v6

    const/16 v6, 0xa

    const-string v7, "GT-S6818V"

    aput-object v7, v2, v6

    const/16 v6, 0xb

    const-string v7, "GT-I8558"

    aput-object v7, v2, v6

    const/16 v6, 0xc

    const-string v7, "SM-G3819D"

    aput-object v7, v2, v6

    const/16 v6, 0xd

    const-string v7, "GT-I9128I"

    aput-object v7, v2, v6

    const/16 v6, 0xe

    const-string v7, "GT-S6812C"

    aput-object v7, v2, v6

    const/16 v6, 0xf

    const-string v7, "GT-I9158"

    aput-object v7, v2, v6

    const/16 v6, 0x10

    const-string v7, "SM-C101"

    aput-object v7, v2, v6

    const/16 v6, 0x11

    const-string v7, "GT-N7108D"

    aput-object v7, v2, v6

    const/16 v6, 0x12

    const-string v7, "GT-I9508C"

    aput-object v7, v2, v6

    const/16 v6, 0x13

    const-string v7, "SM-N9009"

    aput-object v7, v2, v6

    const/16 v6, 0x14

    const-string v7, "SM-G3509"

    aput-object v7, v2, v6

    const/16 v6, 0x15

    const-string v7, "GT-I9128E"

    aput-object v7, v2, v6

    const/16 v6, 0x16

    const-string v7, "SM-G3812"

    aput-object v7, v2, v6

    const/16 v6, 0x17

    const-string v7, "SM-G3502U"

    aput-object v7, v2, v6

    const/16 v6, 0x18

    const-string v7, "SM-G3502"

    aput-object v7, v2, v6

    const/16 v6, 0x19

    const-string v7, "SM-N9002"

    aput-object v7, v2, v6

    const/16 v6, 0x1a

    const-string v7, "SM-N9006"

    aput-object v7, v2, v6

    const/16 v6, 0x1b

    const-string v7, "SM-N9008"

    aput-object v7, v2, v6

    const/16 v6, 0x1c

    const-string v7, "SM-G3508"

    aput-object v7, v2, v6

    const/16 v6, 0x1d

    const-string v7, "SM-W2014"

    aput-object v7, v2, v6

    const/16 v6, 0x1e

    const-string v7, "SCH-I699I"

    aput-object v7, v2, v6

    const/16 v6, 0x1f

    const-string v7, "GT-I8580"

    aput-object v7, v2, v6

    const/16 v6, 0x20

    const-string v7, "GT-S7568I"

    aput-object v7, v2, v6

    const/16 v6, 0x21

    const-string v7, "GT-S7562C"

    aput-object v7, v2, v6

    const/16 v6, 0x22

    const-string v7, "SM-G3818"

    aput-object v7, v2, v6

    const/16 v6, 0x23

    const-string v7, "SCH-I879E"

    aput-object v7, v2, v6

    const/16 v6, 0x24

    const-string v7, "GT-I9118"

    aput-object v7, v2, v6

    const/16 v6, 0x25

    const-string v7, "SCH-N719U"

    aput-object v7, v2, v6

    const/16 v6, 0x26

    const-string v7, "SM-G7109"

    aput-object v7, v2, v6

    const/16 v6, 0x27

    const-string v7, "SCH-I629"

    aput-object v7, v2, v6

    const/16 v6, 0x28

    const-string v7, "SM-G7108"

    aput-object v7, v2, v6

    const/16 v6, 0x29

    sget-object v7, Landroid/os/Build;->MODEL:Ljava/lang/String;

    aput-object v7, v2, v6

    const/16 v6, 0x2a

    const-string v7, "SM-G3502I"

    aput-object v7, v2, v6

    const/16 v6, 0x2b

    const-string v7, "SM-G3502C"

    aput-object v7, v2, v6

    const/16 v6, 0x2c

    const-string v7, "SM-N9008V"

    aput-object v7, v2, v6

    const/16 v6, 0x2d

    const-string v7, "GT-I9082C"

    aput-object v7, v2, v6

    const/16 v6, 0x2e

    const-string v7, "SM-G3508I"

    aput-object v7, v2, v6

    const/16 v6, 0x2f

    const-string v7, "GT-S7278"

    aput-object v7, v2, v6

    const/16 v6, 0x30

    const-string v7, "GT-I9300I"

    aput-object v7, v2, v6

    const/16 v6, 0x31

    const-string v7, "GT-I9308I"

    aput-object v7, v2, v6

    const/16 v6, 0x32

    const-string v7, "GT-I9152P"

    aput-object v7, v2, v6

    const/16 v6, 0x33

    const-string v7, "SM-G9092"

    aput-object v7, v2, v6

    const/16 v6, 0x34

    const-string v7, "SM-G9098"

    aput-object v7, v2, v6

    const/16 v6, 0x35

    const-string v7, "SM-G3509I"

    aput-object v7, v2, v6

    const/16 v6, 0x36

    const-string v7, "SM-G3502I"

    aput-object v7, v2, v6

    const/16 v6, 0x37

    const-string v7, "GT-S7278U"

    aput-object v7, v2, v6

    const/16 v6, 0x38

    const-string v7, "GT-I9158P"

    aput-object v7, v2, v6

    const/16 v6, 0x39

    const-string v7, "SM-G7106"

    aput-object v7, v2, v6

    const/16 v6, 0x3a

    const-string v7, "SM-G3518"

    aput-object v7, v2, v6

    const/16 v6, 0x3b

    sget-object v7, Landroid/os/Build;->MODEL:Ljava/lang/String;

    aput-object v7, v2, v6

    const/16 v6, 0x3c

    const-string v7, "SM-N9009U"

    aput-object v7, v2, v6

    const/16 v6, 0x3d

    const-string v7, "GT-I9168"

    aput-object v7, v2, v6

    const/16 v6, 0x3e

    const-string v7, "SM-G3508J"

    aput-object v7, v2, v6

    const/16 v6, 0x3f

    const-string v7, "SCH-I679"

    aput-object v7, v2, v6

    const/16 v6, 0x40

    const-string v7, "SM-G7108U"

    aput-object v7, v2, v6

    const/16 v6, 0x41

    const-string v7, "GT-I9507V"

    aput-object v7, v2, v6

    const/16 v6, 0x42

    const-string v7, "GT-S7272C"

    aput-object v7, v2, v6

    const/16 v6, 0x43

    const-string v7, "GT-S7898I"

    aput-object v7, v2, v6

    const/16 v6, 0x44

    const-string v7, "GT-I9168I"

    aput-object v7, v2, v6

    .line 174
    .local v2, "modelNames":[Ljava/lang/String;
    const/4 v1, 0x0

    :goto_1
    array-length v6, v2

    if-ge v1, v6, :cond_3

    .line 175
    aget-object v6, v2, v1

    invoke-virtual {v6, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v6

    if-eqz v6, :cond_2

    .line 179
    :goto_2
    return v4

    .line 90
    .end local v2    # "modelNames":[Ljava/lang/String;
    :cond_1
    add-int/lit8 v1, v1, 0x1

    goto/16 :goto_0

    .line 174
    .restart local v2    # "modelNames":[Ljava/lang/String;
    :cond_2
    add-int/lit8 v1, v1, 0x1

    goto :goto_1

    :cond_3
    move v4, v5

    .line 179
    goto :goto_2
.end method

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 3
支持
分享
最新回复 (10)
雪    币: 114
活跃值: (180)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
通俗易懂,支持~
2014-9-18 13:10
0
雪    币: 1821
活跃值: (1918)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
LZ 土豪,好多机器...
2014-9-18 15:04
0
雪    币: 507
活跃值: (130)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
赞一个,很详细的分析过程~~
checkDeviceVendor()Z
checkModelName()Z
如果是这些是检测是否是三星机型的话,那么直接在方法开始返回true即可。
2014-9-18 17:38
0
雪    币: 215
活跃值: (51)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
鬼哥说的对! 晚上从群里问下!...第一次分析.~
2014-9-18 19:38
0
雪    币: 427
活跃值: (64)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
LZ长大了,快毕业赚钱了
2014-9-19 14:35
0
雪    币: 215
活跃值: (51)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
赚毛啊....越大啥时候开公司? 我去扫地!!!
2014-9-19 15:58
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
真是相当的丧心病狂...
2014-9-27 20:05
0
雪    币: 202
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
很详细,虽然我不怎么看得懂~~~
2014-9-28 07:41
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
怎么破解词典数据文件从内置卡移到外置卡上?
2015-10-4 10:14
0
雪    币: 104
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
你可以提供一下你这个破解的程序下载吗
2018-8-15 22:50
0
游客
登录 | 注册 方可回帖
返回
//