吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 13740|回复: 28
收起左侧

[Android 原创] 无SIM卡下返回SIM卡状态,实现绕过兑换码支付方式的方法,供和我一样的新人参考

  [复制链接]
myoldid 发表于 2015-1-19 22:19
本帖最后由 myoldid 于 2015-1-19 22:24 编辑

前言
游戏名称:奔跑吧 兄弟-跑男来了
游戏版本:1.0.1
游戏类型:跑酷类
       这款游戏最开始是在移动妹子里下的,在购买时会提示兑换码支付。按安卓逆向圣经里所说的,根据错误提示找到判断后,修改了,但只提示兑换成功,东西没到账。多次尝试后,实在是找不到其他能改的地方后,放弃了兑换码方式。
         那既然它跳兑换码支付,说明就是检测到我没SIM卡,那要是强制返回有卡呢??既然是移动妹子的游戏,那好,返回中国移动吧,一次尝试后,兑换码支付窗口没了,给我弹出大大的短信发送失败1105的提示,心里窃喜,搞定了。
        然后下一步,找onbillingfinish方法,但是,找到onbillingfinish方法后,却没有任何判断,没发下手啊。然后又想到移动支付成功有个订购成功提示,那根据这个提示强制返回为0x3e9后,安装运行,购买提示短信发送成功,再窃喜,搞定了。但是,但是一点确定后,大爷的,退出了。logcat提示还是1105...
        我不甘心啊,想到去爱游戏找找,爱游戏的同款同公司同版本安装包有60多MB,移动妹子的却只有36MB,感觉很奇怪啊,管它的,先看看效果。与预期中的一样,还是兑换码支付。但是再经过尝试,实现了不弹窗口支付成功。
好了,切入正题

1. 因为是爱游戏的游戏,所以直接找payfailed,将调用payfailed的地方调用成paysuccess,如图1.这时候安装,运行,在弹出兑换码支付时,点取消已经可以成功支付了,但这不是最终目的,最终目的是绕过兑换码窗口。
图1.png 图1

2.既然是判断到我没sim卡,那试试直接返回为中国电信呢?那先搜索中国电信,找到错误位置后,返回为中国电信
[Java] 纯文本查看 复制代码
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
new-instance v0, Lcn/egame/terminal/sdk/log/ak;
 
 #v0=(UninitRef,Lcn/egame/terminal/sdk/log/ak;);
 const-string v1, "CHINA_TELECOM"
 
 #v1=(Reference,Ljava/lang/String;);
 const-string v4, "\u4e2d\u56fd\u7535\u4fe1"
 
 #v4=(Reference,Ljava/lang/String;);
 new-array v5, v14, [Ljava/lang/String;
 
 #v5=(Reference,[Ljava/lang/String;);
 const-string v6, "46003"
 
 #v6=(Reference,Ljava/lang/String;);
 aput-object v6, v5, v2
 
 const-string v6, "46005"
 
 aput-object v6, v5, v3
 
 const-string v6, "46011"
 
 aput-object v6, v5, v7
 
 invoke-direct/range {v0 .. v5}, Lcn/egame/terminal/sdk/log/ak;-><init>(Ljava/lang/String;IILjava/lang/String;[Ljava/lang/String;)V
 
 #v0=(Reference,Lcn/egame/terminal/sdk/log/ak;);
 sput-object v0, Lcn/egame/terminal/sdk/log/ak;->a:Lcn/egame/terminal/sdk/log/ak;
 
 new-instance v4, Lcn/egame/terminal/sdk/log/ak;
 
 #v4=(UninitRef,Lcn/egame/terminal/sdk/log/ak;);
 const-string v5, "CHINA_MOBILE"
 
 const-string v8, "\u4e2d\u56fd\u79fb\u52a8"
 
 #v8=(Reference,Ljava/lang/String;);
 new-array v9, v11, [Ljava/lang/String;
 
 #v9=(Reference,[Ljava/lang/String;);
 const-string v0, "46020"
 
 aput-object v0, v9, v2
 
 const-string v0, "46000"
 
 aput-object v0, v9, v3
 
 const-string v0, "46002"
 
 aput-object v0, v9, v7
 
 const-string v0, "46007"
 
 aput-object v0, v9, v14
 
 move v6, v3
 
 #v6=(One);
 invoke-direct/range {v4 .. v9}, Lcn/egame/terminal/sdk/log/ak;-><init>(Ljava/lang/String;IILjava/lang/String;[Ljava/lang/String;)V
 
 #v4=(Reference,Lcn/egame/terminal/sdk/log/ak;);
 sput-object v4, Lcn/egame/terminal/sdk/log/ak;->b:Lcn/egame/terminal/sdk/log/ak;
 
 new-instance v5, Lcn/egame/terminal/sdk/log/ak;
 
 #v5=(UninitRef,Lcn/egame/terminal/sdk/log/ak;);
 const-string v6, "CHINA_UNICOM"
 
 #v6=(Reference,Ljava/lang/String;);
 const-string v9, "\u4e2d\u56fd\u8054\u901a"
 
 new-array v10, v7, [Ljava/lang/String;
 
 #v10=(Reference,[Ljava/lang/String;);
 const-string v0, "46001"
 
 aput-object v0, v10, v2
 
 const-string v0, "46006"
 
 aput-object v0, v10, v3
 
 move v8, v14
 
 #v8=(PosByte);
 invoke-direct/range {v5 .. v10}, Lcn/egame/terminal/sdk/log/ak;-><init>(Ljava/lang/String;IILjava/lang/String;[Ljava/lang/String;)V
 
 #v5=(Reference,Lcn/egame/terminal/sdk/log/ak;);
 sput-object v5, Lcn/egame/terminal/sdk/log/ak;->c:Lcn/egame/terminal/sdk/log/ak;
 
 new-instance v8, Lcn/egame/terminal/sdk/log/ak;
 
 #v8=(UninitRef,Lcn/egame/terminal/sdk/log/ak;);
 const-string v9, "NOT_DEFINE"
 
 const-string v12, "\u4e2d\u56fd\u7535\u4fe1"   #这里本是未定义,将它返回为中国电信
 
 #v12=(Reference,Ljava/lang/String;);
 
 
##################第二段########################
 const-string v1, "46000"
 
 #v1=(Reference,Ljava/lang/String;);
 invoke-virtual {v0, v1}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z
 
 move-result v1
 
 #v1=(Boolean);
 if-nez v1, :cond_4
 
 const-string v1, "46002"
 
 #v1=(Reference,Ljava/lang/String;);
 invoke-virtual {v0, v1}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z
 
 move-result v1
 
 #v1=(Boolean);
 if-nez v1, :cond_4
 
 const-string v1, "46007"
 
 #v1=(Reference,Ljava/lang/String;);
 invoke-virtual {v0, v1}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z
 
 move-result v1
 
 #v1=(Boolean);
 if-eqz v1, :cond_5
 
 .line 848
 :cond_4
 const-string v0, "\u4e2d\u56fd\u79fb\u52a8"
 
 goto :goto_1
 
 .line 849
 :cond_5
 const-string v1, "46001"
 
 #v1=(Reference,Ljava/lang/String;);
 invoke-virtual {v0, v1}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z
 
 move-result v1
 
 #v1=(Boolean);
 if-nez v1, :cond_6
 
 const-string v1, "46006"
 
 #v1=(Reference,Ljava/lang/String;);
 invoke-virtual {v0, v1}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z
 
 move-result v1
 
 #v1=(Boolean);
 if-eqz v1, :cond_7
 
 .line 850
 :cond_6
 const-string v0, "\u4e2d\u56fd\u8054\u901a"
 
 goto :goto_1
 
 .line 851
 :cond_7
 const-string v1, "46003"
 
 #v1=(Reference,Ljava/lang/String;);
 invoke-virtual {v0, v1}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z
 
 move-result v1
 const v1, 0x1
 #v1=(Boolean);
 if-nez v1, :cond_8
 
 const-string v1, "46005"
 
 #v1=(Reference,Ljava/lang/String;);
 invoke-virtual {v0, v1}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z
 
 move-result v0
 
 #v0=(Boolean);
 if-eqz v0, :cond_9
 
 .line 852
 :cond_8
 #v0=(Conflicted);v1=(Conflicted);
 const-string v0, "\u4e2d\u56fd\u7535\u4fe1"  #这里本来是未定义,改为中国电信
 
 #v0=(Reference,Ljava/lang/String;);
 goto :goto_1
 
 .line 854
 :cond_9
 #v0=(Boolean);v1=(Reference,Ljava/lang/String;);
 const-string v0, "\u4e2d\u56fd\u7535\u4fe1"    #这里本来是未知,改为中国电信
 
 #v0=(Reference,Ljava/lang/String;);
 goto :goto_1
 
 new-array v13, v2, [Ljava/lang/String;


3. 但还没完,我们再搜索46003,再根据提示,强制返回为电信卡
[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
:cond_7
    #v0=(Reference,Ljava/lang/String;);
    const-string v2, "46003"
 
    #v2=(Reference,Ljava/lang/String;);
    invoke-virtual {v0, v2}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z
 
    move-result v2
 
    #v2=(Boolean);
    if-nez v2, :cond_8
 
    const-string v2, "46005"
 
    #v2=(Reference,Ljava/lang/String;);
    invoke-virtual {v0, v2}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z
 
    move-result v0
 
    #v0=(Boolean);
    if-eqz v0, :cond_9
 
    .line 822
    :cond_8
    #v0=(Conflicted);v2=(Conflicted);
    const/4 v0, 0x3  #这里看出电信卡的v0是3,那在本方法里的return v0前直接const/4 v0, 0x3
 
    #v0=(PosByte);
goto :goto_1
 
 
##################第二段########################
#v2=(Boolean);
    const-string v2, "46003"
 
    #v2=(Reference,Ljava/lang/String;);
    invoke-virtual {v0, v2}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z
 
    move-result v2
 
    #v2=(Boolean);
    if-nez v2, :cond_7
 
    const-string v2, "46005"
 
    #v2=(Reference,Ljava/lang/String;);
    invoke-virtual {v0, v2}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z
 
    move-result v2
 
    #v2=(Boolean);
    if-eqz v2, :cond_8
 
    .line 1116
    :cond_7
    const-string v2, "03" #这里看出电信卡的v2是"03",那在本方法里的return v0前直接const-string v2, "03"
 
    #v2=(Reference,Ljava/lang/String;);
    goto :goto_0



4.  根据搜索到的46003一个一个的改,改完后,编辑保存,一戳购买,哈哈,那个讨厌的兑换码窗口没了,也就是说现在游戏认定我们用的是电信卡了,那样又可以愉快的发帖了


以上方法可能有些繁琐,也许直接getSimState()返回sim状态就行了,但这方法也是一种新思路哦...


题外:这款游戏还有个技巧,就是淡然文章中说的skynetpay关键词,具体参见文章http://www.pd521.com/thread-232-1-1.html 这样在移动妹子游戏下,可以实现提示成功

原帖首发:http://www.pd521.com/thread-235-1-1.html




免费评分

参与人数 4威望 +1 热心值 +3 收起 理由
XhyEax + 1 请问楼主,需要的工具有哪些?
Hmily + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
wuyueqi168 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩.
hlrlqy + 1 谢谢@Thanks!

查看全部评分

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

tongjin73 发表于 2015-1-19 22:41
可以省钱了
hlrlqy 发表于 2015-1-19 22:29
低调(d-iao) 发表于 2015-1-19 23:25
如果这游戏和我之前搞的游戏属于同类的话 那这游戏他有个校验 就是2次打包后 进入游戏游玩的时候 左右键会失效 然后道具全部无法使用
 楼主| myoldid 发表于 2015-1-20 08:35
低调(d-iao) 发表于 2015-1-19 23:25
如果这游戏和我之前搞的游戏属于同类的话 那这游戏他有个校验 就是2次打包后 进入游戏游玩的时候 左右键会 ...

这个还好啦,试玩了几关,没发现失效,异常情况。要是遇到你说的那情况,我就搞不定了 下次发现你说的异常,我心里也有底了
飘舞的雪花 发表于 2015-1-19 22:42
楼主有心了。
FreeColour 发表于 2015-1-19 23:45
感谢分享~共同进步
liguhe 发表于 2015-1-19 23:58
这个研究出来就很牛逼了
 楼主| myoldid 发表于 2015-1-20 08:36
liguhe 发表于 2015-1-19 23:58
这个研究出来就很牛逼了

哈哈,我这属于打酱油的方法,属于入门级的。
luoxjun 发表于 2015-1-24 13:42
省钱的教程都是好教程。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2025-6-7 14:12

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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