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

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

2012-3-31 14:46
15561
想到以前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

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

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