闲来无聊,折腾一下《我叫MT》这款手游,我是从开服1区就开始玩的,后来分区时跑到6区了。卡牌游戏,可玩性还算高,偶尔脸黑上微博给大师买买表很有乐趣寻思着把它拆开来看看,有没有什么东西可以拿来借鉴一下, 源码是不奢求了,资源什么的就满足了,结果发现是我想多了 ,今天写一下大概的过程,因为这个反编译用处很多,现在绝大部分都在用安卓系统,反编译可以用来DIY一款你自己的软件,而不用亲自动手去coding,还是很省事很有个性的 。 

      好了,废话少说,直接入题。我这次下的官方的版本。

      反编译的工具打包好了,传送门:http://pan.baidu.com/share/link?shareid=910541378&uk=637953331


1.利用apktool反编译,得到smali码。

C:\Windows\System32\Android_Tool\apktool>apktool d ..\iammt.apk
I: Baksmaling...
I: Loading resource table...
I: Loaded.
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: C:\Users\JackyFu\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...

C:\Windows\System32\Android_Tool\apktool>
       

2.apk结构。

      在apktool目录下可以看到iammt的文件夹,看看里面的东西吧:

       assets文件夹包含一些游戏的图片,音乐,数据等比较大的东西(可以看到解压出来占了52.9M,游戏的大部分数据都在这里),不过这里除了音乐暴露出来以外,图片资源都被打包到data.dat中了,没办法拿到。

      lib文件夹lib文件夹包含了以.so后缀的文件。安卓是基于Linux内核的,而.so就是Linux下相当于Windows下的dll文件,动态链接库文件,里面就是一个函数集,包含了所有游戏的源码、框架、算法等所有你要的你不要的,需要用的时候,你链接它来实现你的功能,用这玩意方便更新,模块复用,同时也加快程序载入,但是有个毛病,就是看不到里面的东西。坑爹呢!!!! 《我叫MT》是基于cocos2d-x写的。可以在cygwin下交叉编译得到lib。

       META-INF文件夹用于存储包和扩展的配置数据,如安全性和版本信息,签名信息。用来通知安卓系统怎么来载入这个程序。
       res文件夹 包含一些小的图片(logo之类的),还有很重要的布局

       AndroidManifest.xml。这是程序配置文件,里面写了一些配置信息,如软件的安卓版本要求,软件需要调用的模块,权限声明(打电话,看地图,wifi,摄像头之类的),还有很重要的Activity声明(不知道要怎么翻译 ) 。

       事到如今也没啥好继续往下看的了。。。蛋疼,只能挑一些能看的看吧。。。

       AndroidManifest.xml中有2个Activity,一个是主程序也就是cocos2d-x生成的LoadLibrary的Activity,另一个是一个包含webView的Activity,就是进入《我叫MT》时弹出的公告框,res中也有相关布局。

        <activity android:theme="@*android:style/Theme.NoTitleBar.Fullscreen" android:label="@string/app_name" android:name="com.locojoy.immt_a_chs.IamMT" android:screenOrientation="portrait" android:configChanges="keyboardHidden|orientation">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:theme="@*android:style/Theme.NoTitleBar.Fullscreen" android:name="com.locojoy.WebviewActivity" android:screenOrientation="portrait" android:configChanges="orientation" />

       其实其他平台版本还附带有各个平台的充值接口,这个官方版本木有。


3.利用dex2jar和jagui查看源码。

      smali码不好看,我们直接解压apk。运行:

C:\Windows\System32\Android_Tool\Android_Anti\dex2jar-0.0.7-SNAPSHOT>dex2jar classes.dex
lib\slf4j-api-1.5.8.jar;lib\logback-core-0.9.18.jar;lib\logback-classic-0.9.18.j
ar;lib\dex2jar-0.0.7-SNAPSHOT.jar;lib\commons-io-1.4.jar;lib\asm-debug-all-3.2.jar;
       用jdgui打开生成的classes.dex.dex2jar。com.locojoy包,大师仅有的节操尽现。。。



       MyActivity extends Cocos2dxActivity,是cocos2d-x Android主程序的入口。

       吐槽一下,竟然木有进行代码混淆。。。why?


4.重新打包和签名。

       从第一步得到的文件夹重新打包回去,并进行签名。

C:\Windows\System32\Android_Tool\apktool>apktool b iammt iammt_new.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...

       利用jarsigner或者apksigner进行签名。打包和签名都是没问题的,就是不知道有没有像QQ那样的签名验证。如果还是像原版那样如果被篡改还是比较危险的。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐