使用Smali代码注入

来源:互联网 发布:linux 线程传递数据 编辑:程序博客网 时间:2024/05/22 06:13

http://androiddeveloper.diandian.com/post/2013-04-12/40048563235

阅读该教程中需要读者具有Android虚拟机语言smali的语法基础和openGL的基础,读者可以在

http://bbs.pediy.com/showthread.php?t=151769

获得基本的smali语法知识。下面进入正题:

1.首先下载到手最新的魅拍apk包,魅拍是腾讯旗下子公司做的一款图片滤镜软件,使用apktool.jar反编译该apk包:


获得的文件夹中有一个smali文件夹,它是整个项目的smali源码。

2.每个openGL滤镜在着色的时候都会使用glShaderSource函数来Shader着色器的代码,所以在smali目录下搜索该字符串:

3.找到关键代码后,打开该文件,找到调用的函数:


寄存器p1中的内容就是我们想要的shader脚本,在该函数之后使用代码注入输出着色器的shader脚本:


这里使用v1寄存器来存储PrintStream,因为观察后面的代码中v1寄存器直接被赋值了,赋值之前并没被读取过,所以这里借用v1寄存器。

4.重新使用apktool.jar打包代码注入过的魅拍文件夹


5.将打包后的meipai.apk使用自己的签名秘钥签名(利用signapk.jar包),最后安装代码注入后的apk包,安装后打开魅拍进入移轴滤镜页,点击移轴效果,将看到shader脚本被打印出来:


6.最后发现,该openGL脚本中存在外部变量,寻找到特殊变量如outerRadius,在smali文件目录下寻找就能找到它在文件中赋值的位置,最后继续代码注入打印出所有参数的值:


768.0是width,1024.0是height等等。。。。魅拍移轴滤镜的算法就破解了

0 0