今天公司要测试计费的sdk,于是心血来潮打算逆向一下公司的sdk。将sdk中的支付金额和渠道号更换,查看sdk的计费原理。
首先,我是android逆向的小白,谷歌到一篇我自认为不错的教程,按照这篇操作下来,你就可以查看apk文件的java源码了。同时也可以参考这篇教程
有时你环境搭好后,运行命令可能会有如下错误:
-bash: ./d2j-dex2jar.sh: Permission denied
在终端输入命令,修改执行脚本的权限,也可以修改所有的文件权限:
$ sudo chmod a+x * 或 $ sudo chmod a+x d2j-dex2jar
权限修改后,又报出如下错误:
localhost:dex2jar-2.0 username$ ./d2j-dex2jar.sh classes.dex
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/googlecode/dex2jar/tools/Dex2jarCmd : Unsupported major.minor version 51.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
这说明你的jdk版本太低,可能低于1.7,不支持现在的操作。你有两个选择:一是、升级jdk;二是、选用低版本的dex2jar。(我遇到了上述问题,鉴于升级jdk可能带来其他环境的更改选择了dex2jar-0.0.9.15这个版本)
上述只是可以将class.dex转换成jar文件。
命令如下:
localhost:dex2jar-0.0.9.15 username$ ./d2j-dex2jar.sh classes.dex
dex2jar classes.dex -> classes-dex2jar.jar
localhost:dex2jar-0.0.9.15 username$
即可在目录下看到classes-dex2jar.jar文件。
而查看jar文件需要用到jd-gui这个软件,直接下载安装即可。导入jar文件就可以查看,也可以将java代码保存。
至此,查看apk源码的操作已介绍完毕。
接下来便是,解析出manifest文件,通过使用apkTool工具可以将apk文件解析。
apktool可能也会遇到上述与dex2jar相似的问题,无非是修改权限、换版本照着做就可以了。apktool和apktool.jar放在/usr/local/bin目录下,可以使用apktool命令。
执行命令解析apk文件
localhost:sdkPay username$ apktool d liantongstar.apk
I: Baksmaling...
I: Loading resource table...
I: Loaded.
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: /Users/username/Library/apktool/framework/1.apk
I: Loaded.
I: Regular manifest package...
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Done.
I: Copying assets and libs...
在相同目录下生成与apk同名的文件夹。
然后开始修改源码中的计费信息,通过对照jar文件中的源码,以及smali文件中相应的代码,来修改!再次不多说。
修改后要重新打包成apk文件,执行命令如下:
localhost:sdkPay username$ apktool b "test" test.apk
I: Checking whether sources has changed...
I: Smaling...
I: Checking whether resources has changed...
I: Building resources...
I: Copying libs...
I: Building apk file...
localhost:sdkPay username$
重新签名,安装测试即可。
localhost:sdkPay username$ jarsigner -verbose -keystore my.keystore -signedjar newTest.apk -digestalg SHA1 -sigalg MD5withRSA test.apk my.keystore
mac下资源下载 提取码:5cfb