[教程] Android程序(.apk)教程之classes.dex
Android, dex, apk, classes, 教程
本帖最后由 s.p.k 于 2010-9-7 14:24 编辑

classes.dex是程序编译后的[程序名].java文件。
其中包含了软件所有activity编译后的代码。
JesusFreke写了一个反编译dex文件的java程序,并发布在google code上le/p/smali/ 我们可以去下载smali.jar和baksmali.jar最新版
dex解包
程序需要java环境,下载JDK或者JRE已经安装的请跳过
解包dex:
java -jar baksmali.jar %1 -o classes

打包dex:
java -jar smali.jar classes
游戏xml文件修改
两个jar程序和上面操作使用的批处理都在压缩包内..点击下载(内含smali.jar和baksmali.jar v1.1版)..
把需要反编译的classes.dex文件和两个jar放在同一目录下,拖动dex到 “解包.bat”,之后会在同目录生成”classes”文件夹
打开classes文件夹看看(以twigee为例)
路径为*\classes\tice\twitterwalk里头有很多以.smali为后缀的文件
他们就是反编译后的程序,也就是我们要修改的文件
这些文件通常有几十个甚至几百个,数量惊人(.smali文件数量=程序原activity数量),不知从何下手吗?
用最简单的记事本打开看看吧~
没错,他们就是纯文本文件,是不是眼前一片明朗了呢?
不过对于大量的文件,window自带滴记事本是绝对应对不了的。
接下来就轮到大杀器Notepad++登场了~
Notepad++支持文件夹内批量搜索文本,而且速度超快,这就是要用他的原因了。
打开Notepad++ 按Ctrl+F 选择“文件查”选项卡,就可以批量搜索了

那么如何知道要修改些什么呢?
首先我们来分析那一大堆.smali文件
和xml一样,作者很明确的表明了每个activity的作用
和分析xml一样地分析smali文件,想一想你要的资源会出现在activity,但是要做的这点对于不是学程序的人真的很难。
简单方法当然有,那就是批量搜索!
我们的顺序是先arsc再xml,最后才会到dex中寻资源
再完前两者之后,最好先上机测试下,看看有还有哪些资源没有被,而这些没有被你到的资源,就藏在dex中了。
也就是说,dex中资源的目标是确切的,你可以在运行软件后记录下还没被的地方,然后逐个寻,替换。
具体实例:
我再把Twigee的arsc和xml完之后,还有些资源没被汉到
分别是:“Following”“Follower”“Home”等
用Notepad++搜索“Follow”
下载 (134.55 KB)
2010-9-7 14:13
(点击图片放大)
下面出现了好多结果….
我们要的是const-string vn “关键字”
把英文改了吧~不过修改完是乱码…
没关系,那是编码问题,选择 格式→转为UTF8就可以显示了,不过千万要记得保存前要改回ANSI !!

注意:1.只能修改const-string vn “关键字”  引号中的字符
   2.同时出现多个重复的关键字时,请谨慎修改,有些可能是定义函数的 具体参考le/p/smali/source/browse/#svn/dalvik-docs/opcodes
   3.千万记得保存时的文本编码为ANSI

dex打包
注意:打包前请确定classes 文件夹下没有其他无用文件,如notepad++的备份文件
拖动“classes”文件夹到 “打包.bat”,之后会在同目录生成”out.dex”文件,它就是重新编译后的classes.dex了
就此,dex完成




在完成arsc xml dex的分别之后

我们进入最后的收尾步骤——打包&签名

打包 首先我们得先到原来的那个APK包,别告诉我你已经删了….
1.用winrar打开它,把你完成的arsc,xml,dex文件按照原目录替换,也就是用鼠标拖进winrar去
2.删除META-INF文件夹,里面是原来的证书文件,删除后才能正确签名
3.关闭winrar窗口

签名 1.把修改后的APK包重命名为 unsigned.apk 放到Auto-Sign目录下 下载Auto-Sign(需要java环境)
      2.拖动unsigned.apk到sign.bat签名,在同目录生成signed.apk,这就是签名后的APK包

签名后程序为何不能安装?
1.如果提示证书错误,请删除英文原版程序后安装。
2.如果提示无法安装,请检查过程中有没有修改到程序定义或函数的环节。
3.如果安装后无法运行或各种报错,请检查过程中有没有修改到程序定义或函数的环节。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。