zoukankan      html  css  js  c++  java
  • apk反编译与破解

    前段时间项目上线,单机游戏,想着肯定是会被破解的,但没想到,分分钟就被破了,游戏数据也是相当的差,于是闲暇时,也自己研究下安卓的破解。

    个人观点(装一下X):所谓反编译和破解付费等都只应用于学习交流,发布出去,就有点太不尊重他人劳动成果了。

    使用工具:(当然首先得配好java环境,这是废话)

      apktool : 资源文件获取,可以提取出图片文件和布局文件

      dex2jar :   得到java源码(将classes.dex 转化为jar 文件)

      jd-gui  :   查看转化得到的jar文件的源码

    一、 解包,打包

      命令行,输入 java   -jar apktool.jar d  -f test.apk  (此处我用的apktool为最新版本)

      此时可以看到解包出的文件,smali 就是java代码了,当然里这里是smali代码,类似于汇编,但需要修改原本的代码的话,还得去改它。

      改好后,只需要 java -jar apktool.jar -b  test  

      其中test 为我们刚刚解包的文件夹名,就可以得到重新打包的apk了,位于dist文件夹下。

      当然此时的apk是不带签名的。需要安装得自己再对apk进行签名,相关工具也挺多的。

    二、得到java源码

      自行解压原apk文件,得到其中的classes.dex 文件

      运行命令 d2j-dex2jar.bat classes.dex  (这里我用的是最新版的dex2jar-2.0版本,以前版本bat可能名字有点不一样)

    将在 d2j-dex2jar.bat  目录下得到 classes-dex2jar.jar 文件

      然后再用jd_gui工具打开这个jar文件就可以看到java源代码了,但可以很多apk进行混淆以后,代码后变得很难阅读。

      很多没有做过多防护的游戏,很可能就这样就可以简单看到代码了。这样岂不是所有人都在裸奔了,事实当然不可能这样子。通过加密,可以做到让你得不到所有的smali和java源码。可以参考下面这篇文章对app加密

    参考:http://blog.csdn.net/chengyingzhilian/article/details/38372601

      但个人认为,网络游戏本身肯定是不会有什么问题,但单机游戏,短代支付这种,付费文件都是在本地,没有二次验证的付费,即使所有地方都加密了,替掉计费文件不就一样算是破解了吗?

    以下为smali的基础语法

    .field private isFlag:z  定义变量

    .method  方法

    .parameter  方法参数

    .prologue  方法开始

    .line 12  此方法位于第12行

    invoke-super  调用父函数

    const/high16  v0, 0x7fo3  把0x7fo3赋值给v0

    invoke-direct  调用函数

    return-void  函数返回void

    .end method  函数结束

    new-instance  创建实例

    iput-object  对象赋值

    iget-object  调用对象

    invoke-static  调用静态函数

    条件跳转分支:

    "if-eq vA, vB, :cond_**"   如果vA等于vB则跳转到:cond_**
    "if-ne vA, vB, :cond_**"   如果vA不等于vB则跳转到:cond_**
    "if-lt vA, vB, :cond_**"    如果vA小于vB则跳转到:cond_**
    "if-ge vA, vB, :cond_**"   如果vA大于等于vB则跳转到:cond_**
    "if-gt vA, vB, :cond_**"   如果vA大于vB则跳转到:cond_**
    "if-le vA, vB, :cond_**"    如果vA小于等于vB则跳转到:cond_**
    "if-eqz vA, :cond_**"   如果vA等于0则跳转到:cond_**
    "if-nez vA, :cond_**"   如果vA不等于0则跳转到:cond_**
    "if-ltz vA, :cond_**"    如果vA小于0则跳转到:cond_**
    "if-gez vA, :cond_**"   如果vA大于等于0则跳转到:cond_**
    "if-gtz vA, :cond_**"   如果vA大于0则跳转到:cond_**
    "if-lez vA, :cond_**"    如果vA小于等于0则跳转到:cond_**

     

    Stay hungry, stay foolish!
  • 相关阅读:
    tiptop之4gl调试3/31
    打印空白3/31
    佛陀教育入门
    什么是佛教
    智、觉
    保持头脑清醒的窍门2/13
    php中将数组转换为指定符号分割的字符串
    kali下apche配置多网站
    php数组指定字段排序
    php 语句块耗时性能测试
  • 原文地址:https://www.cnblogs.com/JhonKing/p/5106141.html
Copyright © 2011-2022 走看看