Android反编译实战(4)
接上节那个demo,我们简单学习下smali语法,可以自己去google上搜,看雪论坛的这篇就不错。
在google code上下载用到的jar包,地址https://code.google.com/p/smali/downloads/list
java -jar baksmali-2.0b4.jar Hell.dex
默认在当前目录下生成out 文件夹,里面有Hell.smali文件。
1 .class public LHell; 2 .super Ljava/lang/Object; 3 4 # static fields 5 .field private static final HELL:Ljava/lang/String; = "bupt" 6 7 # direct methods 8 .method public constructor <init>()V 9 .registers 1 10 invoke-direct {p0}, Ljava/lang/Object;-><init>()V 11 return-void 12 .end method 13 14 .method public static main([Ljava/lang/String;)V 15 return-void 16 .end method 17 18 # virtual methods 19 .method public sayNothing(Ljava/lang/String;)V 20 return-void 21 .end method
| V | void |
| Z | boolean |
| B | byte |
| S | short |
| C | char |
| I | int |
| J | long |
| F | float |
| D | double |
| L | Java类类型 |
| [ | 数组类型 |
没什么可说的,跟上节的java代码一对比就能懂!
想找突破口太难了!!反编译完当当读书后,
经过一番查找,我发现com.dangdang.reader.c 包下有一个a.smali文件,里面有一些android Log调试信息。太好了!!!

103行定义了一个方法
public static void a(String, String)
方法用到了一个局部变量寄存器v0,
106行得到c的值然后赋给寄存器v0
108行判断v0是否等于0,如果v0等于0,跳转到cond_0标号处,程序返回,如果v0不等于0,调用android的Log.i("", "")方法。
我们可以把第108行代码删掉,是程序无条件执行Log方法。或者我们往上找c的值,将c初值设为1.

很明显,这是构造函数,第31行,我们把const/4 v0, 0x0改为const/4 v0, 0x1
重新打包、签名,生成新的apk,在ddms里我们会看到打印出的当当电子书日志。

总算有点进步了。
posted on 2013-06-08 16:41 feiyunruyue 阅读(471) 评论(0) 收藏 举报
浙公网安备 33010602011771号