编程小站

我的编程分享

初试android逆向工程

| Comments

今天公司要测试计费的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

Comments