zoukankan      html  css  js  c++  java
  • 文件签名<魔塔50层>android反编译破解

    发一下牢骚和主题无关:

        

     

        缘由:该游戏作者有点可爱,原来就是拿别人的游戏,还在游戏中参加积分的轨制,打到20层后,需要积分。看不惯,就把它破解了,打到20层后,直接跳过要积分进程。

        本文不提供破解后的安装包!

        进程:

        首先下载目标apk,我是从这里下载的:http://www.wandoujia.com/apps/com.ss.magicTower

        然后下载工具,apktool+jd-gui+dex2jar+android sdk+jdk/jre

        部份链接如下:

        apktool(把apk文件反编译成dalvik旁边码,smali):https://code.google.com/p/android-apktool/

        jd-gui(查看jar源码文件):http://java.decompiler.free.fr/?q=jdgui

        dex2jar(把dex转换成jar):https://code.google.com/p/dex2jar/

        基本原理:首先把apk文件解压缩,然后提取其中的.dex文件,用dex2jar把dex文件转成jar文件,这样就能够用jd-gui打开jar文件,查看具体的java源码了。然后定位要修改的地方,再用apktool把apk文件转换成dalvik的旁边码,定位到之前要修改的位置,然后修改保存,再用apktool从新打包成apk文件。最后一步,用jarsigner给前面生成的apk文件签名,这样就能够把咱从新制造的apk安装到android系统上了。

        具体进程:

        解压apk文件,可以用rar或者7zip,都行。

        转换成jar:dex2jar.bat classes.dex

        这一步后,就会在当前目录下生成一个classes_dex2jar.jar文件。

        用jd-gui打开,并定位,这个不详讲。

        (一般的程序都会用proguard来进行代码混杂,所以你这里看到的都是一些稀奇古怪的变量名,类名和方法名,这对定位会造成影响。但是花点时光,还是能够找出来的。proguard现在已默认加到了android sdk里,在sdk/tools/proguard里,官网是http://proguard.sourceforge.net。在程序开发中,如果你希望用proguard来混杂自己的代码,只需在default.properties里添加一句"proguardproguard.config=proguard.cfg",就能够启用proguard)

        apktool反编译:apktool.bat d mota50.apk mota50

        命令完成后,会生成一个mota50的文件夹,定位到smali\com\ss\magicTower\k.smali文件,用文本编辑器打开它。然后修改相应的位置。我这里就是修改了判断条件那个地方,把if(a.h>180)改成if(a.h>-180),这样就永真了,所以就跳过验证了。

        每日一道理
    风,渐渐吹起,吹乱了我的发丝,也让我的长裙有些飘动。绿叶仿佛在风中起舞,离开了树,投向了大地,却不知这样会枯萎,我弯下腰,轻轻拾起一片树叶,那非常有序的茎脉,是一种美的点缀。我有些哀叹:绿叶啊,绿叶,你这般美丽地从树上轻轻飘下,随风起舞,却不知已被人称之为落叶!

        (android用的是dalvik VM的旁边码,与pc端的java旁边码不同,smali文件就是dalvik的旁边码,你可以理解为汇编语言,具体关于dalvik旁边码定义,可以看这里http://source.android.com/tech/dalvik/dalvik-bytecode.html)

        修改完以后,需要从新打包成apk文件:

        apktool.bat b mota50(这个命令,会在mota50文件夹中生成build和dist,两个文件夹,apk文件存放在dist)

        你也可以用这个命令:apktool.bak b -f mota50 newmota.apk

        这个命令会在当前目录生成一个apk文件。

        这样生成的apk文件并不带签名,而在android中,不带签名的文件,是无法安装的。所以我们需要给它从新添加签名。

        签名需要密钥,可是我们手上没有,需要自己生成一个,命令如下:

        keytool -genkey -v -keystore magic.keystore -alias magic.keystore -keyalg RSA -keysize 2048 -validity 10000

        具体参数含义,请看这里https://developer.android.com/tools/publishing/app-signing.html

        注意:-keystore和-alias参数后面跟的名字一定要一样,否则后面用这个密钥去签名apk的时候,会提示找不到证书链!

        这个命令完成后,会在当前目录生成一个magic.keystore密钥文件

        有了密钥,我们就能够通过上面的命令,给apk进行签名:

        jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore magic.keystore -signedjar mota50_signed.apk newmota50.apk magic.keystore

        这个命令就是用magic.keystore密钥给newmota50.apk签名,并生成一个mota50_signed.apk的文件,这就是终究的文件了。

        注意:由于在jdk7中,默认的签名算法已改变了,所以你必须自己指定签名算法(-sigalg)和摘要算法(-digestalg)。否则签名无效,无法安装。

        所以以前用的相似命令:jarsigner -verbose -keystore magic.keystore -signedjar mota50_signed.apk newmota50.apk magic.keystore虽然能够成功签名,但是无法安装。

        当然,上面分析的是手动签名。你也可以通过eclipse,或者其他的IDE来进行签名,网上也有一个 auto_signed图形工具来签名。这里就不在复述。

        安装的时候,你可以安装在android emulator里,或者真机里:

        adb install mota50_signed.apk

        总结:该文只是分析了端的破译的流程,对于真正症结的部份(修改smali文件),并没有做过多的分析,其实android下的smali文件跟平常碰到的汇编代码是一样的,只不过指令集不一样,名字不一样而已。如果之前干过c/c++逆向的话,是很容易上手的。

    文章结束给大家分享下程序员的一些笑话语录: 腾讯的动作好快,2010年3月5日19时28分58秒,QQ同时在线人数1亿!刚刚看到编辑发布的文章,相差才2分钟,然后连专题页面都做出来了,他们早就预料到了吧?(其实,每人赠送10Q币,轻轻松松上两亿!)

    --------------------------------- 原创文章 By
    文件和签名
    ---------------------------------

  • 相关阅读:
    Native Boot 从一个 VHD 引导系统的相关说明
    bind()函数的深入理解及两种兼容方法分析
    四、CentOS 6.5 上传和安装Nginx
    jQuery 常见操作实现方式
    “贷券” 信贷系统
    注册 Ironic 裸金属节点并部署裸金属实例
    hover()方法
    Uncaught SyntaxError: Inline Babel script: Unexpected token
    Uncaught Error: The `style` prop expects a mapping from style properties to values, not a string
    jquery bind事件
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3104955.html
Copyright © 2011-2022 走看看