首页
社区
课程
招聘
[原创]apk文件diy之添加Toast
发表于: 2012-3-31 14:46 16130

[原创]apk文件diy之添加Toast

2012-3-31 14:46
16130

想到以前window下,通过加汇编可以添加一个自己的MessageBox,那在android下能否实现了,花了一上午的时间,可以的,实验成功,下面我们看下具体操作方法。

1.        环境:android 2.1 ,API level 7  
原程序很简单,就是打印一句话:System.out.println("onCreate");
我们要做的有2点
a.改它的打印输出为:onCreate+001
b.添加一个Toast,相应代码为:
Toast.makeText(EX05_01.this ,"Toast", Toast.LENGTH_LONG).show();

2.        我们先用ApkTool_GUI反编译,EX05_01开头的有2个,改这个
图1:


找到println,改上面的const-string即可,如图所示
图2:


重新编译,ok。在这可能有人会遇到问题。好像说是签名的什么问题,这有两个解决方法
a.我用的是AVD7,删掉这个,在重新新建个,就可以了,网上说其实只用删除某个文件即可,我没找到
b.如果上面方法不行,再建个AVD,API level 8,这下总可以了吧。

3.        接下来我们看如何添加Toast
先回忆下windows下我们是如何做的:invoke MessageBox, 0, addr szUrl, addr szPath, MB_OK
对应的汇编:
图3:


写程序参数是从左往右,汇编压栈是从右往左
MB_OK 对应0,然后是标题和内容。为什么要说这了,接下来会用的着。
我们将要添加的Toast代码为:
const-string v0, "Toast+gogo"
    const/4 v1, 0x1
    invoke-static {p0, v0, v1}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
    move-result-object v0
invoke-virtual {v0}, Landroid/widget/Toast;->show()V

就添加在Ljava/io/PrintStream;->println(Ljava/lang/String;)V的下面
图4:


这里解释一下
a. const-string v0, "Toast+001",字串常量,对应Toast.makeText(EX05_01.this ,"Toast", Toast.LENGTH_LONG).show();的第二个参数。
b. const/4 v1, 0x1 16进制,对应Toast.LENGTH_LONG常量
c. invoke-static {p0, v0, v1}, Landroid/widget/Toast;->makeText,调用. makeText()方法,  这个很重要了
它这个参数顺序是一一对应的,这个p0解释一下,往上翻,看到这个
图5:


这个就是class.this,对了,这为什么是invoke-static?
图6:


d. move-result-object v0 调用结果返回值为v0
e. invoke-virtual {v0}, Landroid/widget/Toast;->show()V  调用show()方法
图7:


好了,到这就可以了,重新编译运行。出现了我们想要结果
图8:


在逆向看下
图9:


改后的文件: EX05_01.apk


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 6
支持
分享
最新回复 (12)
雪    币: 140
活跃值: (1234)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
好文,学习了。
2012-3-31 15:54
0
雪    币: 534
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不错,我都是 直接 在附近 找一段 复制粘贴的
2012-3-31 16:14
0
雪    币: 162
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
好文,学习了
2012-3-31 16:58
0
雪    币: 290
活跃值: (105)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
好文,顶起,关注
2012-4-11 09:36
0
雪    币: 122
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
学习了…………
2012-4-11 09:44
0
雪    币: 4902
活跃值: (130)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
对Android系统还没入门
学习下哈
2012-4-11 09:48
0
雪    币: 123
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
这个可得学习下!!!!!
2012-4-11 15:55
0
雪    币: 333
活跃值: (46)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
9
mark:diy apk
2012-5-12 18:03
0
雪    币: 284
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
lz 这个原理 运用的很灵活撒 佩服
2012-6-12 15:13
0
雪    币: 1552
活跃值: (1626)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
感谢分享!
2013-7-27 10:54
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
很好的文章,顶起来啊!
2013-7-30 14:44
0
雪    币: 258
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
菜鸟我受教了。。。Thanks
2013-8-9 16:54
0
游客
登录 | 注册 方可回帖
返回
//