大家好,小太来为大家解答以上问题。Android,apk反编译基础(apktoos)图文教程这个很多人还不知道,现在让我们一起来看看吧!
长期以来,我在广工图书馆主页上写了一个类似爬虫的demo(因为没有接口,只能取静态网页)来实现一些图书馆系统的一些功能。但是最近发现库系统篡改了html页面,在一个html页面中嵌入了上千行评论,并且有自己的App,应该是为了增加抓取的流量成本,防止别人抓取网页。但是,加评论就不讨人喜欢了。内网访问速度还可以,外网访问体验很差。
如下图:一堆评论,导致一个网页需要2MB。
首页的APP必须使用库的后台接口与服务器交互,所以我想试试反编译,看看APP用的是什么接口。(另外,更简单的是用tcpdump对Android手机进行抓包并分析其接口,再用Wireshark分析tcp包。但是如果想知道所有的接口,可能需要一个一个的调用,会比较麻烦。采用反编译,你可能会在一个类里找到这些接口)。
一、首先要准备的工具:(更多反编译工具可以去Snow论坛下载或者学习-链接)。APK工具是GOOGLE提供的APK编译工具,需要JAVA运行环境。你可以反编译APK,可以用来反编译成非常接近打包前的原始格式。将AndroidManifest.xml、资源文件resources.arsc、dex文件反编译成可以调试的smali文件。修改后可以编译回apk文件。APKTool还可以用来汉化Android软件,然后重新打包发布。官方:http://code.google.com/p/android-apktool/
解压APKTool,把要反编译的APK放到目录中。
反编译:通过CMD进入上述目录,执行命令:apktooldecodezhaobenShu.apkoutdir。
稍等片刻完成反编译,反编译后的文件会在outdir目录下。
-outdir目录结构
Res:资源文件,基本和adnroid项目目录中的res一样,各种UI图片XML布局文件valuesxml文件(另外还有一个public.xml,上面有每个资源的id号(R.java中的ID))smail:这是一个key文件夹,里面有Smail格式文件,是Dalvik虚拟机执行的操作码(Dalvikopcodes)。如果有,这些操作有它们自己的语法吗?Androidmanifest.XML:Android项目下的AndroidManifest.xmlapktool.yml:用于重新打包。
二、smail语法:(全部语法请link)
smail中的数据类型签名与java中的相同,如下所示。
b-byteC-charD-doubleF-floatI-intJ-longS-shortv-voidZ-boolean[XXX-arraylxxx/yyy-object
三、smail代码例子:
乍一看,smail文件可能感觉有点乱。但是,只要你懂几个语法,就可以很好的阅读smail文件。Smail把常用的语法(不是全部)比较成:赋值、取值、函数调用、if语句、返回值等。赋值取值:例子:iget-objectV6,p0,Lcom/zbsh/code/class/classsystem$9;-val$vBarCodes:Ljava/util/ArrayList;
四、分析:
Iget值操作,i=instance,用于实例字段(实例变量),object表示类。V6是局部寄存器,p0在这里代表这个(在非静态函数中代表这个,在静态函数中代表第一个参数)。LCOM/ZBSH/CODE/CLASS/ClassSystem是CLASSsystem类,包路径为LCOM/ZBSH/CODE/CLASS,-箭头操作符相当于C/C,后跟类中的变量或方法。vBarCodes是CLASSSYSTEM中的变量,Ljava/util/ArrayList是vBarCodes的类型(java中类的签名)。
五、作用:
ClassSystem中vBarCodes的值存储在寄存器v6中。vBarCodes的类型必须是对象,并且是实例变量和非静态变量。其中object可以替换为基本数据类型:iget-booleaniget-byteiget-chariget-short等等。
六、同样的
Sgt-[type]用于获取静态变量。(缺少一个p0,因为静态变量没有这个)
Aget-[type]用于获取数组类型。
[x]获取vx,vy,并将寄存器vy中的值赋给vx。
七、赋值:
同样都有以下几种:iput-[type]sput-[type]aput-[type]也支持寄存器和寄存器之间的赋值,寄存器和变量之间的赋值调用-直接调用私人的函数调用-超级调用父类函数调用-静态调用静态函数调用-虚拟用于调用保护或公众的函数(相当于C的虚函数,java的重载函数,只有保护和公众的能够重载)还有一种比较特殊的:调用-
本文到此结束,希望对大家有所帮助。