2026年10月30日 · 今日 0 帖 · 会员 6.1万 · 主题 17.4万
登录 · 注册 · 游客,欢迎随便逛逛
返回版块
1000
Lv9有为九子能等级图标
勋章勋章勋章勋章勋章
帖子
9.3万
回复
2,089
积分
60.3万
注册
2006-12-06
[安卓交流]

安卓破解积分限制详解

[复制链接]
查看 3,353 回复 42
楼主 发表于 | 只看该作者
76 人收藏

近日使用某在线听歌软件,有不少儿童故事不错,但在线听经常出现时断时续情形,而软件要求积分大于1500才可整页下载。要满足积分条件需要手动安装其推荐的数十个应用,简直是坑爹。故决定破解之。

假定要破解apk的名字为mytest.apk,则破解步骤如下:

步骤 1:得到resource及smali文件。

1)得到apktool工具

在http://code.google.com/p/android-apktool/下 载获得,apktool-1.0.0.tar.bz2和apktool-install-windows-2.1_r01-1.zip两个包都要下。解压缩下载的两个文件包,apktool-install-windows-2.1_r01-1.zip解压缩后得到的包里有aapt.exe 和apktool.bat.(注意要把apktool-1.0.0.tar.bz2解压后的一个.jar 文件copy进来)

2).DOS命令窗口下进入到apktool.bat所在的文件夹里。

D:\android\tool\apktool\apktool d C:\mytest.apk C:\out

命令行解释:apktool d 要反编译的文件 输出文件夹

特别注意:你要反编译的文件一定要放在C盘的根目录里,

3).打开 C:\out文件夹 就可以得到各种资源了。

步骤2:得到java文件

方法a:

1)、把apk文件改名为.zip,然后解压缩出其中的class.dex文件

2)、安装把dex文件反编译为jar文件的工具dex2jar。http://code.google.com/p/dex2jar/downloads/list

3)、把class.dex拷贝到dex2jar.bat所在目录。

4)、生成jar文件classes.dex.dex2jar.jar

view plaincopyprint?

dex2jar.bat classes.dex

dex2jar.bat classes.dex

5)、安装把jar反编译为java的工具。(JD-GUI)http://java.decompiler.free.fr/?q=jdgui

6)、运行JD-GUI工具,打开上面的jar文件

7)、File -> Save All Sources将生成Java源代码文件到c:\out

方法b(TBV):

1).从out目录下取得dexdump。

2).adb shell dexdump -d -f -h /data/dalvik-cache/data@app@mytest.apk@classes.dex > twitpic.text

步骤3:破解源代码

1).查找位置

由于此软件要求积分大于1500才可下载,故打开java文件,查找1500发现有三个文件有定义,PlayActivity$$$$$$$$12.java,Cfg.java,ScoreDialog$$$$$$$$5.java。

PlayActivity$$$$$$$$12.java

view plaincopyprint?

final class PlayActivity$$$$$$$$12 implements Runnable

{

public void run()

{

...

int i = 1500;

int j;

Cfg.IS_WITHAD = j;

if (j != 0)

{

if (this.val$$$$$$$$arg1 >= i) //似乎为显示广告门限控制值

break label91;

boolean bool2 = Cfg.HIDDEN_GUANGGAO;

label35: boolean bool3; //???

Cfg.HIDDEN_GUANGGAO = bool3;

Cfg.SaveBool(“hiddenguanggao“, bool3);

}

final class PlayActivity$$$$$$$$12 implements Runnable

{

public void run()

{

...

int i = 1500;

int j;

Cfg.IS_WITHAD = j;

if (j != 0)

{

if (this.val$$$$$$$$arg1 >= i) //似乎为显示广告门限控制值

break label91;

boolean bool2 = Cfg.HIDDEN_GUANGGAO;

label35: boolean bool3; //???

Cfg.HIDDEN_GUANGGAO = bool3;

Cfg.SaveBool(“hiddenguanggao“, bool3);

}

ScoreDialog$$$$$$$$5.java

view plaincopyprint?

final class ScoreDialog$$$$$$$$5 implements Runnable

{

public void run()

{

Object localObject1 = null;

int i = 17301659;

int j = 1500; //Score

...

if (localProgressDialog != null)

if (this.val$$$$$$$$arg1 < j) //可以猜出此为定义的分数之一,如不满足则弹出对话框

{

ScoreDialog localScoreDialog1 = this.this$$$$$$$$0;

final class ScoreDialog$$$$$$$$5 implements Runnable

{

public void run()

{

Object localObject1 = null;

int i = 17301659;

int j = 1500; //Score

...

if (localProgressDialog != null)

if (this.val$$$$$$$$arg1 < j) //可以猜出此为定义的分数之一,如不满足则弹出对话框

{

ScoreDialog localScoreDialog1 = this.this$$$$$$$$0;

Cfg.java

view plaincopyprint?

public class Cfg

{...

public static final int HIDDEN_GUANGGAO_NEED_SCORE = 1500; //似乎为显示广告与否的分数门限值

public class Cfg

{...

public static final int HIDDEN_GUANGGAO_NEED_SCORE = 1500; //似乎为显示广告与否的分数门限值

PlayActivity$$$$$$$$12.java

view plaincopyprint?

final class PlayActivity$$$$$$$$12

implements Runnable

{

public void run()

{

boolean bool1 = true;

DialogInterface.OnClickListener localOnClickListener1 = null;

int i = 1500;

但HIDDEN_GUANGGAO_NEED_SCORE并未被其他任何文件应用,但保险起见任然改动此值。

final class PlayActivity$$$$$$$$12

implements Runnable

{

public void run()

{

boolean bool1 = true;

DialogInterface.OnClickListener localOnClickListener1 = null;

int i = 1500;

但HIDDEN_GUANGGAO_NEED_SCORE并未被其他任何文件应用,但保险起见任然改动此值。

2)更改smali文件

smali文件只是将java文件的后缀改为.smali,故可找到上述三文件对应的smali文件

Cfg.smali

view plaincopyprint?

.field public static final HIDDEN_GUANGGAO_NEED_SCORE:I = 0x5DC //此处改为0x0

.field public static final HIDDEN_GUANGGAO_NEED_SCORE:I = 0x5DC //此处改为0x0

PlayActivity$$$$$$$$12.smali

view plaincopyprint?

.method public run()V.locals 6.prologueconst/4 v2, 0x1const/4 v4, 0x0const/16 v3, 0x5DC //此处改为0x0.method public run()V.locals 6.prologueconst/4 v2, 0x1const/4 v4, 0x0const/16 v3, 0x5DC //此处改为0x0

ScoreDialog$$$$$$$$5.smali

view plaincopyprint?

.method public run()V

.locals 10

.prologue

const/4 v7, 0x0

const v5, 0x108009b //对应17301659

const/16 v6, 0x5DC //此处改为0x0

.method public run()V

.locals 10

.prologue

const/4 v7, 0x0

const v5, 0x108009b //对应17301659

const/16 v6, 0x5DC //此处改为0x0

步骤4 将反编译完的文件重新打包成apk文件out.apk

view plaincopyprint?

apktool b c:\out out_raw.apk

apktool b c:\out out_raw.apk

步骤5:对生成的apk签名:

1).准备工具

如没有安装JDK,请在Sun官方网站下载JDKhttp://www.java.net/download/jdk6/6u10/promoted/b32/binaries/jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe,其实仅需要中的Keytool和Jarsigner。

2)、准备签名文件

view plaincopyprint?

“C:\Program Files\Java\jdk1.6.0_24\bin\keytool“ -genkey -alias wendy.keystore -keyalg RSA -validity 20000 -keystore wendy.keystore

“C:\Program Files\Java\jdk1.6.0_24\bin\keytool“ -genkey -alias wendy.keystore -keyalg RSA -validity 20000 -keystore wendy.keystore

注意密码为6位数,如123456。

3签名 view plaincopyprint?

“C:\Program Files\Java\jdk1.6.0_24\bin\jarsigner“ -verbose -keystore wendy.keystore -signedjar out.apk out_raw.apk wendy.keystore

“C:\Program Files\Java\jdk1.6.0_24\bin\jarsigner“ -verbose -keystore wendy.keystore -signedjar out.apk out_raw.apk wendy.keystore

此处需输入第2步的密码123456,执行完即可生成签名后的apk文件out.apk.

至此,破解完成

​

登录回复
126148
Lv3畅意三江水等级图标
帖子
1
回复
164
积分
7,001
注册
2012-10-29
41 楼

PC端,超级无语

117779
Lv3畅意三江水等级图标
帖子
3
回复
438
积分
2,370
注册
2012-08-01
42 楼

复杂

登录后可以回复这个帖子。旧账号可使用原密码登录。

登录 注册新号
← 返回版块